[med-svn] [ugene] 01/08: Imported Upstream version 1.20.0

Andreas Tille tille at debian.org
Fri Jan 8 18:38:43 UTC 2016


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

tille pushed a commit to branch master
in repository ugene.

commit 5a6ce9dc1fde0f9ab2d4002be41f1ca0ea126395
Author: Andreas Tille <tille at debian.org>
Date:   Fri Jan 8 18:15:03 2016 +0100

    Imported Upstream version 1.20.0
---
 build.txt                                          |   12 +
 data/cmdline/das_annotation.uwl                    |  112 -
 data/workflow_samples/NGS/cistrome/chip_seq.uwl    |   12 +-
 .../NGS/cistrome/chip_seq_with_control.uwl         |   30 +-
 installer/_common_data/ugene                       |    6 +-
 installer/_common_data/ugened                      |    6 +-
 installer/linux/fedora/ugene.spec                  |   33 +-
 installer/linux/ubuntu/debian/control              |    6 +-
 installer/linux/ubuntu/debian/rules                |    6 +-
 .../U2Algorithm/src/misc/BinaryFindOpenCL.cpp      |  101 +-
 .../src/msa_alignment/SimpleAddingToAlignment.cpp  |    3 +-
 .../U2Algorithm/src/registry/OpenCLGpuRegistry.cpp |    3 +
 .../U2Algorithm/src/registry/OpenCLGpuRegistry.h   |    7 +-
 .../U2Algorithm/src/util_orf/ORFFinder.cpp         |    2 +-
 src/corelibs/U2Algorithm/transl/english.ts         |   57 +-
 src/corelibs/U2Algorithm/transl/russian.ts         |   59 +-
 src/corelibs/U2Core/U2Core.pro                     |   10 +-
 src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp |    6 +-
 src/corelibs/U2Core/src/datatype/BioStruct3D.cpp   |   20 +-
 src/corelibs/U2Core/src/datatype/BioStruct3D.h     |    8 +-
 src/corelibs/U2Core/src/datatype/DASSource.cpp     |  236 --
 src/corelibs/U2Core/src/datatype/DASSource.h       |  102 -
 .../U2Core/src/datatype/DNASequenceUtils.cpp       |   28 +-
 .../U2Core/src/datatype/DNASequenceUtils.h         |    6 +
 src/corelibs/U2Core/src/dbi/U2MsaDbi.h             |    6 +
 src/corelibs/U2Core/src/globals/AppContext.h       |    4 -
 src/corelibs/U2Core/src/globals/AppResources.cpp   |   13 +
 src/corelibs/U2Core/src/globals/AppResources.h     |   11 +-
 .../U2Core/src/globals/ExternalToolRegistry.h      |    1 +
 src/corelibs/U2Core/src/globals/L10n.h             |    6 +-
 .../U2Core/src/globals/UserActionsWriter.cpp       |  386 ++--
 .../U2Core/src/globals/UserActionsWriter.h         |   38 +-
 .../U2Core/src/gobjects/MAlignmentObject.cpp       |   65 +-
 .../U2Core/src/gobjects/MAlignmentObject.h         |   19 +-
 src/corelibs/U2Core/src/io/HttpFileAdapter.cpp     |    2 +-
 src/corelibs/U2Core/src/io/LocalFileAdapter.cpp    |   14 +-
 src/corelibs/U2Core/src/io/LocalFileAdapter.h      |    1 +
 src/corelibs/U2Core/src/models/DocumentModel.cpp   |    2 +
 src/corelibs/U2Core/src/models/DocumentModel.h     |    2 +
 .../src/tasks/AddSequencesToAlignmentTask.cpp      |   76 +-
 .../U2Core/src/tasks/AddSequencesToAlignmentTask.h |   25 +-
 .../U2Core/src/tasks/ExternalToolRunTask.cpp       |    5 +
 .../U2Core/src/tasks/LoadDASDocumentTask.cpp       |  840 -------
 .../U2Core/src/tasks/LoadDASDocumentTask.h         |  216 --
 src/corelibs/U2Core/src/tasks/PicrApiTask.cpp      |  619 -----
 src/corelibs/U2Core/src/tasks/PicrApiTask.h        |  237 --
 src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp |    9 +-
 src/corelibs/U2Core/src/tasks/UniprotBlastTask.cpp |  749 ------
 src/corelibs/U2Core/src/tasks/UniprotBlastTask.h   |  293 ---
 .../U2Core/src/util/DatatypeSerializeUtils.cpp     |   11 +-
 src/corelibs/U2Core/src/util/IOAdapterUtils.cpp    |   10 +-
 src/corelibs/U2Core/src/util/IOAdapterUtils.h      |    2 +-
 .../U2Core/src/util/MAlignmentImporter.cpp         |    1 +
 src/corelibs/U2Core/src/util/MsaDbiUtils.cpp       |  146 +-
 src/corelibs/U2Core/src/util/MsaDbiUtils.h         |   28 +
 src/corelibs/U2Core/src/util/TaskWatchdog.cpp      |   57 +
 src/corelibs/U2Core/src/util/TaskWatchdog.h        |   62 +
 src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp   |   26 +-
 src/corelibs/U2Core/transl/english.ts              |  214 +-
 src/corelibs/U2Core/transl/russian.ts              |  214 +-
 .../U2Designer/src/BreakpointHitCountDialog.cpp    |    2 +-
 src/corelibs/U2Designer/src/DatasetsListWidget.cpp |    4 +
 .../U2Designer/src/EditBreakpointLabelsDialog.cpp  |    2 +-
 .../U2Designer/src/EditMarkerGroupDialog.cpp       |    4 +-
 .../U2Designer/src/NewBreakpointDialog.cpp         |    2 +-
 .../U2Designer/src/NewGrouperSlotDialog.cpp        |   10 +-
 .../src/support/OutputDirectoryWidget.cpp          |    1 +
 .../U2Designer/src/wizard/WizardController.cpp     |   31 +-
 .../U2Designer/src/wizard/WizardController.h       |    3 +-
 src/corelibs/U2Designer/transl/english.ts          |   51 +-
 src/corelibs/U2Designer/transl/russian.ts          |   51 +-
 src/corelibs/U2Formats/src/ABIFormat.cpp           |    3 +-
 src/corelibs/U2Formats/src/ASNFormat.cpp           |    7 +-
 .../U2Formats/src/AbstractVariationFormat.cpp      |    8 +-
 src/corelibs/U2Formats/src/BAMUtils.cpp            |    2 +-
 src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp   |    1 -
 src/corelibs/U2Formats/src/DifferentialFormat.cpp  |    4 +-
 src/corelibs/U2Formats/src/DocumentFormatUtils.cpp |    1 -
 src/corelibs/U2Formats/src/DocumentFormatUtils.h   |    2 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.cpp  |   18 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.h    |    2 +-
 src/corelibs/U2Formats/src/FastaFormat.cpp         |    9 +-
 src/corelibs/U2Formats/src/FastqFormat.cpp         |   14 +-
 src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp  |    5 +-
 src/corelibs/U2Formats/src/GFFFormat.cpp           |   16 +-
 src/corelibs/U2Formats/src/GFFFormat.h             |    2 +
 src/corelibs/U2Formats/src/GTFFormat.cpp           |    5 +-
 .../U2Formats/src/GenbankPlainTextFormat.cpp       |    2 +-
 src/corelibs/U2Formats/src/MSFFormat.cpp           |   11 +-
 src/corelibs/U2Formats/src/MegaFormat.cpp          |    1 -
 src/corelibs/U2Formats/src/PDBFormat.cpp           |   82 +-
 src/corelibs/U2Formats/src/PDBFormat.h             |    4 +
 src/corelibs/U2Formats/src/PDWFormat.cpp           |    2 -
 src/corelibs/U2Formats/src/PhylipFormat.cpp        |    1 -
 .../U2Formats/src/RawDNASequenceFormat.cpp         |    5 +-
 src/corelibs/U2Formats/src/SAMFormat.h             |    1 -
 src/corelibs/U2Formats/src/SCFFormat.cpp           |    9 +-
 .../U2Formats/src/SwissProtPlainTextFormat.cpp     |    3 +-
 .../U2Formats/src/VectorNtiSequenceFormat.cpp      |    8 +-
 src/corelibs/U2Formats/src/ace/AceFormat.cpp       |   13 +-
 src/corelibs/U2Formats/src/ace/AceImportUtils.cpp  |   15 +-
 src/corelibs/U2Formats/src/ace/AceImportUtils.h    |    1 -
 .../U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp        |   14 +
 src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h |    9 +-
 .../U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp  |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp      |   15 +
 .../U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h        |   10 +-
 src/corelibs/U2Formats/transl/english.ts           |  321 +--
 src/corelibs/U2Formats/transl/russian.ts           |  323 +--
 src/corelibs/U2Gui/U2Gui.qrc                       |    1 +
 src/corelibs/U2Gui/images/notch.png                |  Bin 227 -> 296 bytes
 src/corelibs/U2Gui/images/paste.png                |  Bin 0 -> 643 bytes
 src/corelibs/U2Gui/images/ruler_coverage.png       |  Bin 333 -> 376 bytes
 src/corelibs/U2Gui/images/set_reference.png        |  Bin 5141 -> 16147 bytes
 src/corelibs/U2Gui/images/tooltip.png              |  Bin 377 -> 409 bytes
 src/corelibs/U2Gui/src/MainWindow.h                |    1 +
 src/corelibs/U2Gui/src/OpenViewTask.cpp            |   89 -
 src/corelibs/U2Gui/src/OpenViewTask.h              |   22 -
 src/corelibs/U2Gui/src/ToolsMenu.cpp               |    3 +
 src/corelibs/U2Gui/src/ToolsMenu.h                 |    3 +-
 .../U2Gui/src/options_panel/GroupOptionsWidget.cpp |    7 +-
 .../U2Gui/src/util/AddNewDocumentDialogImpl.cpp    |    2 +-
 .../U2Gui/src/util/AuthenticationDialog.cpp        |    2 +-
 .../src/util/BreakpointConditionEditDialog.cpp     |    2 +-
 .../U2Gui/src/util/CreateAnnotationDialog.cpp      |    2 +-
 .../CreateDocumentFromTextDialogController.cpp     |    2 +-
 .../U2Gui/src/util/DownloadRemoteFileDialog.cpp    |   99 +-
 .../U2Gui/src/util/DownloadRemoteFileDialog.h      |    1 -
 .../U2Gui/src/util/EditQualifierDialog.cpp         |    2 +-
 .../src/util/EditSequenceDialogController.cpp      |    2 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.cpp     |    2 +-
 .../src/util/ExportDocumentDialogController.cpp    |    4 +-
 src/corelibs/U2Gui/src/util/ExportImageDialog.cpp  |   16 +-
 src/corelibs/U2Gui/src/util/GUIUtils.cpp           |   10 -
 src/corelibs/U2Gui/src/util/GUIUtils.h             |    1 -
 .../src/util/ImportDialogs/AceImportDialog.cpp     |    2 +-
 .../U2Gui/src/util/ObjectViewTreeController.cpp    |    8 +-
 src/corelibs/U2Gui/src/util/RangeSelector.cpp      |    2 +-
 .../RemovePartFromSequenceDialogController.cpp     |    2 +-
 src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp |    2 +-
 .../util/SearchGenbankSequenceDialogController.cpp |    2 +-
 .../src/util/project/ProjectTreeController.cpp     |   16 +-
 .../U2Gui/src/util/project/ProjectTreeController.h |    1 +
 .../U2Gui/src/util/project/ProjectUtils.cpp        |   25 +
 src/corelibs/U2Gui/src/util/project/ProjectUtils.h |    6 +
 .../src/util/project/ProjectViewFilterModel.cpp    |    2 +-
 .../util/shared_db/CommonImportOptionsDialog.cpp   |    2 +-
 .../src/util/shared_db/EditConnectionDialog.cpp    |    2 +-
 .../src/util/shared_db/ImportToDatabaseDialog.cpp  |    2 +-
 .../src/util/shared_db/ItemToImportEditDialog.cpp  |    2 +-
 .../src/util/shared_db/SharedConnectionsDialog.cpp |    4 +-
 .../U2Gui/src/util/ui/DownloadRemoteFileDialog.ui  |   53 +-
 .../U2Gui/src/util/ui/ExportImageDialog.ui         |    7 +-
 src/corelibs/U2Gui/transl/english.ts               |  106 +-
 src/corelibs/U2Gui/transl/russian.ts               |  106 +-
 .../U2Lang/src/library/BaseActorCategories.cpp     |    4 +-
 .../U2Lang/src/support/WorkflowRunTask.cpp         |    3 +-
 src/corelibs/U2Lang/src/support/WorkflowUtils.cpp  |    6 +-
 .../U2Lang/src/support/serialize/Utils.cpp         |    2 +-
 src/corelibs/U2Lang/transl/english.ts              |   16 +-
 src/corelibs/U2Lang/transl/russian.ts              |   32 +-
 src/corelibs/U2Private/src/AppContextImpl.h        |    5 -
 .../src/crash_handler/CrashHandlerPrivateWin.h     |    1 +
 src/corelibs/U2Private/transl/english.ts           |   38 +-
 src/corelibs/U2Private/transl/russian.ts           |   38 +-
 .../U2Remote/src/RemoteMachineMonitorDialogImpl.h  |    2 +-
 src/corelibs/U2Script/src/UgeneContextWrapper.cpp  |    7 -
 src/corelibs/U2Script/src/UgeneContextWrapper.h    |    2 -
 src/corelibs/U2Script/transl/english.ts            |    2 +-
 src/corelibs/U2Script/transl/russian.ts            |    2 +-
 src/corelibs/U2Test/U2Test.pri                     |    9 +-
 src/corelibs/U2Test/U2Test.pro                     |   23 +-
 src/corelibs/U2Test/src/gui_tests/GUITestBase.cpp  |   31 +-
 src/corelibs/U2Test/src/gui_tests/GUITestBase.h    |   43 +-
 .../U2Test/src/gui_tests/GUITestLauncher.cpp       |   41 +-
 .../U2Test/src/gui_tests/GUITestLauncher.h         |    5 +-
 .../U2Test/src/gui_tests/GUITestService.cpp        |  168 +-
 src/corelibs/U2Test/src/gui_tests/GUITestService.h |   64 +-
 .../U2Test/src/gui_tests/GUITestThread.cpp         |  221 ++
 .../U2Test/src/gui_tests/GUITestThread.h}          |   40 +-
 .../U2Test/src/gui_tests/GUITestWindow.cpp         |   14 +-
 src/corelibs/U2Test/transl/english.ts              |   40 +-
 src/corelibs/U2Test/transl/russian.ts              |   40 +-
 src/corelibs/U2View/U2View.pro                     |   31 +-
 src/corelibs/U2View/src/UndoRedoFramework.cpp      |    8 +-
 .../U2View/src/ov_assembly/AssemblyBrowser.cpp     |   57 +-
 .../U2View/src/ov_assembly/AssemblyBrowser.h       |    1 +
 .../src/ov_assembly/AssemblyBrowserTasks.cpp       |   19 +-
 .../U2View/src/ov_assembly/AssemblyInfoWidget.cpp  |    2 +-
 .../src/ov_assembly/AssemblyNavigationWidget.cpp   |    2 +-
 .../src/ov_assembly/AssemblySettingsWidget.cpp     |    2 +-
 .../src/ov_assembly/ExportConsensusDialog.cpp      |    2 +-
 .../ExportConsensusVariationsDialog.cpp            |    2 +-
 .../src/ov_assembly/ExportCoverageDialog.cpp       |    2 +-
 .../U2View/src/ov_assembly/ExportReadsDialog.cpp   |    2 +-
 .../AlignSequencesToAlignmentTask.cpp              |  651 +++---
 .../AlignSequencesToAlignmentTask.h                |    4 +
 .../Clipboard/SubalignmentToClipboardTask.cpp      |    2 +-
 .../src/ov_msa/ColorSchemaDialogController.cpp     |    4 +-
 .../src/ov_msa/ColorSchemaSettingsController.cpp   |    2 +-
 .../ov_msa/CreateSubalignmentDialogController.cpp  |    2 +-
 .../U2View/src/ov_msa/DeleteGapsDialog.cpp         |    2 +-
 .../src/ov_msa/Export/MSAImageExportTask.cpp       |   20 +-
 .../MSAExportConsensusTabFactory.cpp               |    2 +-
 .../ov_msa/ExportHighlightedDialogController.cpp   |    2 +-
 .../src/ov_msa/General/MSAGeneralTabFactory.cpp    |    2 +-
 .../src/ov_msa/Highlighting/MSAHighlightingTab.cpp |    9 +-
 .../Highlighting/MSAHighlightingTabFactory.cpp     |    2 +-
 src/corelibs/U2View/src/ov_msa/MSAEditor.cpp       |    8 +-
 src/corelibs/U2View/src/ov_msa/MSAEditor.h         |   15 +-
 .../U2View/src/ov_msa/MSAEditorDataList.cpp        |  514 -----
 src/corelibs/U2View/src/ov_msa/MSAEditorDataList.h |  277 ---
 .../U2View/src/ov_msa/MSAEditorNameList.cpp        |    7 +-
 .../U2View/src/ov_msa/MSAEditorSequenceArea.cpp    |  205 +-
 .../U2View/src/ov_msa/MSAEditorSequenceArea.h      |   32 +-
 src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp  |    2 +-
 .../src/ov_msa/MSASelectSubalignmentDialog.cpp     |    2 +-
 .../src/ov_msa/MsaEditorSimilarityColumn.cpp       |  281 +++
 .../U2View/src/ov_msa/MsaEditorSimilarityColumn.h  |  149 ++
 .../U2View/src/ov_msa/MsaUpdatedWidgetInterface.h  |   60 +
 .../src/ov_msa/Overview/MSAGraphOverview.cpp       |   39 +-
 .../U2View/src/ov_msa/Overview/MSAGraphOverview.h  |    1 +
 .../src/ov_msa/Overview/MSASimpleOverview.cpp      |   40 +-
 .../U2View/src/ov_msa/Overview/MSASimpleOverview.h |    4 +
 .../src/ov_msa/PairAlign/PairAlignFactory.cpp      |    2 +-
 .../ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp   |   12 +-
 .../src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h |    8 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp   |    2 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp    |  108 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewer.h      |    6 +-
 .../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp   |  161 ++
 .../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h     |   94 +
 ...SaveSelectedSequenceFromMSADialogController.cpp |    2 +-
 .../ov_msa/SeqStatistics/SeqStatisticsWidget.cpp   |    4 +-
 .../SeqStatistics/SeqStatisticsWidgetFactory.cpp   |    2 +-
 .../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp   |    3 +-
 .../TreeOptions/TreeOptionsWidgetFactory.cpp       |    6 +-
 .../U2View/src/ov_sequence/ADVGraphModel.cpp       |  210 +-
 .../U2View/src/ov_sequence/ADVGraphModel.h         |   36 +-
 .../src/ov_sequence/ADVSequenceObjectContext.cpp   |    7 +-
 .../U2View/src/ov_sequence/AnnotatedDNAView.h      |    2 +
 .../src/ov_sequence/AnnotatedDNAViewFactory.cpp    |   22 +-
 .../ov_sequence/CreateRulerDialogController.cpp    |    2 +-
 .../ov_sequence/Das/DasOptionsPanelSavableTab.cpp  |  145 --
 .../ov_sequence/Das/DasOptionsPanelSavableTab.h    |   43 -
 .../src/ov_sequence/Das/DasOptionsPanelWidget.cpp  |  635 ------
 .../src/ov_sequence/Das/DasOptionsPanelWidget.h    |  131 --
 .../src/ov_sequence/Das/DasWidgetFactory.cpp       |   83 -
 .../ov_sequence/Das/ui/DasBlastSettingsWidget.ui   |  190 --
 .../ov_sequence/Das/ui/DasOptionsPanelWidget.ui    |  395 ----
 src/corelibs/U2View/src/ov_sequence/DetView.cpp    | 1028 ++++-----
 src/corelibs/U2View/src/ov_sequence/DetView.h      |  101 +-
 .../ov_sequence/EditAnnotationDialogController.cpp |    2 +-
 .../U2View/src/ov_sequence/GSequenceLineView.cpp   |   16 +-
 .../U2View/src/ov_sequence/GSequenceLineView.h     |    5 +-
 .../src/ov_sequence/GSequenceLineViewAnnotated.cpp |  325 +--
 .../src/ov_sequence/GSequenceLineViewAnnotated.h   |   48 +-
 .../src/ov_sequence/GraphLabelsSelectDialog.cpp    |    2 +-
 .../U2View/src/ov_sequence/GraphSettingsDialog.cpp |    3 +-
 src/corelibs/U2View/src/ov_sequence/Overview.cpp   |   25 +-
 src/corelibs/U2View/src/ov_sequence/PanView.cpp    |  674 +-----
 src/corelibs/U2View/src/ov_sequence/PanView.h      |  100 +-
 .../SaveGraphCutoffsDialogController.cpp           |    2 +-
 .../src/ov_sequence/SearchQualifierDialog.cpp      |    2 +-
 .../annot_highlight/AnnotHighlightTree.cpp         |    6 +-
 .../AnnotHighlightWidgetFactory.cpp                |    2 +-
 .../find_pattern/FindPatternWidgetFactory.cpp      |    2 +-
 .../ov_sequence/find_pattern/ui/FindPatternForm.ui |   59 +-
 .../ov_sequence/image_export/SequencePainter.cpp   |   31 +-
 .../src/ov_sequence/image_export/SequencePainter.h |   15 +-
 .../sequence_info/SequenceInfoFactory.cpp          |    2 +-
 .../view_rendering/DetViewMultiLineRenderer.cpp    |  199 ++
 .../view_rendering/DetViewMultiLineRenderer.h      |   72 +
 .../view_rendering/DetViewRenderer.cpp}            |   39 +-
 .../ov_sequence/view_rendering/DetViewRenderer.h   |   68 +
 .../view_rendering/DetViewSingleLineRenderer.cpp   |  636 ++++++
 .../view_rendering/DetViewSingleLineRenderer.h     |  135 ++
 .../ov_sequence/view_rendering/PanViewRenderer.cpp |  426 ++++
 .../ov_sequence/view_rendering/PanViewRenderer.h   |   88 +
 .../SequenceViewAnnotatedRenderer.cpp              |  366 +++
 .../view_rendering/SequenceViewAnnotatedRenderer.h |  132 ++
 .../view_rendering/SequenceViewRenderer.cpp        |   76 +
 .../view_rendering/SequenceViewRenderer.h          |   80 +
 .../U2View/src/phyltree/BranchSettingsDialog.cpp   |    2 +-
 .../src/phyltree/CreatePhyTreeDialogController.cpp |    6 +-
 .../U2View/src/phyltree/TextSettingsDialog.cpp     |    2 +-
 .../U2View/src/phyltree/TreeSettingsDialog.cpp     |    2 +-
 .../src/util_dna_assembly/BuildIndexDialog.cpp     |   12 +-
 .../ConvertAssemblyToSamDialog.cpp                 |    2 +-
 .../src/util_dna_assembly/DnaAssemblyDialog.cpp    |   12 +-
 .../util_sec_struct_predict/SecStructDialog.cpp    |    2 +-
 .../util_smith_waterman/SmithWatermanDialog.cpp    |    2 +-
 src/corelibs/U2View/transl/english.ts              |  769 ++++---
 src/corelibs/U2View/transl/russian.ts              |  768 ++++---
 src/include/U2Core/DASSource.h                     |    1 -
 src/include/U2Core/LoadDASDocumentTask.h           |    1 -
 src/include/U2Core/PicrApiTask.h                   |    1 -
 src/include/U2Core/TaskWatchdog.h                  |    1 +
 src/include/U2Core/UniprotBlastTask.h              |    1 -
 src/include/U2Test/CustomScenario.h                |    1 +
 src/include/U2Test/GUITestThread.h                 |    1 +
 src/include/U2Test/MainThreadRunnable.h            |    1 +
 src/include/U2View/DasWidgetFactory.h              |    1 -
 src/include/U2View/MSAEditorDataList.h             |    1 -
 src/include/U2View/MSASimpleOverview.h             |    1 +
 src/include/U2View/MsaEditorSimilarityColumn.h     |    1 +
 src/libs_3rdparty/humimit/Doxyfile                 | 2384 ++++++++++++++++++++
 src/libs_3rdparty/humimit/humimit.pri              |   69 +
 src/libs_3rdparty/humimit/humimit.pro              |  110 +
 .../humimit/src}/GTGlobals.cpp                     |   11 +-
 .../api => libs_3rdparty/humimit/src}/GTGlobals.h  |  101 +-
 .../src/base_dialogs}/ColorDialogFiller.cpp        |   42 +-
 .../humimit/src/base_dialogs}/ColorDialogFiller.h  |    8 +-
 .../src/base_dialogs}/DefaultDialogFiller.cpp      |    4 +-
 .../src/base_dialogs}/DefaultDialogFiller.h        |   14 +-
 .../humimit/src/base_dialogs}/FontDialogFiller.cpp |   16 +-
 .../humimit/src/base_dialogs}/FontDialogFiller.h   |   20 +-
 .../humimit/src/base_dialogs}/GTFileDialog.cpp     |  138 +-
 .../humimit/src/base_dialogs}/GTFileDialog.h       |   40 +-
 .../humimit/src/base_dialogs}/MessageBoxFiller.cpp |   87 +-
 .../humimit/src/base_dialogs/MessageBoxFiller.h    |   71 +
 .../humimit/src/core/CustomScenario.cpp}           |    9 +-
 .../humimit/src/core/CustomScenario.h}             |   21 +-
 .../humimit/src/core}/GUITest.cpp                  |   41 +-
 .../humimit/src/core}/GUITest.h                    |   21 +-
 .../humimit/src/core}/GUITestOpStatus.h            |   27 +-
 .../humimit/src/core/MainThreadRunnable.cpp        |   91 +
 .../humimit/src/core/MainThreadRunnable.h}         |   57 +-
 .../humimit/src/core/MainThreadTimer.cpp}          |   36 +-
 .../humimit/src/core/MainThreadTimer.h}            |   29 +-
 src/libs_3rdparty/humimit/src/core/global.h        |   14 +
 .../humimit/src/drivers}/GTKeyboardDriver.cpp      |   15 +-
 .../humimit/src/drivers}/GTKeyboardDriver.h        |   58 +-
 .../humimit/src/drivers}/GTKeyboardDriverLinux.cpp |   14 +-
 .../humimit/src/drivers}/GTKeyboardDriverMac.cpp   |  150 +-
 .../src/drivers}/GTKeyboardDriverWindows.cpp       |  131 +-
 .../humimit/src/drivers}/GTMouseDriver.cpp         |   51 +-
 .../humimit/src/drivers}/GTMouseDriver.h           |   43 +-
 .../humimit/src/drivers}/GTMouseDriverLinux.cpp    |   16 +-
 .../humimit/src/drivers}/GTMouseDriverMac.cpp      |   60 +-
 .../humimit/src/drivers}/GTMouseDriverWindows.cpp  |   15 +-
 .../humimit/src/primitives}/GTAction.cpp           |   73 +-
 .../humimit/src/primitives}/GTAction.h             |   19 +-
 .../humimit/src/primitives}/GTCheckBox.cpp         |   23 +-
 .../humimit/src/primitives}/GTCheckBox.h           |   28 +-
 .../humimit/src/primitives}/GTComboBox.cpp         |   35 +-
 .../humimit/src/primitives}/GTComboBox.h           |   34 +-
 .../humimit/src/primitives}/GTDoubleSpinBox.cpp    |   47 +-
 .../humimit/src/primitives/GTDoubleSpinBox.h       |   27 +
 .../humimit/src/primitives}/GTGroupBox.cpp         |   29 +-
 .../humimit/src/primitives}/GTGroupBox.h           |   23 +-
 .../humimit/src/primitives}/GTLineEdit.cpp         |   42 +-
 .../humimit/src/primitives}/GTLineEdit.h           |   41 +-
 .../humimit/src/primitives}/GTListWidget.cpp       |   27 +-
 .../humimit/src/primitives/GTListWidget.h}         |   29 +-
 .../humimit/src/primitives/GTMainWindow.cpp}       |   46 +-
 .../humimit/src/primitives/GTMainWindow.h}         |   18 +-
 .../humimit/src/primitives}/GTMenu.cpp             |  160 +-
 src/libs_3rdparty/humimit/src/primitives/GTMenu.h  |   65 +
 .../humimit/src/primitives}/GTMenuBar.cpp          |   16 +-
 .../humimit/src/primitives}/GTMenuBar.h            |   14 +-
 .../humimit/src/primitives}/GTPlainTextEdit.cpp    |   21 +-
 .../humimit/src/primitives}/GTPlainTextEdit.h      |   26 +-
 .../humimit/src/primitives}/GTRadioButton.cpp      |   42 +-
 .../humimit/src/primitives}/GTRadioButton.h        |   28 +-
 .../humimit/src/primitives}/GTScrollBar.cpp        |   40 +-
 .../humimit/src/primitives/GTScrollBar.h           |   61 +
 .../humimit/src/primitives}/GTSlider.cpp           |    6 +-
 .../humimit/src/primitives/GTSlider.h}             |   17 +-
 .../humimit/src/primitives}/GTSpinBox.cpp          |   50 +-
 .../humimit/src/primitives/GTSpinBox.h             |   47 +
 .../humimit/src/primitives}/GTTabBar.cpp           |   19 +-
 .../humimit/src/primitives}/GTTabBar.h             |   20 +-
 .../humimit/src/primitives}/GTTabWidget.cpp        |   60 +-
 .../humimit/src/primitives/GTTabWidget.h           |   51 +
 .../humimit/src/primitives}/GTTableView.cpp        |   15 +-
 .../humimit/src/primitives}/GTTableView.h          |   25 +-
 .../humimit/src/primitives}/GTTextEdit.cpp         |   18 +-
 .../humimit/src/primitives}/GTTextEdit.h           |   27 +-
 .../humimit/src/primitives}/GTToolbar.cpp          |   45 +-
 .../humimit/src/primitives/GTToolbar.h}            |   44 +-
 .../humimit/src/primitives}/GTTreeView.cpp         |   16 +-
 .../humimit/src/primitives}/GTTreeView.h           |   14 +-
 .../humimit/src/primitives}/GTTreeWidget.cpp       |   47 +-
 .../humimit/src/primitives/GTTreeWidget.h          |   65 +
 .../humimit/src/primitives}/GTWebView.cpp          |   79 +-
 .../humimit/src/primitives/GTWebView.h             |   49 +
 .../humimit/src/primitives/GTWidget.cpp            |  404 ++++
 .../humimit/src/primitives/GTWidget.h              |   86 +
 .../humimit/src/primitives}/PopupChooser.cpp       |   78 +-
 .../humimit/src/primitives}/PopupChooser.h         |   40 +-
 .../src/primitives}/private/GTMenuPrivate.cpp      |   76 +-
 .../src/primitives}/private/GTMenuPrivate.h        |   18 +-
 .../src/primitives}/private/GTMenuPrivateMac.h     |   14 +-
 .../src/primitives/private/GTMenuPrivateMac.mm     |  164 ++
 .../humimit/src/system/GTClipboard.cpp             |  139 ++
 .../humimit/src/system}/GTClipboard.h              |   18 +-
 .../humimit/src/system}/GTFile.cpp                 |   67 +-
 .../humimit/src/system}/GTFile.h                   |   42 +-
 .../humimit/src/utils}/GTKeyboardUtils.cpp         |   15 +-
 .../humimit/src/utils}/GTKeyboardUtils.h           |   22 +-
 .../humimit/src/utils/GTMouseUtils.cpp}            |   17 +-
 .../humimit/src/utils/GTMouseUtils.h}              |   16 +-
 src/libs_3rdparty/humimit/src/utils/GTThread.cpp   |   70 +
 .../humimit/src/utils/GTThread.h}                  |   41 +-
 .../humimit/src/utils}/GTUtilsApp.cpp              |   45 +-
 .../humimit/src/utils}/GTUtilsApp.h                |   14 +-
 .../humimit/src/utils}/GTUtilsDialog.cpp           |   80 +-
 .../humimit/src/utils}/GTUtilsDialog.h             |   71 +-
 .../humimit/src/utils}/GTUtilsToolTip.cpp          |   10 +-
 .../humimit/src/utils}/GTUtilsToolTip.h            |   13 +-
 src/plugins/CoreTests/CoreTests.pro                |    2 -
 src/plugins/CoreTests/src/CoreTests.cpp            |    3 -
 src/plugins/CoreTests/src/DocumentModelTests.cpp   |   20 +-
 src/plugins/CoreTests/src/LoadDASDocumentTests.cpp |  195 --
 src/plugins/CoreTests/src/LoadDASDocumentTests.h   |   54 -
 src/plugins/GUITestBase/GUITestBase.pri            |   16 +-
 src/plugins/GUITestBase/GUITestBase.pro            |  201 +-
 src/plugins/GUITestBase/GUITestBase.qrc            |    5 +
 .../GUITestBase/images/open_gui_test_runner.png    |  Bin 0 -> 28579 bytes
 src/plugins/GUITestBase/src/GTDatabaseConfig.cpp   |    4 +-
 .../src/GTUtilsAnnotationsHighlightingTreeView.cpp |   27 +-
 .../src/GTUtilsAnnotationsHighlightingTreeView.h   |   15 +-
 .../GUITestBase/src/GTUtilsAnnotationsTreeView.cpp |   76 +-
 .../GUITestBase/src/GTUtilsAnnotationsTreeView.h   |   61 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.cpp     |   47 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.h       |   31 +-
 .../GUITestBase/src/GTUtilsBookmarksTreeView.cpp   |   25 +-
 .../GUITestBase/src/GTUtilsBookmarksTreeView.h     |   16 +-
 .../GUITestBase/src/GTUtilsCircularView.cpp        |   20 +-
 src/plugins/GUITestBase/src/GTUtilsCircularView.h  |   18 +-
 src/plugins/GUITestBase/src/GTUtilsDashboard.cpp   |   24 +-
 src/plugins/GUITestBase/src/GTUtilsDashboard.h     |   21 +-
 src/plugins/GUITestBase/src/GTUtilsDocument.cpp    |   44 +-
 src/plugins/GUITestBase/src/GTUtilsDocument.h      |   22 +-
 src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp  |    6 +-
 src/plugins/GUITestBase/src/GTUtilsEscClicker.h    |    5 +-
 .../GUITestBase/src/GTUtilsExternalTools.cpp       |   20 +-
 src/plugins/GUITestBase/src/GTUtilsExternalTools.h |    4 +-
 src/plugins/GUITestBase/src/GTUtilsLog.cpp         |   10 +-
 src/plugins/GUITestBase/src/GTUtilsLog.h           |   10 +-
 src/plugins/GUITestBase/src/GTUtilsMdi.cpp         |  164 +-
 src/plugins/GUITestBase/src/GTUtilsMdi.h           |   28 +-
 src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp   |   78 +-
 src/plugins/GUITestBase/src/GTUtilsMsaEditor.h     |   58 +-
 .../src/GTUtilsMsaEditorSequenceArea.cpp           |  101 +-
 .../GUITestBase/src/GTUtilsMsaEditorSequenceArea.h |   84 +-
 .../GUITestBase/src/GTUtilsNotifications.cpp       |   51 +-
 src/plugins/GUITestBase/src/GTUtilsNotifications.h |   30 +-
 .../GUITestBase/src/GTUtilsOptionPanelMSA.cpp      |   52 +-
 .../GUITestBase/src/GTUtilsOptionPanelMSA.h        |   46 +-
 .../src/GTUtilsOptionPanelSequenceView.cpp         |  144 +-
 .../src/GTUtilsOptionPanelSequenceView.h           |  120 +-
 .../GUITestBase/src/GTUtilsOptionsPanel.cpp        |   16 +-
 src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h  |    6 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.cpp         |   34 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.h           |   27 +-
 src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp     |   60 +-
 src/plugins/GUITestBase/src/GTUtilsPhyTree.h       |   42 +-
 .../GUITestBase/src/GTUtilsPrimerLibrary.cpp       |   42 +-
 src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h |   27 +-
 src/plugins/GUITestBase/src/GTUtilsProject.cpp     |  125 +-
 src/plugins/GUITestBase/src/GTUtilsProject.h       |   50 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.cpp     |  190 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.h       |   91 +-
 .../GUITestBase/src/GTUtilsQueryDesigner.cpp       |   34 +-
 src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h |   22 +-
 .../GUITestBase/src/GTUtilsSequenceView.cpp        |   79 +-
 src/plugins/GUITestBase/src/GTUtilsSequenceView.h  |   52 +-
 .../src/GTUtilsSharedDatabaseDocument.cpp          |   72 +-
 .../src/GTUtilsSharedDatabaseDocument.h            |   48 +-
 src/plugins/GUITestBase/src/GTUtilsStartPage.cpp   |   39 +-
 src/plugins/GUITestBase/src/GTUtilsStartPage.h     |   15 +-
 src/plugins/GUITestBase/src/GTUtilsTask.cpp        |   20 +-
 src/plugins/GUITestBase/src/GTUtilsTask.h          |   21 +-
 .../GUITestBase/src/GTUtilsTaskTreeView.cpp        |   39 +-
 src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h  |   28 +-
 src/plugins/GUITestBase/src/GTUtilsWizard.cpp      |   28 +-
 src/plugins/GUITestBase/src/GTUtilsWizard.h        |   21 +-
 .../GUITestBase/src/GTUtilsWorkflowDesigner.cpp    |  248 +-
 .../GUITestBase/src/GTUtilsWorkflowDesigner.h      |  139 +-
 src/plugins/GUITestBase/src/GUITestBasePlugin.cpp  |  321 ++-
 src/plugins/GUITestBase/src/GUITestBasePlugin.h    |    8 +-
 .../GUITestBase/src/api/GTBaseCompleter.cpp        |   15 +-
 src/plugins/GUITestBase/src/api/GTBaseCompleter.h  |   11 +-
 src/plugins/GUITestBase/src/api/GTClipboard.cpp    |   67 -
 src/plugins/GUITestBase/src/api/GTDoubleSpinBox.h  |   22 -
 src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp |    4 +-
 src/plugins/GUITestBase/src/api/GTGraphicsItem.h   |    5 +-
 src/plugins/GUITestBase/src/api/GTListWidget.h     |   45 -
 .../src/api/GTMSAEditorStatusWidget.cpp            |    6 +-
 .../GUITestBase/src/api/GTMSAEditorStatusWidget.h  |    7 +-
 src/plugins/GUITestBase/src/api/GTMenu.h           |   62 -
 .../GUITestBase/src/api/GTRegionSelector.cpp       |    8 +-
 src/plugins/GUITestBase/src/api/GTRegionSelector.h |    5 +-
 src/plugins/GUITestBase/src/api/GTScrollBar.h      |   68 -
 .../src/api/GTSequenceReadingModeDialog.h          |    3 +-
 .../src/api/GTSequenceReadingModeDialogUtils.cpp   |   15 +-
 .../src/api/GTSequenceReadingModeDialogUtils.h     |    5 +-
 src/plugins/GUITestBase/src/api/GTSlider.h         |   44 -
 src/plugins/GUITestBase/src/api/GTSpinBox.h        |   44 -
 src/plugins/GUITestBase/src/api/GTSystem.h         |   42 -
 src/plugins/GUITestBase/src/api/GTTabWidget.h      |   49 -
 src/plugins/GUITestBase/src/api/GTToolbar.h        |   54 -
 src/plugins/GUITestBase/src/api/GTTreeWidget.h     |   65 -
 src/plugins/GUITestBase/src/api/GTWebView.h        |   51 -
 src/plugins/GUITestBase/src/api/GTWidget.cpp       |  198 --
 src/plugins/GUITestBase/src/api/GTWidget.h         |   79 -
 .../src/api/private/GTMenuPrivateMac.mm            |   62 -
 .../GUITestBase/src/runnables/qt/EscapeClicker.cpp |    5 +-
 .../GUITestBase/src/runnables/qt/EscapeClicker.h   |    6 +-
 .../src/runnables/qt/MessageBoxFiller.h            |   74 -
 .../ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp |    9 +-
 .../ugene/corelibs/U2Gui/AddFolderDialogFiller.h   |    7 +-
 .../corelibs/U2Gui/AddNewDocumentDialogFiller.cpp  |   11 +-
 .../corelibs/U2Gui/AddNewDocumentDialogFiller.h    |    7 +-
 .../corelibs/U2Gui/AlignShortReadsDialogFiller.cpp |   37 +-
 .../corelibs/U2Gui/AlignShortReadsDialogFiller.h   |    9 +-
 .../corelibs/U2Gui/AppSettingsDialogFiller.cpp     |   52 +-
 .../ugene/corelibs/U2Gui/AppSettingsDialogFiller.h |   31 +-
 .../corelibs/U2Gui/BuildIndexDialogFiller.cpp      |   13 +-
 .../ugene/corelibs/U2Gui/BuildIndexDialogFiller.h  |    5 +-
 .../U2Gui/CommonImportOptionsDialogFiller.cpp      |    7 +-
 .../U2Gui/CommonImportOptionsDialogFiller.h        |    6 +-
 .../U2Gui/ConvertAssemblyToSAMDialogFiller.cpp     |    8 +-
 .../U2Gui/ConvertAssemblyToSAMDialogFiller.h       |    7 +-
 .../U2Gui/CreateAnnotationWidgetFiller.cpp         |   14 +-
 .../corelibs/U2Gui/CreateAnnotationWidgetFiller.h  |    7 +-
 .../U2Gui/CreateDocumentFromTextDialogFiller.cpp   |   29 +-
 .../U2Gui/CreateDocumentFromTextDialogFiller.h     |    9 +-
 .../U2Gui/CreateObjectRelationDialogFiller.cpp     |   26 +-
 .../U2Gui/CreateObjectRelationDialogFiller.h       |    7 +-
 .../corelibs/U2Gui/CreateRulerDialogFiller.cpp     |    6 +-
 .../ugene/corelibs/U2Gui/CreateRulerDialogFiller.h |    8 +-
 .../U2Gui/DownloadRemoteFileDialogFiller.cpp       |   45 +-
 .../U2Gui/DownloadRemoteFileDialogFiller.h         |   13 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.cpp  |   66 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.h    |   10 +-
 .../corelibs/U2Gui/EditConnectionDialogFiller.cpp  |   24 +-
 .../corelibs/U2Gui/EditConnectionDialogFiller.h    |   11 +-
 .../U2Gui/EditGroupAnnotationsDialogFiller.cpp     |   16 +-
 .../U2Gui/EditGroupAnnotationsDialogFiller.h       |    6 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.cpp   |   23 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.h     |    8 +-
 .../corelibs/U2Gui/EditSequenceDialogFiller.cpp    |   31 +-
 .../corelibs/U2Gui/EditSequenceDialogFiller.h      |    5 +-
 .../corelibs/U2Gui/ExportChromatogramFiller.cpp    |   17 +-
 .../corelibs/U2Gui/ExportChromatogramFiller.h      |    5 +-
 .../corelibs/U2Gui/ExportDocumentDialogFiller.cpp  |   16 +-
 .../corelibs/U2Gui/ExportDocumentDialogFiller.h    |    5 +-
 .../corelibs/U2Gui/ExportImageDialogFiller.cpp     |   27 +-
 .../ugene/corelibs/U2Gui/ExportImageDialogFiller.h |   23 +-
 .../corelibs/U2Gui/FindQualifierDialogFiller.cpp   |   16 +-
 .../corelibs/U2Gui/FindQualifierDialogFiller.h     |    8 +-
 .../corelibs/U2Gui/FindRepeatsDialogFiller.cpp     |   18 +-
 .../ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h |    8 +-
 .../corelibs/U2Gui/FindTandemsDialogFiller.cpp     |   25 +-
 .../ugene/corelibs/U2Gui/FindTandemsDialogFiller.h |    7 +-
 .../U2Gui/GraphLabelsSelectDialogFiller.cpp        |    6 +-
 .../corelibs/U2Gui/GraphLabelsSelectDialogFiller.h |    5 +-
 .../corelibs/U2Gui/GraphSettingsDialogFiller.cpp   |    9 +-
 .../corelibs/U2Gui/GraphSettingsDialogFiller.h     |    7 +-
 .../corelibs/U2Gui/ImportBAMFileDialogFiller.cpp   |   19 +-
 .../corelibs/U2Gui/ImportBAMFileDialogFiller.h     |    7 +-
 .../corelibs/U2Gui/ImportOptionsWidgetFiller.cpp   |   35 +-
 .../corelibs/U2Gui/ImportOptionsWidgetFiller.h     |   26 +-
 .../U2Gui/ImportToDatabaseDialogFiller.cpp         |   17 +-
 .../corelibs/U2Gui/ImportToDatabaseDialogFiller.h  |    7 +-
 .../U2Gui/ItemToImportEditDialogFiller.cpp         |    4 +-
 .../corelibs/U2Gui/ItemToImportEditDialogFiller.h  |    6 +-
 .../corelibs/U2Gui/PositionSelectorFiller.cpp      |   11 +-
 .../ugene/corelibs/U2Gui/PositionSelectorFiller.h  |    5 +-
 .../PredictSecondaryStructureDialogFiller.cpp      |   12 +-
 .../U2Gui/PredictSecondaryStructureDialogFiller.h  |    7 +-
 .../U2Gui/ProjectTreeItemSelectorDialogFiller.cpp  |   14 +-
 .../U2Gui/ProjectTreeItemSelectorDialogFiller.h    |    8 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.cpp  |   22 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.h    |   13 +-
 .../ugene/corelibs/U2Gui/RangeSelectorFiller.cpp   |    9 +-
 .../ugene/corelibs/U2Gui/RangeSelectorFiller.h     |    5 +-
 .../U2Gui/RemovePartFromSequenceDialogFiller.cpp   |   27 +-
 .../U2Gui/RemovePartFromSequenceDialogFiller.h     |    9 +-
 .../U2Gui/ReplaceSubsequenceDialogFiller.cpp       |   26 +-
 .../U2Gui/ReplaceSubsequenceDialogFiller.h         |    7 +-
 .../U2Gui/SetSequenceOriginDialogFiller.cpp        |    4 +-
 .../corelibs/U2Gui/SetSequenceOriginDialogFiller.h |    5 +-
 .../U2Gui/SharedConnectionsDialogFiller.cpp        |   86 +-
 .../corelibs/U2Gui/SharedConnectionsDialogFiller.h |   15 +-
 .../corelibs/U2Gui/util/RenameSequenceFiller.cpp   |   34 +-
 .../corelibs/U2Gui/util/RenameSequenceFiller.h     |    9 +-
 .../ov_assembly/ExportConsensusDialogFiller.h      |    5 +-
 .../ov_assembly/ExportCoverageDialogFiller.cpp     |   17 +-
 .../ov_assembly/ExportCoverageDialogFiller.h       |    5 +-
 .../U2View/ov_assembly/ExportReadsDialogFiller.cpp |   16 +-
 .../U2View/ov_assembly/ExportReadsDialogFiller.h   |    5 +-
 .../U2View/ov_msa/BranchSettingsDialogFiller.cpp   |   12 +-
 .../U2View/ov_msa/BranchSettingsDialogFiller.h     |    5 +-
 .../U2View/ov_msa/BuildTreeDialogFiller.cpp        |   26 +-
 .../corelibs/U2View/ov_msa/BuildTreeDialogFiller.h |   11 +-
 .../U2View/ov_msa/DeleteGapsDialogFiller.cpp       |   12 +-
 .../U2View/ov_msa/DeleteGapsDialogFiller.h         |    7 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.cpp   |   29 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.h     |    9 +-
 .../ov_msa/ExportHighlightedDialogFiller.cpp       |    8 +-
 .../U2View/ov_msa/ExportHighlightedDialogFiller.h  |    5 +-
 .../ov_msa/ExtractSelectedAsMSADialogFiller.cpp    |   25 +-
 .../ov_msa/ExtractSelectedAsMSADialogFiller.h      |    9 +-
 .../GenerateAlignmentProfileDialogFiller.cpp       |   21 +-
 .../ov_msa/GenerateAlignmentProfileDialogFiller.h  |    7 +-
 .../ov_msa/LicenseAgreementDialogFiller.cpp}       |   34 +-
 .../U2View/ov_msa/LicenseAgreementDialogFiller.h}  |   15 +-
 .../U2View/ov_msa/LicenseAgreemntDialogFiller.h    |   55 -
 .../SmithWatermanDialogBaseFiller.cpp              |   47 +-
 .../SmithWatermanDialogBaseFiller.h                |    9 +-
 .../FindAnnotationCollocationsDialogFiller.cpp     |    8 +-
 .../FindAnnotationCollocationsDialogFiller.h       |    5 +-
 .../StructuralAlignmentDialogFiller.cpp            |   22 +-
 .../StructuralAlignmentDialogFiller.h              |    7 +-
 .../ugene/plugins/cap3/CAP3SupportDialogFiller.cpp |    4 +-
 .../ugene/plugins/cap3/CAP3SupportDialogFiller.h   |    7 +-
 .../dna_export/ExportAnnotationsDialogFiller.cpp   |   21 +-
 .../dna_export/ExportAnnotationsDialogFiller.h     |    7 +-
 .../dna_export/ExportBlastResultDialogFiller.cpp   |    8 +-
 .../dna_export/ExportBlastResultDialogFiller.h     |    5 +-
 .../dna_export/ExportMSA2MSADialogFiller.cpp       |   16 +-
 .../plugins/dna_export/ExportMSA2MSADialogFiller.h |    5 +-
 .../dna_export/ExportMSA2SequencesDialogFiller.cpp |   20 +-
 .../dna_export/ExportMSA2SequencesDialogFiller.h   |    7 +-
 ...rtSelectedSequenceFromAlignmentDialogFiller.cpp |   20 +-
 ...portSelectedSequenceFromAlignmentDialogFiller.h |    7 +-
 .../dna_export/ExportSequences2MSADialogFiller.cpp |   18 +-
 .../dna_export/ExportSequences2MSADialogFiller.h   |    7 +-
 .../dna_export/ExportSequencesDialogFiller.cpp     |   30 +-
 .../dna_export/ExportSequencesDialogFiller.h       |    9 +-
 .../dna_export/ImportAnnotationsToCsvFiller.cpp    |   33 +-
 .../dna_export/ImportAnnotationsToCsvFiller.h      |   11 +-
 .../plugins/dotplot/BuildDotPlotDialogFiller.cpp   |   20 +-
 .../plugins/dotplot/BuildDotPlotDialogFiller.h     |    5 +-
 .../ugene/plugins/dotplot/DotPlotDialogFiller.cpp  |   11 +-
 .../ugene/plugins/dotplot/DotPlotDialogFiller.h    |    5 +-
 .../enzymes/ConstructMoleculeDialogFiller.cpp      |    9 +-
 .../enzymes/ConstructMoleculeDialogFiller.h        |    7 +-
 .../plugins/enzymes/CreateFragmentDialogFiller.cpp |    4 +-
 .../plugins/enzymes/CreateFragmentDialogFiller.h   |    7 +-
 .../plugins/enzymes/DigestSequenceDialogFiller.cpp |    4 +-
 .../plugins/enzymes/DigestSequenceDialogFiller.h   |    5 +-
 .../plugins/enzymes/EditFragmentDialogFiller.cpp   |   16 +-
 .../plugins/enzymes/EditFragmentDialogFiller.h     |    7 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.cpp    |    6 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.h      |    5 +-
 .../external_tools/BlastAllSupportDialogFiller.cpp |   19 +-
 .../external_tools/BlastAllSupportDialogFiller.h   |    7 +-
 .../ClustalOSupportRunDialogFiller.cpp             |    2 +-
 .../ClustalOSupportRunDialogFiller.h               |    5 +-
 .../external_tools/FormatDBDialogFiller.cpp        |   16 +-
 .../plugins/external_tools/FormatDBDialogFiller.h  |    7 +-
 .../external_tools/RemoteBLASTDialogFiller.cpp     |   25 +-
 .../external_tools/RemoteBLASTDialogFiller.h       |    9 +-
 .../SpadesGenomeAssemblyDialogFiller.cpp           |    8 +-
 .../SpadesGenomeAssemblyDialogFiller.h             |    5 +-
 .../plugins/external_tools/TCoffeeDailogFiller.cpp |   14 +-
 .../plugins/external_tools/TCoffeeDailogFiller.h   |    5 +-
 .../ugene/plugins/orf_marker/OrfDialogFiller.cpp   |    2 +-
 .../ugene/plugins/orf_marker/OrfDialogFiller.h     |    5 +-
 .../ugene/plugins/pcr/AddPrimerDialogFiller.cpp    |    6 +-
 .../ugene/plugins/pcr/AddPrimerDialogFiller.h      |    7 +-
 .../plugins/pcr/ExportPrimersDialogFiller.cpp      |   22 +-
 .../ugene/plugins/pcr/ExportPrimersDialogFiller.h  |   17 +-
 .../plugins/pcr/ImportPrimersDialogFiller.cpp      |   24 +-
 .../ugene/plugins/pcr/ImportPrimersDialogFiller.h  |   19 +-
 .../plugins/pcr/PrimerLibrarySelectorFiller.cpp    |    7 +-
 .../plugins/pcr/PrimerLibrarySelectorFiller.h      |    7 +-
 .../plugins/pcr/PrimersDetailsDialogFiller.cpp     |    4 +-
 .../ugene/plugins/pcr/PrimersDetailsDialogFiller.h |    9 +-
 .../plugins/weight_matrix/PwmBuildDialogFiller.cpp |   13 +-
 .../plugins/weight_matrix/PwmBuildDialogFiller.h   |    7 +-
 .../weight_matrix/PwmSearchDialogFiller.cpp        |    2 +-
 .../plugins/weight_matrix/PwmSearchDialogFiller.h  |    5 +-
 .../workflow_designer/AliasesDialogFiller.cpp      |   10 +-
 .../workflow_designer/AliasesDialogFiller.h        |    5 +-
 .../ConfigurationWizardFiller.cpp                  |   28 +-
 .../workflow_designer/ConfigurationWizardFiller.h  |    7 +-
 .../CreateElementWithCommandLineFiller.cpp         |    6 +-
 .../CreateElementWithCommandLineToolFiller.h       |   19 +-
 .../CreateElementWithScriptDialogFiller.cpp        |   39 +-
 .../CreateElementWithScriptDialogFiller.h          |    9 +-
 .../DashboardsManagerDialogFiller.cpp              |   11 +-
 .../DashboardsManagerDialogFiller.h                |    9 +-
 .../DatasetNameEditDialogFiller.cpp                |    5 +-
 .../DatasetNameEditDialogFiller.h                  |    5 +-
 .../workflow_designer/DefaultWizardFiller.cpp      |    2 +-
 .../workflow_designer/DefaultWizardFiller.h        |    5 +-
 .../workflow_designer/StartupDialogFiller.cpp      |   74 +-
 .../workflow_designer/StartupDialogFiller.h        |   32 +-
 .../plugins/workflow_designer/WizardFiller.cpp     |   28 +-
 .../ugene/plugins/workflow_designer/WizardFiller.h |   11 +-
 .../workflow_designer/WorkflowMetadialogFiller.cpp |   10 +-
 .../workflow_designer/WorkflowMetadialogFiller.h   |    6 +-
 .../MAFFT/MAFFTSupportRunDialogFiller.cpp          |   16 +-
 .../MAFFT/MAFFTSupportRunDialogFiller.h            |    9 +-
 .../clustalw/ClustalWDialogFiller.cpp              |    8 +-
 .../clustalw/ClustalWDialogFiller.h                |    5 +-
 .../hmm3/UHMM3PhmmerDialogFiller.cpp               |    6 +-
 .../hmm3/UHMM3PhmmerDialogFiller.h                 |    5 +-
 .../hmm3/UHMM3SearchDialogFiller.cpp               |    4 +-
 .../hmm3/UHMM3SearchDialogFiller.h                 |    5 +-
 .../plugins_3rdparty/kalign/KalignDialogFiller.cpp |   16 +-
 .../plugins_3rdparty/kalign/KalignDialogFiller.h   |    5 +-
 .../primer3/Primer3DialogFiller.cpp                |   17 +-
 .../plugins_3rdparty/primer3/Primer3DialogFiller.h |    5 +-
 .../umuscle/MuscleDialogFiller.cpp                 |   14 +-
 .../plugins_3rdparty/umuscle/MuscleDialogFiller.h  |    6 +-
 .../ugeneui/ConvertAceToSqliteDialogFiller.cpp     |   16 +-
 .../ugene/ugeneui/ConvertAceToSqliteDialogFiller.h |    5 +-
 .../ugene/ugeneui/CreateNewProjectWidgetFiller.cpp |   14 +-
 .../ugene/ugeneui/CreateNewProjectWidgetFiller.h   |    6 +-
 .../ugeneui/DocumentFormatSelectorDialogFiller.cpp |   17 +-
 .../ugeneui/DocumentFormatSelectorDialogFiller.h   |    9 +-
 .../DocumentProviderSelectorDialogFiller.cpp       |    4 +-
 .../ugeneui/DocumentProviderSelectorDialogFiller.h |    5 +-
 .../ugene/ugeneui/ExportProjectDialogFiller.cpp    |   23 +-
 .../ugene/ugeneui/ExportProjectDialogFiller.h      |    9 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.cpp       |   36 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.h         |    7 +-
 .../ugene/ugeneui/SaveProjectDialogFiller.cpp      |    2 +-
 .../ugene/ugeneui/SaveProjectDialogFiller.h        |    6 +-
 .../ugeneui/SelectDocumentFormatDialogFiller.cpp   |   11 +-
 .../ugeneui/SelectDocumentFormatDialogFiller.h     |    5 +-
 .../SequenceReadingModeSelectorDialogFiller.cpp    |   13 +-
 .../SequenceReadingModeSelectorDialogFiller.h      |    8 +-
 .../GUITestBase/src/test_runner/GUITestRunner.cpp  |  177 ++
 .../GUITestBase/src/test_runner/GUITestRunner.h}   |   36 +-
 .../GUITestBase/src/test_runner/GUITestRunner.ui   |  111 +
 .../GUITestBase/src/tests/GUIInitialChecks.cpp     |  225 +-
 .../GUITestBase/src/tests/GUIInitialChecks.h       |   42 +-
 .../Assembly_browser/GTTestsAssemblyBrowser.cpp    |  161 +-
 .../Assembly_browser/GTTestsAssemblyBrowser.h      |   10 +-
 .../Assembling/bowtie2/GTTestsBowtie2.cpp          |   26 +-
 .../Assembling/bowtie2/GTTestsBowtie2.h            |    6 +-
 .../Assembling/dna_assembly/GTTestsDnaAssembly.cpp |   19 +-
 .../Assembling/dna_assembly/GTTestsDnaAssembly.h   |    6 +-
 .../Assembling/dna_assembly/GTTestsIndexReuse.cpp  |   89 +-
 .../Assembling/dna_assembly/GTTestsIndexReuse.h    |    6 +-
 .../conversions/GTTestsDnaAssemblyConversions.cpp  |   31 +-
 .../conversions/GTTestsDnaAssemblyConversions.h    |    7 +-
 .../common_scenarios/Assembling/sam/GTTestsSAM.cpp |   15 +-
 .../common_scenarios/Assembling/sam/GTTestsSAM.h   |    6 +-
 .../NIAID_pipelines/GTTestsNiaidPipelines.cpp      |   37 +-
 .../NIAID_pipelines/GTTestsNiaidPipelines.h        |    6 +-
 .../Query_Designer/GTTestsQuerryDesigner.cpp       |   26 +-
 .../Query_Designer/GTTestsQuerryDesigner.h         |    6 +-
 .../annotations/GTTestsAnnotations.cpp             |  114 +-
 .../annotations/GTTestsAnnotations.h               |    6 +-
 .../annotations/GTTestsCreateAnnotationWidget.cpp  |  193 +-
 .../annotations/GTTestsCreateAnnotationWidget.h    |    6 +-
 .../annotations/edit/GTTestsAnnotationsEdit.cpp    |   40 +-
 .../annotations/edit/GTTestsAnnotationsEdit.h      |    6 +-
 .../qualifiers/GTTestsAnnotationsQualifiers.cpp    |   41 +-
 .../qualifiers/GTTestsAnnotationsQualifiers.h      |    6 +-
 .../GTTestsAnnotationsImport.cpp                   |   55 +-
 .../annotations_import/GTTestsAnnotationsImport.h  |    6 +-
 .../circular_view/GTTestsCvGeneral.h               |    6 +-
 .../common_scenarios/cloning/GTTestsCloning.cpp    |   15 +-
 .../common_scenarios/cloning/GTTestsCloning.h      |    6 +-
 .../document_from_text/GTTestsDocumentFromText.cpp |  133 +-
 .../document_from_text/GTTestsDocumentFromText.h   |    6 +-
 .../common_scenarios/dp_view/GTTestsDpView.cpp     |   77 +-
 .../tests/common_scenarios/dp_view/GTTestsDpView.h |    8 +-
 .../msa_editor/GTTestsMsaEditor.cpp                |  394 +++-
 .../common_scenarios/msa_editor/GTTestsMsaEditor.h |    6 +-
 .../msa_editor/align/GTTestsAlignSequenceToMsa.cpp |   51 +-
 .../msa_editor/align/GTTestsAlignSequenceToMsa.h   |    6 +-
 .../msa_editor/colors/GTTestsMSAEditorColors.cpp   |   36 +-
 .../msa_editor/colors/GTTestsMSAEditorColors.h     |    8 +-
 .../consensus/GTTestsMSAEditorConsensus.cpp        |   47 +-
 .../consensus/GTTestsMSAEditorConsensus.h          |    6 +-
 .../msa_editor/edit/GTTestsMSAEditorEdit.cpp       |  236 +-
 .../msa_editor/edit/GTTestsMSAEditorEdit.h         |    6 +-
 .../overview/GTTestsMSAEditorOverview.cpp          |  156 +-
 .../msa_editor/overview/GTTestsMSAEditorOverview.h |    9 +-
 .../GTTestsMSAEditorReplaceCharacter.cpp           |  564 +++++
 .../GTTestsMSAEditorReplaceCharacter.h}            |  114 +-
 .../options_panel/GTTestsOptionPanel.cpp           |  188 +-
 .../options_panel/GTTestsOptionPanel.h             |   35 +-
 .../options_panel/msa/GTTestsOptionPanelMSA.cpp    |  149 +-
 .../options_panel/msa/GTTestsOptionPanelMSA.h      |    4 +-
 .../GTTestsOptionPanelSequenceView.cpp             |  108 +-
 .../sequence_view/GTTestsOptionPanelSequenceView.h |    5 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.cpp    |   29 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.h      |    4 +-
 .../common_scenarios/pcr/GTTestsPrimerLibrary.cpp  |   29 +-
 .../common_scenarios/pcr/GTTestsPrimerLibrary.h    |    4 +-
 .../common_scenarios/project/GTTestsProject.cpp    |   79 +-
 .../common_scenarios/project/GTTestsProject.h      |    6 +-
 .../GTTestsProjectAnonymousProject.cpp             |   29 +-
 .../GTTestsProjectAnonymousProject.h               |    6 +-
 .../project/bookmarks/GTTestsBookmarks.cpp         |   31 +-
 .../project/bookmarks/GTTestsBookmarks.h           |    6 +-
 .../GTTestsProjectDocumentModifying.cpp            |   32 +-
 .../GTTestsProjectDocumentModifying.h              |    6 +-
 .../multiple_docs/GTTestsProjectMultipleDocs.cpp   |   17 +-
 .../multiple_docs/GTTestsProjectMultipleDocs.h     |    6 +-
 .../project_filtering/GTTestsProjectFiltering.cpp  |   46 +-
 .../project_filtering/GTTestsProjectFiltering.h    |    6 +-
 .../project/relations/GTTestsProjectRelations.cpp  |    8 +-
 .../project/relations/GTTestsProjectRelations.h    |    6 +-
 .../remote_request/GTTestsProjectRemoteRequest.cpp |   36 +-
 .../remote_request/GTTestsProjectRemoteRequest.h   |    6 +-
 .../GTTestsProjectSequenceExporting.cpp            |   49 +-
 .../GTTestsProjectSequenceExporting.h              |    6 +-
 .../from_project_view/GTTestsFromProjectView.cpp   |   52 +-
 .../from_project_view/GTTestsFromProjectView.h     |    6 +-
 .../user_locking/GTTestsProjectUserLocking.cpp     |   33 +-
 .../user_locking/GTTestsProjectUserLocking.h       |    6 +-
 .../repeat_finder/GTTestsRepeatFinder.cpp          |   19 +-
 .../repeat_finder/GTTestsRepeatFinder.h            |    6 +-
 .../sequence_edit/GTTestsSequenceEdit.cpp          |  117 +-
 .../sequence_edit/GTTestsSequenceEdit.h            |    6 +-
 .../sequence_view/GTTestsSequenceView.cpp          |  553 ++++-
 .../sequence_view/GTTestsSequenceView.h            |   21 +-
 .../shared_database/GTTestsSharedDatabase.cpp      |  296 ++-
 .../shared_database/GTTestsSharedDatabase.h        |    4 +-
 .../smith_waterman_dialog/GTTestsSWDialog.cpp      |   23 +-
 .../smith_waterman_dialog/GTTestsSWDialog.h        |    6 +-
 .../start_page/GTTestsStartPage.cpp                |   30 +-
 .../common_scenarios/start_page/GTTestsStartPage.h |    6 +-
 .../toggle_view/GTTestsToggleView.cpp              |   23 +-
 .../toggle_view/GTTestsToggleView.h                |    6 +-
 .../GTTestsCommonScenariousTreeviewer.cpp          |   94 +-
 .../GTTestsCommonScenariousTreeviewer.h            |    6 +-
 .../common_scenarios/undo_redo/GTTestsUndoRedo.cpp |   62 +-
 .../common_scenarios/undo_redo/GTTestsUndoRedo.h   |    6 +-
 .../workflow_designer/GTTestsWorkflowDesigner.cpp  |   78 +-
 .../workflow_designer/GTTestsWorkflowDesigner.h    |    6 +-
 .../estimating/GTTestsWorkflowEstimating.cpp       |   13 +-
 .../estimating/GTTestsWorkflowEstimating.h         |    6 +-
 .../name_filter/GTTestsWorkflowNameFilter.cpp      |   33 +-
 .../name_filter/GTTestsWorkflowNameFilter.h        |    6 +-
 .../GTTestsWorkflowParemeterValidation.cpp         |   22 +-
 .../GTTestsWorkflowParemeterValidation.h           |    6 +-
 .../scripting/GTTestsWorkflowScripting.cpp         |   51 +-
 .../scripting/GTTestsWorkflowScripting.h           |    6 +-
 .../shared_db/GTTestsSharedDbWd.cpp                |   61 +-
 .../shared_db/GTTestsSharedDbWd.h                  |    4 +-
 .../src/tests/crazy_user/GTAbstractGUIAction.h     |    5 +-
 .../tests/crazy_user/GTRandomGUIActionFactory.cpp  |    7 +-
 .../src/tests/crazy_user/GUICrazyUserTest.cpp      |    7 +-
 .../src/tests/crazy_user/GUICrazyUserTest.h        |   10 +-
 .../GTTestsRegressionScenarios_1001_2000.cpp       |  862 +++----
 .../GTTestsRegressionScenarios_1001_2000.h         |   11 +-
 .../GTTestsRegressionScenarios_1_1000.cpp          |  507 +++--
 .../GTTestsRegressionScenarios_1_1000.h            |    8 +-
 .../GTTestsRegressionScenarios_2001_3000.cpp       | 1092 ++++-----
 .../GTTestsRegressionScenarios_2001_3000.h         |   18 +-
 .../GTTestsRegressionScenarios_3001_4000.cpp       |  600 +++--
 .../GTTestsRegressionScenarios_3001_4000.h         |   13 +-
 .../GTTestsRegressionScenarios_4001_5000.cpp       | 1342 ++++++++++-
 .../GTTestsRegressionScenarios_4001_5000.h         |   55 +-
 .../annotator/src/CollocationsDialogController.cpp |    2 +-
 .../annotator/src/CustomAutoAnnotationDialog.cpp   |    2 +-
 .../src/BioStruct3DSubsetEditor.cpp                |    9 +-
 .../biostruct3d_view/src/SelectModelsDialog.cpp    |    2 +-
 .../biostruct3d_view/src/SettingsDialog.cpp        |    2 +-
 .../src/StructuralAlignmentDialog.cpp              |    2 +-
 src/plugins/chroma_view/transl/english.ts          |    2 +-
 src/plugins/chroma_view/transl/russian.ts          |    2 +-
 src/plugins/circular_view/src/CircularView.h       |    1 -
 .../src/CircularViewSettingsWidgetFactory.cpp      |    2 +-
 src/plugins/circular_view/transl/english.ts        |   10 +-
 src/plugins/circular_view/transl/russian.ts        |   10 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp  |    2 +-
 src/plugins/dbi_bam/src/SamReader.cpp              |    8 +-
 src/plugins/dbi_bam/src/SamReader.h                |    2 +-
 .../src/CSVColumnConfigurationDialog.cpp           |    2 +-
 .../dna_export/src/DNASequenceGeneratorDialog.cpp  |    4 +-
 .../dna_export/src/ExportBlastResultDialog.cpp     |    2 +-
 .../dna_export/src/ExportChromatogramDialog.cpp    |    2 +-
 src/plugins/dna_export/src/ExportMSA2MSADialog.cpp |    2 +-
 .../dna_export/src/ExportMSA2SequencesDialog.cpp   |    2 +-
 .../dna_export/src/ExportSequences2MSADialog.cpp   |    2 +-
 .../dna_export/src/ExportSequencesDialog.cpp       |    2 +-
 .../dna_export/src/GetSequenceByIdDialog.cpp       |    2 +-
 .../src/ImportAnnotationsFromCSVDialog.cpp         |    2 +-
 src/plugins/dna_export/transl/russian.ts           |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexDialog.cpp  |    2 +-
 .../dna_stat/src/DNAStatMSAProfileDialog.cpp       |    2 +-
 src/plugins/dna_stat/src/DNAStatPlugin.cpp         |   54 -
 src/plugins/dna_stat/src/DNAStatPlugin.h           |   12 -
 .../src/DistanceMatrixMSAProfileDialog.cpp         |    2 +-
 src/plugins/dotplot/src/DotPlotDialog.cpp          |    2 +-
 src/plugins/dotplot/src/DotPlotFilesDialog.cpp     |    2 +-
 src/plugins/dotplot/src/DotPlotFilterDialog.cpp    |    2 +-
 src/plugins/dotplot/transl/english.ts              |    4 +-
 src/plugins/dotplot/transl/russian.ts              |    6 +-
 .../enzymes/src/ConstructMoleculeDialog.cpp        |    2 +-
 src/plugins/enzymes/src/CreateFragmentDialog.cpp   |    4 +-
 src/plugins/enzymes/src/DigestSequenceDialog.cpp   |    2 +-
 src/plugins/enzymes/src/EditFragmentDialog.cpp     |    2 +-
 src/plugins/enzymes/src/EnzymesIO.cpp              |   10 +-
 src/plugins/enzymes/src/EnzymesQuery.cpp           |    2 +-
 src/plugins/enzymes/src/FindEnzymesDialog.cpp      |    2 +-
 src/plugins/enzymes/src/FindEnzymesTask.h          |    1 -
 .../src/ExpertDiscoveryAdvSetDialog.cpp            |    2 +-
 .../src/ExpertDiscoveryControlDialog.cpp           |    2 +-
 .../src/ExpertDiscoveryControlMrkDialog.cpp        |    2 +-
 .../src/ExpertDiscoveryPosNegDialog.cpp            |    2 +-
 .../src/ExpertDiscoveryPosNegMrkDialog.cpp         |    2 +-
 .../src/ExpertDiscoverySearchDialogController.cpp  |    2 +-
 .../src/ExpertDiscoverySetupRecBoundDialog.cpp     |    2 +-
 .../external_tool_support.pro                      |    6 +
 .../src/ExternalToolSupportSettingsController.cpp  |    2 +-
 .../src/bedtools/BedToolsWorkersLibrary.cpp        |    2 +-
 .../src/blast/BlastAllSupport.cpp                  |    1 +
 .../src/blast/BlastAllSupportRunDialog.cpp         |    1 +
 .../src/blast/BlastAllSupportTask.cpp              |    9 +-
 .../src/blast/FormatDBSupportRunDialog.cpp         |    2 +-
 .../src/blast_plus/BlastDBCmdDialog.cpp            |    2 +-
 .../src/blast_plus/BlastPlusSupport.cpp            |    1 +
 .../src/blast_plus/BlastPlusSupportCommonTask.cpp  |    8 +-
 .../src/blast_plus/BlastPlusSupportRunDialog.cpp   |    1 +
 .../src/cap3/CAP3SupportDialog.cpp                 |    2 +-
 .../src/clustalo/ClustalOSupportRunDialog.cpp      |    4 +-
 .../src/clustalw/ClustalWSupportRunDialog.cpp      |    4 +-
 .../src/conduct_go/ConductGOSettings.cpp           |    4 +-
 .../src/conduct_go/ConductGOSettings.h             |    7 +-
 .../src/conduct_go/ConductGOTask.cpp               |   83 +-
 .../src/conduct_go/ConductGOTask.h                 |   18 +-
 .../src/conduct_go/ConductGOWorker.cpp             |   16 +-
 .../src/conduct_go/ConductGOWorker.h               |    2 +-
 .../conservation_plot/ConservationPlotSettings.cpp |    6 +-
 .../src/conservation_plot/ConservationPlotTask.cpp |    2 +-
 .../conservation_plot/ConservationPlotWorker.cpp   |    2 +-
 .../external_tool_support/src/java/JavaSupport.cpp |    9 +-
 .../src/macs/MACSSettings.cpp                      |    4 +-
 .../external_tool_support/src/macs/MACSTask.cpp    |    2 +-
 .../src/mafft/MAFFTSupportRunDialog.cpp            |    4 +-
 .../src/peak2gene/Gene2PeakFormatLoader.cpp        |  140 ++
 .../src/peak2gene/Gene2PeakFormatLoader.h          |   71 +
 .../src/peak2gene/Peak2GeneFormatLoader.cpp        |  151 ++
 .../src/peak2gene/Peak2GeneFormatLoader.h          |   73 +
 .../src/peak2gene/Peak2GeneSettings.cpp            |    6 +-
 .../src/peak2gene/Peak2GeneSettings.h              |    5 -
 .../src/peak2gene/Peak2GeneTask.cpp                |  105 +-
 .../src/peak2gene/Peak2GeneTask.h                  |   22 +-
 .../src/peak2gene/Peak2GeneWorker.cpp              |   35 +-
 .../src/peak2gene/TabulatedFormatReader.cpp        |   94 +
 .../src/peak2gene/TabulatedFormatReader.h}         |   45 +-
 .../src/seqpos/SeqPosTask.cpp                      |    2 +-
 .../src/seqpos/SeqPosWorker.cpp                    |    2 +-
 .../src/snpeff/SnpEffSupport.cpp                   |   10 +-
 .../src/snpeff/SnpEffSupport.h                     |    3 +-
 .../src/snpeff/SnpEffWorker.cpp                    |    2 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.cpp        |    4 +-
 .../src/utils/BlastDBSelectorWidgetController.cpp  |    2 -
 .../src/utils/BlastRunCommonDialog.cpp             |    2 +-
 .../src/utils/BlastTaskSettings.cpp                |    1 +
 .../src/utils/BlastTaskSettings.h                  |    2 +
 .../src/vcftools/VcfConsensusWorker.cpp            |    2 +-
 .../external_tool_support/transl/english.ts        |  150 +-
 .../external_tool_support/transl/russian.ts        |  194 +-
 .../src/GenomeAlignerSearchQuery.cpp               |   10 +-
 .../src/GenomeAlignerSettingsController.cpp        |    2 +-
 src/plugins/genome_aligner/transl/russian.ts       |    2 +-
 .../opencl_support/src/OpenCLSupportPlugin.cpp     |   11 +-
 .../opencl_support/src/OpenCLSupportPlugin.h       |    2 +
 .../src/OpenCLSupportSettingsController.cpp        |    2 +-
 src/plugins/orf_marker/src/ORFDialog.cpp           |    2 +-
 src/plugins/pcr/html/report.html                   |   13 +
 src/plugins/pcr/src/EditPrimerDialog.cpp           |    2 +-
 src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp |    2 +-
 src/plugins/pcr/src/InSilicoPcrWorker.cpp          |    6 +-
 src/plugins/pcr/src/PrimerLibrarySelector.cpp      |    2 +-
 src/plugins/pcr/src/PrimerLibraryWidget.cpp        |    2 +-
 src/plugins/pcr/src/PrimersDetailsDialog.cpp       |    2 +-
 src/plugins/pcr/src/PrimersGrouperWorker.cpp       |   10 +-
 src/plugins/pcr/src/PrimersGrouperWorker.h         |    2 +-
 src/plugins/pcr/src/export/ExportPrimersDialog.cpp |    2 +-
 src/plugins/pcr/src/import/ImportPrimersDialog.cpp |    2 +-
 src/plugins/pcr/transl/english.ts                  |    2 +-
 src/plugins/pcr/transl/russian.ts                  |    8 +-
 src/plugins/query_designer/src/QDRunDialog.cpp     |   10 +-
 .../query_designer/src/QueryViewController.cpp     |    2 +-
 .../src/library/QDGcContentActor.cpp               |    2 +-
 src/plugins/query_designer/transl/english.ts       |   20 +-
 src/plugins/query_designer/transl/russian.ts       |   22 +-
 src/plugins/remote_blast/src/HttpRequestBLAST.cpp  |   10 +-
 src/plugins/remote_blast/src/RemoteBLASTConsts.cpp |    2 +-
 .../remote_blast/src/SendSelectionDialog.cpp       |   10 +-
 .../remote_service/src/RemoteTasksDialog.cpp       |    2 +-
 .../repeat_finder/src/FindRepeatsDialog.cpp        |    2 +-
 .../repeat_finder/src/FindTandemsDialog.cpp        |    2 +-
 .../src/SmithWatermanAlgorithmOPENCL.cpp           |  167 +-
 .../weight_matrix/src/PWMBuildDialogController.cpp |    2 +-
 .../src/PWMJASPARDialogController.cpp              |    2 +-
 .../src/PWMSearchDialogController.cpp              |    2 +-
 .../src/SetParametersDialogController.cpp          |    2 +-
 .../src/ViewMatrixDialogController.cpp             |    2 +-
 src/plugins/weight_matrix/transl/russian.ts        |   12 +-
 .../workflow_designer/src/CreateScriptWorker.cpp   |    2 +-
 .../src/DashboardsManagerDialog.cpp                |    2 +-
 .../workflow_designer/src/ImportSchemaDialog.cpp   |    2 +-
 .../src/PortAliasesConfigurationDialog.cpp         |    2 +-
 .../src/SchemaAliasesConfigurationDialogImpl.cpp   |    2 +-
 .../workflow_designer/src/StartupDialog.cpp        |   21 +-
 .../src/WorkflowDesignerPlugin.cpp                 |    2 +-
 .../workflow_designer/src/WorkflowMetaDialog.cpp   |    2 +-
 .../src/WorkflowSettingsController.cpp             |    2 +-
 .../src/WorkflowViewController.cpp                 |    2 +-
 .../workflow_designer/src/library/CoreLib.cpp      |    4 -
 .../src/library/DASAnnotationWorker.cpp            |  372 ---
 .../src/library/DASAnnotationWorker.h              |   70 -
 .../src/library/DASFetchWorker.cpp                 |  381 ----
 .../workflow_designer/src/library/DASFetchWorker.h |   83 -
 .../src/library/MultiplexerWorker.cpp              |    2 +-
 .../src/library/WriteAnnotationsWorker.cpp         |    4 +-
 .../src/ui/ExternalProcessWorkerDialog.ui          |   12 +-
 .../workflow_designer/src/ui/StartupDialog.ui      |   12 +-
 src/plugins/workflow_designer/transl/english.ts    |  131 +-
 src/plugins/workflow_designer/transl/russian.ts    |  164 +-
 .../workflow_designer/workflow_designer.pro        |    4 -
 src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp      |    4 +-
 .../hmm2/src/u_build/HMMBuildDialogController.cpp  |    2 +-
 .../hmm2/src/u_build/HMMBuildWorker.cpp            |    2 +-
 .../u_calibrate/HMMCalibrateDialogController.cpp   |    2 +-
 .../src/u_search/HMMSearchDialogController.cpp     |    2 +-
 .../hmm2/src/u_search/HMMSearchWorker.cpp          |    2 +-
 src/plugins_3rdparty/hmm2/transl/english.ts        |   24 +-
 src/plugins_3rdparty/hmm2/transl/russian.ts        |   22 +-
 .../hmm3/src/build/uHMM3BuildDialogImpl.cpp        |    2 +-
 .../hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp      |    2 +-
 .../hmm3/src/search/uHMM3SearchDialogImpl.cpp      |    2 +-
 src/plugins_3rdparty/hmm3/transl/russian.ts        |   14 +-
 .../kalign/src/KalignDialogController.cpp          |    4 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Task.cpp   |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Task.h     |    2 +-
 .../primer3/src/Primer3TaskSettings.cpp            |    2 +-
 .../primer3/src/Primer3TaskSettings.h              |    2 +-
 .../sitecon/src/SiteconBuildDialogController.cpp   |    2 +-
 .../sitecon/src/SiteconSearchDialogController.cpp  |    2 +-
 src/plugins_3rdparty/sitecon/transl/russian.ts     |   12 +-
 .../umuscle/src/MuscleAlignDialogController.cpp    |    4 +-
 .../umuscle/src/MuscleParallel.cpp                 |   28 +-
 src/plugins_3rdparty/umuscle/src/MuscleTask.cpp    |   23 +-
 src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp   |   13 +-
 .../umuscle/src/MuscleWorkPool.cpp                 |    3 +-
 src/plugins_3rdparty/umuscle/src/muscle/clwwt.cpp  |    3 +-
 .../umuscle/src/muscle/muscle_context.cpp          |   59 +-
 .../umuscle/src/muscle/muscle_context.h            |    9 +-
 src/plugins_3rdparty/umuscle/transl/english.ts     |   45 +-
 src/plugins_3rdparty/umuscle/transl/russian.ts     |   49 +-
 .../variants/src/SamtoolMpileupWorker.cpp          |    2 +-
 src/plugins_3rdparty/variants/transl/english.ts    |   21 +-
 src/plugins_3rdparty/variants/transl/russian.ts    |   23 +-
 src/plugins_3rdparty/variants/variants.pro         |    2 +
 src/ugene_globals.pri                              |   31 +
 src/ugene_version.pri                              |    4 +-
 src/ugenecl/src/Main.cpp                           |    7 -
 src/ugenecl/ugenecl.pri                            |    6 +-
 src/ugenem/src/SendReportDialog.cpp                |    1 +
 src/ugeneui/html/version_news.html                 |   17 +-
 src/ugeneui/src/Main.cpp                           |   35 +-
 .../DirectoriesSettingsGUIController.cpp           |    2 +-
 .../FormatSettingsGUIController.cpp                |    2 +-
 .../logview_settings/LogSettingsGUIController.cpp  |    2 +-
 .../NetworkSettingsGUIController.cpp               |    2 +-
 .../ResourceSettingsGUIController.cpp              |    2 +-
 .../UserApplicationsSettingsGUIController.cpp      |    2 +-
 src/ugeneui/src/main_window/MainWindowImpl.cpp     |   12 +-
 .../DocumentFormatSelectorController.cpp           |    2 +-
 .../DocumentProviderSelectorController.cpp         |    2 +-
 .../DocumentReadingModeSelectorController.cpp      |    2 +-
 .../ExportProjectDialogController.cpp              |    2 +-
 ...tipleDocumentsReadingModeSelectorController.cpp |    2 +-
 .../src/project_support/ProjectLoaderImpl.cpp      |   44 +-
 .../src/project_support/ProjectLoaderImpl.h        |    2 -
 .../src/project_support/ProjectServiceImpl.cpp     |   10 +-
 .../src/project_support/ProjectServiceImpl.h       |    1 +
 src/ugeneui/src/project_view/ProjectViewImpl.cpp   |   19 +-
 .../src/shtirlitz/StatisticalReportController.cpp  |   16 +-
 .../src/shtirlitz/StatisticalReportController.h    |    2 +
 src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui  |    5 +-
 src/ugeneui/src/task_view/TaskViewController.cpp   |    5 +-
 src/ugeneui/transl/english.ts                      |  268 +--
 src/ugeneui/transl/russian.ts                      |  268 +--
 src/ugeneui/ugeneui.pri                            |    8 +-
 ugene.pro                                          |  418 ++--
 1087 files changed, 26637 insertions(+), 22991 deletions(-)

diff --git a/build.txt b/build.txt
index f08649e..830a53b 100644
--- a/build.txt
+++ b/build.txt
@@ -1,4 +1,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/)
+
+===================================
 For Windows users:
 ===================================
 
diff --git a/data/cmdline/das_annotation.uwl b/data/cmdline/das_annotation.uwl
deleted file mode 100644
index de9c0b6..0000000
--- a/data/cmdline/das_annotation.uwl
+++ /dev/null
@@ -1,112 +0,0 @@
-#@UGENE_WORKFLOW
-#Annotate with DAS. Finds similar protein sequence using remote BLAST. Using IDs of sequences found loads annotation for DAS sources. Nucleotide sequences are skipped if any supplied to input.
-
-
-
-workflow DAS_annotation{
-
-    read-sequence {
-        type:read-sequence;
-        name:"Read Sequence";
-        url-in {
-            dataset:"Dataset 1";
-        }
-    }
-    write-sequence {
-        type:write-sequence;
-        name:"Write Sequence";
-        document-format:genbank;
-    }
-    dasannotation-search {
-        type:dasannotation-search;
-        name:"Annotate with DAS";
-    }
-
-
-    .actor-bindings {
-        read-sequence.out-sequence->dasannotation-search.in-sequence
-        dasannotation-search.out-annotations->write-sequence.in-sequence
-    }
-
-    dasannotation-search.annotations->write-sequence.in-sequence.annotations
-    read-sequence.annotations->write-sequence.in-sequence.annotations
-    read-sequence.sequence->write-sequence.in-sequence.sequence
-    read-sequence.sequence->dasannotation-search.in-sequence.sequence
-
-    .meta {
-        parameter-aliases {
-            read-sequence.url-in {
-                alias:in;
-                description:"Input amino acid sequence";
-            }
-            write-sequence.url-out {
-                alias:out;
-                description:"Output annotated sequence";
-            }
-            dasannotation-search.db {
-                alias:db;
-                description:"Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity.";
-            }
-            dasannotation-search.filtering {
-                alias:f;
-                description:"Low-complexity regions (e.g. stretches of cysteine in Q03751, or hydrophobic regions in membrane proteins) tend to produce spurious, insignificant matches with sequences in the database which have the same kind of low-complexity regions, but are unrelated biologically.";
-            }
-            dasannotation-search.fsources {
-                alias:s;
-                description:"The DAS sources to read features from.";
-            }
-            dasannotation-search.gapped {
-                alias:g;
-                description:"This will allow gaps to be introduced in the sequences when the comparison is done.";
-            }
-            dasannotation-search.identity {
-                alias:i;
-                description:"Minimum identity of a BLAST result and an input sequence.";
-            }
-            dasannotation-search.idsnumber {
-                alias:r;
-                description:"Use first IDs of similar sequences to load annotations";
-            }
-            dasannotation-search.matrix {
-                alias:m;
-                description:"The matrix assigns a probability score for each position in an alignment.";
-            }
-            dasannotation-search.maxres {
-                alias:h;
-                description:"Limits the number of returned alignments.";
-            }
-            dasannotation-search.threshold {
-                alias:t;
-                description:"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.";
-            }
-        }
-        visual {
-            dasannotation-search {
-                pos:"-555 -555";
-                style:ext;
-                bg-color-ext:"0 128 128 64";
-                in-sequence.angle:180;
-                out-annotations.angle:360;
-            }
-            read-sequence {
-                pos:"-750 -555";
-                style:ext;
-                bg-color-ext:"0 128 128 64";
-                out-sequence.angle:360;
-            }
-            write-sequence {
-                pos:"-255 -555";
-                style:ext;
-                bg-color-ext:"0 128 128 64";
-                in-sequence.angle:180;
-            }
-            dasannotation-search.out-annotations->write-sequence.in-sequence {
-                text-pos:"-44 -24";
-            }
-            read-sequence.out-sequence->dasannotation-search.in-sequence {
-                text-pos:"-27.5 -24";
-            }
-        }
-    }
-}
-
diff --git a/data/workflow_samples/NGS/cistrome/chip_seq.uwl b/data/workflow_samples/NGS/cistrome/chip_seq.uwl
index f23f3fd..c5f0eb8 100644
--- a/data/workflow_samples/NGS/cistrome/chip_seq.uwl
+++ b/data/workflow_samples/NGS/cistrome/chip_seq.uwl
@@ -38,14 +38,12 @@ workflow "ChIP-seq analysis"{
     write-annotations {
         type:write-annotations;
         name:"Write Gene Annotations";
-        document-format:bed;
-        url-out:genes.bed;
+        url-out:genes.gb;
     }
     write-annotations-1 {
         type:write-annotations;
         name:"Write Peak Annotations";
-        document-format:bed;
-        url-out:peaks.bed;
+        url-out:peaks.gb;
     }
     get-file-list {
         type:get-file-list;
@@ -93,7 +91,6 @@ workflow "ChIP-seq analysis"{
     }
 
     .actor-bindings {
-        get-file-list.out-url->macs-id.in-data
         macs-id.out-data->ceas-report.in-data
         macs-id.out-data->conservation_plot-id.in-data
         macs-id.out-data->seqpos-id.in-data
@@ -101,6 +98,7 @@ workflow "ChIP-seq analysis"{
         peak2gene-id.out-data->conduct-go-id.in-data
         peak2gene-id.out-data->write-annotations.in-annotations
         peak2gene-id.out-data->write-annotations-1.in-annotations
+        get-file-list.out-url->macs-id.in-data
     }
 
     get-file-list.url->macs-id.in-data._treatment-ann
@@ -109,7 +107,7 @@ workflow "ChIP-seq analysis"{
     macs-id.peak-summits->conservation_plot-id.in-data.cp_treat-ann
     macs-id.peak-summits->seqpos-id.in-data.cp_treat-ann
     macs-id.peak-summits->peak2gene-id.in-data._treat-ann
-    peak2gene-id.gene-annotation->conduct-go-id.in-data.in-ann
+    peak2gene-id.gene-annotation-url->conduct-go-id.in-data.in-ann
     peak2gene-id.gene-annotation->write-annotations.in-annotations.annotations
     peak2gene-id.peak-annotation->write-annotations-1.in-annotations.annotations
 
@@ -162,7 +160,7 @@ workflow "ChIP-seq analysis"{
                 in-data.angle:19.6538;
             }
             conservation_plot-id {
-                pos:"-465.333 -756.667";
+                pos:"-465.333 -788.889";
                 style:ext;
                 bg-color-ext:"128 128 0 64";
                 in-data.angle:242.13;
diff --git a/data/workflow_samples/NGS/cistrome/chip_seq_with_control.uwl b/data/workflow_samples/NGS/cistrome/chip_seq_with_control.uwl
index a65d052..6e69296 100644
--- a/data/workflow_samples/NGS/cistrome/chip_seq_with_control.uwl
+++ b/data/workflow_samples/NGS/cistrome/chip_seq_with_control.uwl
@@ -42,14 +42,12 @@ workflow "ChIP-seq analysis with control"{
     write-annotations {
         type:write-annotations;
         name:"Write Gene Annotations";
-        document-format:bed;
-        url-out:genes.bed;
+        url-out:genes.gb;
     }
     write-annotations-1 {
         type:write-annotations;
         name:"Write Peak Annotations";
-        document-format:bed;
-        url-out:peaks.bed;
+        url-out:peaks.gb;
     }
     get-file-list {
         type:get-file-list;
@@ -141,16 +139,16 @@ workflow "ChIP-seq analysis with control"{
     }
 
     .actor-bindings {
-        get-file-list.out-url->multiplexer.input-data-1
-        get-file-list-1.out-url->multiplexer.input-data-2
-        multiplexer.output-data->macs-id.in-data
-        peak2gene-id.out-data->conduct-go-id.in-data
-        peak2gene-id.out-data->write-annotations.in-annotations
-        peak2gene-id.out-data->write-annotations-1.in-annotations
         macs-id.out-data->ceas-report.in-data
         macs-id.out-data->conservation_plot-id.in-data
         macs-id.out-data->seqpos-id.in-data
         macs-id.out-data->peak2gene-id.in-data
+        multiplexer.output-data->macs-id.in-data
+        get-file-list-1.out-url->multiplexer.input-data-2
+        get-file-list.out-url->multiplexer.input-data-1
+        peak2gene-id.out-data->conduct-go-id.in-data
+        peak2gene-id.out-data->write-annotations.in-annotations
+        peak2gene-id.out-data->write-annotations-1.in-annotations
     }
 
     get-file-list.url->macs-id.in-data._treatment-ann
@@ -160,7 +158,7 @@ workflow "ChIP-seq analysis with control"{
     macs-id.peak-summits->conservation_plot-id.in-data.cp_treat-ann
     macs-id.peak-summits->seqpos-id.in-data.cp_treat-ann
     macs-id.peak-summits->peak2gene-id.in-data._treat-ann
-    peak2gene-id.gene-annotation->conduct-go-id.in-data.in-ann
+    peak2gene-id.gene-annotation-url->conduct-go-id.in-data.in-ann
     peak2gene-id.gene-annotation->write-annotations.in-annotations.annotations
     peak2gene-id.peak-annotation->write-annotations-1.in-annotations.annotations
 
@@ -203,7 +201,7 @@ workflow "ChIP-seq analysis with control"{
                 in-data.angle:14.6383;
             }
             conservation_plot-id {
-                pos:"-165.294 -689.353";
+                pos:"-114.706 -801.118";
                 style:ext;
                 bg-color-ext:"128 128 0 64";
                 in-data.angle:180;
@@ -245,19 +243,19 @@ workflow "ChIP-seq analysis with control"{
                 out-data.angle:292.805;
             }
             seqpos-id {
-                pos:"-173.529 -547.588";
+                pos:"-114.705 -575.823";
                 style:ext;
                 bg-color-ext:"128 128 0 64";
                 in-data.angle:180;
             }
             write-annotations {
-                pos:"-316.412 -330.706";
+                pos:"-315.236 -307.177";
                 style:ext;
                 bg-color-ext:"64 26 96 64";
                 in-annotations.angle:53.9726;
             }
             write-annotations-1 {
-                pos:"-539.765 -328.353";
+                pos:"-545.647 -306";
                 style:ext;
                 bg-color-ext:"64 26 96 64";
                 in-annotations.angle:23.9625;
@@ -287,7 +285,7 @@ workflow "ChIP-seq analysis with control"{
                 text-pos:"-74 -26";
             }
             peak2gene-id.out-data->write-annotations-1.in-annotations {
-                text-pos:"-40 -6";
+                text-pos:"-36 -13";
             }
             peak2gene-id.out-data->write-annotations.in-annotations {
                 text-pos:"-9 -14";
diff --git a/installer/_common_data/ugene b/installer/_common_data/ugene
index 39a3d8c..fe3b883 100755
--- a/installer/_common_data/ugene
+++ b/installer/_common_data/ugene
@@ -21,7 +21,7 @@ do
     shift
 done
 
-dirname=$(dirname `readlink -f $0`)
+dirname=$(dirname "`readlink -f "$0"`")
 
 tmp="${dirname#?}"
 
@@ -63,8 +63,8 @@ fi
 export QT_QPA_PLATFORMTHEME=
 
 if [ -z $IS_KDE ]; then
-    $dirname/$appname "${params[@]}"
+    "$dirname/$appname" "${params[@]}"
 else
-    $dirname/$appname "${params[@]}" -style cleanlooks
+    "$dirname/$appname" "${params[@]}" -style cleanlooks
 fi
 
diff --git a/installer/_common_data/ugened b/installer/_common_data/ugened
index f185b3d..737795a 100755
--- a/installer/_common_data/ugened
+++ b/installer/_common_data/ugened
@@ -21,7 +21,7 @@ do
     shift
 done
 
-dirname=$(dirname `readlink -f $0`)
+dirname=$(dirname "`readlink -f "$0"`")
 
 tmp="${dirname#?}"
 
@@ -63,8 +63,8 @@ fi
 export QT_QPA_PLATFORMTHEME=
 
 if [ -z $IS_KDE ]; then
-    $dirname/$appname "${params[@]}"
+    "$dirname/$appname" "${params[@]}"
 else
-    $dirname/$appname "${params[@]}" -style cleanlooks
+    "$dirname/$appname" "${params[@]}" -style cleanlooks
 fi
 
diff --git a/installer/linux/fedora/ugene.spec b/installer/linux/fedora/ugene.spec
index 2345828..c35fce2 100644
--- a/installer/linux/fedora/ugene.spec
+++ b/installer/linux/fedora/ugene.spec
@@ -1,6 +1,6 @@
 Name:    ugene
 Summary: Integrated bioinformatics toolkit
-Version: 1.16.0
+Version: 1.19.0
 Release: 1%{?dist}
 #The entire source code is GPLv2+ except:
 #file src/libs_3rdparty/qtbindings_core/src/qtscriptconcurrent.h which is GPLv2
@@ -10,9 +10,10 @@ Group:   Applications/Engineering
 URL:     http://ugene.unipro.ru
 Source0: http://ugene.unipro.ru/downloads/%{name}-%{version}.tar.gz
 
-BuildRequires: qt4-devel pkgconfig(QtWebKit) zlib-devel desktop-file-utils procps-devel qt-mysql
+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
+BuildConflicts: qt-devel
 #We need strict versions of qt for correct work of src/libs_3rdparty/qtbindings_*
-%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}}
+%{?_qt5_version:Requires: qt5%{?_isa} >= %{_qt5_version}}
 Provides: bundled(sqlite)
 Provides: bundled(samtools)
 ExclusiveArch: %{ix86} x86_64
@@ -28,7 +29,7 @@ is a designer for custom bioinformatics workflows.
 %setup -q
 
 %build
-%_bindir/qmake-qt4 -r -spec linux-g++ \
+%_bindir/qmake-qt5 -r -spec linux-g++ \
         INSTALL_BINDIR=%{_bindir} \
         INSTALL_LIBDIR=%{_libdir} \
         INSTALL_DATADIR=%{_datadir} \
@@ -57,6 +58,30 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 %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
 
diff --git a/installer/linux/ubuntu/debian/control b/installer/linux/ubuntu/debian/control
index 2c73368..491dcde 100644
--- a/installer/linux/ubuntu/debian/control
+++ b/installer/linux/ubuntu/debian/control
@@ -3,13 +3,13 @@ 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: libqt4-dev (>= 4.7.0), libqtwebkit-dev, libqt4-opengl-dev (>= 4.7.0), libqt4-sql-mysql, zlib1g-dev, debhelper (>=5.0.38)
+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)
 Standards-Version: 3.9.3
 Homepage: http://ugene.unipro.ru
 
 Package: ugene
 Architecture: any
-Depends: ${shlibs:Depends}, libqt4-gui (>=4.7.0), libqt4-core (>=4.7.0), libqt4-sql-mysql, ugene-data, ${misc:Depends}
+Depends: ${shlibs:Depends}, libqt5core5a, libqt5dbus5, libqt5gui5, libqt5multimedia5, libqt5network5, libqt5opengl5, libqt5positioning5, libqt5printsupport5, libqt5qml5, libqt5quick5, libqt5script5, libqt5scripttools5, libqt5sensors5, libqt5sql5, libqt5svg5, libqt5webkit5, libqt5widgets5, libqt5xml5, libqt5sql5-mysql, ugene-data, ${misc:Depends}
 Recommends: bowtie, bwa, clustalw, mafft, mrbayes, ncbi-blast+, t-coffee
 Description: integrated bioinformatics toolkit
  Unipro UGENE is a cross-platform visual environment for DNA and protein 
@@ -29,7 +29,7 @@ Description: required data for UGENE - integrated bioinformatics toolkit
 
 Package: ugene-non-free
 Architecture: any
-Depends: ${shlibs:Depends}, libqt4-gui (>=4.7.0), libqt4-core (>=4.7.0), ugene, ${misc:Depends}
+Depends: ${shlibs:Depends}, libqt5core5a, libqt5dbus5, libqt5gui5, libqt5multimedia5, libqt5network5, libqt5opengl5, libqt5positioning5, libqt5printsupport5, libqt5qml5, libqt5quick5, libqt5script5, libqt5scripttools5, libqt5sensors5, libqt5sql5, libqt5svg5, libqt5webkit5, libqt5widgets5, libqt5xml5, libqt5sql5-mysql, ugene, ${misc:Depends}
 Description: non-free plugins for UGENE - integrated bioinformatics toolkit
  Unipro UGENE is a cross-platform visual environment for DNA and protein 
  sequence analysis. 
diff --git a/installer/linux/ubuntu/debian/rules b/installer/linux/ubuntu/debian/rules
index 4b627e0..b07f826 100644
--- a/installer/linux/ubuntu/debian/rules
+++ b/installer/linux/ubuntu/debian/rules
@@ -21,7 +21,7 @@ build: build-arch build-indep
 
 build-arch: build-arch-stamp
 build-arch-stamp:
-	qmake-qt4 -r UGENE_EXCLUDE_LIST_ENABLED=1 DEFINES+='UGENE_VERSION_SUFFIX=\\\"-ppa\\\"'
+	qmake -r UGENE_EXCLUDE_LIST_ENABLED=1 UGENE_USE_BUNDLED_ZLIB=1 DEFINES+='UGENE_VERSION_SUFFIX=\\\"-ppa\\\"'
 	$(MAKE) -j 8	
 	touch $@
 
@@ -99,6 +99,8 @@ install-arch:
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/hmm3.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/kalign.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/kalign.plugin
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/linkdata_support.license
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/linkdata_support.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/opencl_support.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/opencl_support.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/orf_marker.license
@@ -123,6 +125,8 @@ install-arch:
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/smith_waterman.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/umuscle.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/umuscle.plugin
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/variants.license
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/variants.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/weight_matrix.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/weight_matrix.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/workflow_designer.license
diff --git a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
index 9ed9118..32eba16 100644
--- a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
@@ -69,38 +69,39 @@ BinaryFindOpenCL::BinaryFindOpenCL(const NumberType *_haystack,
 BinaryFindOpenCL::~BinaryFindOpenCL() {
     algoLog.trace(QObject::tr("clear OpenCL resources"));
     cl_int err = CL_SUCCESS;
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded",);
 
     if (binaryFindKernel) {
-        err = openCLHelper.clReleaseKernel_p(binaryFindKernel);
+        err = openCLHelper->clReleaseKernel_p(binaryFindKernel);
         hasOPENCLError(err, "clReleaseKernel failed");
     }
     if (clProgram)  {
-        err = openCLHelper.clReleaseProgram_p(clProgram);
+        err = openCLHelper->clReleaseProgram_p(clProgram);
         hasOPENCLError(err, "clReleaseProgram failed");
     }
     if (clCommandQueue) {
-        err = openCLHelper.clReleaseCommandQueue_p(clCommandQueue);
+        err = openCLHelper->clReleaseCommandQueue_p(clCommandQueue);
         hasOPENCLError(err, "clReleaseCommandQueue failed");
     }
     if (buf_sortedHaystackArray) {
-        err = openCLHelper.clReleaseMemObject_p(buf_sortedHaystackArray);
+        err = openCLHelper->clReleaseMemObject_p(buf_sortedHaystackArray);
         hasOPENCLError(err, "clReleaseMemObject(buf_sortedHaystackArray) failed");
     }
     if (buf_needlesArray) {
-        err = openCLHelper.clReleaseMemObject_p(buf_needlesArray);
+        err = openCLHelper->clReleaseMemObject_p(buf_needlesArray);
         hasOPENCLError(err, "clReleaseMemObject(buf_needlesArray) failed");
     }
     if (buf_windowSizesArray) {
-        err = openCLHelper.clReleaseMemObject_p(buf_windowSizesArray);
+        err = openCLHelper->clReleaseMemObject_p(buf_windowSizesArray);
         hasOPENCLError(err, "clReleaseMemObject(buf_windowSizesArray) failed");
     }
     if (clEvent1) {
-        err = openCLHelper.clReleaseEvent_p (clEvent1);
+        err = openCLHelper->clReleaseEvent_p(clEvent1);
         hasOPENCLError(err, "clReleaseEvent 1 failed");
     }
     if (clEvent2) {
-        err = openCLHelper.clReleaseEvent_p (clEvent2);
+        err = openCLHelper->clReleaseEvent_p(clEvent2);
         hasOPENCLError(err, "clReleaseEvent 2 failed");
     }
 }
@@ -108,25 +109,26 @@ BinaryFindOpenCL::~BinaryFindOpenCL() {
 
 int BinaryFindOpenCL::initOpenCL() {
     // the number of needles a particular kernel execution should search for
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded", -1);
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return -1;
     }
     cl_int err = CL_SUCCESS;
 
     // try creating a queue with profiling enabled if that's possible and without if not
-    clCommandQueue = openCLHelper.clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE, &err);
+    clCommandQueue = openCLHelper->clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE, &err);
     if(CL_INVALID_QUEUE_PROPERTIES == err) {
-        clCommandQueue = openCLHelper.clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
+        clCommandQueue = openCLHelper->clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
     }
     if (hasOPENCLError(err, "clCommandQueue() failed ")) return err;
 
     //open and read file contains OPENCL code
-    clProgram = OpenCLUtils::createProgramByResource(clContext, deviceId, ":src/util_gpu/opencl/BinaryFind.cl", openCLHelper, err);
+    clProgram = OpenCLUtils::createProgramByResource(clContext, deviceId, ":src/util_gpu/opencl/BinaryFind.cl", *openCLHelper, err);
     if (hasOPENCLError(err, "createProgramByResource() failed")) return err;
 
-    binaryFindKernel = openCLHelper.clCreateKernel_p(clProgram, "binarySearch_classic", &err);
+    binaryFindKernel = openCLHelper->clCreateKernel_p(clProgram, "binarySearch_classic", &err);
     if(hasOPENCLError(err, "clCreateKernel() binarySearch_classic failed")) return err;
 
     return err;
@@ -134,9 +136,10 @@ int BinaryFindOpenCL::initOpenCL() {
 
 int BinaryFindOpenCL::checkCreateBuffer(const QString &bufferName, cl_mem &buf, cl_mem_flags flags, size_t thisBufferSize, void *ptr, size_t &usageGPUMem) {
 
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin is not loaded", -1);
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return -1;
     }
     cl_int err = CL_SUCCESS;
@@ -146,16 +149,17 @@ int BinaryFindOpenCL::checkCreateBuffer(const QString &bufferName, cl_mem &buf,
     SAFE_POINT(thisBufferSize <= maxAllocateBufferSize, QString("Too big buffer: %1Mb, maximum size: %2Mb").arg(thisBufferSize/(1024*1024)).arg(maxAllocateBufferSize/(1024*1024)), -1);
     SAFE_POINT(usageGPUMem <= deviceGlobalMemSize, QString("Too much memory used: %1Mb, maximum global memory size: %2Mb").arg(usageGPUMem/(1024*1024)).arg(deviceGlobalMemSize/(1024*1024)), -1);
 
-    buf = openCLHelper.clCreateBuffer_p(clContext, flags, thisBufferSize, ptr, &err);
+    buf = openCLHelper->clCreateBuffer_p(clContext, flags, thisBufferSize, ptr, &err);
     hasOPENCLError(err, QString("clCreateBuffer(%1)").arg(bufferName));
 
     return err;
 }
 
 int BinaryFindOpenCL::createBuffers() {
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin is not loaded", -1);
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return -1;
     }
     cl_int err = CL_SUCCESS;
@@ -171,14 +175,15 @@ int BinaryFindOpenCL::createBuffers() {
 }
 
 int BinaryFindOpenCL::runBinaryFindKernel() {
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin is not loaded", -1);
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return -1;
     }
     cl_int err = CL_SUCCESS;
 
-    size_t preferredWorkGroupSize = OpenCLUtils::getPreferredWorkGroupSize(binaryFindKernel, deviceId, openCLHelper, err);
+    size_t preferredWorkGroupSize = OpenCLUtils::getPreferredWorkGroupSize(binaryFindKernel, deviceId, *openCLHelper, err);
     if(hasOPENCLError(err, "getPreferredWorkGroupSize() failed")) return err;
     algoLog.trace(QObject::tr("Device's preferred work group size multiple is %1").arg(preferredWorkGroupSize));
 
@@ -189,14 +194,14 @@ int BinaryFindOpenCL::runBinaryFindKernel() {
     algoLog.trace(QString("global work size = %1").arg(globalWorkSize));
 
     cl_uint kernelArgNum = 0;
-    err = openCLHelper.clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_sortedHaystackArray);
-    err |= openCLHelper.clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_int), (void*)&haystackSize);
-    err |= openCLHelper.clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_needlesArray);
-    err |= openCLHelper.clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_int), (void*)&needlesSize);
-    err |= openCLHelper.clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_windowSizesArray);
+    err = openCLHelper->clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_sortedHaystackArray);
+    err |= openCLHelper->clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_int), (void*)&haystackSize);
+    err |= openCLHelper->clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_needlesArray);
+    err |= openCLHelper->clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_int), (void*)&needlesSize);
+    err |= openCLHelper->clSetKernelArg_p(binaryFindKernel, kernelArgNum++, sizeof(cl_mem), (void*)&buf_windowSizesArray);
     if (hasOPENCLError(err, "clSetKernelArg")) return err;
 
-    err = openCLHelper.clEnqueueNDRangeKernel_p(
+    err = openCLHelper->clEnqueueNDRangeKernel_p(
         clCommandQueue,
         binaryFindKernel,
         1,
@@ -208,12 +213,12 @@ int BinaryFindOpenCL::runBinaryFindKernel() {
         &clEvent1);
     if (hasOPENCLError(err, "clEnqueueNDRangeKernel")) return err;
 
-    err = openCLHelper.clFinish_p(clCommandQueue);
+    err = openCLHelper->clFinish_p(clCommandQueue);
     if (hasOPENCLError(err, "clFinish 1")) return err;
 
     logProfilingInfo(clEvent1, QString("OpenCL kernel execution time (binary search)"));
 
-    openCLHelper.clReleaseEvent_p(clEvent1); clEvent1=0;
+    openCLHelper->clReleaseEvent_p(clEvent1); clEvent1=0;
 
     return err;
 }
@@ -223,9 +228,10 @@ NumberType* BinaryFindOpenCL::launch() {
     cl_int err = CL_SUCCESS;
 
     // the number of needles a particular kernel execution should search for
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded", NULL);
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return 0;
     }
     err = initOpenCL();
@@ -238,13 +244,13 @@ NumberType* BinaryFindOpenCL::launch() {
     if(hasOPENCLError(err, "runBinaryFindKernel failed")) return 0;
 
     NumberType* outputArray = new NumberType[needlesSize];
-    err = openCLHelper.clEnqueueReadBuffer_p(clCommandQueue, buf_needlesArray, CL_TRUE, 0, sizeof(NumberType) * needlesSize, outputArray, 0, NULL, &clEvent2);
+    err = openCLHelper->clEnqueueReadBuffer_p(clCommandQueue, buf_needlesArray, CL_TRUE, 0, sizeof(NumberType) * needlesSize, outputArray, 0, NULL, &clEvent2);
     if (hasOPENCLError(err, "clEnqueueReadBuffer")) {
         delete[] outputArray; outputArray = 0;
     }
     logProfilingInfo(clEvent2, QString("OpenCL binary search results copying time"));
 
-    err = openCLHelper.clFinish_p(clCommandQueue);
+    err = openCLHelper->clFinish_p(clCommandQueue);
     if(hasOPENCLError(err, "clFinish failed")) return 0;
 
     return outputArray;
@@ -276,18 +282,19 @@ bool BinaryFindOpenCL::hasOPENCLError(int err, QString errorMessage) {
 }
 
 void BinaryFindOpenCL::logProfilingInfo(const cl_event &event, const QString &msgPrefix) {
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded", );
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return;
     }
 
     cl_int err;
     cl_ulong clt1 = 0, clt2 = 0, clt3 = 0, clt4 = 0;
-    if((err = openCLHelper.clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &clt1, NULL)) != 0
-        || (err = openCLHelper.clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &clt2, NULL)) != 0
-        || (err = openCLHelper.clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &clt3, NULL)) != 0
-        || (err = openCLHelper.clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &clt4, NULL)) != 0) {
+    if((err = openCLHelper->clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &clt1, NULL)) != 0
+        || (err = openCLHelper->clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &clt2, NULL)) != 0
+        || (err = openCLHelper->clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &clt3, NULL)) != 0
+        || (err = openCLHelper->clGetEventProfilingInfo_p(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &clt4, NULL)) != 0) {
             algoLog.trace(QString("OpenCL profiling info unavailable (%1)").arg(err));
     } else {
         algoLog.trace(QString("%1: %2/%3/%4 ms (since queued/submitted/execution started)").arg(msgPrefix)
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
index 29517bd..a41dbc6 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
@@ -121,8 +121,6 @@ void BestPositionFindTask::run() {
 
     int similarity = 0;
 
-    int processedRows = 0;
-
     if(referenceRowId >= 0) {
         const MAlignmentRow &row = inputMsa.getRow(referenceRowId);
         int iterationsNum = aliLen - sequence.length() + 1;
@@ -137,6 +135,7 @@ void BestPositionFindTask::run() {
             }
         }
     } else {
+        int processedRows = 0;
         foreach(const MAlignmentRow &row, inputMsa.getRows()) {
             stateInfo.setProgress(100 * processedRows / nSeq);
             for (int p = 0; p < ( aliLen - sequence.length() + 1 ); p++ ) {
diff --git a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
index d265b46..52b20a0 100644
--- a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
@@ -32,6 +32,9 @@
 
 namespace U2 {
 
+OpenCLGpuRegistry::OpenCLGpuRegistry() : openCLHelper(NULL){
+}
+
 OpenCLGpuRegistry::~OpenCLGpuRegistry() {
     saveGpusSettings();
     qDeleteAll( gpus.values() );
diff --git a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
index 181e5ac..ec8b273 100644
--- a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
@@ -101,6 +101,7 @@ private:
 
 class U2ALGORITHM_EXPORT OpenCLGpuRegistry {
 public:
+    OpenCLGpuRegistry();
     ~OpenCLGpuRegistry();
 
     void registerOpenCLGpu( OpenCLGpuModel * gpu );
@@ -114,12 +115,14 @@ public:
 
     bool empty() const { return gpus.empty(); }
 
-    const OpenCLHelper& getOpenCLHelper() {return openCLHelper;}
+    void setOpenCLHelper(OpenCLHelper * _openCLHelper) { openCLHelper = _openCLHelper; }
+
+    const OpenCLHelper* getOpenCLHelper() const {return openCLHelper;}
 
 private:
     void saveGpusSettings() const;
     QHash< OpenCLGpuId, OpenCLGpuModel * > gpus;
-    OpenCLHelper openCLHelper;
+    OpenCLHelper* openCLHelper;
 };
 
 } //namespace
diff --git a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
index 1791523..eef63eb 100644
--- a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
+++ b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
@@ -349,7 +349,7 @@ void ORFFindAlgorithm::addStartCodonsFromJunction(const U2SequenceObject &dnaSeq
         }
     }
 
-    delete tmp;
+    delete[] tmp;
 }
 
 void ORFFindAlgorithm::checkStopCodonOnJunction(const U2SequenceObject &dnaSeq, const ORFAlgorithmSettings &cfg,
diff --git a/src/corelibs/U2Algorithm/transl/english.ts b/src/corelibs/U2Algorithm/transl/english.ts
index ef1c14a..412d7f4 100644
--- a/src/corelibs/U2Algorithm/transl/english.ts
+++ b/src/corelibs/U2Algorithm/transl/english.ts
@@ -247,65 +247,66 @@
 <context>
     <name>U2::MSAColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1003"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1018"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1011"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1019"/>
         <source>Jalview</source>
         <translation>Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1013"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1052"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1014"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1053"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1026"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
         <source>Zappo</source>
         <translation>Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1030"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
         <source>Tailor</source>
         <translation>Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
         <source>Hydrophobicity</source>
         <translation>Hydrophobicity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
         <source>Helix propensity</source>
         <translation>Helix propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
         <source>Strand propensity</source>
         <translation>Strand propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1054"/>
         <source>Turn propensity</source>
         <translation>Turn propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1058"/>
         <source>Buried index</source>
         <translation>Buried index</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1055"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
         <source>Clustal X</source>
         <translation>Clustal X</translation>
     </message>
@@ -422,42 +423,44 @@ 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="1062"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1065"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1066"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1079"/>
         <source>Agreements</source>
         <translation>Agreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1068"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1069"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1081"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1082"/>
         <source>Disagreements</source>
         <translation>Disagreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1071"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1072"/>
+        <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>
     </message>
     <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="1088"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1089"/>
         <source>Conservation level</source>
         <translation>Conservation level</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1077"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1091"/>
         <source>Transitions</source>
         <translation>Transitions</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1092"/>
         <source>Transversions</source>
         <translation>Transversions</translation>
     </message>
diff --git a/src/corelibs/U2Algorithm/transl/russian.ts b/src/corelibs/U2Algorithm/transl/russian.ts
index b27d76c..7e4609a 100644
--- a/src/corelibs/U2Algorithm/transl/russian.ts
+++ b/src/corelibs/U2Algorithm/transl/russian.ts
@@ -165,7 +165,7 @@
     <message>
         <location filename="../src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp" line="71"/>
         <source>Fetching reads from database and converting to SAMtools format</source>
-        <translation>Выборка ридов из базы данных и конвертация в формат SAMtools</translation>
+        <translation>Выборка ридов из базы данных и преобразование в формат SAMtools</translation>
     </message>
     <message>
         <location filename="../src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp" line="74"/>
@@ -247,65 +247,66 @@
 <context>
     <name>U2::MSAColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1003"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1018"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1011"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1019"/>
         <source>Jalview</source>
         <translation>Раскраска Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1013"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1052"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1021"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1060"/>
         <source>Percentage Identity</source>
         <translation>По процентному соотношению</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1014"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1053"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1026"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
         <source>Zappo</source>
         <translation>Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1030"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
         <source>Tailor</source>
         <translation>Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
         <source>Hydrophobicity</source>
         <translation>Гидрофобность</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
         <source>Helix propensity</source>
         <translation>Склонность к спиральности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
         <source>Strand propensity</source>
         <translation>Склонность к линейности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1054"/>
         <source>Turn propensity</source>
         <translation>Склонность к сворачиванию</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1058"/>
         <source>Buried index</source>
         <translation>Индекс</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1055"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
         <source>Clustal X</source>
         <translation>Clustal X</translation>
     </message>
@@ -424,42 +425,44 @@ 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="1062"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1065"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1066"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1079"/>
         <source>Agreements</source>
         <translation>Совпадающие нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1068"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1069"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1081"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1082"/>
         <source>Disagreements</source>
         <translation>Различающиеся нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1071"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1072"/>
+        <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>
     </message>
     <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="1088"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1089"/>
         <source>Conservation level</source>
         <translation>Уровень сохранения</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1077"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1091"/>
         <source>Transitions</source>
         <translation>Транзиции</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
+        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1092"/>
         <source>Transversions</source>
         <translation>Трансверсии</translation>
     </message>
diff --git a/src/corelibs/U2Core/U2Core.pro b/src/corelibs/U2Core/U2Core.pro
index d7c5d62..a20795d 100644
--- a/src/corelibs/U2Core/U2Core.pro
+++ b/src/corelibs/U2Core/U2Core.pro
@@ -12,7 +12,6 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/datatype/AnnotationSettings.h \
            src/datatype/AnnotationTableObjectConstraints.h \
            src/datatype/BioStruct3D.h \
-           src/datatype/DASSource.h \
            src/datatype/DIProperties.h \
            src/datatype/DNAAlphabet.h \
            src/datatype/DNAAlphabetRegistryImpl.h \
@@ -178,12 +177,10 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/tasks/ExternalToolRunTask.h \
            src/tasks/ExtractAnnotatedRegionTask.h \
            src/tasks/FailTask.h \
-           src/tasks/LoadDASDocumentTask.h \
            src/tasks/LoadDocumentTask.h \
            src/tasks/LoadRemoteDocumentTask.h \
            src/tasks/ModifySequenceObjectTask.h \
            src/tasks/MultiTask.h \
-           src/tasks/PicrApiTask.h \
            src/tasks/RemoveAnnotationsTask.h \
            src/tasks/RemoveDocumentTask.h \
            src/tasks/ReverseSequenceTask.h \
@@ -196,7 +193,6 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/tasks/TaskStarter.h \
            src/tasks/TLSTask.h \
            src/tasks/TmpDirChecker.h \
-           src/tasks/UniprotBlastTask.h \
            src/tasks/shared_db/ImportDirToDatabaseTask.h \
            src/tasks/shared_db/ImportDocumentToDatabaseTask.h \
            src/tasks/shared_db/ImportFileToDatabaseTask.h \
@@ -224,6 +220,7 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/util/QVariantUtils.h \
            src/util/SequenceUtils.h \
            src/util/TextUtils.h \
+           src/util/TaskWatchdog.h \
            src/util/U1AnnotationUtils.h \
            src/util/U2AlphabetUtils.h \
            src/util/U2AssemblyReadIterator.h \
@@ -250,7 +247,6 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/datatype/BaseAlphabets.cpp \
            src/datatype/BaseTranslations.cpp \
            src/datatype/BioStruct3D.cpp \
-           src/datatype/DASSource.cpp \
            src/datatype/DNAAlphabet.cpp \
            src/datatype/DNAAlphabetRegistryImpl.cpp \
            src/datatype/DNAInfo.cpp \
@@ -375,12 +371,10 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/tasks/DocumentProviderTask.cpp \
            src/tasks/ExternalToolRunTask.cpp \
            src/tasks/ExtractAnnotatedRegionTask.cpp \
-           src/tasks/LoadDASDocumentTask.cpp \
            src/tasks/LoadDocumentTask.cpp \
            src/tasks/LoadRemoteDocumentTask.cpp \
            src/tasks/ModifySequenceObjectTask.cpp \
            src/tasks/MultiTask.cpp \
-           src/tasks/PicrApiTask.cpp \
            src/tasks/RemoveAnnotationsTask.cpp \
            src/tasks/RemoveDocumentTask.cpp \
            src/tasks/ReverseSequenceTask.cpp \
@@ -393,7 +387,6 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/tasks/TaskStarter.cpp \
            src/tasks/TLSTask.cpp \
            src/tasks/TmpDirChecker.cpp \
-           src/tasks/UniprotBlastTask.cpp \
            src/tasks/shared_db/ImportDirToDatabaseTask.cpp \
            src/tasks/shared_db/ImportDocumentToDatabaseTask.cpp \
            src/tasks/shared_db/ImportFileToDatabaseTask.cpp \
@@ -419,6 +412,7 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/util/QVariantUtils.cpp \
            src/util/SequenceUtils.cpp \
            src/util/TextUtils.cpp \
+           src/util/TaskWatchdog.cpp \
            src/util/U1AnnotationUtils.cpp \
            src/util/U2AlphabetUtils.cpp \
            src/util/U2AssemblyReadIterator.cpp \
diff --git a/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp b/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
index a540444..3a31fad 100644
--- a/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
+++ b/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
@@ -60,7 +60,7 @@ void DNAAlphabetRegistryImpl::initBaseAlphabets() {
     //raw text
     {
         QBitArray map(256, true);
-        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::RAW(), tr("All symbols"), DNAAlphabet_RAW, map, Qt::CaseSensitive, '\0');
+        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::RAW(), tr("Raw"), DNAAlphabet_RAW, map, Qt::CaseSensitive, '\0');
         registerAlphabet(a);
     }
 
@@ -111,7 +111,7 @@ void DNAAlphabetRegistryImpl::initBaseAlphabets() {
         //O = pyrrolysine, U = selenocysteine
         fillBitArray(map, "OU", Qt::CaseInsensitive);
 
-        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::AMINO_DEFAULT(), tr("Standard amino"),
+        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::AMINO_DEFAULT(), tr("Standard amino acid"),
             DNAAlphabet_AMINO, map, Qt::CaseInsensitive, 'X');
         registerAlphabet(a);
     }
@@ -130,7 +130,7 @@ void DNAAlphabetRegistryImpl::initBaseAlphabets() {
         //Not recognized by some algorithms, some functions are turned off.
         fillBitArray(map, "J", Qt::CaseInsensitive);
 
-        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::AMINO_EXTENDED(), tr("Extended amino"),
+        const DNAAlphabet* a = new DNAAlphabet(BaseDNAAlphabetIds::AMINO_EXTENDED(), tr("Extended amino acid"),
             DNAAlphabet_AMINO, map, Qt::CaseInsensitive, 'X');
         registerAlphabet(a);
     }
diff --git a/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp b/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
index 5b5ede4..f288911 100644
--- a/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
+++ b/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
@@ -22,6 +22,7 @@
 #include "BioStruct3D.h"
 
 #include <U2Core/U2Region.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/Log.h>
 
 namespace U2 {
@@ -131,8 +132,12 @@ QMap<int, QList<SharedAnnotationData> > BioStruct3D::generateChainAnnotations()
         SharedAnnotationData sd( new AnnotationData);
         sd->location->regions << U2Region(0,length);
         sd->name = BioStruct3D::MoleculeAnnotationTag;
-        sd->qualifiers.append(U2Qualifier(ChainIdQualifierName, QString("%1").arg(iter.key()) ));
-        sd->qualifiers.append(U2Qualifier(molNameQualifier, (*iter)->name));
+        if ((*iter)->chainId > 0) {
+            sd->qualifiers.append(U2Qualifier(ChainIdQualifierName, QString("%1").arg((*iter)->chainId)));
+        } 
+        if (!(*iter)->name.isEmpty()) {
+            sd->qualifiers.append(U2Qualifier(molNameQualifier, (*iter)->name));
+        }
 
         result[iter.key()].append(sd);
         ++iter;
@@ -229,11 +234,10 @@ void BioStruct3D::generateSecStructureAnnotations(QMap<int, QList<SharedAnnotati
 
 }
 
-QByteArray BioStruct3D::getRawSequenceByChainId( int id ) const
-{
+QByteArray BioStruct3D::getRawSequenceByChainIndex(int id) const {
     QByteArray sequence("");
 
-    Q_ASSERT(moleculeMap.contains(id));
+    SAFE_POINT(moleculeMap.contains(id), QString("Can't find chain identifier for index: %1").arg(id), sequence);
     const SharedMolecule molecule = moleculeMap.value(id);
     foreach (const SharedResidue residue, molecule->residueMap) {
        QChar c = residue->acronym;
@@ -243,6 +247,12 @@ QByteArray BioStruct3D::getRawSequenceByChainId( int id ) const
     return sequence;
 }
 
+char BioStruct3D::getChainIdByIndex(int index) const {
+    SAFE_POINT(moleculeMap.contains(index), QString("Can't find chain identifier for index: %1").arg(index), 0);
+    const SharedMolecule molecule = moleculeMap.value(index);
+    return moleculeMap.value(index)->chainId;
+}
+
 const QList<int> BioStruct3D::getModelsNames() const {
     return modelMap.keys();
 }
diff --git a/src/corelibs/U2Core/src/datatype/BioStruct3D.h b/src/corelibs/U2Core/src/datatype/BioStruct3D.h
index 4bea154..e35fcf6 100644
--- a/src/corelibs/U2Core/src/datatype/BioStruct3D.h
+++ b/src/corelibs/U2Core/src/datatype/BioStruct3D.h
@@ -150,8 +150,8 @@ public:
 
 class MoleculeData : public QSharedData {
 public:
-    MoleculeData(): engineered(false)  {}
-    MoleculeData(const QString& molName) : name(molName), engineered(false) {}
+    MoleculeData() : chainId(0), engineered(false) {}
+    MoleculeData(const QString& molName) : name(molName), chainId(0), engineered(false) {}
     QMap<ResidueIndex, SharedResidue> residueMap;
 
     // this list used by biostrct renderers
@@ -159,6 +159,7 @@ public:
     QMap <int, Molecule3DModel> models;
 
     QString name;
+    char chainId;
     bool engineered;
 };
 
@@ -195,7 +196,8 @@ public:
     void setRadius(double value);
     void setCenter(const Vector3D &value);
 
-    QByteArray getRawSequenceByChainId(int id) const;
+    QByteArray getRawSequenceByChainIndex(int id) const;
+    char getChainIdByIndex(int id) const;
     int getNumberOfAtoms() const;
     QList<SharedAtom> getAllAtoms() const;
     int getNumberOfResidues() const;
diff --git a/src/corelibs/U2Core/src/datatype/DASSource.cpp b/src/corelibs/U2Core/src/datatype/DASSource.cpp
deleted file mode 100644
index a2031dc..0000000
--- a/src/corelibs/U2Core/src/datatype/DASSource.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "DASSource.h"
-
-namespace U2 {
-
-DASSourceRegistry::DASSourceRegistry()
-:QObject()
-{
-    initDefaultSources();
-}
-
-DASSourceRegistry::~DASSourceRegistry(){
-    referenceSources.clear();
-    featureSources.clear();
-}
-
-DASSource DASSourceRegistry::findById( const QString& id ) const{
-    DASSource res;
-
-    foreach(const DASSource& s, referenceSources){
-        if (s.getId() == id){
-            res = s;
-            return res;
-        }
-    }
-
-    foreach(const DASSource& s, featureSources){
-        if (s.getId() == id){
-            res = s;
-            return res;
-        }
-    }
-
-    return res;
-}
-
-DASSource DASSourceRegistry::findByName( const QString& name ) const{
-    DASSource res;
-
-    foreach(const DASSource& s, referenceSources){
-        if (s.getName() == name){
-            res = s;
-            return res;
-        }
-    }
-
-    foreach(const DASSource& s, featureSources){
-        if (s.getName() == name){
-            res = s;
-            return res;
-        }
-    }
-
-    return res;
-}
-
-QList<DASSource> DASSourceRegistry::getReferenceSources() const{
-    return referenceSources;
-}
-
-QList<DASSource> DASSourceRegistry::getFeatureSources() const{
-    return featureSources;
-}
-
-QList<DASSource> DASSourceRegistry::getFeatureSourcesByType( DASReferenceType rType ) const{
-    QList<DASSource> res;
-
-    foreach(const DASSource& s, featureSources){
-        if (s.getReferenceType() == rType){
-            res.append(s);
-        }
-    }
-
-    return res;
-}
-
-static QString makeIDLink(const QString& id){
-    QString res = "<a href=\"%1\"><span style=\" text-decoration: underline;\">%1</span></a>";
-
-    res = res.arg(id);
-
-    return res;
-}
-
-
-#define DAS_UNIPROT "dasuniprot"
-#define DAS_ENSEMBL "dasensembl"
-void DASSourceRegistry::initDefaultSources(){
-
-    //uniprot
-    //sources from DASTY (http://www.ebi.ac.uk/dasty/)
-    DASSource uniprotRef(DAS_UNIPROT,
-                         tr("UniProt (DAS)"),
-                         tr("http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/"),
-                         DASProteinSequence,
-                         tr("Use Swiss-Prot, TrEMBL, UniProt, IPI or UniParc accession number. For example: %1").arg(makeIDLink("P05067")),
-                         tr("UniProt database of protein sequences and features."));
-
-    referenceSources.append(uniprotRef);
-
-    DASSource uniprotFeature1(QString(DAS_UNIPROT)+"f1",
-        tr("UniProt"),
-        tr("http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/"),
-        DASProteinSequence,
-        tr("DAS 1 reference server for sequence and features from UniProt.\n"
-        "UniProt (Universal Protein Resource) is the worlds most comprehensive catalog of information on proteins.\n"
-        "It is a central repository of protein sequence and function created by joining the information contained\n"
-        "in Swiss-Prot, TrEMBL, and PIR.")
-        );
-
-    featureSources.append(uniprotFeature1);
-
-    DASSource uniprotFeature2(QString(DAS_UNIPROT)+"f2",
-        tr("Pride DAS 1.6"),
-        tr("http://www.ebi.ac.uk/pride-das/das/PrideDataSource/"),
-        DASProteinSequence,
-        tr("The PRIDE database is a centralized, public data repository for proteomics data. \n"
-        "It has been developed to provide the proteomics community with a public repository \n"
-        "for protein and peptide identifications together with the evidence supporting these \n"
-        "identifications. In addition to identifications, PRIDE is able to capture details of \n"
-        "post-translational modifications coordinated relative to the peptides in which they have been found.")
-        );
-
-    featureSources.append(uniprotFeature2);
-
-    DASSource uniprotFeature3(QString(DAS_UNIPROT)+"f3",
-        tr("cbs_sort"),
-        tr("http://das.cbs.dtu.dk:9000/das/cbs_sort/"),
-        DASProteinSequence,
-        tr("The combined result of the signalp, secretomep, targetp, netnes & lipop server for the given id.")
-        );
-
-    featureSources.append(uniprotFeature3);
-
-    DASSource uniprotFeature4(QString(DAS_UNIPROT)+"f4",
-        tr("signalp"),
-        tr("http://das.cbs.dtu.dk:9000/das/signalp/"),
-        DASProteinSequence,
-        tr("SignalP (http://www.cbs.dtu.dk/services/SignalP) predictions for UniProt.")
-        );
-
-    featureSources.append(uniprotFeature4);
-
-    DASSource uniprotFeature5(QString(DAS_UNIPROT)+"f5",
-        tr("InterPro-Matches-Overview"),
-        tr("http://www.ebi.ac.uk/das-srv/interpro/das/InterPro-matches-overview/"),
-        DASProteinSequence,
-        tr("Shows the maximum extent of the matches from all signatures that are \n"
-        "integrated into a single InterPro entry against UniProtKB protein sequences \n"
-        "(i.e. if an InterPro entry contains 2 signatures, A and B, and both of \n"
-        "these match a protein, A between residue 3 and 125 and B between residue \n"
-        "5 and 127, the overview supermatch of these signatures is between 3 and 127).")
-        );
-
-    featureSources.append(uniprotFeature5);
-/* servers were closed
-    //Ensembl Human Genes
-    DASSource ensemblRef(DAS_ENSEMBL,
-        tr("Ensembl Human Genes (DAS)"),
-        tr("http://www.ebi.ac.uk/das-srv/genedas/das/Homo_sapiens.Gene_ID.reference/"),
-        DASDNASequence,
-        tr("Use Ensemble Gene IDs. For example: %1").arg(makeIDLink("ENSG00000139618")),
-        tr("The Ensembl human Gene_ID reference source, serving sequences and non-location features."));
-
-    referenceSources.append(ensemblRef);
-
-    DASSource ensemblFeatures1(QString(DAS_ENSEMBL) + "f1",
-        tr("Ensembl Human Gene Features"),
-        tr("http://www.ebi.ac.uk/das-srv/genedas/das/Homo_sapiens.Gene_ID.reference/"),
-        DASDNASequence,
-        tr("The Ensembl human Gene_ID source."));
-
-    featureSources.append(ensemblFeatures1);
-
-    DASSource ensemblFeatures2(QString(DAS_ENSEMBL) + "f2",
-        tr("HGNC"),
-        tr("http://www.genenames.org/das/HGNC/"),
-        DASDNASequence,
-        tr("The HGNC (HUGO Gene Nomenclature Committee) DAS Reference Server serves up-to-date\n"
-        "approved gene symbols and names for human genes from the latest HGNC dataset, mapped via Entrez Gene ID."));
-
-    featureSources.append(ensemblFeatures2);
-
-    DASSource ensemblFeatures3(QString(DAS_ENSEMBL) + "f3",
-        tr("GAD"),
-        tr("http://www.ebi.ac.uk/das-srv/genedas/das/gad/"),
-        DASDNASequence,
-        tr("Genetic Association Database (diseases)."));
-
-    featureSources.append(ensemblFeatures3);
-*/
-}
-
-QString DASSourceRegistry::getRequestURLString(const DASSource& source, const QString& accId, DASObjectType& requestType ){
-
-    QString res = "";
-    if (!source.isValid() || accId.isEmpty()){
-        return res;
-    }
-
-    res = source.getUrl();
-
-    if (requestType == DASSequence){
-        res += "sequence";
-    }else if(requestType == DASFeatures){
-        res += "features";
-    }else{
-        return "";
-    }
-
-    res += "?segment=" + accId;
-
-    return res;
-}
-
-}//namespace
diff --git a/src/corelibs/U2Core/src/datatype/DASSource.h b/src/corelibs/U2Core/src/datatype/DASSource.h
deleted file mode 100644
index 23483a4..0000000
--- a/src/corelibs/U2Core/src/datatype/DASSource.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_DAS_SOURCE_H_
-#define _U2_DAS_SOURCE_H_
-
-#include <U2Core/global.h>
-
-namespace U2 {
-
-//type of a reference data (DNA sequence, protein, ...)
-enum DASReferenceType{
-    DASProteinSequence = 0,
-    DASDNASequence
-};
-
-/** Class to store DAS source. It can be a reference sequence source, annotation source etc.
-reference type is created for consistency. For instance protein sequence annotation cannot have annotations of DNA sequences*/
-
-class U2CORE_EXPORT DASSource {
-public:
-    DASSource(){};
-
-    DASSource(const QString& _id, const QString& _name, const QString& _url, DASReferenceType _refType, const QString& _hint = QString(), const QString& _description = QString())
-        :id(_id), name(_name), url(_url), referenceType(_refType), hint(_hint), description(_description){};
-
-    const QString& getId () const { return id;}
-    const QString& getName () const { return name;}
-    const QString& getUrl () const { return url;}
-    const QString& getDescription () const { return description;}
-    const QString& getHint () const { return hint;}
-    DASReferenceType getReferenceType () const { return referenceType;}
-
-    bool isValid() const{return !id.isEmpty() && !url.isEmpty();}
-
-private:
-    QString id;
-    QString name;
-    QString url;
-    DASReferenceType referenceType;
-    QString hint;
-    QString description;
-};
-
-/**Object type that is need to form a request string*/
-enum DASObjectType{
-    DASSequence = 0,
-    DASFeatures
-};
-
-
-class U2CORE_EXPORT DASSourceRegistry : public QObject {
-    Q_OBJECT
-public:
-
-    static QString getRequestURLString(const DASSource& source, const QString& accId, DASObjectType& requestType);
-
-    DASSourceRegistry();
-
-    ~DASSourceRegistry();
-
-    virtual DASSource findById(const QString& id) const;
-
-    virtual DASSource findByName(const QString& name) const;
-
-    virtual QList<DASSource> getReferenceSources() const;
-
-    virtual QList<DASSource> getFeatureSources() const;
-
-    virtual QList<DASSource> getFeatureSourcesByType(DASReferenceType rType) const;
-
-private:
-    void initDefaultSources();
-
-private:
-    QList<DASSource> referenceSources;
-    QList<DASSource> featureSources;
-
-};
-
-}//namespace
-
-#endif //_U2_DAS_SOURCE_H_
-
diff --git a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
index aabcf1c..a794af4 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
@@ -50,7 +50,7 @@ void DNASequenceUtils::removeChars(DNASequence& sequence, int startPos, int endP
 
 void DNASequenceUtils::removeChars(QByteArray& sequence, int startPos, int endPos, U2OpStatus& os) {
     if ((endPos <= startPos) || (startPos < 0) || (endPos > sequence.length())) {
-        coreLog.trace(QString("Internal error: incorrect parameters was passed to DNASequenceUtils::removeChars,"
+        coreLog.trace(L10N::internalError("incorrect parameters was passed to DNASequenceUtils::removeChars,"
             "startPos '%1', endPos '%2', sequence length '%3'!").arg(startPos).arg(endPos).arg(sequence.length()));
         os.setError("Can't remove chars from a sequence.");
         return;
@@ -59,6 +59,32 @@ void DNASequenceUtils::removeChars(QByteArray& sequence, int startPos, int endPo
     sequence.remove(startPos, endPos - startPos);
 }
 
+void DNASequenceUtils::insertChars(QByteArray& sequence, int startPos, const QByteArray& newChars, U2OpStatus& os) {
+    int endPos = startPos + newChars.length();
+    CHECK_EXT(newChars.length() > 0, os.setError("Array of chars for replacing is empty!"), );
+    if ((startPos < 0) || (endPos > sequence.length())) {
+        coreLog.trace(L10N::internalError("incorrect parameters was passed to DNASequenceUtils::insertChars, "
+            "startPos '%1', endPos '%2', sequence length '%3'!").arg(startPos).arg(endPos).arg(sequence.length()));
+        os.setError("Can't remove chars from a sequence.");
+        return;
+    }
+
+    sequence.insert(startPos, newChars);
+}
+
+void DNASequenceUtils::replaceChars(QByteArray& sequence, int startPos, const QByteArray& newChars, U2OpStatus& os) {
+    int endPos = startPos + newChars.length();
+    CHECK_EXT(newChars.length() > 0, os.setError("Array of chars for replacing is empty!"),);
+    if ((startPos < 0) || (endPos > sequence.length())) {
+        coreLog.trace(QString("Internal error: incorrect parameters was passed to DNASequenceUtils::replaceChars,"
+            "startPos '%1', endPos '%2', sequence length '%3'!").arg(startPos).arg(endPos).arg(sequence.length()));
+        os.setError("Can't remove chars from a sequence.");
+        return;
+    }
+
+    sequence.replace(startPos, newChars.length(), newChars);
+}
+
 void DNASequenceUtils::toUpperCase(DNASequence& sequence) {
     sequence.seq = sequence.seq.toUpper();
 }
diff --git a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
index 47a6dda..308e734 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
+++ b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
@@ -44,6 +44,12 @@ public:
     static void removeChars(DNASequence& sequence, int startPos, int endPos, U2OpStatus& os);
     static void removeChars(QByteArray& sequence, int startPos, int endPos, U2OpStatus& os);
 
+    /** Replace chars from 'startPos' (inclusive) to 'endPos' (non-inclusive) */
+    static void replaceChars(QByteArray& sequence, int startPos, const QByteArray& newChars, U2OpStatus& os);
+
+    /** Insert chars to 'startPos' */
+    static void insertChars(QByteArray& sequence, int startPos, const QByteArray& newChars, U2OpStatus& os);
+
     /** Converts characters of the sequence to upper case */
     static void toUpperCase(DNASequence& sequence);
 
diff --git a/src/corelibs/U2Core/src/dbi/U2MsaDbi.h b/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
index 1633723..ecacd1a 100644
--- a/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
@@ -51,6 +51,12 @@ public:
     /** Returns the list of rows IDs in the database for the specified MSA (in increasing order) */
     virtual QList<qint64> getRowsOrder(const U2DataId& msaId, U2OpStatus& os) = 0;
 
+    /** Return the MSA alphabet */
+    virtual U2AlphabetId getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os) = 0;
+    
+    /** Return the MSA length */
+    virtual qint64 getMsaLength(const U2DataId& msaId, U2OpStatus& os) = 0;
+
     /**
      * Creates a new empty MSA object
      * Requires: U2DbiFeature_WriteMsa feature support
diff --git a/src/corelibs/U2Core/src/globals/AppContext.h b/src/corelibs/U2Core/src/globals/AppContext.h
index c5957bb..f6baf57 100644
--- a/src/corelibs/U2Core/src/globals/AppContext.h
+++ b/src/corelibs/U2Core/src/globals/AppContext.h
@@ -88,7 +88,6 @@ class WorkflowScriptRegistry;
 class AppFileStorage;
 class U2DataPathRegistry;
 class AlignmentAlgorithmsRegistry;
-class DASSourceRegistry;
 class ScriptingToolRegistry;
 class CredentialsAsker;
 class PasswordStorage;
@@ -241,8 +240,6 @@ public:
 
     static AlignmentAlgorithmsRegistry* getAlignmentAlgorithmsRegistry() { return getInstance()->_getAlignmentAlgorithmsRegistry(); }
 
-    static DASSourceRegistry* getDASSourceRegistry() { return getInstance()->_getDASSourceRegistry(); }
-
     static ScriptingToolRegistry* getScriptingToolRegistry() { return getInstance()->_getScriptingToolRegistry(); }
 
     static ConvertFactoryRegistry* getConvertFactoryRegistry() { return getInstance()->_getConvertFactoryRegistry(); }
@@ -321,7 +318,6 @@ protected:
     virtual AppFileStorage *_getAppFileStorage() const = 0;
     virtual AlignmentAlgorithmsRegistry* _getAlignmentAlgorithmsRegistry() const = 0;
     virtual U2DataPathRegistry* _getDataPathRegistry() const = 0;
-    virtual DASSourceRegistry* _getDASSourceRegistry() const = 0;
     virtual ScriptingToolRegistry* _getScriptingToolRegistry() const = 0;
     virtual CredentialsAsker* _getCredentialsAsker() const = 0;
     virtual PasswordStorage* _getPasswordStorage() const = 0;
diff --git a/src/corelibs/U2Core/src/globals/AppResources.cpp b/src/corelibs/U2Core/src/globals/AppResources.cpp
index a1096a9..39bdbcc 100644
--- a/src/corelibs/U2Core/src/globals/AppResources.cpp
+++ b/src/corelibs/U2Core/src/globals/AppResources.cpp
@@ -250,4 +250,17 @@ AppResourcePool* AppResourcePool::instance() {
     return AppContext::getAppSettings() ? AppContext::getAppSettings()->getAppResourcePool() : NULL;
 }
 
+MemoryLocker& MemoryLocker::operator=(MemoryLocker& other) {
+    MemoryLocker tmp(other);
+    qSwap(os, tmp.os);
+    qSwap(preLockMB, tmp.preLockMB);
+    qSwap(lockedMB, tmp.lockedMB);
+    qSwap(needBytes, tmp.needBytes);
+    qSwap(memoryLockType, tmp.memoryLockType);
+    qSwap(resource, tmp.resource);
+    qSwap(errorMessage, tmp.errorMessage);
+
+    return *this;
+}
+
 }//namespace
diff --git a/src/corelibs/U2Core/src/globals/AppResources.h b/src/corelibs/U2Core/src/globals/AppResources.h
index 2c3c1c1..ff90b22 100644
--- a/src/corelibs/U2Core/src/globals/AppResources.h
+++ b/src/corelibs/U2Core/src/globals/AppResources.h
@@ -329,16 +329,7 @@ public:
         errorMessage = "";
     }
 
-    MemoryLocker& operator=(MemoryLocker& other) {
-        MemoryLocker tmp(other);
-        qSwap(os, tmp.os);
-        qSwap(preLockMB, tmp.preLockMB);
-        qSwap(lockedMB, tmp.lockedMB);
-        qSwap(needBytes, tmp.needBytes);
-        qSwap(memoryLockType, tmp.memoryLockType);
-
-        return *this;
-    }
+    MemoryLocker& operator=(MemoryLocker& other);
 
     virtual ~MemoryLocker() {
         release();
diff --git a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
index aeafe8a..cedd0d8 100644
--- a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
+++ b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
@@ -69,6 +69,7 @@ public:
     const QIcon&        getWarnIcon()  const { return warnIcon; }
     const QString&      getDescription()  const { return description; }
     const QString&      getToolRunnerProgram()  const { return toolRunnerProgramm; }
+    const virtual QStringList  getToolRunnerAdditionalOptions() { return QStringList();};
     const QString&      getExecutableFileName()  const { return executableFileName; }
     const QStringList&  getValidationArguments()  const { return validationArguments; }
     const QString&      getValidMessage()  const { return validMessage; }
diff --git a/src/corelibs/U2Core/src/globals/L10n.h b/src/corelibs/U2Core/src/globals/L10n.h
index ac4fc06..d8ea137 100644
--- a/src/corelibs/U2Core/src/globals/L10n.h
+++ b/src/corelibs/U2Core/src/globals/L10n.h
@@ -79,10 +79,14 @@ public:
     static QString errorColorTextFieldStr() { return "rgb(255, 152, 142)"; }
     static QString errorColorLabelStr() { return "rgb(166, 57, 46)"; }
     static QString errorColorLabelHtmlStr() { return "#A6392E"; }   // the same as errorColorLabelStr()
-    static QColor successColor() { return QColor("green"); }
+
     static QColor infoHintColor() { return QColor("green"); }
+    static QString infoHintStyleSheet() { return QString("color: %1; font: bold").arg(infoHintColor().name()); }
+
+    static QColor successColor() { return QColor("green"); }
     static QString successColorLabelHtmlStr() { return successColor().name(); }
     static QString successColorLabelStr() { return QString("rgb(%1, %2, %3)").arg(successColor().red()).arg(successColor().green()).arg(successColor().blue()); }
+
     static QString linkColorLabelStr() {
 #ifdef Q_OS_MAC
         return "gray";
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
index ffc8989..2ae3134 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
@@ -19,81 +19,69 @@
  * MA 02110-1301, USA.
  */
 
-#include "UserActionsWriter.h"
-#include <QtGui/QMouseEvent>
+#include <QAbstractSpinBox>
+#include <QApplication>
+#include <QDialog>
+#include <QLabel>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QMainWindow>
+#include <QMenu>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QMouseEvent>
+#include <QPushButton>
+#include <QTreeWidget>
+#include <QWidget>
+
 #include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QWidget>
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QMenu>
-#include <QtGui/QMenuBar>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QListWidget>
-#include <QtGui/QMainWindow>
-#include <QtGui/QDialog>
-#include <QtGui/QMessageBox>
-#include <QtGui/QAbstractSpinBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMenuBar>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QAbstractSpinBox>
-#endif
 
 #include "Log.h"
 #include "U2SafePoints.h"
+#include "UserActionsWriter.h"
 
 #define BUFFER_CONDITION(keyEvent) (keyEvent->key()<=Qt::Key_QuoteLeft && keyEvent->key()>=Qt::Key_Space && (keyEvent->modifiers().testFlag(Qt::NoModifier) || keyEvent->modifiers().testFlag(Qt::KeypadModifier)))
 
-namespace U2{
+namespace U2 {
 
-bool UserActionsWriter::eventFilter(QObject *obj, QEvent *event){
-    message = "";
-    k = dynamic_cast<QKeyEvent*>(event);
-    m = dynamic_cast<QMouseEvent*>(event);
+bool UserActionsWriter::eventFilter(QObject *obj, QEvent *event) {
+    QMutexLocker locker(&guard);
+    Q_UNUSED(locker);
+
+    k = dynamic_cast<QKeyEvent *>(event);
+    m = dynamic_cast<QMouseEvent *>(event);
 
-    //dialog info
     appendDialogInfo();
 
-    if(m && (event->type()==QEvent::MouseButtonPress || event->type()==QEvent::MouseButtonRelease || event->type()==QEvent::MouseButtonDblClick)){
+    if (NULL != m &&
+            (event->type() == QEvent::MouseButtonPress ||
+             event->type() == QEvent::MouseButtonRelease ||
+             event->type() == QEvent::MouseButtonDblClick)) {
+        message.clear();
         generateMouseMeassage();
         return false;
-    }
-    else if( k ){
+    } else if (NULL != k) {
+        message.clear();
         generateKeyMessage();
         return false;
-    }
-    else{
-        // standard event processing
+    } else {
         return QObject::eventFilter(obj, event);
     }
 }
 
 void UserActionsWriter::generateMouseMeassage(){
-    CHECK_EXT(m,userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     //button type
     appendMouseButtonInfo();
 
     QMainWindow* mainWindow = AppContext::getMainWindow()->getQMainWindow();
-    CHECK_EXT(mainWindow ,userActLog.error(QString("Main window is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+    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;
+    if (p != windowSize) {
+        windowSize = p;
         userActLog.trace(QString("WINDOW SIZE: %1x%2").arg(windowSize.x()).arg(windowSize.y()));
     }
 
@@ -103,18 +91,18 @@ void UserActionsWriter::generateMouseMeassage(){
 
     //widget info
     QWidget* w = QApplication::widgetAt(m->globalPos());
-    if(w){
+    if (w) {
         QString className = w->metaObject()->className();
 
         //tree widget and list widget
         //sometimes QWidget is on top. it does not give any information, but it's parent does
-        if(className == "QWidget"){
+        if (className == "QWidget") {
             QWidget* parent = qobject_cast<QWidget*>(w->parent());
-            if(parent){
+            if (parent) {
                 appendTreeWidgetInfo(parent);
                 w = parent;
             }
-        }else{
+        } else {
             message.append("CLASS_NAME: ").append(className);
         }
         message.append(" ");
@@ -122,16 +110,15 @@ void UserActionsWriter::generateMouseMeassage(){
         //additional information
         appendAdditionalWidgetInfo(w);
 
-    }
-    else{
+    } else {
         message.append("Widget under corsor is NULL");
     }
     filterMessages();
 }
 
 void UserActionsWriter::appendMouseButtonInfo(){
-    CHECK_EXT(m,userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
-    switch(m->button()){
+    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 ");
         break;
@@ -140,72 +127,72 @@ void UserActionsWriter::appendMouseButtonInfo(){
         message.append("Left_button ");
         break;
     }
-    default:{
+    default: {
        message.append("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__)),);
+    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__)), );
 
     message.append("CLASS_NAME: ").append(parent->metaObject()->className());
     QTreeWidget* tree = qobject_cast<QTreeWidget*>(parent);
-    if(tree){
+    if (tree) {
         QTreeWidgetItem* item = tree->itemAt(m->pos());
-        if(item){
+        if (item) {
             message.append(" TREE_ITEM: " + item->text(0));
         }
     }
 
     QListWidget* list = qobject_cast<QListWidget*>(parent);
-    if(list){
+    if (list) {
         QListWidgetItem* item = list->itemAt(list->mapFromGlobal(m->globalPos()));
-        if (item){
+        if (item) {
             message.append(" LIST_ITEM: " + item->text());
         }
     }
 }
 
 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__)),);
+    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 text = getWidgetText(w);
     QString objectName = w->objectName();
     QString tooltip = w->toolTip();
 
-    if(!text.isEmpty() && (text != "...")){
+    if (!text.isEmpty() && (text != "...")) {
         message.append("TEXT: " + text);
-    }else if(!tooltip.isEmpty()){
+    } else if (!tooltip.isEmpty()) {
         message.append("TOOLTIP: " + tooltip);
-    }else if(!objectName.isEmpty()){
+    } else if (!objectName.isEmpty()) {
         message.append("OBJECT_NAME: " + objectName);
     }
     QAbstractSpinBox* spin = qobject_cast<QAbstractSpinBox*>(w);
-    if(spin){
+    if (spin) {
         message.append(" " + spin->text());
     }
 }
 
 QString UserActionsWriter::getWidgetText(QWidget* w){
-    CHECK_EXT(w,userActLog.error(QString("argument is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "Widget is NULL");
+    CHECK_EXT(w, userActLog.error(QString("argument is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "Widget is NULL");
 
     QString text("");
 
     QLabel* l = qobject_cast<QLabel*>(w);
-    if(l){
+    if (l) {
         text.append(l->text());
     }
 
-    QAbstractButton* b=qobject_cast<QAbstractButton*>(w);
-    if(b){
+    QAbstractButton* b = qobject_cast<QAbstractButton*>(w);
+    if (b) {
         text.append(b->text());
     }
 
     QMenu* menu = qobject_cast<QMenu*>(w);
-    if(menu){
+    if (menu) {
         QAction* menuAct = menu->actionAt(menu->mapFromGlobal(m->globalPos()));
         if (menuAct){
             text.append(menuAct->text());
@@ -213,66 +200,66 @@ QString UserActionsWriter::getWidgetText(QWidget* w){
     }
 
     QMenuBar* menuBar = qobject_cast<QMenuBar*>(w);
-    if(menuBar){
+    if (menuBar) {
         QAction* menuBarAct = menuBar->actionAt(menuBar->mapFromGlobal(m->globalPos()));
-        if(menuBarAct){
+        if (menuBarAct) {
             text.append(menuBarAct->text());
         }
     }
 
     QLineEdit* lineEdit = qobject_cast<QLineEdit*>(w);
-    if(lineEdit){
+    if (lineEdit) {
         text.append(lineEdit->text());
     }
 
     return text;
 }
 
-void UserActionsWriter::generateKeyMessage(){
-    CHECK_EXT(k,userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+void UserActionsWriter::generateKeyMessage() {
+    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();
 
-    if(!s.isEmpty()){
+    if (!s.isEmpty()) {
         message.append(QString("%1").arg(s));
-    }else if(!text.isEmpty()){
+    } else if (!text.isEmpty()) {
         message.append(text).append(QString(" code: %1").arg(k->key()));
-    }else{
+    } else {
         message.append(QString("Undefined key, code: %1").arg(k->key()));
     }
 
     filterMessages();
 }
 
-void UserActionsWriter::filterMessages(){
-    if(m){
+void UserActionsWriter::filterMessages() {
+    if (NULL != m) {
         filterMouseMessages();
-    }else if(k){
+    } else if (NULL != k) {
         filterKeyboardMessages();
     }
 }
 
-void UserActionsWriter::filterMouseMessages(){
-    CHECK_EXT(m , userActLog.error(QString("mouse event is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+void UserActionsWriter::filterMouseMessages() {
+    CHECK_EXT(NULL != m, userActLog.error(QString("mouse event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     message.prepend(typeMap.value(m->type()) + QString(" "));
-    if(message != prevMessage){
-        if(!buffer.isEmpty()){
+    if (message != prevMessage) {
+        if (!buffer.isEmpty()) {
             userActLog.trace(QString("Typed string. Length=%1").arg(buffer.length()));
             buffer = "";
         }
 
-        if(counter!=0){
-            userActLog.trace(QString("pressed %1 times").arg(counter+1));
+        if (counter != 0) {
+            userActLog.trace(QString("pressed %1 times").arg(counter + 1));
             counter = 0;
         }
 
         /*Do not duplicate event information when logging mouse release event*/
-        if(prevMessage.right(prevMessage.length()-typeMap.value(QEvent::MouseButtonPress).length()) ==
-                message.right(message.length()-typeMap.value(QEvent::MouseButtonRelease).length())){
+        if (prevMessage.right(prevMessage.length() - typeMap.value(QEvent::MouseButtonPress).length()) ==
+                message.right(message.length() - typeMap.value(QEvent::MouseButtonRelease).length())) {
             userActLog.trace("mouse_release");
             prevMessage = message;
             return;
@@ -286,41 +273,40 @@ void UserActionsWriter::filterMouseMessages(){
     }
 }
 
-void UserActionsWriter::filterKeyboardMessages(){
-    CHECK_EXT(k,userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+void UserActionsWriter::filterKeyboardMessages() {
+    CHECK_EXT(NULL != k, userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     message.prepend(typeMap.value(k->type()) + QString(" "));
 
-
-    if(message != prevMessage && typeMap.value(k->type()) != NULL){
+    if (message != prevMessage && typeMap.value(k->type()) != NULL) {
         /*Do not duplicate event information when logging key release event*/
-        if(prevMessage.right(prevMessage.length()-typeMap.value(QEvent::KeyPress).length()) ==
-                message.right(message.length()-typeMap.value(QEvent::KeyRelease).length())){
+        if (prevMessage.right(prevMessage.length() - typeMap.value(QEvent::KeyPress).length()) ==
+                message.right(message.length() - typeMap.value(QEvent::KeyRelease).length())) {
             prevMessage = message;
             return;
         }
+
         /*If one key pressed several times, count presses*/
-        if(prevMessage.right(prevMessage.length()-typeMap.value(QEvent::KeyRelease).length()) ==
-                message.right(message.length()-typeMap.value(QEvent::KeyPress).length()) && !BUFFER_CONDITION(k)){
+        if (prevMessage.right(prevMessage.length() - typeMap.value(QEvent::KeyRelease).length()) ==
+                message.right(message.length() - typeMap.value(QEvent::KeyPress).length()) && !BUFFER_CONDITION(k)) {
             prevMessage = message;
             counter++;
             return;
         }
 
-        if(counter!=0){
-            userActLog.trace(QString("pressed %1 times").arg(counter+1));
+        if (counter != 0) {
+            userActLog.trace(QString("pressed %1 times").arg(counter + 1));
             counter = 0;
         }
 
         prevMessage = message;
 
-
-        if(BUFFER_CONDITION(k)){
+        if (BUFFER_CONDITION(k)) {
             buffer.append(k->text());
             return;
         }
 
-        if(!buffer.isEmpty()){
+        if (!buffer.isEmpty()) {
             userActLog.trace(QString("Typed string. Length=%1").arg(buffer.length()));
             buffer = "";
         }
@@ -329,117 +315,123 @@ void UserActionsWriter::filterKeyboardMessages(){
     }
 }
 
-void UserActionsWriter::appendDialogInfo(){
-    QDialog* dialog = qobject_cast<QDialog*>(QApplication::activeModalWidget());
-    if(dialog){
+void UserActionsWriter::appendDialogInfo() {
+    QDialog *dialog = qobject_cast<QDialog *>(QApplication::activeModalWidget());
+    if (NULL != dialog) {
         message.append(QString("DIALOG: \"%1\" ").arg(dialog->windowTitle()));
-        QMessageBox* messageBox = qobject_cast<QMessageBox*>(dialog);
-        if(messageBox){
+        QMessageBox *messageBox = qobject_cast<QMessageBox *>(dialog);
+        if (NULL != messageBox) {
             message.append("MESSAGEBOX_TEXT: ").append(messageBox->text()).append(" ");
         }
     }
 }
 
-void UserActionsWriter::appendModifiersInfo(){
-    CHECK_EXT(k,userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)),);
+void UserActionsWriter::appendModifiersInfo() {
+    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)
+    if (m.testFlag(Qt::ShiftModifier) && k->key() != Qt::Key_Shift) {
         message.append(QString("shift + "));
-    if(m.testFlag(Qt::AltModifier)&& k->key()!= Qt::Key_Alt)
+    }
+    if (m.testFlag(Qt::AltModifier)&& k->key() != Qt::Key_Alt) {
         message.append(QString("alt + "));
-    if(m.testFlag(Qt::ControlModifier) && k->key()!= Qt::Key_Control)
+    }
+    if (m.testFlag(Qt::ControlModifier) && k->key() != Qt::Key_Control) {
         message.append(QString("ctrl + "));
-    if(m.testFlag(Qt::MetaModifier) && k->key()!= Qt::Key_Meta)
+    }
+    if (m.testFlag(Qt::MetaModifier) && k->key() != Qt::Key_Meta) {
         message.append(QString("meta + "));
-    if(m.testFlag(Qt::GroupSwitchModifier) && k->key()!= Qt::Key_Mode_switch)
+    }
+    if (m.testFlag(Qt::GroupSwitchModifier) && k->key() != Qt::Key_Mode_switch) {
         message.append(QString("switch + "));
+    }
 }
 
-UserActionsWriter::UserActionsWriter(){
-    windowSize = QPoint(0,0);
+UserActionsWriter::UserActionsWriter() {
+    windowSize = QPoint(0, 0);
     counter = 0;
     buffer = "";
 
     typeMap.insert(QEvent::MouseButtonPress, "mouse_press");
     typeMap.insert(QEvent::MouseButtonRelease, "mouse_release");
     typeMap.insert(QEvent::MouseButtonDblClick, "mouse_double_click");
-    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");
-    keys.insert(Qt::Key_Backtab,"back_tab");
-    keys.insert(Qt::Key_Backspace,"backspace");
-    keys.insert(Qt::Key_Insert,"insert");
-    keys.insert(Qt::Key_Delete,"delete");
-    keys.insert(Qt::Key_Enter,"keypad_enter");
-    keys.insert(Qt::Key_Home,"home");
-    keys.insert(Qt::Key_End,"end");
-    keys.insert(Qt::Key_Left,"left_arrow");
-    keys.insert(Qt::Key_Up,"up_arrow");
-    keys.insert(Qt::Key_Right,"right_arrow");
-    keys.insert(Qt::Key_Down,"down_arrow");
-    keys.insert(Qt::Key_PageUp,"page_up");
-    keys.insert(Qt::Key_PageDown,"page_down");
-    keys.insert(Qt::Key_Shift,"shift");
-    keys.insert(Qt::Key_Control,"ctrl");
-    keys.insert(Qt::Key_Alt,"alt");
-    keys.insert(Qt::Key_CapsLock,"caps_lock");
-    keys.insert(Qt::Key_NumLock,"num_lock");
-    keys.insert(Qt::Key_F1,"F1");
-    keys.insert(Qt::Key_F2,"F2");
-    keys.insert(Qt::Key_F3,"F3");
-    keys.insert(Qt::Key_F4,"F4");
-    keys.insert(Qt::Key_F5,"F5");
-    keys.insert(Qt::Key_F6,"F6");
-    keys.insert(Qt::Key_F7,"F7");
-    keys.insert(Qt::Key_F8,"F8");
-    keys.insert(Qt::Key_F9,"F9");
-    keys.insert(Qt::Key_F10,"F10");
-    keys.insert(Qt::Key_F11,"F11");
-    keys.insert(Qt::Key_F12,"F12");
-    keys.insert(Qt::Key_Space,"space");
-    keys.insert(Qt::Key_0,"0");
-    keys.insert(Qt::Key_1,"1");
-    keys.insert(Qt::Key_2,"2");
-    keys.insert(Qt::Key_3,"3");
-    keys.insert(Qt::Key_4,"4");
-    keys.insert(Qt::Key_5,"5");
-    keys.insert(Qt::Key_6,"6");
-    keys.insert(Qt::Key_7,"7");
-    keys.insert(Qt::Key_8,"8");
-    keys.insert(Qt::Key_9,"9");
-    keys.insert(Qt::Key_A,"a");
-    keys.insert(Qt::Key_B,"b");
-    keys.insert(Qt::Key_C,"c");
-    keys.insert(Qt::Key_D,"d");
-    keys.insert(Qt::Key_E,"e");
-    keys.insert(Qt::Key_F,"f");
-    keys.insert(Qt::Key_G,"g");
-    keys.insert(Qt::Key_H,"h");
-    keys.insert(Qt::Key_I,"i");
-    keys.insert(Qt::Key_J,"j");
-    keys.insert(Qt::Key_K,"k");
-    keys.insert(Qt::Key_L,"l");
-    keys.insert(Qt::Key_M,"m");
-    keys.insert(Qt::Key_N,"n");
-    keys.insert(Qt::Key_O,"o");
-    keys.insert(Qt::Key_P,"p");
-    keys.insert(Qt::Key_Q,"q");
-    keys.insert(Qt::Key_R,"r");
-    keys.insert(Qt::Key_S,"s");
-    keys.insert(Qt::Key_T,"t");
-    keys.insert(Qt::Key_U,"u");
-    keys.insert(Qt::Key_V,"v");
-    keys.insert(Qt::Key_W,"w");
-    keys.insert(Qt::Key_X,"x");
-    keys.insert(Qt::Key_Y,"y");
-    keys.insert(Qt::Key_Z,"z");
-}
+    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");
+    keys.insert(Qt::Key_Backtab, "back_tab");
+    keys.insert(Qt::Key_Backspace, "backspace");
+    keys.insert(Qt::Key_Insert, "insert");
+    keys.insert(Qt::Key_Delete, "delete");
+    keys.insert(Qt::Key_Enter, "keypad_enter");
+    keys.insert(Qt::Key_Home, "home");
+    keys.insert(Qt::Key_End, "end");
+    keys.insert(Qt::Key_Left, "left_arrow");
+    keys.insert(Qt::Key_Up, "up_arrow");
+    keys.insert(Qt::Key_Right, "right_arrow");
+    keys.insert(Qt::Key_Down, "down_arrow");
+    keys.insert(Qt::Key_PageUp, "page_up");
+    keys.insert(Qt::Key_PageDown, "page_down");
+    keys.insert(Qt::Key_Shift, "shift");
+    keys.insert(Qt::Key_Control, "ctrl");
+    keys.insert(Qt::Key_Alt, "alt");
+    keys.insert(Qt::Key_CapsLock, "caps_lock");
+    keys.insert(Qt::Key_NumLock, "num_lock");
+    keys.insert(Qt::Key_F1, "F1");
+    keys.insert(Qt::Key_F2, "F2");
+    keys.insert(Qt::Key_F3, "F3");
+    keys.insert(Qt::Key_F4, "F4");
+    keys.insert(Qt::Key_F5, "F5");
+    keys.insert(Qt::Key_F6, "F6");
+    keys.insert(Qt::Key_F7, "F7");
+    keys.insert(Qt::Key_F8, "F8");
+    keys.insert(Qt::Key_F9, "F9");
+    keys.insert(Qt::Key_F10, "F10");
+    keys.insert(Qt::Key_F11, "F11");
+    keys.insert(Qt::Key_F12, "F12");
+    keys.insert(Qt::Key_Space, "space");
+    keys.insert(Qt::Key_0, "0");
+    keys.insert(Qt::Key_1, "1");
+    keys.insert(Qt::Key_2, "2");
+    keys.insert(Qt::Key_3, "3");
+    keys.insert(Qt::Key_4, "4");
+    keys.insert(Qt::Key_5, "5");
+    keys.insert(Qt::Key_6, "6");
+    keys.insert(Qt::Key_7, "7");
+    keys.insert(Qt::Key_8, "8");
+    keys.insert(Qt::Key_9, "9");
+    keys.insert(Qt::Key_A, "a");
+    keys.insert(Qt::Key_B, "b");
+    keys.insert(Qt::Key_C, "c");
+    keys.insert(Qt::Key_D, "d");
+    keys.insert(Qt::Key_E, "e");
+    keys.insert(Qt::Key_F, "f");
+    keys.insert(Qt::Key_G, "g");
+    keys.insert(Qt::Key_H, "h");
+    keys.insert(Qt::Key_I, "i");
+    keys.insert(Qt::Key_J, "j");
+    keys.insert(Qt::Key_K, "k");
+    keys.insert(Qt::Key_L, "l");
+    keys.insert(Qt::Key_M, "m");
+    keys.insert(Qt::Key_N, "n");
+    keys.insert(Qt::Key_O, "o");
+    keys.insert(Qt::Key_P, "p");
+    keys.insert(Qt::Key_Q, "q");
+    keys.insert(Qt::Key_R, "r");
+    keys.insert(Qt::Key_S, "s");
+    keys.insert(Qt::Key_T, "t");
+    keys.insert(Qt::Key_U, "u");
+    keys.insert(Qt::Key_V, "v");
+    keys.insert(Qt::Key_W, "w");
+    keys.insert(Qt::Key_X, "x");
+    keys.insert(Qt::Key_Y, "y");
+    keys.insert(Qt::Key_Z, "z");
 }
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.h b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
index 758c120..d6b0a30 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.h
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
@@ -19,23 +19,28 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _U2_USER_ACTIONS_WRITER_H_
+#define _U2_USER_ACTIONS_WRITER_H_
 
-#ifndef UserActionsWriter_H
-#define UserActionsWriter_H
-
+#include <QEvent>
+#include <QFile>
+#include <QMouseEvent>
 #include <QObject>
+#include <QMutex>
+
 #include <U2Core/global.h>
 #include <U2Core/AppContext.h>
-#include <QtCore/QFile>
-#include <QtCore/QEvent>
-#include <QMouseEvent>
+
 namespace U2 {
-class U2CORE_EXPORT UserActionsWriter : public QObject
-{    Q_OBJECT
+
+class U2CORE_EXPORT UserActionsWriter : public QObject {
+    Q_OBJECT
 public:
      UserActionsWriter();
+
 protected:
-    virtual bool eventFilter(QObject *obj, QEvent *event);
+    bool eventFilter(QObject *obj, QEvent *event);
+
 private:
     void generateMouseMeassage();
     void appendTreeWidgetInfo(QWidget* parent);
@@ -51,16 +56,19 @@ private:
     void filterMouseMessages();
     void filterKeyboardMessages();
 
-
-    QMap<QEvent::Type,QString> typeMap;
+    QMutex guard;
+    QMap<QEvent::Type, QString> typeMap;
     QMap<Qt::KeyboardModifier, QString> modMap;
-    QMap<Qt::Key,QString> keys;
+    QMap<Qt::Key, QString> keys;
     QMouseEvent* m;
     QKeyEvent* k;
-    QString message,prevMessage;
+    QString message;
+    QString prevMessage;
     QString buffer;
     int counter;
     QPoint windowSize;
 };
-}
-#endif // UserActionsWriter_H
+
+}   // namespace U2
+
+#endif // _U2_USER_ACTIONS_WRITER_H_
diff --git a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp
index a2bc460..ab508aa 100644
--- a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp
@@ -89,10 +89,19 @@ void MAlignmentObject::updateCachedMAlignment(const MAlignmentModInfo &mi, const
     U2OpStatus2Log os;
 
     if (mi.alignmentLengthChanged) {
-        MAlignmentExporter alExporter;
-        U2Msa msa = alExporter.getAlignmentObject(entityRef.dbiRef, entityRef.entityId, os);
-        if (msa.length != cachedMAlignment.getLength()) {
-            cachedMAlignment.setLength(msa.length);
+        qint64 msaLength = MsaDbiUtils::getMsaLength(entityRef, os);
+        SAFE_POINT_OP(os, );
+        if (msaLength != cachedMAlignment.getLength()) {
+            cachedMAlignment.setLength(msaLength);
+        }
+    }
+
+    if (mi.alphabetChanged) {
+        U2AlphabetId alphabet = MsaDbiUtils::getMsaAlphabet(entityRef, os);
+        SAFE_POINT_OP(os, );
+        if (alphabet.id != cachedMAlignment.getAlphabet()->getId() && !alphabet.id.isEmpty()) {
+            const DNAAlphabet* newAlphabet = U2AlphabetUtils::getById(alphabet);
+            cachedMAlignment.setAlphabet(newAlphabet);
         }
     }
 
@@ -141,6 +150,9 @@ void MAlignmentObject::updateCachedMAlignment(const MAlignmentModInfo &mi, const
     if (!removedRowIds.isEmpty()) {
         emit si_rowsRemoved(removedRowIds);
     }
+    if (cachedMAlignment.getAlphabet()->getId() != maBefore.getAlphabet()->getId()) {
+        emit si_alphabetChanged(mi, maBefore.getAlphabet());
+    }
 }
 
 void MAlignmentObject::setMAlignment(const MAlignment& newMa, MAlignmentModInfo mi, const QVariantMap& hints) {
@@ -182,14 +194,15 @@ void MAlignmentObject::saveState(){
     memento->setState(msa);
 }
 
-void MAlignmentObject::releaseState(){
+void MAlignmentObject::releaseState() {
     if(!isStateLocked()) {
         emit si_completeStateChanged(true);
 
         MAlignment maBefore = memento->getState();
+        CHECK(maBefore != getMAlignment(), );
         setModified(true);
-        MAlignmentModInfo mi;
 
+        MAlignmentModInfo mi;
         emit si_alignmentChanged(maBefore, mi);
 
         if (cachedMAlignment.isEmpty() && !maBefore.isEmpty()) {
@@ -200,7 +213,6 @@ void MAlignmentObject::releaseState(){
     }
 }
 
-
 GObject* MAlignmentObject::clone(const U2DbiRef& dstDbiRef, U2OpStatus& os, const QVariantMap &hints) const {
     DbiOperationsBlock opBlock(dstDbiRef, os);
     Q_UNUSED(opBlock);
@@ -476,6 +488,44 @@ void MAlignmentObject::removeRegion(int startPos, int startRow, int nBases, int
     }
 }
 
+void MAlignmentObject::replaceCharacter(int startPos, int rowIndex, char newChar) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
+    const MAlignment &msa = getMAlignment();
+    SAFE_POINT(rowIndex >= 0 && startPos + 1 <= msa.getLength(), "Invalid parameters!", );
+    qint64 modifiedRowId = msa.getRow(rowIndex).getRowId();
+
+    //msa.setAlphabet(newAlphabet);
+
+    U2OpStatus2Log os;
+    if (newChar != MAlignment_GapChar) {
+        MsaDbiUtils::replaceCharacterInRow(entityRef, modifiedRowId, startPos, newChar, os);
+    } else {
+        MsaDbiUtils::removeRegion(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
+        MsaDbiUtils::insertGaps(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
+    }
+    SAFE_POINT_OP(os, );
+
+    MAlignmentModInfo mi;
+    mi.sequenceContentChanged = true;
+    mi.sequenceListChanged = false;
+    mi.alignmentLengthChanged = false;
+    mi.modifiedRowIds << modifiedRowId;
+
+    if (newChar != ' ' && !msa.getAlphabet()->contains(newChar)) {
+        const DNAAlphabet *alp = U2AlphabetUtils::findBestAlphabet(QByteArray(1, newChar));
+        const DNAAlphabet *newAlphabet = U2AlphabetUtils::deriveCommonAlphabet(alp, msa.getAlphabet());
+        SAFE_POINT(NULL != newAlphabet, "Common alphabet is NULL!", );
+
+        if (newAlphabet->getId() != msa.getAlphabet()->getId()) {
+            MsaDbiUtils::updateMsaAlphabet(entityRef, newAlphabet->getId(), os);
+            mi.alphabetChanged = true;
+            SAFE_POINT_OP(os, );
+        }
+    }
+
+    updateCachedMAlignment(mi, QList<qint64>());
+}
+
 void MAlignmentObject::renameRow(int rowIdx, const QString& newName) {
     SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
 
@@ -734,6 +784,7 @@ void MAlignmentObject::sortRowsByList(const QStringList& order) {
 
     MAlignment msa = getMAlignment();
     msa.sortRowsByList(order);
+    CHECK(msa.getRowsIds() != cachedMAlignment.getRowsIds(), );
 
     U2OpStatusImpl os;
     MsaDbiUtils::updateRowsOrder(entityRef, msa.getRowsIds(), os);
diff --git a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h
index 7f4ae33..575d8ac 100644
--- a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h
+++ b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h
@@ -35,19 +35,30 @@ namespace U2 {
 class GHints;
 class DNASequence;
 
+enum MAlignmentModType {
+    MAlignmentModType_User,
+    MAlignmentModType_Undo,
+    MAlignmentModType_Redo
+};
+
 class MAlignmentModInfo {
 public:
     MAlignmentModInfo()
         : sequenceContentChanged(true),
           sequenceListChanged(true),
           alignmentLengthChanged(true),
-          middleState(false) {}
+          middleState(false),
+          alphabetChanged(false),
+          type(MAlignmentModType_User) {}
+
     bool sequenceContentChanged;
     bool sequenceListChanged;
     bool alignmentLengthChanged;
     bool middleState;
+    bool alphabetChanged;
     QVariantMap hints;
     QList<qint64> modifiedRowIds;
+    MAlignmentModType type;
 
 private:
     static bool registerMeta;
@@ -147,6 +158,11 @@ public:
     /** Method that affect the whole alignment, including sequences
      */
     void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows, bool track = true);
+
+    /** Replace character in row and change alphabet, if it does not contain the character
+    */
+    void replaceCharacter(int startPos, int rowIndex, char newChar);
+
     void crop(U2Region window, const QSet<QString>& rowNames);
     /**
      * Performs shift of the region specified by parameters @startPos (leftmost column number),
@@ -182,6 +198,7 @@ signals:
     void si_completeStateChanged(bool complete);
     void si_rowsRemoved(const QList<qint64> &rowIds);
     void si_invalidateAlignmentObject();
+    void si_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet);
 
 protected:
     void loadDataCore(U2OpStatus &os);
diff --git a/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp b/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
index 60600e0..1b55371 100644
--- a/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
@@ -65,7 +65,7 @@ QNetworkProxy HttpFileAdapterFactory::getProxyByUrl( const QUrl & url ) const {
 
 HttpFileAdapter::HttpFileAdapter(HttpFileAdapterFactory* factory, QObject* o)
 : IOAdapter(factory, o), is_cached(false), begin_ptr(-1), end_ptr(0),
-  badstate(false), is_downloaded(false), downloaded(0), total(0)
+  reply(NULL), badstate(false), is_downloaded(false), downloaded(0), total(0)
 {
     chunk_list.push_back( QByteArray(CHUNKSIZE, char(0)) );
     netManager=new QNetworkAccessManager(this);
diff --git a/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp b/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
index 6324212..3bc8847 100644
--- a/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
@@ -21,7 +21,9 @@
 
 #include "LocalFileAdapter.h"
 #include "ZlibAdapter.h"
+
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/DocumentModel.h>
 
 namespace U2 {
 
@@ -42,10 +44,10 @@ IOAdapter* GzippedLocalFileAdapterFactory::createIOAdapter() {
     return new ZlibAdapter(new LocalFileAdapter(this));
 }
 
-const quint64 LocalFileAdapter::BUF_SIZE = 1024*1024;
+const quint64 LocalFileAdapter::BUF_SIZE = DocumentFormat::READ_BUFF_SIZE;
 
 LocalFileAdapter::LocalFileAdapter(LocalFileAdapterFactory* factory, QObject* o, bool b)
-: IOAdapter(factory, o), f(NULL), bufferOptimization(b)
+    : IOAdapter(factory, o), f(NULL), bufferOptimization(b), fileSize(0)
 {
     bufferOptimization = true;
     if (bufferOptimization) {
@@ -79,6 +81,7 @@ bool LocalFileAdapter::open(const GUrl& url, IOAdapterMode m) {
         f = NULL;
         return false;
     }
+    fileSize = f->size();
     return true;
 }
 
@@ -87,6 +90,7 @@ void LocalFileAdapter::close() {
     f->close();
     delete f;
     f = NULL;
+    fileSize = 0;
 }
 
 qint64 LocalFileAdapter::readBlock(char* data, qint64 size) {
@@ -120,6 +124,7 @@ qint64 LocalFileAdapter::readBlock(char* data, qint64 size) {
 qint64 LocalFileAdapter::writeBlock(const char* data, qint64 size) {
     SAFE_POINT(isOpen(), "Adapter is not opened!",-1);
     qint64 l = f->write(data, size);
+    fileSize += size;
     return l;
 }
 
@@ -147,16 +152,15 @@ bool LocalFileAdapter::skip(qint64 nBytes) {
 qint64 LocalFileAdapter::left() const {
     SAFE_POINT(isOpen(), "Adapter is not opened!",-1);
     qint64 p = f->pos();
-    qint64 len = f->size();
     if (bufferOptimization) {
         p -= bufLen - currentPos;
     }
-    return len - p;
+    return fileSize - p;
 }
 
 int LocalFileAdapter::getProgress() const {
     SAFE_POINT(isOpen(), "Adapter is not opened!",false);
-    return int(100 * float(bytesRead()) / f->size());
+    return int(100 * float(bytesRead()) / fileSize);
 }
 
 qint64 LocalFileAdapter::bytesRead() const {
diff --git a/src/corelibs/U2Core/src/io/LocalFileAdapter.h b/src/corelibs/U2Core/src/io/LocalFileAdapter.h
index 9d9db77..cbf1c86 100644
--- a/src/corelibs/U2Core/src/io/LocalFileAdapter.h
+++ b/src/corelibs/U2Core/src/io/LocalFileAdapter.h
@@ -89,6 +89,7 @@ public:
 
 private:
     QFile* f;
+    quint64 fileSize;
 
     bool bufferOptimization;
     QByteArray buffer;
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.cpp b/src/corelibs/U2Core/src/models/DocumentModel.cpp
index 40f8ab2..5915681 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.cpp
+++ b/src/corelibs/U2Core/src/models/DocumentModel.cpp
@@ -56,6 +56,8 @@ const QString DocumentFormat::DBI_FOLDER_HINT("dbi_folder");
 const QString DocumentFormat::DEEP_COPY_OBJECT("deep_copy_object");
 const QString DocumentMimeData::MIME_TYPE("application/x-ugene-document-mime");
 
+const int DocumentFormat::READ_BUFF_SIZE = 4096; //4Mb optimal buffer size for reading from network drives
+
 Document* DocumentFormat::createNewLoadedDocument(IOAdapterFactory* iof, const GUrl& url,
     U2OpStatus& os, const QVariantMap& hints)
 {
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.h b/src/corelibs/U2Core/src/models/DocumentModel.h
index 6c55010..cc37351 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.h
+++ b/src/corelibs/U2Core/src/models/DocumentModel.h
@@ -133,6 +133,8 @@ public:
     static const QString DBI_FOLDER_HINT;
     static const QString DEEP_COPY_OBJECT;
 
+    static const int READ_BUFF_SIZE;
+
     enum DocObjectOp {
         DocObjectOp_Add,
         DocObjectOp_Remove
diff --git a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
index 8d1c822..012bd5b 100644
--- a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
@@ -37,8 +37,11 @@ namespace U2 {
 
 const int AddSequenceObjectsToAlignmentTask::maxErrorListSize = 5;
 
-AddSequenceObjectsToAlignmentTask::AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<U2SequenceObject*>& seqList)
-    : Task("Add sequences to alignment task", TaskFlags(TaskFlags_NR_FOSE_COSC)), seqList(seqList), maObj(obj), stateLock(NULL), msaAlphabet(maObj->getAlphabet()) {}
+AddSequenceObjectsToAlignmentTask::AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<U2SequenceObject *>& seqList)
+    : Task("Add sequences to alignment task", TaskFlags(TaskFlags_FOSE_COSC)), seqList(seqList), maObj(obj), 
+    stateLock(NULL), msaAlphabet(maObj->getAlphabet()), dbi(NULL), modStep(NULL) {
+    entityRef = maObj->getEntityRef();
+}
 
 void AddSequenceObjectsToAlignmentTask::prepare() {
     if (maObj.isNull()) {
@@ -54,6 +57,20 @@ void AddSequenceObjectsToAlignmentTask::prepare() {
     stateLock = new StateLock("Adding_files_to_alignment", StateLockFlag_LiveLock);
     maObj->lockState(stateLock);
     processObjectsAndSetResultingAlphabet();
+
+    // Create user mod step
+    modStep = new U2UseCommonUserModStep(entityRef, stateInfo);
+    CHECK_OP(stateInfo, );
+    dbi = modStep->getDbi()->getMsaDbi();
+}
+
+void AddSequenceObjectsToAlignmentTask::run() {
+    QList<U2MsaRow> rows;
+    qint64 maxLength = createRows(rows);
+    CHECK_OP(stateInfo, );
+    addRows(rows, maxLength);
+    CHECK_OP(stateInfo, );
+    updateAlphabet();
 }
 
 void AddSequenceObjectsToAlignmentTask::processObjectsAndSetResultingAlphabet() {
@@ -69,16 +86,15 @@ void AddSequenceObjectsToAlignmentTask::processObjectsAndSetResultingAlphabet()
 }
 
 Task::ReportResult AddSequenceObjectsToAlignmentTask::report() {
+    delete modStep;
     releaseLock();
+
     if (isCanceled() || hasError()) {
         return ReportResult_Finished;
     }
-    QList<U2MsaRow> rows;
-    qint64 len = createRows(rows);
-    CHECK_OP(stateInfo, ReportResult_Finished);
 
-    addRows(rows, len);
-    CHECK_OP(stateInfo, ReportResult_Finished);
+    // Update object
+    maObj->updateCachedMAlignment(mi);
 
     if (!errorList.isEmpty()) {
         setupError();
@@ -86,45 +102,38 @@ Task::ReportResult AddSequenceObjectsToAlignmentTask::report() {
     return ReportResult_Finished;
 }
 
-qint64 AddSequenceObjectsToAlignmentTask::createRows(QList<U2MsaRow>& rows) {
-    U2EntityRef entityRef = maObj.data()->getEntityRef();
-    qint64 maxLen = 0;
+qint64 AddSequenceObjectsToAlignmentTask::createRows(QList<U2MsaRow> &rows) {
+    qint64 maxLength = 0;
+    U2EntityRef entityRef = maObj->getEntityRef();
     foreach (U2SequenceObject *seqObj, seqList) {
         U2MsaRow row = MSAUtils::copyRowFromSequence(seqObj, entityRef.dbiRef, stateInfo);
         if (0 < row.gend) {
             rows << row;
-            maxLen = qMax(maxLen, seqObj->getSequenceLength());
+            maxLength = qMax(maxLength, seqObj->getSequenceLength());
         }
         CHECK_OP(stateInfo, 0);
     }
-    return maxLen;
+    return maxLength;
 }
 
-void AddSequenceObjectsToAlignmentTask::addRows(QList<U2MsaRow> &rows, qint64 len) {
-    U2EntityRef entityRef = maObj.data()->getEntityRef();
-    // Create user mod step
-    U2UseCommonUserModStep modStep(entityRef, stateInfo);
-    CHECK_OP(stateInfo, );
-    U2MsaDbi *dbi = modStep.getDbi()->getMsaDbi();
-
+void AddSequenceObjectsToAlignmentTask::addRows(QList<U2MsaRow> &rows, qint64 maxLength) {
     // Add rows
     dbi->addRows(entityRef.entityId, rows, stateInfo);
     CHECK_OP(stateInfo, );
 
-    if (len > maObj->getLength()) {
-        dbi->updateMsaLength(entityRef.entityId, len, stateInfo);
+    if (maxLength > maObj->getLength()) {
+        dbi->updateMsaLength(entityRef.entityId, maxLength, stateInfo);
         CHECK_OP(stateInfo, );
     }
+}
 
-    // Update alphabet
+void AddSequenceObjectsToAlignmentTask::updateAlphabet() {
     if (maObj->getAlphabet() != msaAlphabet) {
         SAFE_POINT(NULL != msaAlphabet, "NULL result alphabet", );
         dbi->updateMsaAlphabet(entityRef.entityId, msaAlphabet->getId(), stateInfo);
         CHECK_OP(stateInfo, );
+        mi.alphabetChanged = true;
     }
-
-    // Update object
-    maObj->updateCachedMAlignment();
 }
 
 void AddSequenceObjectsToAlignmentTask::setupError() {
@@ -150,7 +159,9 @@ void AddSequenceObjectsToAlignmentTask::releaseLock(){
 }
 
 AddSequencesFromFilesToAlignmentTask::AddSequencesFromFilesToAlignmentTask(MAlignmentObject* obj, const QStringList& urls)
-    : AddSequenceObjectsToAlignmentTask(obj, QList<U2SequenceObject*>()), urlList(urls), loadTask(NULL) {}
+    : AddSequenceObjectsToAlignmentTask(obj, QList<U2SequenceObject *>()), urlList(urls), loadTask(NULL) {
+    connect(maObj, SIGNAL(si_invalidateAlignmentObject()), SLOT(sl_onCancel()));
+}
 
 void AddSequencesFromFilesToAlignmentTask::prepare() {
     AddSequenceObjectsToAlignmentTask::prepare();
@@ -175,9 +186,9 @@ QList<Task*> AddSequencesFromFilesToAlignmentTask::onSubTaskFinished(Task* subTa
         return subTasks;
     }
 
-    LoadDocumentTask* loadTask = qobject_cast<LoadDocumentTask*>(subTask);
-    SAFE_POINT(loadTask != NULL, "loadTask is NULL", subTasks);
-    Document* doc = loadTask->getDocument();
+    LoadDocumentTask* loadDocumentSubTask = qobject_cast<LoadDocumentTask*>(subTask);
+    SAFE_POINT(loadDocumentSubTask != NULL, "loadTask is NULL", subTasks);
+    Document* doc = loadDocumentSubTask->getDocument();
     foreach(GObject *seqObj, doc->findGObjectByType(GObjectTypes::SEQUENCE)) {
         U2SequenceObject *casted = qobject_cast<U2SequenceObject*>(seqObj);
         SAFE_POINT(casted != NULL, "Cast to U2SequenceObject failed", subTasks);
@@ -187,4 +198,11 @@ QList<Task*> AddSequencesFromFilesToAlignmentTask::onSubTaskFinished(Task* subTa
     return subTasks;
 }
 
+void AddSequencesFromFilesToAlignmentTask::sl_onCancel() {
+    if (loadTask != NULL && !loadTask->isFinished() && !loadTask->isCanceled()) {
+        loadTask->cancel();
+    }
+    releaseLock();
+}
+
 }
diff --git a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
index 3e4c168..4925249 100644
--- a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
+++ b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
@@ -26,36 +26,47 @@
 
 #include <U2Core/Task.h>
 #include <U2Core/MAlignmentObject.h>
+#include <U2Core/U2Type.h>
 
 namespace U2 {
 
 class StateLock;
 class LoadDocumentTask;
+class DNASequence;
+class U2MsaDbi;
 class U2SequenceObject;
+class U2UseCommonUserModStep;
 
 class U2CORE_EXPORT AddSequenceObjectsToAlignmentTask : public Task {
     Q_OBJECT
 public:
-    AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<U2SequenceObject*>& seqList);
-    virtual void prepare();
+    AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<U2SequenceObject *>& seqList);
 
+    virtual void prepare();
+    virtual void run();
     ReportResult report();
 protected:
     void processObjectsAndSetResultingAlphabet();
 
     QList<U2SequenceObject*>    seqList;
     QPointer<MAlignmentObject>  maObj;
+protected:
+    void releaseLock();
 private:
     StateLock*                  stateLock;
     const DNAAlphabet*          msaAlphabet;
-    QStringList                 errorList;
+    QStringList                 errorList;    
+    U2MsaDbi*                   dbi;
+    U2EntityRef                 entityRef;
+    U2UseCommonUserModStep*     modStep;
+    MAlignmentModInfo           mi;
 
     static const int maxErrorListSize;
     /** Returns the max length of the rows including trailing gaps */
-    qint64 createRows(QList<U2MsaRow>& rows);
-    void addRows(QList<U2MsaRow> &rows, qint64 len);
+    qint64 createRows(QList<U2MsaRow> &rows);
+    void addRows(QList<U2MsaRow> &rows, qint64 maxLength);
+    void updateAlphabet();
     void setupError();
-    void releaseLock();
 };
 
 class U2CORE_EXPORT AddSequencesFromFilesToAlignmentTask : public AddSequenceObjectsToAlignmentTask {
@@ -65,6 +76,8 @@ public:
 
     virtual void prepare();
     QList<Task*> onSubTaskFinished(Task* subTask);
+private slots:
+    void sl_onCancel();
 private:
     QStringList         urlList;
     LoadDocumentTask*   loadTask;
diff --git a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
index f5a523e..eb06877 100644
--- a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
@@ -122,6 +122,8 @@ void ExternalToolRunTask::run(){
     while(!externalToolProcess->waitForFinished(1000)){
         if (isCanceled()) {
             killProcess();
+            algoLog.details(tr("Tool %1 is cancelled").arg(toolName));
+            return;
         }
     }
 
@@ -419,6 +421,9 @@ ProcessRun ExternalToolSupportUtils::prepareProcess(const QString &toolName, con
         for (int i = stool->getRunParameters().size() - 1; i >= 0; i--){
             result.arguments.prepend(stool->getRunParameters().at(i));
         }
+        foreach(const QString &param, tool->getToolRunnerAdditionalOptions()) {
+            result.arguments.prepend(param);
+        }
         result.program = stool->getPath();
         listenerProgramMessage.prepend(result.program + " ");
     }
diff --git a/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.cpp
deleted file mode 100644
index 6162113..0000000
--- a/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.cpp
+++ /dev/null
@@ -1,840 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/QEventLoop>
-#include <QtCore/QTimer>
-#include <QtCore/QUrl>
-
-#include <QtNetwork/QAuthenticator>
-#include <QtNetwork/QNetworkReply>
-
-#include <QtXml/QDomDocument>
-
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MultiTask.h>
-#include <U2Core/PicrApiTask.h>
-#include <U2Core/SaveDocumentTask.h>
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2DbiRegistry.h>
-#include <U2Core/U2SequenceUtils.h>
-
-#include "LoadDASDocumentTask.h"
-
-namespace U2 {
-
-LoadDasDocumentTask::LoadDasDocumentTask(const QString& accId, const QString& _fullPath, const DASSource& _referenceSource,
-    const QList<DASSource>& _featureSources)
-: BaseLoadRemoteDocumentTask(_fullPath, QVariantMap(), TaskFlags(TaskFlag_NoRun | TaskFlag_MinimizeSubtaskErrorText))
-,accNumber(accId)
-,featureSources(_featureSources)
-,referenceSource(_referenceSource)
-,loadSequenceTask(NULL)
-,saveDocumentTask(NULL)
-,seq(NULL)
-{
-
-}
-
-void LoadDasDocumentTask::prepare(){
-    BaseLoadRemoteDocumentTask::prepare();
-    if (!isCached()){
-        //load sequence
-        loadSequenceTask = new LoadDasObjectTask(accNumber, referenceSource, DASSequence);
-        addSubTask(loadSequenceTask);
-
-        //load annotations
-        foreach(const DASSource& s, featureSources){
-            LoadDasObjectTask* featureTask = new LoadDasObjectTask(accNumber, s, DASFeatures);
-            loadFeaturesTasks.append(featureTask);
-            addSubTask(featureTask);
-        }
-    }
-}
-
-QString LoadDasDocumentTask::getFileFormat(const QString & dbid){
-    Q_UNUSED(dbid);
-    return GENBANK_FORMAT;
-}
-
-GUrl LoadDasDocumentTask::getSourceUrl(){
-    return GUrl();
-}
-
-QString LoadDasDocumentTask::getFileName(){
-    format = getFileFormat("");
-    accNumber.replace(";",",");
-    QStringList accIds = accNumber.split(",");
-    if (accIds.size() == 1) {
-        return accNumber + "_das" +"." + format;
-    } else if (accIds.size() > 1) {
-        return accIds.first() + "_das_misc." + format;
-    }
-
-    return "";
-}
-
-QList<Task*> LoadDasDocumentTask::onSubTaskFinished(Task *subTask) {
-    QList<Task *> subTasks;
-    if (isCanceled() || hasError()) {
-        return subTasks;
-    }
-
-    if (subTask == loadDocumentTask) {
-        if (subTask->hasError()) {
-            setError(tr("Cannot load cached document: %1").arg(accNumber));
-            return subTasks;
-        }
-        resultDocument = loadDocumentTask->takeDocument();
-    } else if (subTask == saveDocumentTask) {
-        if (saveDocumentTask->hasError()) {
-            setError(tr("Cannot save document: %1").arg(accNumber));
-            return subTasks;
-        }
-        if (!subTask->isCanceled()) {
-            RecentlyDownloadedCache * cache = AppContext::getRecentlyDownloadedCache();
-            if (NULL != cache) {
-                cache->append(fullPath);
-            }
-        }
-    } else {
-        if (subTask == loadSequenceTask) {
-            if (loadSequenceTask->hasError()) {
-                setError(tr("Cannot find DAS reference sequence: %1").arg(accNumber));
-                return subTasks;
-            }
-            if (!isCanceled()) {
-                seq = loadSequenceTask->getSequence();
-            }
-
-            loadSequenceTask = NULL;
-        } else {
-            LoadDasObjectTask *ftask = qobject_cast<LoadDasObjectTask *>(subTask);
-            if (NULL != ftask && loadFeaturesTasks.contains(ftask)) {
-                const int idx = loadFeaturesTasks.indexOf(ftask);
-                if (idx == -1) {
-                    return subTasks;
-                }
-
-                loadFeaturesTasks.removeAt(idx);
-
-                if (ftask->hasError()) {
-                    ioLog.info(tr("Cannot find DAS features for '%1' on %2").arg(accNumber).arg(ftask->getSource().getName()));
-                } else {
-                    //merge features
-                    if (!isCanceled()) {
-                        mergeFeatures(ftask->getAnnotationData());
-                    }
-                }
-            }
-        }
-
-        if (isAllDataLoaded()) {
-            AnnotationTableObject *annotationTableObject = NULL;
-            if (!annotationData.isEmpty()) {
-                U2DbiRegistry *dbiReg = AppContext::getDbiRegistry();
-                SAFE_POINT_EXT(NULL != dbiReg, setError("NULL DBI registry"), subTasks);
-
-                U2DbiRef dbiRef = dbiReg->getSessionTmpDbiRef(stateInfo);
-                CHECK_OP(stateInfo, subTasks);
-
-                annotationTableObject = new AnnotationTableObject("das_annotations", dbiRef);
-
-                foreach (const QString &grname, annotationData.keys()) {
-                    const QList<SharedAnnotationData> sdata = annotationData[grname];
-                    if (!sdata.isEmpty()) {
-                        foreach (SharedAnnotationData d, sdata) {
-                            //setRegion
-                            if (NULL != seq) {
-                                if (d->location->isSingleRegion() && d->location->regions.first() == U2_REGION_MAX) {
-                                    U2Location newLoc = d->location;
-                                    newLoc->regions.clear();
-                                    newLoc->regions.append(U2Region(0, seq->length()));
-                                    d->location = newLoc;
-                                }
-                            }
-                            annotationTableObject->addAnnotations(QList<SharedAnnotationData>() << d, grname);
-                        }
-                    }
-                }
-            }
-            if (NULL != seq) {
-                createLoadedDocument();
-                if (NULL == resultDocument) {
-                    return subTasks;
-                }
-
-                U2EntityRef seqRef = U2SequenceUtils::import(resultDocument->getDbiRef(), *seq, stateInfo);
-                if (stateInfo.isCoR()) {
-                    return subTasks;
-                }
-                U2SequenceObject *danseqob = new U2SequenceObject(seq->getName(), seqRef);
-                resultDocument->addObject(danseqob);
-
-                if (NULL != annotationTableObject) {
-                    annotationTableObject->addObjectRelation(GObjectRelation(danseqob,
-                        ObjectRole_Sequence));
-                    resultDocument->addObject(annotationTableObject);
-
-                }
-
-                saveDocumentTask = new SaveDocumentTask(resultDocument);
-                subTasks.append(saveDocumentTask);
-            }
-         }
-    }
-    return subTasks;
-
-}
-
-bool LoadDasDocumentTask::isAllDataLoaded() {
-    return (NULL == loadSequenceTask && loadFeaturesTasks.isEmpty());
-}
-
-void LoadDasDocumentTask::mergeFeatures(const QMap<QString, QList<SharedAnnotationData> > &newAnnotations) {
-    const QStringList &keys =  newAnnotations.keys();
-    foreach (const QString &key, keys) {
-        if (annotationData.contains(key)) {
-            const QList<SharedAnnotationData> &curList = annotationData[key];
-            const QList<SharedAnnotationData> &tomergeList = newAnnotations[key];
-            foreach (const SharedAnnotationData &d, tomergeList) {
-                if (!curList.contains(d)) {
-                    annotationData[key].append(d);
-                }
-            }
-        } else {
-            annotationData.insert(key, newAnnotations[key]);
-        }
-    }
-
-}
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//LoadDASObjectTask
-LoadDasObjectTask::LoadDasObjectTask(const QString& accId, const DASSource& _source, DASObjectType objType)
-    :Task(tr("Load DAS data for '%1' from %2").arg(accId).arg(_source.getName()), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText)
-,accNumber(accId)
-,source(_source)
-,objectType(objType)
-,loop(NULL)
-,downloadReply(NULL)
-,networkManager(NULL)
-,seq(NULL)
-{
-
-}
-
-LoadDasObjectTask::~LoadDasObjectTask(){
-    delete loop;
-    delete networkManager;
-}
-
-void LoadDasObjectTask::run() {
-    if (stateInfo.isCanceled()) {
-        return;
-    }
-    stateInfo.progress = 0;
-    ioLog.trace("Start loading data from DAS...");
-
-    loop = new QEventLoop;
-
-    networkManager = new QNetworkAccessManager();
-    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sl_replyFinished(QNetworkReply*)));
-    connect(networkManager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this,
-        SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    NetworkConfiguration* nc = AppContext::getAppSettings()->getNetworkConfiguration();
-
-    ioLog.trace("Downloading xml file...");
-
-    QString fetchUrl = DASSourceRegistry::getRequestURLString(source, accNumber, objectType);
-    QNetworkProxy proxy = nc->getProxyByUrl(fetchUrl);
-    networkManager->setProxy(proxy);
-    ioLog.trace(fetchUrl);
-
-    QUrl requestUrl(fetchUrl);
-    downloadReply = networkManager->get(QNetworkRequest(requestUrl));
-    connect(downloadReply, SIGNAL(error(QNetworkReply::NetworkError)),
-        this, SLOT(sl_onError(QNetworkReply::NetworkError)));
-    connect(downloadReply, SIGNAL(uploadProgress(qint64, qint64)),
-        this, SLOT(sl_uploadProgress(qint64,qint64)));
-
-    QTimer::singleShot(100, this, SLOT(sl_cancelCheck()));
-    QTimer::singleShot(60000, this, SLOT(sl_timeout()));
-
-    loop->exec();
-    disconnect(0, 0, this, 0);
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    ioLog.trace("Download finished.");
-
-    QByteArray result = downloadReply->readAll();
-    if ((result.size() < 100) && result.contains("Nothing has been found")) {
-        setError(tr("Sequence with ID=%1 is not found.").arg(accNumber));
-        return;
-    }
-
-    //parse output
-    if (objectType == DASSequence){
-        XMLDASSequenceParser parser;
-        parser.parse(result);
-        if (!parser.getError().isEmpty()){
-            setError(parser.getError());
-        }else{
-            seq = parser.getSequence();
-        }
-    }else if(objectType == DASFeatures){
-        XMLDASFeaturesParser parser;
-        parser.parse(result);
-        if (!parser.getError().isEmpty()){
-            setError(parser.getError());
-        }else{
-            annotationData = parser.getAnnotationData();
-        }
-    }
-
-}
-
-DNASequence* LoadDasObjectTask::getSequence() {
-    return seq;
-}
-
-const QString& LoadDasObjectTask::getAccession() const {
-    return accNumber;
-}
-
-const DASSource& LoadDasObjectTask::getSource() const {
-    return source;
-}
-
-const QMap<QString, QList<SharedAnnotationData> >& LoadDasObjectTask::getAnnotationData() const {
-    return annotationData;
-}
-
-void LoadDasObjectTask::sl_replyFinished(QNetworkReply* reply) {
-    Q_UNUSED(reply);
-    loop->exit();
-}
-
-void LoadDasObjectTask::sl_onError(QNetworkReply::NetworkError error){
-    QNetworkReply *netReply = qobject_cast<QNetworkReply *>(sender());
-    QString errorText;
-    if (Q_LIKELY(NULL != netReply)) {
-        errorText = netReply->errorString();
-    } else {
-        errorText = tr("undefined error (code %1)").arg(error);
-    }
-    stateInfo.setError(QString("Network error: %1").arg(errorText));
-    loop->exit();
-}
-
-void LoadDasObjectTask::sl_uploadProgress(qint64 bytesSent, qint64 bytesTotal){
-    stateInfo.progress = bytesSent/ bytesTotal * 100;
-}
-
-void LoadDasObjectTask::sl_cancelCheck() {
-    if (isCanceled()) {
-        if (loop->isRunning()) {
-            loop->exit();
-        }
-    } else {
-        QTimer::singleShot(100, this, SLOT(sl_cancelCheck()));
-    }
-}
-
-void LoadDasObjectTask::sl_timeout() {
-    if (!hasError() && !isCanceled()) {
-        setError(tr("Remote server does not respond"));
-    }
-    if (loop->isRunning()) {
-        loop->exit();
-    }
-}
-
-void LoadDasObjectTask::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-//////////////////////////////////////////////////////////////////////////
-//LoadDasFeaturesTask
-LoadDasFeaturesTask::LoadDasFeaturesTask(const QStringList& accId, const QList<DASSource>& source)
-    : Task(tr("Load DAS annotations for current sequence"), TaskFlags(TaskFlag_NoRun) | TaskFlag_CancelOnSubtaskCancel
-    | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled), featureSources(source), accessionNumbers(accId)
-{
-
-}
-
-const QMap<QString, QList<SharedAnnotationData> > & LoadDasFeaturesTask::getAnnotationData() const {
-    return annotationData;
-}
-
-void LoadDasFeaturesTask::prepare() {
-    foreach(const QString &accNumber, accessionNumbers){
-        foreach (DASSource featureSource, featureSources) {
-            LoadDasObjectTask * loadAnnotationsTask = new LoadDasObjectTask(accNumber, featureSource, DASFeatures);
-            addSubTask(loadAnnotationsTask);
-        }
-    }
-}
-
-QList<Task*> LoadDasFeaturesTask::onSubTaskFinished(Task* subTask) {
-    QList<Task*> res;
-    LoadDasObjectTask* loadDasObjectTask = dynamic_cast<LoadDasObjectTask*>(subTask);
-    SAFE_POINT(NULL != loadDasObjectTask, "Incorrect subtask in LoadDasObjectsTask", res);
-    if(loadDasObjectTask->hasError()) {
-        reports += "<font size=\"5\" color=\"orange\">";
-        reports += tr("Can not receive response from the server \"") + loadDasObjectTask->getSource().getName() + "\"</font><br>";
-    }
-    else {
-        const QMap<QString, QList<SharedAnnotationData> > &data = loadDasObjectTask->getAnnotationData();
-        int annotationsNumber = 0;
-        foreach(const QString& key, data.keys()) {
-            annotationsNumber += data[key].size();
-        }
-        reports += tr("<font size=\"5\" color=\"green\">Received %1 annotations from the server \"%2\"</font><br>")
-            .arg(annotationsNumber).arg(loadDasObjectTask->getSource().getName());
-        mergeFeatures(loadDasObjectTask->getAnnotationData());
-    }
-    return res;
-}
-
-void LoadDasFeaturesTask::mergeFeatures(const QMap<QString, QList<SharedAnnotationData> >& newAnnotations) {
-    const QStringList& keys = newAnnotations.keys();
-    foreach (const QString& key, keys) {
-        if (annotationData.contains(key)) {
-            const QList<SharedAnnotationData>& curList = annotationData[key];
-            const QList<SharedAnnotationData>& tomergeList = newAnnotations[key];
-            foreach (const SharedAnnotationData &d, tomergeList) {
-                if (!curList.contains(d)) {
-                    annotationData[key].append(d);
-                }
-            }
-        } else {
-            annotationData.insert(key, newAnnotations[key]);
-        }
-    }
-}
-
-QString LoadDasFeaturesTask::generateReport() const {
-    return reports;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//ConvertAndLoadDASDocumentTask
-ConvertIdAndLoadDasDocumentTask::ConvertIdAndLoadDasDocumentTask(const QString& accId,
-                                                                 const QString& _fullPath,
-                                                                 const DASSource& _referenceSource,
-                                                                 const QList<DASSource>& _featureSources,
-                                                                 bool _convertId) :
-    Task(QString("Convert ID and load DAS document for: %1").arg(accId), TaskFlags(TaskFlag_NoRun | TaskFlag_CancelOnSubtaskCancel | TaskFlag_MinimizeSubtaskErrorText)),
-    convertDasIdTask(NULL),
-    loadDasDocumentTask(NULL),
-    accessionNumber(accId),
-    fullPath(_fullPath),
-    referenceSource(_referenceSource),
-    featureSources(_featureSources),
-    convertId(_convertId)
-{
-
-}
-
-QString ConvertIdAndLoadDasDocumentTask::getConvertedAccessionNumber() const {
-    CHECK(NULL != convertDasIdTask && convertDasIdTask->isFinished(), "");
-    CHECK(!convertDasIdTask->isCanceled() && !convertDasIdTask->hasError(), "");
-    return convertDasIdTask->getAccessionNumber();
-}
-
-void ConvertIdAndLoadDasDocumentTask::prepare() {
-    if (convertId) {
-        convertDasIdTask = new ConvertDasIdTask(accessionNumber);
-        addSubTask(convertDasIdTask);
-    } else {
-        loadDasDocumentTask = new LoadDasDocumentTask(accessionNumber, fullPath, referenceSource, featureSources);
-        addSubTask(loadDasDocumentTask);
-    }
-}
-
-QList<Task*> ConvertIdAndLoadDasDocumentTask::onSubTaskFinished(Task *subTask) {
-    QList<Task*> subTasks;
-
-    if (subTask->isCanceled()) {
-        return subTasks;
-    }
-
-    if (subTask == convertDasIdTask) {
-        if (!convertDasIdTask->getAccessionNumber().isEmpty() && !convertDasIdTask->hasError()) {
-            ioLog.details(QString("\"%1\" was converted into \"%2\"").
-                          arg(accessionNumber).
-                          arg(convertDasIdTask->getAccessionNumber()));
-            accessionNumber = convertDasIdTask->getAccessionNumber();
-        }
-        loadDasDocumentTask = new LoadDasDocumentTask(accessionNumber, fullPath, referenceSource, featureSources);
-        subTasks << loadDasDocumentTask;
-    }
-    if (subTask == loadDasDocumentTask && loadDasDocumentTask->hasError()) {
-        setError(loadDasDocumentTask->getError());
-    }
-
-    return subTasks;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//XMLDASSequenceParser
-XMLDASSequenceParser::XMLDASSequenceParser(){
-    seq = NULL;
-}
-
-#define DAS_SEQ_DASSEQUENCE "DASSEQUENCE"
-#define DAS_SEQ_SEQUENCE "SEQUENCE"
-#define DAS_SEQ_ID "id"
-void XMLDASSequenceParser::parse(const QByteArray& data){
-    //http://www.biodas.org/documents/spec-1.6.html
-    QDomDocument pDoc;
-    pDoc.setContent(data);
-
-    QDomElement dasSeq = pDoc.documentElement();
-    if(dasSeq.tagName() != DAS_SEQ_DASSEQUENCE){
-        setError(QString("No %1 tag").arg(DAS_SEQ_DASSEQUENCE));
-        return;
-    }
-    //here may be multiple sequence tags, but we take only the first one
-    QDomNode seqNode = dasSeq.firstChild();
-    if (!seqNode.isNull()){
-        QDomElement seqElement = seqNode.toElement();
-        if(seqElement.tagName() != DAS_SEQ_SEQUENCE){
-            setError(QString("No %1 tag").arg(DAS_SEQ_SEQUENCE));
-            return;
-        }
-        QString sequenceId = seqElement.attribute(DAS_SEQ_ID).trimmed();
-        QByteArray sequence = seqElement.text().toLatin1().trimmed();
-
-        const DNAAlphabet* a = U2AlphabetUtils::findBestAlphabet(sequence.data(), sequence.size());
-
-        seq = new DNASequence(sequenceId, sequence, a);
-
-    }else{
-        setError(QString("No %1 tag").arg(DAS_SEQ_SEQUENCE));
-        return;
-    }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-//XMLDASFeaturesParser
-XMLDASFeaturesParser::XMLDASFeaturesParser() {
-
-}
-
-#define DAS_FEATURE_DASGFF "DASGFF"
-#define DAS_FEATURE_GFF "GFF"
-#define DAS_FEATURE_SEGMENT "SEGMENT"
-#define DAS_FEATURE_ID "id"
-#define DAS_FEATURE_START "start"
-#define DAS_FEATURE_STOP  "stop"
-#define DAS_FEATURE_FEATURE "FEATURE"
-#define DAS_FEATURE_LABEL "label"
-#define DAS_FEATURE_HREF "href"
-
-#define DAS_FEATURE_TYPE "TYPE"
-#define DAS_FEATURE_METHOD "METHOD"
-#define DAS_FEATURE_START_POS "START"
-#define DAS_FEATURE_END_POS "END"
-#define DAS_FEATURE_SCORE "SCORE"
-#define DAS_FEATURE_ORIENTATION "ORIENTATION"
-#define DAS_FEATURE_PHASE "PHASE"
-#define DAS_FEATURE_NOTE "NOTE"
-#define DAS_FEATURE_LINK "LINK"
-#define DAS_FEATURE_TARGET "TARGET"
-#define DAS_FEATURE_PARENT "PARENT"
-#define DAS_FEATURE_PART "PART"
-
-void XMLDASFeaturesParser::parse(const QByteArray& data){
-    //http://www.biodas.org/documents/spec-1.6.html
-    QDomDocument pDoc;
-    pDoc.setContent(data);
-
-    //DASGFF
-    QDomElement dasGff = pDoc.documentElement();
-    if(dasGff.tagName() != DAS_FEATURE_DASGFF){
-        setError(QString("No %1 tag").arg(DAS_FEATURE_DASGFF));
-        return;
-    }
-
-    //GFF
-    QDomNode gff = dasGff.firstChild();
-    if (!gff.isNull()){
-        QDomElement gffElement = gff.toElement();
-        if(gffElement.tagName() != DAS_FEATURE_GFF){
-            setError(QString("No %1 tag").arg(DAS_FEATURE_GFF));
-            return;
-        }
-
-        //SEGMENT
-        QDomNode gffSegment = gffElement.firstChild();
-        while (!gffSegment.isNull()){
-            QDomElement gffSegmentElement = gffSegment.toElement();
-            if(gffSegmentElement.tagName() != DAS_FEATURE_SEGMENT){
-                //no annotations
-                return;
-            }
-            QString sequenceId = gffSegmentElement.attribute(DAS_FEATURE_ID);
-            qint64 start = gffSegmentElement.attribute(DAS_FEATURE_START).toInt();
-            qint64 stop = gffSegmentElement.attribute(DAS_FEATURE_STOP).toInt();
-
-            //FEATURE
-            QDomNode featureSegment = gffSegmentElement.firstChild();
-            while (!featureSegment.isNull()){
-                QDomElement featureSegmentElement = featureSegment.toElement();
-                if(featureSegmentElement.tagName() != DAS_FEATURE_FEATURE){
-                    setError(QString("No %1 tag").arg(DAS_FEATURE_FEATURE));
-                    return;
-                }
-                //annotation data
-                QString featureLabel = featureSegmentElement.attribute(DAS_FEATURE_LABEL);
-                QString featureId = featureSegmentElement.attribute(DAS_FEATURE_ID);
-
-                QString groupName = "";
-                QString groupId = "";
-                QString methodQual = "";
-                qint64 startPos = -1;
-                qint64 endPos = -1;
-                float score = -1.0f;
-                bool complemented = false;
-                QString note = "";
-                QString link = "";
-                QString target = "";
-
-                //FEATURE_ATTRS
-                QDomNode featureAttrSegment = featureSegmentElement.firstChild();
-                while (!featureAttrSegment.isNull()){
-                    QDomElement featureAttrElement = featureAttrSegment.toElement();
-
-                    QString tagName = featureAttrElement.tagName();
-                    if (tagName == DAS_FEATURE_TYPE){
-                        //group name
-                        groupName = featureAttrElement.text();
-                        groupId = featureAttrElement.attribute(DAS_FEATURE_ID);
-                        if (groupName.isEmpty()){
-                            groupName = groupId;
-                        }
-                    }else if (tagName == DAS_FEATURE_METHOD){
-                        methodQual = featureAttrElement.text();
-                        if (methodQual.isEmpty()){
-                            methodQual = featureAttrElement.attribute(DAS_FEATURE_ID);
-                        }
-
-                    }else if (tagName == DAS_FEATURE_START_POS){
-                        QString startText = featureAttrElement.text();
-                        if (!startText.isEmpty()){
-                            startPos = startText.toInt();
-                        }
-
-                    }else if (tagName == DAS_FEATURE_END_POS){
-                        QString endText = featureAttrElement.text();
-                        if (!endText.isEmpty()){
-                            endPos = endText.toInt();
-                        }
-                    }else if (tagName == DAS_FEATURE_SCORE){
-                        QString scoreText = featureAttrElement.text();
-                        if (!scoreText.isEmpty() && scoreText != "-"){
-                            score = scoreText.toFloat();
-                        }
-
-                    }else if (tagName == DAS_FEATURE_ORIENTATION){
-                        QString complText = featureAttrElement.text();
-                        if (complText == "-"){
-                            complemented = true;
-                        }
-
-                    }else if (tagName == DAS_FEATURE_PHASE){
-                        //skip
-
-                    }else if (tagName == DAS_FEATURE_NOTE){
-                        note = featureAttrElement.text();
-
-                    }else if (tagName == DAS_FEATURE_LINK){
-                        link = featureAttrElement.attribute(DAS_FEATURE_HREF);
-
-                    }else if (tagName == DAS_FEATURE_TARGET){
-                        target = featureAttrElement.text();
-                        if (target.isEmpty()){
-                            target = featureAttrElement.attribute(DAS_FEATURE_ID);
-                        }
-
-                    }else if (tagName == DAS_FEATURE_PARENT){
-                        //skip
-
-                    }else if (tagName == DAS_FEATURE_PART){
-                        //skip
-
-                    }
-
-
-                    featureAttrSegment = featureAttrSegment.nextSibling();
-                }
-
-                featureSegment = featureSegment.nextSibling();
-
-                SharedAnnotationData data(new AnnotationData);
-                data->name = featureId.simplified();
-                U2Region reg; //1-based start
-
-
-                if (startPos == -1 || endPos == -1){//non-positional
-                    data->qualifiers.append(U2Qualifier("non-positional", "yes"));
-                    if ((start == 0 && stop == 0) || (start > stop)){
-                        reg = U2_REGION_MAX;
-                    }else{
-                        reg = U2Region(start - 1, stop - start + 1);
-                    }
-                }else{
-                    if ((startPos == 0 && endPos == 0) || (startPos > endPos)){
-                        reg = U2_REGION_MAX;
-                    }else{
-                        reg = U2Region(startPos - 1, endPos - startPos + 1);
-                    }
-                }
-                data->location->regions << reg;
-                data->setStrand(complemented ? U2Strand::Complementary : U2Strand::Direct);
-
-                if (!methodQual.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("method", methodQual.simplified()));
-                }
-
-                if (score != -1.0f){
-                    data->qualifiers.append(U2Qualifier("score", QString::number(score)));
-                }
-
-                if (!note.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("note", note.simplified()));
-                }
-
-                if (!link.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("link", link.simplified()));
-                }
-
-                if (!target.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("target", target.simplified()));
-                }
-
-                if (!sequenceId.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("seq_id", sequenceId.simplified()));
-                }
-
-                if (groupName.isEmpty()){
-                    groupName = "das_features";
-                }
-
-                data->qualifiers.append(U2Qualifier("type", groupName.simplified()));
-
-                if (!groupId.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("type_id", groupId.simplified()));
-                }
-
-                data->qualifiers.append(U2Qualifier("feature_id", featureId.simplified()));
-                if (!featureLabel.isEmpty()){
-                    data->qualifiers.append(U2Qualifier("feature_label", featureLabel.simplified()));
-                }
-
-                annotationData[groupName].append(data);
-            }
-
-
-            gffSegment = gffSegment.nextSibling();
-        }
-
-    }else{
-        setError(QString("No %1 tag").arg(DAS_FEATURE_GFF));
-        return;
-    }
-}
-
-ConvertIdAndLoadDasFeaturesTask::ConvertIdAndLoadDasFeaturesTask(const QStringList &accessionNumbers, const QList<DASSource> &featureSources, bool convertId) :
-    Task(tr("Convert ID and load DAS features for: %1").arg(accessionNumbers.join(", ")), TaskFlags(TaskFlag_CancelOnSubtaskCancel | TaskFlag_NoRun | TaskFlag_MinimizeSubtaskErrorText)),
-    convertDasIdTasks(NULL),
-    loadDasFeaturesTask(NULL),
-    accessionNumbers(accessionNumbers),
-    featureSources(featureSources),
-    convertId(convertId)
-{
-}
-
-void ConvertIdAndLoadDasFeaturesTask::prepare() {
-    if (convertId) {
-        QList<Task *> convertTasks;
-        foreach (const QString &accessionNumber, accessionNumbers) {
-            convertTasks << new ConvertDasIdTask(accessionNumber);
-        }
-
-        convertDasIdTasks = new MultiTask(tr("Convert IDs task"), convertTasks, TaskFlags(TaskFlag_CancelOnSubtaskCancel));
-        addSubTask(convertDasIdTasks);
-    } else {
-        loadDasFeaturesTask = new LoadDasFeaturesTask(accessionNumbers, featureSources);
-        addSubTask(loadDasFeaturesTask);
-    }
-}
-
-QList<Task *> ConvertIdAndLoadDasFeaturesTask::onSubTaskFinished(Task *subTask) {
-    QList<Task *> subTasks;
-
-    if (subTask->isCanceled()) {
-        return subTasks;
-    }
-
-    if (subTask == convertDasIdTasks) {
-        QStringList convertedAccessionNumbers;
-        foreach (Task *convertTask, convertDasIdTasks->getSubtasks()) {
-            ConvertDasIdTask *convertDasIdTask = qobject_cast<ConvertDasIdTask *>(convertTask);
-            if (!convertDasIdTask->getAccessionNumber().isEmpty() && !convertDasIdTask->hasError()) {
-                ioLog.details(tr("\"%1\" was converted into \"%2\"").
-                              arg(convertDasIdTask->getSourceAccessionNumber()).
-                              arg(convertDasIdTask->getAccessionNumber()));
-                convertedAccessionNumbers << convertDasIdTask->getAccessionNumber();
-            }
-        }
-        loadDasFeaturesTask = new LoadDasFeaturesTask(convertedAccessionNumbers, featureSources);
-        subTasks << loadDasFeaturesTask;
-    }
-
-    if (subTask == loadDasFeaturesTask && loadDasFeaturesTask->hasError()) {
-        setError(loadDasFeaturesTask->getError());
-    }
-
-    return subTasks;
-}
-
-const QMap<QString, QList<SharedAnnotationData> > & ConvertIdAndLoadDasFeaturesTask::getAnnotationData() const {
-    return loadDasFeaturesTask->getAnnotationData();
-}
-
-} //namespace
diff --git a/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.h b/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.h
deleted file mode 100644
index 76600ec..0000000
--- a/src/corelibs/U2Core/src/tasks/LoadDASDocumentTask.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_LOAD_DAS_DOCUMENT_TASK_H_
-#define _U2_LOAD_DAS_DOCUMENT_TASK_H_
-
-#include <U2Core/AnnotationData.h>
-#include <U2Core/DASSource.h>
-#include <U2Core/LoadRemoteDocumentTask.h>
-
-class QNetworkAccessManager;
-class QNetworkReply;
-
-namespace U2 {
-
-class ConvertDasIdTask;
-class DNASequence;
-class MultiTask;
-class SaveDocumentTask;
-
-class XMLDASSequenceParser{
-public:
-                    XMLDASSequenceParser( );
-    void            parse( const QByteArray &data );
-
-    QString         getError( ) const { return error; }
-    void            setError( const QString &val ) { error = val; }
-
-    DNASequence *   getSequence( ) { return seq; }
-private:
-    QString         error;
-    DNASequence*    seq;
-};
-
-class XMLDASFeaturesParser{
-public:
-    XMLDASFeaturesParser( );
-    void parse( const QByteArray &data );
-
-    QString getError() const { return error; }
-    void setError( const QString &val ) { error = val; }
-
-    QMap<QString, QList<SharedAnnotationData> > getAnnotationData() { return annotationData; }
-private:
-    QString error;
-
-    QMap<QString, QList<SharedAnnotationData> > annotationData;
-
-};
-
-class U2CORE_EXPORT LoadDasObjectTask : public Task {
-    Q_OBJECT
-    Q_DISABLE_COPY(LoadDasObjectTask)
-public:
-    LoadDasObjectTask (const QString& accId, const DASSource& source, DASObjectType objType);
-    virtual ~LoadDasObjectTask();
-
-    virtual void run();
-
-    DNASequence*                                    getSequence();
-    const QString&                                  getAccession() const;
-    const DASSource&                                getSource() const;
-    const QMap<QString, QList<SharedAnnotationData> > & getAnnotationData( ) const;
-
-public slots:
-    void sl_replyFinished(QNetworkReply* reply);
-    void sl_onError(QNetworkReply::NetworkError error);
-    void sl_uploadProgress( qint64 bytesSent, qint64 bytesTotal);
-
-    void sl_cancelCheck();
-    void sl_timeout();
-private slots:
-    void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-private:
-    QString                 accNumber;
-    DASSource               source;
-    DASObjectType           objectType;
-
-    QEventLoop*             loop;
-    QNetworkReply*          downloadReply;
-    QNetworkAccessManager*  networkManager;
-    QTimer*                 timeoutTimer;
-    QTimer*                 cancelCheckTimer;
-
-    DNASequence*            seq;
-
-    QMap<QString, QList<SharedAnnotationData> > annotationData;
-};
-
-class U2CORE_EXPORT LoadDasFeaturesTask : public Task{
-    Q_OBJECT
-        Q_DISABLE_COPY(LoadDasFeaturesTask)
-public:
-    LoadDasFeaturesTask(const QStringList& accId, const QList<DASSource>& source);
-    LoadDasFeaturesTask();
-
-    const QMap<QString, QList<SharedAnnotationData> > & getAnnotationData( ) const;
-
-    QString generateReport() const;
-
-protected:
-    virtual void prepare();
-
-    QList<Task*> onSubTaskFinished(Task* subTask);
-
-private:
-    void mergeFeatures(const QMap<QString, QList<SharedAnnotationData> > & newAnnotations);
-
-    QMap<QString, QList<SharedAnnotationData> > annotationData;
-
-    QList<DASSource>          featureSources;
-    QStringList               accessionNumbers;
-    QString                   reports;
-};
-
-
-class U2CORE_EXPORT LoadDasDocumentTask : public BaseLoadRemoteDocumentTask{
-    Q_OBJECT
-public:
-    LoadDasDocumentTask(const QString& accId, const QString& fullPath, const DASSource& referenceSource, const QList<DASSource>& featureSources);
-
-protected:
-    virtual void prepare();
-
-    virtual QString getFileFormat(const QString & dbid);
-    virtual GUrl    getSourceUrl();
-    virtual QString getFileName();
-
-    QList<Task*> onSubTaskFinished(Task* subTask);
-
-    bool isAllDataLoaded();
-
-private:
-    void mergeFeatures(const QMap<QString, QList<SharedAnnotationData> >& newAnnotations);
-
-private:
-    QString                                     accNumber;
-    QList<DASSource>                            featureSources;
-    DASSource                                   referenceSource;
-
-    LoadDasObjectTask*                          loadSequenceTask;
-    QList<LoadDasObjectTask*>                   loadFeaturesTasks;
-
-    SaveDocumentTask*                           saveDocumentTask;
-
-    DNASequence*                                seq;
-    QMap<QString, QList<SharedAnnotationData> > annotationData;
-};
-
-class U2CORE_EXPORT ConvertIdAndLoadDasFeaturesTask : public Task {
-    Q_OBJECT
-public:
-    ConvertIdAndLoadDasFeaturesTask(const QStringList& accessionNumbers, const QList<DASSource>& featureSources, bool convertId = false);
-
-    virtual void prepare();
-    virtual QList<Task*> onSubTaskFinished(Task *subTask);
-
-    const QMap<QString, QList<SharedAnnotationData> > & getAnnotationData() const;
-
-private:
-    MultiTask *             convertDasIdTasks;
-    LoadDasFeaturesTask *   loadDasFeaturesTask;
-
-    QStringList             accessionNumbers;
-    QList<DASSource>        featureSources;
-
-    bool convertId;
-};
-
-class U2CORE_EXPORT ConvertIdAndLoadDasDocumentTask : public Task {
-    Q_OBJECT
-public:
-    ConvertIdAndLoadDasDocumentTask(const QString& accId, const QString& fullPath, const DASSource& referenceSource, const QList<DASSource>& featureSources, bool convertId = false);
-
-    QString getConvertedAccessionNumber() const;
-    Document* getDocument() { return loadDasDocumentTask->getDocument(); }
-    Document* takeDocument() { return loadDasDocumentTask->takeDocument(); }
-    QString getLocalUrl() { return loadDasDocumentTask->getLocalUrl(); }
-
-    virtual void prepare();
-    virtual QList<Task*> onSubTaskFinished(Task *subTask);
-
-private:
-    ConvertDasIdTask*       convertDasIdTask;
-    LoadDasDocumentTask*    loadDasDocumentTask;
-
-    QString                 accessionNumber;
-    QString                 fullPath;
-    DASSource               referenceSource;
-    QList<DASSource>        featureSources;
-
-    bool convertId;
-};
-
-
-} //namespace
-
-#endif // _U2_LOAD_DAS_DOCUMENT_TASK_H_
diff --git a/src/corelibs/U2Core/src/tasks/PicrApiTask.cpp b/src/corelibs/U2Core/src/tasks/PicrApiTask.cpp
deleted file mode 100644
index a86163b..0000000
--- a/src/corelibs/U2Core/src/tasks/PicrApiTask.cpp
+++ /dev/null
@@ -1,619 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/QEventLoop>
-#include <QtCore/QTimer>
-
-#include <QtNetwork/QAuthenticator>
-
-#include <QtXml/QDomDocument>
-
-#include <U2Core/DocumentModel.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2SequenceUtils.h>
-#include <U2Core/GObjectRelationRoles.h>
-
-#include "LoadDASDocumentTask.h"
-#include "PicrApiTask.h"
-
-namespace U2 {
-
-//////////////////////////////////////////////////////////////////////////
-//PicrElement
-PicrElement::PicrElement(const QString& _accessionNumber,
-            const int _accessionVersion,
-            const QString& _databaseName,
-            const QString& _databaseDescription,
-            const int _ncbiId,
-            const int _taxonId,
-            int _identity):
-    accessionNumber(_accessionNumber),
-    accessionVersion(_accessionVersion),
-    databaseName(_databaseName),
-    databaseDescription(_databaseDescription),
-    ncbiId(_ncbiId),
-    taxonId(_taxonId),
-    identity(_identity) {
-}
-
-bool PicrElement::operator == (const PicrElement& other) const {
-    return accessionNumber == other.accessionNumber &&
-            databaseName == other.databaseName;
-}
-
-bool PicrElement::operator > (const PicrElement &other) const {
-    return CommonDasSettings::getPriority(databaseName) > CommonDasSettings::getPriority(other.databaseName);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//XmlPicrIdsParser
-const QString XmlPicrParser::PICR_ACCESSION_RETURN = "ns2:getUPIForAccessionReturn";
-const QString XmlPicrParser::PICR_SEQUENCE_RETURN = "ns2:getUPIForSequenceReturn";
-const QString XmlPicrParser::PICR_BLAST_RETURN = "ns2:getUPIForBlastReturn";
-const QString XmlPicrParser::PICR_SEQUENCE = "sequence";
-const QString XmlPicrParser::PICR_IDENTICAL_CROSS_REFERENCE = "identicalCrossReferences";
-const QString XmlPicrParser::PICR_ACCESSION_NUMBER = "accession";
-const QString XmlPicrParser::PICR_ACCESSION_VERSION = "accessionVersion";
-const QString XmlPicrParser::PICR_DATABASE_DESCRIPTION = "databaseDescription";
-const QString XmlPicrParser::PICR_DATABASE_NAME = "databaseName";
-const QString XmlPicrParser::PICR_NCBI_GI = "gi";
-const QString XmlPicrParser::PICR_TAXON_ID = "taxonId";
-const QString XmlPicrParser::SERVER_ERROR_STRING = "500 internal server error";
-
-XmlPicrParser::XmlPicrParser(ResponseType _responseType) :
-    responseType(_responseType) {
-}
-
-void XmlPicrParser::parse(const QByteArray& data) {
-    if (QString(data).contains(SERVER_ERROR_STRING)) {
-        setError(QString("Something gone wrong on the server (%1). Please, try later.").arg(SERVER_ERROR_STRING));
-        return;
-    }
-
-    QDomDocument pDoc;
-    pDoc.setContent(data);
-
-    QDomElement docElement = pDoc.documentElement();
-    if (docElement.childNodes().isEmpty()) {
-        setError("No IDs found.");
-        return;
-    }
-
-    QDomNodeList returnList;
-    QDomElement returnElement;
-    if (responseType == Accession) {
-        // Find the longest matching sequence
-        returnList = docElement.elementsByTagName(PICR_ACCESSION_RETURN);
-        int maxLength = 0;
-        int maxIndex = 0;
-        for (int i = 0; i < returnList.count(); ++i) {
-            QDomNodeList sequenceNodeList = returnList.item(i).toElement().elementsByTagName(PICR_SEQUENCE);
-            if (1 != sequenceNodeList.count()) {
-                setError(QString("Invalid XML: %1 sequences found in the \"%2\" part").
-                         arg(sequenceNodeList.count()).
-                         arg(PICR_ACCESSION_RETURN));
-                return;
-            }
-            QDomElement sequenceElement = sequenceNodeList.item(0).toElement();
-
-            if (maxLength < sequenceElement.text().length()) {
-                maxLength = sequenceElement.text().length();
-                maxIndex = i;
-            }
-        }
-
-        returnElement = returnList.item(maxIndex).toElement();
-        if (returnElement.isNull()) {
-            setError(QString("Invalid XML: \"%1\" element is not found").arg(PICR_ACCESSION_RETURN));
-            return;
-        }
-    }
-    else if (responseType == ExactSequence) {
-        // Find the longest matching sequence
-        returnList = docElement.elementsByTagName(PICR_SEQUENCE_RETURN);
-        int maxLength = 0;
-        int maxIndex = 0;
-        for (int i = 0; i < returnList.count(); ++i) {
-            QDomNodeList sequenceNodeList = returnList.item(i).toElement().elementsByTagName(PICR_SEQUENCE);
-            if (1 != sequenceNodeList.count()) {
-                setError(QString("Invalid XML: %1 sequences found in the \"%2\" part").
-                         arg(sequenceNodeList.count()).
-                         arg(PICR_SEQUENCE_RETURN));
-                return;
-            }
-            QDomElement sequenceElement = sequenceNodeList.item(0).toElement();
-
-            if (maxLength < sequenceElement.text().length()) {
-                maxLength = sequenceElement.text().length();
-                maxIndex = i;
-            }
-        }
-
-        returnElement = returnList.item(maxIndex).toElement();
-        returnElement = returnList.item(maxIndex).toElement();
-        if (returnElement.isNull()) {
-            setError(QString("Invalid XML: \"%1\" element is not found").arg(PICR_SEQUENCE_RETURN));
-            return;
-        }
-    }
-    else if (responseType == Blast) {
-        returnElement = docElement;
-    }
-
-    QDomNodeList icrList = returnElement.elementsByTagName(PICR_IDENTICAL_CROSS_REFERENCE);
-    if (icrList.isEmpty()) {
-        setError(QString("No %1 tag").arg(PICR_IDENTICAL_CROSS_REFERENCE));
-        return;
-    }
-
-    for (int i = 0; i < icrList.count(); ++i) {
-        QDomNode icr = icrList.item(i);
-        PicrElement element;
-
-        for (int j = 0; j < icr.childNodes().count(); j++) {
-            QDomElement childElement = icr.childNodes().item(j).toElement();
-            if (childElement.tagName() == PICR_ACCESSION_NUMBER) {
-                element.accessionNumber = childElement.text();
-            }
-            if (childElement.tagName() == PICR_ACCESSION_VERSION) {
-                bool ok = false;
-                int value = childElement.text().toInt(&ok);
-                if (ok) {
-                    element.accessionVersion = value;
-                }
-            }
-            if (childElement.tagName() == PICR_DATABASE_DESCRIPTION) {
-                element.databaseDescription = childElement.text();
-            }
-            if (childElement.tagName() == PICR_DATABASE_NAME) {
-                element.databaseName = childElement.text();
-            }
-            if (childElement.tagName() == PICR_NCBI_GI) {
-                bool ok = false;
-                int value = childElement.text().toInt(&ok);
-                if (ok) {
-                    element.ncbiId = value;
-                }
-            }
-            if (childElement.tagName() == PICR_TAXON_ID) {
-                bool ok = false;
-                int value = childElement.text().toInt(&ok);
-                if (ok) {
-                    element.taxonId = value;
-                }
-            }
-        }
-
-        // Sometimes the "accession" element inculdes accession version. It should be splitted.
-        if (element.accessionVersion < 0 &&
-                (element.accessionNumber.contains(QRegExp("\\.|\\-")))) {
-            QStringList accession = element.accessionNumber.split(QRegExp("\\.|\\-"));
-            SAFE_POINT(accession.count() > 1, "Invalid accession field in the XML response", );
-
-            element.accessionNumber = accession.takeFirst();
-            bool ok = false;
-            int value = accession.first().toInt(&ok);
-            if (ok) {
-                element.accessionVersion = value;
-            }
-        }
-
-        if (!results.contains(element)) {
-            results << element;
-        }
-    }
-
-    return;
-}
-
-QString XmlPicrParser::getError() const {
-    return error;
-}
-
-void XmlPicrParser::setError(const QString& val) {
-    error = val;
-}
-
-QList<PicrElement> XmlPicrParser::getResults() {
-    return results;
-}
-
-bool XmlPicrParser::isResultsEmpty() {
-    return results.isEmpty();
-}
-
-//////////////////////////////////////////////////////////////////////////
-//CommonDasSettings
-const QString CommonDasSettings::dbSwissprot = "SWISSPROT";
-const QString CommonDasSettings::dbTrembl = "TREMBL";
-const QString CommonDasSettings::dbSwissprotVarsplic = "SWISSPROT_VARSPLIC";
-const QString CommonDasSettings::dbTremblVarsplic = "TREMBL_VARSPLIC";
-const QString CommonDasSettings::databaseStr = "&database=" + CommonDasSettings::dbSwissprot +
-                                               "&database=" + CommonDasSettings::dbTrembl +
-                                               "&database=" + CommonDasSettings::dbSwissprotVarsplic +
-                                               "&database=" + CommonDasSettings::dbTremblVarsplic;
-
-int CommonDasSettings::getPriority(const QString &databaseName) {
-    return getPriorityTable().value(databaseName, -1);
-}
-
-QHash<QString, int> CommonDasSettings::getPriorityTable() {
-    static QHash<QString, int> priorityTable;
-    if (Q_UNLIKELY(priorityTable.isEmpty())) {
-        priorityTable.insert(dbTremblVarsplic, 0);
-        priorityTable.insert(dbSwissprotVarsplic, 1);
-        priorityTable.insert(dbTrembl, 2);
-        priorityTable.insert(dbSwissprot, 3);
-    }
-    return priorityTable;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//ConvertDasIdTask
-const QString ConvertDasIdTask::baseUrl = QString("http://www.ebi.ac.uk/Tools/picr/rest/getUPIForAccession");
-const QString ConvertDasIdTask::databasePart = CommonDasSettings::databaseStr;
-const QString ConvertDasIdTask::parametersPart = QString("&includeattributes=true");
-
-ConvertDasIdTask::ConvertDasIdTask(const QString& resId) :
-    Task(tr("Convert resource id: %1").arg(resId), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText),
-    resourceId(resId),
-    loop(NULL),
-    downloadReply(NULL),
-    networkManager(NULL) {
-}
-
-ConvertDasIdTask::~ConvertDasIdTask() {
-    delete loop;
-    delete networkManager;
-}
-
-void ConvertDasIdTask::run() {
-    if (stateInfo.isCanceled()) {
-        return;
-    }
-    stateInfo.progress = 0;
-    ioLog.trace("Sending request to PICR...");
-
-    loop = new QEventLoop;
-
-    networkManager = new QNetworkAccessManager();
-    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sl_replyFinished(QNetworkReply*)));
-    connect(networkManager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    NetworkConfiguration* nc = AppContext::getAppSettings()->getNetworkConfiguration();
-
-    ioLog.trace("Downloading xml file...");
-
-    QString fetchUrl = getRequestUrlString();
-    QNetworkProxy proxy = nc->getProxyByUrl(fetchUrl);
-    networkManager->setProxy(proxy);
-    ioLog.trace(fetchUrl);
-
-    QUrl requestUrl(fetchUrl);
-    downloadReply = networkManager->get(QNetworkRequest(requestUrl));
-    connect(downloadReply, SIGNAL(error(QNetworkReply::NetworkError)),
-        this, SLOT(sl_onError(QNetworkReply::NetworkError)));
-    connect( downloadReply, SIGNAL(uploadProgress( qint64, qint64 )),
-        this, SLOT(sl_uploadProgress(qint64,qint64)) );
-
-    QTimer::singleShot(100, this, SLOT(sl_cancelCheck()));
-    QTimer::singleShot(60000, this, SLOT(sl_timeout()));
-
-    loop->exec();
-    disconnect(0, 0, this, 0);
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    ioLog.trace("Download finished.");
-
-    QByteArray result = downloadReply->readAll();
-
-    //parse output
-    XmlPicrParser parser(XmlPicrParser::Accession);
-    parser.parse(result);
-    if (!parser.getError().isEmpty()) {
-        setError(parser.getError());
-    } else {
-        accNumber = getUniprotBestGuessResult(parser.getResults());
-    }
-}
-
-const QString &ConvertDasIdTask::getSourceAccessionNumber() const {
-    return resourceId;
-}
-
-const QString &ConvertDasIdTask::getAccessionNumber() const {
-    return accNumber;
-}
-
-void ConvertDasIdTask::sl_replyFinished(QNetworkReply* reply) {
-    Q_UNUSED(reply);
-    loop->exit();
-}
-
-void ConvertDasIdTask::sl_onError(QNetworkReply::NetworkError error) {
-    QNetworkReply *netReply = qobject_cast<QNetworkReply *>(sender());
-    QString errorText;
-    if (Q_LIKELY(NULL != netReply)) {
-        errorText = netReply->errorString();
-    } else {
-        errorText = tr("undefined error (code %1)").arg(error);
-    }
-    stateInfo.setError(QString("Network error: %1").arg(errorText));
-    loop->exit();
-}
-
-void ConvertDasIdTask::sl_uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
-    stateInfo.progress = bytesSent/ bytesTotal * 100;
-}
-
-void ConvertDasIdTask::sl_cancelCheck() {
-    if (isCanceled()) {
-        if (loop->isRunning()) {
-            loop->exit();
-        }
-    } else {
-        QTimer::singleShot(100, this, SLOT(sl_cancelCheck()));
-    }
-}
-
-void ConvertDasIdTask::sl_timeout() {
-    if (!hasError() && !isCanceled()) {
-        setError(tr("Remote server does not respond"));
-    }
-    if (loop->isRunning()) {
-        loop->exit();
-    }
-}
-
-void ConvertDasIdTask::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-QString ConvertDasIdTask::getRequestUrlString() {
-    QString res = "";
-    if (resourceId.isEmpty()) {
-        return res;
-    }
-
-    res = baseUrl + "?accession=" + resourceId + databasePart + parametersPart;
-
-    return res;
-}
-
-QString ConvertDasIdTask::getUniprotBestGuessResult(const QList<PicrElement> &results) {
-    // UniProt 'best guess': In order of precedence: Swiss-Prot, TrEMBL, Swiss-Prot varsplic, and TrEMBL varsplic
-    CHECK(!results.isEmpty(), "");
-    PicrElement bestGuess = results.first();
-    foreach (const PicrElement &result, results) {
-        if (result > bestGuess) {
-            bestGuess = result;
-        }
-    }
-    return bestGuess.accessionNumber;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-//GetDasIdsBySequenceTask
-GetDasIdsBySequenceTask::GetDasIdsBySequenceTask(const QByteArray& _sequence) :
-    Task(tr("Get an ID for the sequence"), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText),
-    sequence(_sequence),
-    loop(NULL),
-    downloadReply(NULL),
-    networkManager(NULL) {
-}
-
-GetDasIdsBySequenceTask::~GetDasIdsBySequenceTask() {
-    delete loop;
-    delete networkManager;
-}
-
-void GetDasIdsBySequenceTask::run() {
-    if (stateInfo.isCanceled()) {
-        return;
-    }
-    stateInfo.progress = 0;
-    ioLog.trace("Sending request to PICR...");
-
-    loop = new QEventLoop;
-
-    networkManager = new QNetworkAccessManager();
-    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sl_replyFinished(QNetworkReply*)));
-    connect(networkManager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    NetworkConfiguration* nc = AppContext::getAppSettings()->getNetworkConfiguration();
-
-    ioLog.trace("Downloading xml file...");
-
-    QString fetchUrl = getRequestUrlString();
-    SAFE_POINT(!fetchUrl.isEmpty(), QString("Invalid fetch URL: %1").arg(fetchUrl), );
-    QNetworkProxy proxy = nc->getProxyByUrl(fetchUrl);
-    networkManager->setProxy(proxy);
-    ioLog.trace(fetchUrl);
-
-    QUrl requestUrl(fetchUrl);
-    downloadReply = networkManager->get(QNetworkRequest(requestUrl));
-    connect(downloadReply, SIGNAL(error(QNetworkReply::NetworkError)),
-        this, SLOT(sl_onError(QNetworkReply::NetworkError)));
-    connect( downloadReply, SIGNAL(uploadProgress( qint64, qint64 )),
-        this, SLOT(sl_uploadProgress(qint64,qint64)) );
-
-    loop->exec();
-    ioLog.trace("Download finished.");
-
-    QByteArray result = downloadReply->readAll();
-
-    //parse output
-    XmlPicrParser parser = getParser();
-    parser.parse(result);
-    if (!parser.getError().isEmpty()) {
-        setError(parser.getError());
-    } else {
-        results = parser.getResults();
-    }
-}
-
-QList<PicrElement> GetDasIdsBySequenceTask::getResults() {
-    return results;
-}
-
-void GetDasIdsBySequenceTask::sl_replyFinished(QNetworkReply* reply) {
-    Q_UNUSED(reply);
-    loop->exit();
-}
-
-void GetDasIdsBySequenceTask::sl_onError(QNetworkReply::NetworkError error) {
-    QNetworkReply *netReply = qobject_cast<QNetworkReply *>(sender());
-    QString errorText;
-    if (Q_LIKELY(NULL != netReply)) {
-        errorText = netReply->errorString();
-    } else {
-        errorText = tr("undefined error (code %1)").arg(error);
-    }
-    stateInfo.setError(QString("Network error: %1").arg(errorText));
-    loop->exit();
-}
-
-void GetDasIdsBySequenceTask::sl_uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
-    stateInfo.progress = bytesSent/ bytesTotal * 100;
-}
-
-void GetDasIdsBySequenceTask::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-//////////////////////////////////////////////////////////////////////////
-//GetDasIdsByExactSequenceTask
-const QString GetDasIdsByExactSequenceTask::baseUrl = QString("http://www.ebi.ac.uk/Tools/picr/rest/getUPIForSequence");
-const QString GetDasIdsByExactSequenceTask::databasePart = CommonDasSettings::databaseStr;
-const QString GetDasIdsByExactSequenceTask::parametersPart = QString("&includeattributes=true");
-
-GetDasIdsByExactSequenceTask::GetDasIdsByExactSequenceTask(const QByteArray& _sequence) :
-    GetDasIdsBySequenceTask(_sequence) {
-}
-
-GetDasIdsByExactSequenceTask::~GetDasIdsByExactSequenceTask() {
-}
-
-QString GetDasIdsByExactSequenceTask::getRequestUrlString() {
-    QString res;
-    if (sequence.isEmpty()) {
-        return res;
-    }
-
-    res = baseUrl + "?sequence=" + sequence + databasePart + parametersPart;
-    return res;
-}
-
-XmlPicrParser GetDasIdsByExactSequenceTask::getParser() {
-    return XmlPicrParser(XmlPicrParser::ExactSequence);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//PicrBlastSettings
-const QString PicrBlastSettings::PROGRAM = "program";
-const QString PicrBlastSettings::IDENTITY = "identity";
-const QString PicrBlastSettings::MATRIX = "matrix";
-const QString PicrBlastSettings::FILTER = "filter";
-const QString PicrBlastSettings::GAP_OPEN = "gap_open";
-const QString PicrBlastSettings::GAP_EXT = "gap_ext";
-const QString PicrBlastSettings::DROP_OFF = "drop_off";
-const QString PicrBlastSettings::GAP_ALIGN = "gap_align";
-
-void PicrBlastSettings::insert(const QString& key, const QVariant& value) {
-    settings.insert(key, value);
-}
-
-bool PicrBlastSettings::isValid() {
-    bool allEntries = !settings.value(PROGRAM, QString()).toString().isEmpty() &&
-                      !settings.value(IDENTITY, QString()).toString().isEmpty() &&
-                      !settings.value(MATRIX, QString()).toString().isEmpty() &&
-                      !settings.value(FILTER, QString()).toString().isEmpty() &&
-                      !settings.value(GAP_OPEN, QString()).toString().isEmpty() &&
-                      !settings.value(GAP_EXT, QString()).toString().isEmpty() &&
-                      !settings.value(DROP_OFF, QString()).toString().isEmpty() &&
-                      !settings.value(GAP_ALIGN, QString()).toString().isEmpty();
-    if (false == allEntries) {
-        return false;
-    }
-
-    bool ok;
-    settings.value(GAP_OPEN).toInt(&ok);
-    if (false == ok) {
-        return false;
-    }
-    settings.value(GAP_EXT).toInt(&ok);
-    if (false == ok) {
-        return false;
-    }
-
-    return true;
-}
-
-QString PicrBlastSettings::value(const QString& key) {
-    return settings.value(key).toString();
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-//GetDasIdsByBlastTask
-const QString GetDasIdsByBlastTask::baseUrl = QString("http://www.ebi.ac.uk/Tools/picr/rest/getUPIForBLAST");
-const QString GetDasIdsByBlastTask::databasePart = CommonDasSettings::databaseStr;
-const QString GetDasIdsByBlastTask::parametersPart = QString("&program=%1&filtertype=IDENTITY&identityvalue=%2&includeattributes=true&matrix=%3&filter=%4&gapopen=%5&gapext=%6&dropoff=%7&gapalign=%8");
-
-GetDasIdsByBlastTask::GetDasIdsByBlastTask(const QByteArray& _sequence, const PicrBlastSettings& _settings) :
-    GetDasIdsBySequenceTask(_sequence),
-    settings(_settings) {
-}
-
-GetDasIdsByBlastTask::~GetDasIdsByBlastTask() {
-}
-
-QString GetDasIdsByBlastTask::getRequestUrlString() {
-    QString res;
-    if (sequence.isEmpty() || !settings.isValid()) {
-        return res;
-    }
-
-    res = baseUrl + "?blastfrag=" + sequence + databasePart + parametersPart.arg(settings.value(PicrBlastSettings::PROGRAM)).
-          arg(settings.value(PicrBlastSettings::IDENTITY)).
-          arg(settings.value(PicrBlastSettings::MATRIX)).
-          arg(settings.value(PicrBlastSettings::FILTER)).
-          arg(settings.value(PicrBlastSettings::GAP_OPEN)).
-          arg(settings.value(PicrBlastSettings::GAP_EXT)).
-          arg(settings.value(PicrBlastSettings::DROP_OFF)).
-          arg(settings.value(PicrBlastSettings::GAP_ALIGN));
-
-    return res;
-}
-
-XmlPicrParser GetDasIdsByBlastTask::getParser() {
-    return XmlPicrParser(XmlPicrParser::Blast);
-}
-
-}   // namespace
diff --git a/src/corelibs/U2Core/src/tasks/PicrApiTask.h b/src/corelibs/U2Core/src/tasks/PicrApiTask.h
deleted file mode 100644
index 611c877..0000000
--- a/src/corelibs/U2Core/src/tasks/PicrApiTask.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_PICR_API_TASK_H_
-#define _U2_PICR_API_TASK_H_
-
-#include <QtNetwork/QNetworkReply>
-
-#include <U2Core/Task.h>
-
-class QEventLoop;
-class QNetworkReply;
-class QAuthenticator;
-
-namespace U2 {
-
-class Task;
-
-class U2CORE_EXPORT PicrElement {
-public:
-    PicrElement(const QString& _accessionNumber = QString(),
-                const int _accessionVersion = -1,
-                const QString& _databaseName = QString(),
-                const QString& _databaseDescription = QString(),
-                const int _ncbiId = -1,
-                const int _taxonId = -1,
-                int _identity = -1);
-
-    bool operator == (const PicrElement& other) const;
-    bool operator > (const PicrElement& other) const;
-
-    QString accessionNumber;
-    int accessionVersion;
-    QString databaseName;
-    QString databaseDescription;
-    int ncbiId;
-    int taxonId;
-    int identity;
-};
-
-class XmlPicrParser {
-public:
-    enum ResponseType {
-        Accession,
-        ExactSequence,
-        Blast
-    };
-
-    XmlPicrParser(ResponseType _responseType);
-    void parse(const QByteArray& data);
-
-    QString getError() const;
-    void setError(const QString& val);
-
-    QList<PicrElement> getResults();
-    bool isResultsEmpty();
-
-private:
-    ResponseType responseType;
-    QString error;
-    QList<PicrElement> results;
-
-    const static QString PICR_ACCESSION_RETURN;
-    const static QString PICR_SEQUENCE_RETURN;
-    const static QString PICR_BLAST_RETURN;
-    const static QString PICR_SEQUENCE;
-    const static QString PICR_IDENTICAL_CROSS_REFERENCE;
-    const static QString PICR_ACCESSION_NUMBER;
-    const static QString PICR_ACCESSION_VERSION;
-    const static QString PICR_DATABASE_DESCRIPTION;
-    const static QString PICR_DATABASE_NAME;
-    const static QString PICR_NCBI_GI;
-    const static QString PICR_TAXON_ID;
-    const static QString SERVER_ERROR_STRING;
-};
-
-class CommonDasSettings {
-public:
-    const static QString    dbSwissprot;
-    const static QString    dbTrembl;
-    const static QString    dbSwissprotVarsplic;
-    const static QString    dbTremblVarsplic;
-    const static QString    databaseStr;
-
-    static int getPriority(const QString &databaseName);
-
-private:
-    static QHash<QString, int> getPriorityTable();
-};
-
-class U2CORE_EXPORT ConvertDasIdTask : public Task {
-    Q_OBJECT
-    Q_DISABLE_COPY(ConvertDasIdTask)
-public:
-    ConvertDasIdTask(const QString& resId);
-    virtual ~ConvertDasIdTask();
-
-    virtual void run();
-    const QString &getSourceAccessionNumber() const;
-    const QString &getAccessionNumber() const;
-
-public slots:
-    void sl_replyFinished(QNetworkReply* reply);
-    void sl_onError(QNetworkReply::NetworkError error);
-    void sl_uploadProgress(qint64 bytesSent, qint64 bytesTotal);
-
-    void sl_cancelCheck();
-    void sl_timeout();
-
-private slots:
-    void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-
-private:
-    QString getRequestUrlString();
-    static QString getUniprotBestGuessResult(const QList<PicrElement> &results);
-
-    QString                 resourceId;
-
-    QEventLoop*             loop;
-    QNetworkReply*          downloadReply;
-    QNetworkAccessManager*  networkManager;
-
-    QString                 accNumber;  //result
-
-    const static QString    baseUrl;
-    const static QString    databasePart;
-    const static QString    parametersPart;
-};
-
-class U2CORE_EXPORT GetDasIdsBySequenceTask : public Task {
-    Q_OBJECT
-public:
-    GetDasIdsBySequenceTask(const QByteArray& _sequence);
-    virtual ~GetDasIdsBySequenceTask();
-
-    virtual void run();
-    QList<PicrElement> getResults();
-
-public slots:
-    void sl_replyFinished(QNetworkReply* reply);
-    void sl_onError(QNetworkReply::NetworkError error);
-    void sl_uploadProgress(qint64 bytesSent, qint64 bytesTotal);
-
-private slots:
-    void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-
-protected:
-    QByteArray              sequence;
-
-private:
-    virtual QString getRequestUrlString() = 0;
-    virtual XmlPicrParser getParser() = 0;
-
-    QEventLoop*             loop;
-    QNetworkReply*          downloadReply;
-    QNetworkAccessManager*  networkManager;
-
-    QList<PicrElement>      results;  //result
-};
-
-class U2CORE_EXPORT GetDasIdsByExactSequenceTask : public GetDasIdsBySequenceTask {
-    Q_OBJECT
-public:
-    GetDasIdsByExactSequenceTask(const QByteArray& _sequence);
-    virtual ~GetDasIdsByExactSequenceTask();
-
-private:
-    virtual QString getRequestUrlString();
-    virtual XmlPicrParser getParser();
-
-    const static QString    baseUrl;
-    const static QString    databasePart;
-    const static QString    parametersPart;
-};
-
-class U2CORE_EXPORT PicrBlastSettings {
-public:
-    void insert(const QString& key, const QVariant& value);
-    bool isValid();
-    QString value(const QString& key);
-
-    const static QString PROGRAM;
-    const static QString IDENTITY;
-    const static QString MATRIX;
-    const static QString FILTER;
-    const static QString GAP_OPEN;
-    const static QString GAP_EXT;
-    const static QString DROP_OFF;
-    const static QString GAP_ALIGN;
-
-private:
-    QVariantMap settings;
-};
-
-/* The PICR service is unstable: very often server doesn't responce
- * for sequences larger than 150 proteins.
- * Test new features that used this task and be ready to use another services
- * such as http://uniprot/blast/
- */
-class U2CORE_EXPORT GetDasIdsByBlastTask : public GetDasIdsBySequenceTask {
-    Q_OBJECT
-public:
-    GetDasIdsByBlastTask(const QByteArray& _sequence, const PicrBlastSettings& _settings);
-    virtual ~GetDasIdsByBlastTask();
-
-private:
-    virtual QString getRequestUrlString();
-    virtual XmlPicrParser getParser();
-
-    PicrBlastSettings settings;
-
-    const static QString    baseUrl;
-    const static QString    databasePart;
-    const static QString    parametersPart;
-};
-
-} //namespace
-
-#endif // _U2_PICR_API_TASK_H_
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
index c9fe977..6f27b66 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
@@ -128,7 +128,7 @@ void SaveDocumentTask::run() {
 
         // save document to tmp file, QScopedPointer will release file in destructor
         {
-            QScopedPointer<IOAdapter> io(IOAdapterUtils::open(GUrl(tmpFileName), stateInfo, flags.testFlag(SaveDoc_Append) ? IOAdapterMode_Append: IOAdapterMode_Write));
+            QScopedPointer<IOAdapter> io(IOAdapterUtils::open(GUrl(tmpFileName), stateInfo, flags.testFlag(SaveDoc_Append) ? IOAdapterMode_Append : IOAdapterMode_Write, doc->getIOAdapterFactory()));
             CHECK_OP(stateInfo, );
             df->storeDocument(doc, io.data(), stateInfo);
         }
@@ -144,9 +144,8 @@ void SaveDocumentTask::run() {
 
         bool renamed = QFile::rename(tmpFileName, originalFilePath);
         CHECK_EXT(renamed == true, stateInfo.setError(tr("Can't rename saved tmp file to original file")), );
-    }
-    else {
-        QScopedPointer<IOAdapter> io(IOAdapterUtils::open(url, stateInfo, flags.testFlag(SaveDoc_Append) ? IOAdapterMode_Append: IOAdapterMode_Write));
+    } else {
+        QScopedPointer<IOAdapter> io(IOAdapterUtils::open(url, stateInfo, flags.testFlag(SaveDoc_Append) ? IOAdapterMode_Append : IOAdapterMode_Write, doc->getIOAdapterFactory()));
         CHECK_OP(stateInfo, );
         df->storeDocument(doc, io.data(), stateInfo);
         if (stateInfo.isCoR() && !originalFileExists && url.isLocalFile()) {
@@ -277,7 +276,7 @@ GUrl SaveMultipleDocuments::chooseAnotherUrl(Document* doc) {
             QString saveFileFilter = doc->getDocumentFormat()->getSupportedDocumentFileExtensions().join(" *.").prepend("*.");
             QWidget *activeWindow = qobject_cast<QWidget*>(QApplication::activeWindow());
             QFileDialog::Options options;
-#ifdef Q_OS_MAC
+#if defined(Q_OS_MAC) | defined(Q_OS_WIN)
             if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
                 options = QFileDialog::DontUseNativeDialog;
             }else {
diff --git a/src/corelibs/U2Core/src/tasks/UniprotBlastTask.cpp b/src/corelibs/U2Core/src/tasks/UniprotBlastTask.cpp
deleted file mode 100644
index 2e2d012..0000000
--- a/src/corelibs/U2Core/src/tasks/UniprotBlastTask.cpp
+++ /dev/null
@@ -1,749 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "UniprotBlastTask.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/NetworkConfiguration.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Core/LoadDASDocumentTask.h>
-
-#include <QtXml/QDomDocument>
-
-namespace U2 {
-
-bool ReplyHandler::isMetaRegistered = false;
-
-const int ReplyHandler::MAX_ATTEMPT_NUMBER = 5;
-const QByteArray ReplyHandler::LOCATION = "Location";
-const QByteArray ReplyHandler::RETRY = "Retry-After";
-const QByteArray ReplyHandler::CONTENT_TYPE = "Content-Type";
-const QByteArray ReplyHandler::XML_CONTENT_TYPE = "application/xml";
-const QByteArray ReplyHandler::COMPLETED = "COMPLETED";
-const QByteArray ReplyHandler::RUNNING = "RUNNING";
-
-ReplyHandler::ReplyHandler(const QString& _url, TaskStateInfo* _os) :
-    url(_url),
-    os(_os),
-    curAttemptNumber(0)
-{
-    registerMetaType();
-
-    networkManager = new QNetworkAccessManager();
-    NetworkConfiguration* nc = AppContext::getAppSettings()->getNetworkConfiguration();
-
-    QNetworkProxy proxy = nc->getProxyByUrl(url);
-    networkManager->setProxy(proxy);
-
-    timer.setInterval(30000);
-    timer.setSingleShot(true);
-    connect(&timer, SIGNAL(timeout()), SLOT(sl_timeout()));
-}
-
-void ReplyHandler::sendRequest() {
-    QUrl requestUrl(url);
-    QNetworkRequest request(requestUrl);
-    connect(networkManager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-
-    QNetworkReply* reply = networkManager->get(request);
-    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
-            this, SLOT(sl_onError(QNetworkReply::NetworkError)));
-    connect(reply, SIGNAL(readyRead()), SLOT(sl_onReadyRead()), Qt::DirectConnection);
-    connect(reply, SIGNAL(finished()), SLOT(sl_replyFinished()), Qt::DirectConnection);
-
-    timer.start();
-}
-
-void ReplyHandler::sl_replyFinished() {
-    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
-    CHECK_EXT(!os->isCoR(), emit si_finish(),);
-
-    timer.stop();
-
-    ioLog.trace(QString("Server reply received, request url=\'%1\'").arg(reply->url().toString()));
-    if (reply->rawHeader(CONTENT_TYPE) == XML_CONTENT_TYPE) {
-        // Downloading of the result file is finished.
-        // Leave the event loop.
-        if (url.endsWith(".xml")) {
-            ioLog.trace("An xml was received");
-        } else {
-            os->setError(tr("Can't receive result from the server: nothing to download"));
-        }
-
-        result = replyData;
-
-        emit si_stateChanged(DownloadingComplete);
-        emit si_finish();
-    }
-
-    else if (reply->hasRawHeader(LOCATION)) {
-        // Server set an ID to the blast job.
-        // Results could be found on the special URL.
-        emit si_stateChanged(Ordered);
-
-        url = reply->rawHeader(LOCATION);
-        url += ".stat";
-        ioLog.trace(QString("Redirection, new url: \'%1\'").arg(url));
-
-        // Check the blast job status
-        sendRequest();
-    }
-
-    else if (replyData == COMPLETED) {
-        //The blast job is done, we can dowload a xml file.
-        emit si_stateChanged(WaitingComplete);
-
-        url.chop(QString(".stat").length());
-        url += ".xml";
-        ioLog.trace(QString("The blast job is complete, downloading results from \'%1\'").arg(url));
-        sendRequest();
-
-    } else if (replyData == RUNNING) {
-        // The blast job is unfinished.
-        // Please, wait.
-        emit si_stateChanged(Waiting);
-
-        QByteArray waitFor = reply->rawHeader(RETRY);
-        bool ok = false;
-        int interval = waitFor.toInt(&ok);
-        if (ok == false || interval <= 0) {
-            interval = 10;
-        }
-
-        ioLog.trace("Still running the blast job...");
-        QTimer::singleShot(interval, this, SLOT(sl_timerShouts()));
-    }
-
-    else {
-        if (curAttemptNumber >= MAX_ATTEMPT_NUMBER) {
-            os->setError(tr("Unexpected server response"));
-            ioLog.trace("Reply data: " + replyData.left(200) + "...");
-            emit si_finish();
-        }
-        else {
-            emit si_stateChanged(Waiting);
-
-            QByteArray waitFor = reply->rawHeader(RETRY);
-            bool ok = false;
-            int interval = waitFor.toInt(&ok);
-            if (ok == false || interval <= 0) {
-                interval = 10;
-            }
-
-            ioLog.trace("Still running the blast job...");
-            QTimer::singleShot(interval, this, SLOT(sl_timerShouts()));
-            curAttemptNumber++;
-        }
-    }
-    replyData.clear();
-}
-
-
-void ReplyHandler::sl_onError(QNetworkReply::NetworkError error) {
-    timer.stop();
-    QNetworkReply *netReply = qobject_cast<QNetworkReply *>(sender());
-    QString errorText;
-    if (Q_LIKELY(NULL != netReply)) {
-        errorText = netReply->errorString();
-    } else {
-        errorText = tr("undefined error (code %1)").arg(error);
-    }
-    os->setError(tr("Network error: %1").arg(errorText));
-    emit si_finish();
-}
-
-void ReplyHandler::sl_onReadyRead() {
-    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
-    CHECK(NULL != reply,);
-    readData(reply);
-}
-
-void ReplyHandler::sl_timerShouts() {
-    // Look for results, if they are.
-    sendRequest();
-}
-
-void ReplyHandler::sl_timeout() {
-    if (curAttemptNumber >= MAX_ATTEMPT_NUMBER) {
-        ioLog.trace("Server doesn't respond: set error");
-        os->setError(tr("Remote server doesn't respond"));
-        emit si_finish();
-    }
-
-    ioLog.trace(QString("Server doesn't respond: attempt number %1").arg(QString::number(curAttemptNumber)));
-    curAttemptNumber++;
-    sendRequest();
-}
-void ReplyHandler::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-void ReplyHandler::readData(QNetworkReply *reply) {
-    static const int BUFFER_SIZE = 64535;
-    QByteArray buffer(BUFFER_SIZE, '\n');
-    qint64 bytesRead = reply->read(buffer.data(), BUFFER_SIZE);
-    do {
-        replyData += buffer.left(bytesRead);
-        bytesRead = reply->read(buffer.data(), BUFFER_SIZE);
-    } while (bytesRead > 0);
-}
-
-void ReplyHandler::registerMetaType() {
-    if (!isMetaRegistered) {
-        qRegisterMetaType<ReplyHandler::ReplyState>("ReplyHandler::ReplyState");
-        isMetaRegistered = true;
-    }
-}
-
-namespace {
-
-bool isDatabaseUniref(const QString &database) {
-    return database.contains(QRegExp("UR\\d\\d\\d"));
-}
-
-bool isDatabaseUniparc(const QString &database) {
-    return database == "UNIPARC";
-}
-
-QString extractAccessionFromId(const QString &database, const QString &id) {
-    if (isDatabaseUniref(database)) {
-        const QStringList idParts = id.split("_");
-        if (idParts.size() == 2) {
-            return idParts.last();
-        }
-    } else if (isDatabaseUniparc(database)) {
-        return id;
-    }
-
-    return "";
-}
-
-}
-
-const QString XmlUniprotParser::EBI_APPLICATION_RESULT = "EBIApplicationResult";
-const QString XmlUniprotParser::SEQUENCE_SIMILARITY_SEARCH_RESULT = "SequenceSimilaritySearchResult";
-const QString XmlUniprotParser::HITS = "hits";
-const QString XmlUniprotParser::HITS_TOTAL = "total";
-const QString XmlUniprotParser::HIT = "hit";
-const QString XmlUniprotParser::HIT_NUMBER = "number";
-const QString XmlUniprotParser::HIT_DATABASE = "database";
-const QString XmlUniprotParser::HIT_ID = "id";
-const QString XmlUniprotParser::HIT_AC = "ac";
-const QString XmlUniprotParser::HIT_LENGTH = "length";
-const QString XmlUniprotParser::HIT_DESCRIPTION = "description";
-const QString XmlUniprotParser::ALIGNMENTS = "alignments";
-const QString XmlUniprotParser::ALIGNMENTS_TOTAL = "total";
-const QString XmlUniprotParser::ALIGNMENT = "alignment";
-const QString XmlUniprotParser::ALIGNMENT_NUMBER = "number";
-const QString XmlUniprotParser::SCORE = "score";
-const QString XmlUniprotParser::BITS = "bits";
-const QString XmlUniprotParser::EXPECTATION = "expectation";
-const QString XmlUniprotParser::IDENTITY = "identity";
-const QString XmlUniprotParser::POSITIVES = "positives";
-const QString XmlUniprotParser::GAPS = "gaps";
-const QString XmlUniprotParser::STRAND = "strand";
-const QString XmlUniprotParser::QUERY_SEQ = "querySeq";
-const QString XmlUniprotParser::QUERY_SEQ_START = "start";
-const QString XmlUniprotParser::QUERY_SEQ_END = "end";
-const QString XmlUniprotParser::PATTERN = "pattern";
-const QString XmlUniprotParser::MATCH_SEQ = "matchSeq";
-const QString XmlUniprotParser::MATCH_SEQ_START = "start";
-const QString XmlUniprotParser::MATCH_SEQ_END = "end";
-
-void XmlUniprotParser::parse(const QByteArray &data) {
-    QString buf;        // to read int values
-    bool ok = false;    // to convert strings to int
-
-    QDomDocument pDoc;
-    pDoc.setContent(data);
-
-    QDomElement docElement = pDoc.documentElement();
-    CHECK_EXT(!docElement.childNodes().isEmpty(), setError("There is no any child nodes"),);
-
-    QDomElement sequenceSimilaritySearchResultElement = docElement.firstChildElement(SEQUENCE_SIMILARITY_SEARCH_RESULT);
-    CHECK_EXT(!sequenceSimilaritySearchResultElement.isNull(), setError(QString("%1 element is NULL").arg(SEQUENCE_SIMILARITY_SEARCH_RESULT)),);
-
-    QDomElement hitsElement = sequenceSimilaritySearchResultElement.firstChildElement(HITS);
-    CHECK_EXT(!hitsElement.isNull(), setError(QString("%1 element is NULL").arg(HITS)),);
-
-    buf = hitsElement.attribute(HITS_TOTAL);
-    int hitsTotal = buf.toInt(&ok);
-    CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(HITS + HITS_TOTAL).arg(buf)),);
-
-    // Parse all hits
-    QDomElement hitElement = hitsElement.firstChildElement(HIT);
-    CHECK_EXT(!hitElement.isNull() || hitsTotal == 0, setError(QString("%1 element is NULL").arg(HIT)),);
-
-    for (int hit = 0;
-         hit < hitsTotal;
-         hit++, hitElement = hitElement.nextSiblingElement(HIT)) {
-        UniprotResult result;
-
-        CHECK_EXT(!hitElement.isNull(), setError(QString("%1 element is NULL").arg(HIT)),);
-
-        buf = hitElement.attribute(HIT_NUMBER);
-        result.hitNumber = buf.toInt(&ok);
-        CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(HIT + HIT_NUMBER).arg(buf)),);
-
-        result.database = hitElement.attribute(HIT_DATABASE);
-        result.id = hitElement.attribute(HIT_ID);
-        result.accession = hitElement.attribute(HIT_AC);
-        if (result.accession.isEmpty()) {
-            result.accession = extractAccessionFromId(result.database, result.id);
-        }
-
-        buf = hitElement.attribute(HIT_LENGTH);
-        result.length = buf.toInt(&ok);
-        CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(HIT + HIT_LENGTH).arg(buf)),);
-
-        result.description = hitElement.attribute(HIT_DESCRIPTION);
-
-        QDomElement alignmentsElement = hitElement.firstChildElement(ALIGNMENTS);
-        CHECK_EXT(!alignmentsElement.isNull(), setError(QString("%1 element is NULL").arg(ALIGNMENTS)),);
-
-        buf = alignmentsElement.attribute(ALIGNMENTS_TOTAL);
-        result.alignmentsTotal = buf.toInt(&ok);
-        CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(ALIGNMENTS + ALIGNMENTS_TOTAL).arg(buf)),);
-
-        // Parse all alignments of the current hit
-        QDomElement alignmentElement = alignmentsElement.firstChildElement(ALIGNMENT);
-        CHECK_EXT(!alignmentElement.isNull() || result.alignmentsTotal == 0, setError(QString("%1 element is NULL").arg(ALIGNMENT)),);
-
-        for (int alignemnt = 0;
-             alignemnt < result.alignmentsTotal;
-             alignemnt++, alignmentElement = alignmentElement.nextSiblingElement(ALIGNMENT)) {
-            CHECK_EXT(!alignmentElement.isNull(), setError(QString("%1 element is NULL").arg(ALIGNMENT)),);
-
-            buf = hitElement.attribute(ALIGNMENT_NUMBER);
-            result.alignmentsNumber = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(ALIGNMENT + ALIGNMENT_NUMBER).arg(buf)),);
-
-            QDomElement scoreElement = alignmentElement.firstChildElement(SCORE);
-            CHECK_EXT(!scoreElement.isNull(), setError(QString("%1 element is NULL").arg(SCORE)),);
-            buf = scoreElement.text();
-            result.score = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(SCORE).arg(buf)),);
-
-            QDomElement bitsElement = alignmentElement.firstChildElement(BITS);
-            CHECK_EXT(!bitsElement.isNull(), setError(QString("%1 element is NULL").arg(BITS)),);
-            buf = bitsElement.text();
-            result.bits = buf.toDouble(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(BITS).arg(buf)),);
-
-            QDomElement expectationElement = alignmentElement.firstChildElement(EXPECTATION);
-            CHECK_EXT(!expectationElement.isNull(), setError(QString("%1 element is NULL").arg(EXPECTATION)),);
-            buf = expectationElement.text();
-            result.expectation = buf.toDouble(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(EXPECTATION).arg(buf)),);
-
-            QDomElement identityElement = alignmentElement.firstChildElement(IDENTITY);
-            CHECK_EXT(!identityElement.isNull(), setError(QString("%1 element is NULL").arg(IDENTITY)),);
-            buf = identityElement.text();
-            result.identity = buf.toDouble(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(IDENTITY).arg(buf)),);
-
-            QDomElement positivesElement = alignmentElement.firstChildElement(POSITIVES);
-            CHECK_EXT(!positivesElement.isNull(), setError(QString("%1 element is NULL").arg(POSITIVES)),);
-            buf = positivesElement.text();
-            result.positives = buf.toDouble(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(POSITIVES).arg(buf)),);
-
-            QDomElement gapsElement = alignmentElement.firstChildElement(GAPS);
-            CHECK_EXT(!gapsElement.isNull(), setError(QString("%1 element is NULL").arg(GAPS)),);
-            buf = gapsElement.text();
-            result.gaps = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(GAPS).arg(buf)),);
-
-            QDomElement strandElement = alignmentElement.firstChildElement(STRAND);
-            CHECK_EXT(!strandElement.isNull(), setError(QString("%1 element is NULL").arg(STRAND)),);
-            result.strand = strandElement.text();
-
-            QDomElement querySeqElement = alignmentElement.firstChildElement(QUERY_SEQ);
-            CHECK_EXT(!querySeqElement.isNull(), setError(QString("%1 element is NULL").arg(QUERY_SEQ)),);
-            result.querySeq = querySeqElement.text();
-
-            buf = querySeqElement.attribute(QUERY_SEQ_START);
-            result.querySeqStart = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(QUERY_SEQ + QUERY_SEQ_START).arg(buf)),);
-
-            buf = querySeqElement.attribute(QUERY_SEQ_END);
-            result.querySeqEnd = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(QUERY_SEQ + QUERY_SEQ_END).arg(buf)),);
-
-            QDomElement patternElement = alignmentElement.firstChildElement(PATTERN);
-            CHECK_EXT(!patternElement.isNull(), setError(QString("%1 element is NULL").arg(PATTERN)),);
-            result.pattern = patternElement.text();
-
-            QDomElement matchSeqElement = alignmentElement.firstChildElement(MATCH_SEQ);
-            CHECK_EXT(!matchSeqElement.isNull(), setError(QString("%1 element is NULL").arg(MATCH_SEQ)),);
-            result.matchSeq = matchSeqElement.text();
-
-            buf = matchSeqElement.attribute(MATCH_SEQ_START);
-            result.matchSeqStart = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(MATCH_SEQ + MATCH_SEQ_START).arg(buf)),);
-
-            buf = matchSeqElement.attribute(MATCH_SEQ_END);
-            result.matchSeqEnd = buf.toInt(&ok);
-            CHECK_EXT(ok, setError(QString("Can't parse the \'%1\'' value: \'%2\'").arg(MATCH_SEQ + MATCH_SEQ_END).arg(buf)),);
-        }
-
-        results << result;
-    }
-}
-
-const QString UniprotBlastSettings::DATABASE = "dataset";
-const QString UniprotBlastSettings::THRESHOLD = "threshold";
-const QString UniprotBlastSettings::MATRIX = "matrix";
-const QString UniprotBlastSettings::FILTERING = "filter";
-const QString UniprotBlastSettings::GAPPED = "gapped";
-const QString UniprotBlastSettings::HITS = "numal";
-
-const QString UniprotBlastSettings::DEFAULT_DATABASE = "uniprotkb";
-const QString UniprotBlastSettings::DEFAULT_THRESHOLD = "10";
-const QString UniprotBlastSettings::DEFAULT_MATRIX = "";
-const QString UniprotBlastSettings::DEFAULT_FILTERING = "false";
-const QString UniprotBlastSettings::DEFAULT_GAPPED = "true";
-const QString UniprotBlastSettings::DEFAULT_HITS = "250";
-
-const QStringList UniprotBlastSettings::ALLOWED_DATABASE = QStringList() << "uniprotkb"
-                                                                         << "uniprotkb_archaea"
-                                                                         << "uniprotkb_bacteria"
-                                                                         << "uniprotkb_eukaryota"
-                                                                         << "uniprotkb_arthropoda"
-                                                                         << "uniprotkb_fungi"
-                                                                         << "uniprotkb_human"
-                                                                         << "uniprotkb_mammals"
-                                                                         << "uniprotkb_nematoda"
-                                                                         << "uniprotkb_plants"
-                                                                         << "uniprotkb_rodents"
-                                                                         << "uniprotkb_vertebrates"
-                                                                         << "uniprotkb_viruses"
-                                                                         << "uniprotkb_pdb"
-                                                                         << "uniprotkb_complete_microbial_proteomes"
-                                                                         << "uniprotkb_swissprot"
-                                                                         << "UniRef100"
-                                                                         << "UniRef90"
-                                                                         << "UniRef50"
-                                                                         << "uniparc";
-const QStringList UniprotBlastSettings::ALLOWED_THRESHOLD = QStringList() << "0.0001"
-                                                                          << "0.001"
-                                                                          << "0.01"
-                                                                          << "0.1"
-                                                                          << "1"
-                                                                          << "10"
-                                                                          << "100"
-                                                                          << "1000";
-const QStringList UniprotBlastSettings::ALLOWED_MATRIX = QStringList() << ""                // marked as "auto"
-                                                                       << "blosum45"
-                                                                       << "blosum62"
-                                                                       << "blosum80"
-                                                                       << "pam70"
-                                                                       << "pam30";
-const QStringList UniprotBlastSettings::ALLOWED_FILTERING = QStringList() << "false"
-                                                                          << "true"
-                                                                          << "mask";
-const QStringList UniprotBlastSettings::ALLOWED_GAPPED = QStringList() << "true"
-                                                                       << "false";
-const QStringList UniprotBlastSettings::ALLOWED_HITS = QStringList() << "50"
-                                                                     << "100"
-                                                                     << "250"
-                                                                     << "500"
-                                                                     << "750"
-                                                                     << "1000";
-
-bool UniprotBlastSettings::isValid() const {
-    return ALLOWED_DATABASE.contains(settings.value(DATABASE, DEFAULT_DATABASE), Qt::CaseInsensitive) &&
-            ALLOWED_THRESHOLD.contains(settings.value(THRESHOLD, DEFAULT_THRESHOLD), Qt::CaseInsensitive) &&
-            ALLOWED_MATRIX.contains(settings.value(MATRIX, DEFAULT_MATRIX), Qt::CaseInsensitive) &&
-            ALLOWED_FILTERING.contains(settings.value(FILTERING, DEFAULT_FILTERING), Qt::CaseInsensitive) &&
-            ALLOWED_GAPPED.contains(settings.value(GAPPED, DEFAULT_GAPPED), Qt::CaseInsensitive) &&
-            ALLOWED_HITS.contains(settings.value(HITS, DEFAULT_HITS), Qt::CaseInsensitive);
-}
-
-QString UniprotBlastSettings::getString() const {
-    QString result;
-    result += DATABASE + "=" + settings.value(DATABASE, DEFAULT_DATABASE);
-    result += "&";
-    result += THRESHOLD + "=" + settings.value(THRESHOLD, DEFAULT_THRESHOLD);
-    result += "&";
-    result += MATRIX + "=" + settings.value(MATRIX, DEFAULT_MATRIX);
-    result += "&";
-    result += FILTERING + "=" + settings.value(FILTERING, DEFAULT_FILTERING);
-    result += "&";
-    result += GAPPED + "=" + settings.value(GAPPED, DEFAULT_GAPPED);
-    result += "&";
-    result += HITS + "=" + settings.value(HITS, DEFAULT_HITS);
-    return result;
-}
-
-const QByteArray UniprotBlastTask::BASE_URL = "http://www.uniprot.org/blast/";
-
-UniprotBlastTask::UniprotBlastTask(const QByteArray& _sequence, const UniprotBlastSettings &_settings) :
-    Task(tr("Get an ID for the sequence"), TaskFlags_FOSE_COSC | TaskFlag_MinimizeSubtaskErrorText),
-    sequence(_sequence),
-    settings(_settings),
-    loop(NULL) {
-    tpm = Progress_Manual;
-}
-
-UniprotBlastTask::~UniprotBlastTask() {
-    delete loop;
-}
-
-void UniprotBlastTask::run() {
-    CHECK(isCanceled() == false,);
-    CHECK(hasError() == false,);
-
-    loop = new QEventLoop;
-    stateInfo.progress = 0;
-    QString url = generateUrl();
-
-    ioLog.trace("Sending request to UniProt...");
-    ioLog.trace(QString("url: \'%1\'").arg(url));
-
-    ReplyHandler replyHandler(url, &stateInfo);
-    connect(&replyHandler, SIGNAL(si_finish()), SLOT(sl_exitLoop()));
-    connect(&replyHandler, SIGNAL(si_stateChanged(ReplyHandler::ReplyState)), SLOT(sl_stateChanged(ReplyHandler::ReplyState)));
-
-    // Send the first request: ask to do blast search
-    replyHandler.sendRequest();
-
-    loop->exec();
-    if (isCanceled() || hasError()){
-        return;
-    }
-
-    ioLog.trace("Download finished.");
-
-    //parse output
-    QByteArray replyData = replyHandler.getReplyData();
-
-    if (replyData.isEmpty()){
-        setError(tr("Reply from the BLAST server is empty. Similar sequences not found"));
-        return;
-    }
-
-
-    XmlUniprotParser parser;
-    parser.parse(replyData);
-    if (!parser.getError().isEmpty()) {
-        setError(parser.getError());
-    } else {
-        results = parser.getResults();
-    }
-}
-
-void UniprotBlastTask::sl_exitLoop() {
-    SAFE_POINT(loop != NULL, "Main task loop is NULL",);
-    loop->exit();
-}
-
-void UniprotBlastTask::sl_stateChanged(ReplyHandler::ReplyState state) {
-    switch (state) {
-    case ReplyHandler::Ordered: {
-        stateInfo.setProgress(15);
-        break;
-    }
-    case ReplyHandler::Waiting: {
-        stateInfo.setProgress(60);
-        break;
-    }
-    case ReplyHandler::WaitingComplete: {
-        stateInfo.setProgress(85);
-        break;
-    }
-    case ReplyHandler::DownloadingComplete: {
-        stateInfo.setProgress(100);
-        break;
-    }
-    }
-}
-
-QString UniprotBlastTask::generateUrl() {
-    QString url;
-    CHECK_EXT(!sequence.isEmpty(), setError(tr("An empty sequence is searched")), url);
-    CHECK_EXT(settings.isValid(), setError(tr("Settings are invalid")), url);
-
-    url = BASE_URL;
-    url += "?";
-    url += "blastQuery=" + sequence;
-    url += "&" + settings.getString();
-    url += "&landingPage=no";
-    url += "&redirect=yes";
-    return url;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//UniprotBlastAndLoadDASAnnotations
-UniprotBlastAndLoadDASAnnotations::UniprotBlastAndLoadDASAnnotations(
-    const DASAnnotationsSettings &_settings)
-    : Task(tr("BLAST IDs and DAS annotations"), TaskFlags(TaskFlag_CancelOnSubtaskCancel) | TaskFlag_NoRun),
-    settings(_settings), blastTask(NULL),
-    dasData(_settings.sequence.length())
-{
-
-}
-
-void UniprotBlastAndLoadDASAnnotations::prepare() {
-    blastTask = new UniprotBlastTask(settings.sequence, settings.blastSettings);
-    addSubTask(blastTask);
-}
-
-static bool identityLessThan(const UniprotResult &a, const UniprotResult &b) {
-    return a.identity > b.identity;
-}
-
-QList<Task *> UniprotBlastAndLoadDASAnnotations::onSubTaskFinished(Task *subTask){
-    QList<Task *> subtasks;
-
-    if (isCanceled()) {
-        return subtasks;
-    }
-
-    if (subTask == blastTask) {
-        if (subTask->hasError()) {
-            setError(subTask->getError());
-        }
-
-        QList<UniprotResult> uniprotResults = blastTask->getResults();
-        //take first results with the highest identity
-        qSort(uniprotResults.begin(), uniprotResults.end(), identityLessThan);
-        for (int i = 0; dasTasks.size() < settings.maxResults && i < uniprotResults.size();
-            i++)
-        {
-            const UniprotResult &uniprotRes = uniprotResults.at(i);
-            if (uniprotRes.identity >= settings.identityThreshold) {
-                if (uniprotRes.accession.isEmpty()) {
-                    continue;
-                }
-
-                foreach (const DASSource &featureSource, settings.featureSources) {
-                    LoadDasObjectTask *loadAnnotationsTask
-                        = new LoadDasObjectTask(uniprotRes.accession, featureSource, DASFeatures);
-                    dasTasks << loadAnnotationsTask;
-                }
-            }
-        }
-        subtasks = dasTasks;
-    }else if (dasTasks.contains(subTask)) {
-        LoadDasObjectTask *loadDasObjectTask = qobject_cast<LoadDasObjectTask *>(subTask);
-        if (!loadDasObjectTask) {
-            return subtasks;
-        }
-
-        if (loadDasObjectTask->hasError()) {
-            problems.append(tr("Server \"%1\" is not available!").arg(loadDasObjectTask->getSource().getName()));
-        }
-
-        dasTasks.removeAll(loadDasObjectTask);
-
-        dasData.addDasGroup(loadDasObjectTask->getAccession(), loadDasObjectTask->getAnnotationData());
-    }
-    return subtasks;
-}
-
-QList<SharedAnnotationData> UniprotBlastAndLoadDASAnnotations::prepareResults() {
-    return dasData.prepareResults();
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-//DASAnnotationData
-QStringList DASAnnotationData::getAccessionNumbers(){
-    QStringList result;
-
-    result = dasData.keys();
-
-    return result;
-}
-
-DASGroup DASAnnotationData::getDasGroup(const QString& accNumber){
-    DASGroup dasGroup;
-
-    if (contains(accNumber)){
-        dasGroup = dasData[accNumber];
-    }
-
-    return dasGroup;
-}
-
-void DASAnnotationData::addDasGroup(const QString &accNumber, const DASGroup &dasGroup) {
-    if (!contains(accNumber)) {
-        dasData.insert(accNumber, dasGroup);
-    } else {
-        DASGroup &curData = dasData[accNumber];
-        const QStringList &keys =  dasGroup.keys();
-        foreach(const QString& key, keys){
-            if (curData.contains(key)) {
-                const QList<SharedAnnotationData> &curList = curData[key];
-                const QList<SharedAnnotationData> &tomergeList = dasGroup[key];
-                foreach (const SharedAnnotationData &d, tomergeList) {
-                    if (!curList.contains(d)) {
-                        curData[key].append(d);
-                    }
-                }
-            } else {
-                curData.insert(key, dasGroup[key]);
-            }
-        }
-    }
-}
-
-bool DASAnnotationData::contains(const QString& accessionNumber){
-    return dasData.contains(accessionNumber);
-}
-
-QList<SharedAnnotationData> DASAnnotationData::prepareResults() {
-    QList<SharedAnnotationData> res;
-
-    QStringList accessionNumbers = dasData.keys();
-    foreach (const QString &key, accessionNumbers) {
-        const DASGroup &dasGroup = dasData.value(key);
-        QStringList groupNames = dasGroup.keys();
-        foreach (const QString &groupKey, groupNames) {
-            const QList<SharedAnnotationData> &sdata = dasGroup.value(groupKey);
-            foreach (SharedAnnotationData d, sdata) {
-                const U2Location &location = d->location;
-                if (location->isSingleRegion() && U2_REGION_MAX == location->regions.first()) {
-                    //setRegion for full region sequence
-                    U2Location newLoc = location;
-                    newLoc->regions.clear();
-                    newLoc->regions.append(U2Region(0, seqLen));
-                    d->location = location;
-                } else {
-                    //cut annotations with the start position out of the current sequence
-                    if (location->regions.size() > 0 && location->regions.first().startPos >= seqLen) {
-                        continue;
-                    }
-                }
-                res.append(d);
-            }
-        }
-    }
-
-    return res;
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2Core/src/tasks/UniprotBlastTask.h b/src/corelibs/U2Core/src/tasks/UniprotBlastTask.h
deleted file mode 100644
index 4ef34b2..0000000
--- a/src/corelibs/U2Core/src/tasks/UniprotBlastTask.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_UNIPROT_API_TASK_H_
-#define _U2_UNIPROT_API_TASK_H_
-
-#include <U2Core/global.h>
-#include <U2Core/Task.h>
-
-#include <U2Core/DASSource.h>
-#include <U2Core/AnnotationTableObject.h>
-
-#include <QtCore/QEventLoop>
-#include <QtCore/QTimer>
-
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QAuthenticator>
-
-namespace U2 {
-
-#define MIN_SEQ_LENGTH 4
-#define MAX_SEQ_LENGTH 1900 //because a GET request can handle only 2048 characters
-
-class ReplyHandler : public QObject {
-    Q_OBJECT
-public:
-    enum ReplyState {
-        Ordered = 1,
-        Waiting = 2,
-        WaitingComplete = 3,
-        DownloadingComplete = 4
-    };
-
-    ReplyHandler(const QString &_url, TaskStateInfo* _os);
-
-    QByteArray getReplyData() { return result; }
-    void sendRequest();
-    void setUrl(const QString& _url) { url = _url; }
-
-signals:
-    void si_finish();
-    void si_stateChanged(ReplyHandler::ReplyState state);
-
-private slots:
-    void sl_replyFinished();
-    void sl_onError(QNetworkReply::NetworkError error);
-    void sl_onReadyRead();
-    void sl_timerShouts();
-    void sl_timeout();
-    void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-
-private:
-    void readData(QNetworkReply *reply);
-    static void registerMetaType();
-    static bool isMetaRegistered;
-
-    QNetworkAccessManager* networkManager;
-    QString                url;                // url for the next request
-    QByteArray             result;
-    QByteArray             replyData;
-    TaskStateInfo*         os;
-    QTimer                 timer;
-    int                    curAttemptNumber;
-
-    static const int        MAX_ATTEMPT_NUMBER;
-    static const QByteArray LOCATION;
-    static const QByteArray RETRY;
-    static const QByteArray CONTENT_TYPE;
-    static const QByteArray XML_CONTENT_TYPE;
-    static const QByteArray COMPLETED;
-    static const QByteArray RUNNING;
-};
-
-class U2CORE_EXPORT UniprotResult {
-public:
-    UniprotResult() :
-        hitNumber(-1),
-        length(-1),
-        alignmentsTotal(-1),
-        alignmentsNumber(-1),
-        score(-1),
-        bits(-1),
-        expectation(-1),
-        identity(-1),
-        positives(-1),
-        gaps(-1),
-        querySeqStart(-1),
-        querySeqEnd(-1),
-        matchSeqStart(-1),
-        matchSeqEnd(-1) {}
-
-    int hitNumber;
-    QString database;
-    QString id;
-    QString accession;
-    int length;
-    QString description;
-    int alignmentsTotal;
-    int alignmentsNumber;
-    int score;
-    double bits;
-    double expectation;
-    double identity;
-    double positives;
-    int gaps;
-    QString strand;
-
-    int querySeqStart;
-    int querySeqEnd;
-    QString querySeq;
-
-    QString pattern;
-
-    int matchSeqStart;
-    int matchSeqEnd;
-    QString matchSeq;
-};
-
-class XmlUniprotParser {
-public:
-    void parse(const QByteArray& data);
-
-    const QString& getError() const { return error; }
-    void setError(const QString& val) { error = val; }
-    bool hasError() const { return !error.isEmpty(); }
-
-    QList<UniprotResult> getResults() const { return results; }
-    bool isResultsEmpty() const { return results.isEmpty(); }
-
-private:
-    QString error;
-    QList<UniprotResult> results;
-
-    static const QString EBI_APPLICATION_RESULT;
-    static const QString SEQUENCE_SIMILARITY_SEARCH_RESULT;
-    static const QString HITS;
-    static const QString HITS_TOTAL;
-    static const QString HIT;
-    static const QString HIT_NUMBER;
-    static const QString HIT_DATABASE;
-    static const QString HIT_ID;
-    static const QString HIT_AC;
-    static const QString HIT_LENGTH;
-    static const QString HIT_DESCRIPTION;
-    static const QString ALIGNMENTS;
-    static const QString ALIGNMENTS_TOTAL;
-    static const QString ALIGNMENT;
-    static const QString ALIGNMENT_NUMBER;
-    static const QString SCORE;
-    static const QString BITS;
-    static const QString EXPECTATION;
-    static const QString IDENTITY;
-    static const QString POSITIVES;
-    static const QString GAPS;
-    static const QString STRAND;
-    static const QString QUERY_SEQ;
-    static const QString QUERY_SEQ_START;
-    static const QString QUERY_SEQ_END;
-    static const QString PATTERN;
-    static const QString MATCH_SEQ;
-    static const QString MATCH_SEQ_START;
-    static const QString MATCH_SEQ_END;
-};
-
-class U2CORE_EXPORT UniprotBlastSettings {
-public:
-    void insert(const QString& key, const QString& value) { settings.insert(key, value); }
-    bool isValid() const;
-    QString getString() const;       // unsafe, call isValid() manually
-
-    const static QString DATABASE;
-    const static QString THRESHOLD;
-    const static QString MATRIX;
-    const static QString FILTERING;
-    const static QString GAPPED;
-    const static QString HITS;
-
-    const static QString DEFAULT_DATABASE;
-    const static QString DEFAULT_THRESHOLD;
-    const static QString DEFAULT_MATRIX;
-    const static QString DEFAULT_FILTERING;
-    const static QString DEFAULT_GAPPED;
-    const static QString DEFAULT_HITS;
-
-    const static QStringList ALLOWED_DATABASE;
-    const static QStringList ALLOWED_THRESHOLD;
-    const static QStringList ALLOWED_MATRIX;
-    const static QStringList ALLOWED_FILTERING;
-    const static QStringList ALLOWED_GAPPED;
-    const static QStringList ALLOWED_HITS;
-
-private:
-    QStrStrMap settings;
-};
-
-class U2CORE_EXPORT UniprotBlastTask : public Task {
-    Q_OBJECT
-public:
-    UniprotBlastTask(const QByteArray& _sequence, const UniprotBlastSettings& _settings);
-    ~UniprotBlastTask();
-
-    virtual void run();
-    QList<UniprotResult> getResults() const { return results; }
-
-public slots:
-    void sl_exitLoop();
-    void sl_stateChanged(ReplyHandler::ReplyState state);
-
-private:
-    QString generateUrl();
-
-    QByteArray              sequence;
-    UniprotBlastSettings    settings;
-
-    QEventLoop*             loop;               // main task loop: enter at the task beginning, left on task finish or canceling
-    QList<UniprotResult>    results;
-
-    static const QByteArray BASE_URL;
-};
-
-class U2CORE_EXPORT DASAnnotationsSettings {
-public:
-
-    DASAnnotationsSettings()
-        :identityThreshold(0)
-        ,maxResults(1){}
-    QByteArray sequence;
-    UniprotBlastSettings blastSettings;
-    QList<DASSource> featureSources;
-    qint64 identityThreshold;
-    qint64 maxResults;
-};
-
-typedef QMap<QString, QList<SharedAnnotationData> > DASGroup;
-
-class U2CORE_EXPORT DASAnnotationData {
-public:
-    DASAnnotationData(qint64 _seqLen)
-        : seqLen(_seqLen) { }
-
-    QStringList getAccessionNumbers();
-    DASGroup getDasGroup(const QString &accNumber);
-    void addDasGroup(const QString &accNumber, const DASGroup &dasGroup);
-    bool contains (const QString &accessionNumber);
-    QList<SharedAnnotationData> prepareResults();
-
-private:
-    QMap<QString, DASGroup> dasData;
-    qint64 seqLen;
-};
-
-class U2CORE_EXPORT UniprotBlastAndLoadDASAnnotations : public Task {
-     Q_OBJECT
-public:
-    UniprotBlastAndLoadDASAnnotations(const DASAnnotationsSettings &_settings);
-
-    void prepare();
-    QList<Task *> onSubTaskFinished(Task *subTask);
-    QList<SharedAnnotationData> prepareResults();
-    QStringList getAccessionNumbers() { return dasData.getAccessionNumbers(); }
-    QStringList getProblems() {return problems;}
-
-private:
-    DASAnnotationsSettings  settings;
-
-    UniprotBlastTask*       blastTask;
-    QList<Task*>            dasTasks;
-
-    DASAnnotationData       dasData;
-    QStringList             problems;
-};
-
-}   // namespace U2
-
-#endif // _U2_UNIPROT_API_TASK_H_
diff --git a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
index 07e28d1..ea49a23 100644
--- a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
+++ b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
@@ -199,7 +199,7 @@ DNAChromatogram DNAChromatogramSerializer::deserialize(const QByteArray &binary,
 /* NewickPhyTreeSerializer */
 /************************************************************************/
 namespace {
-    enum ReadState {RS_NAME, RS_WEIGHT, RS_QUOTED_NAME};
+    enum ReadState {RS_NAME, RS_WEIGHT, RS_QUOTED_NAME, RS_NAME_OR_WEIGHT};
 
     void packTreeNode(QByteArray &binary, const PhyNode *node) {
         int branches = node->branchCount();
@@ -281,6 +281,10 @@ QList<PhyTree> NewickPhyTreeSerializer::parseTrees(IOAdapter *io, U2OpStatus& si
             }
             // use cached value
 
+            if (state == RS_NAME_OR_WEIGHT) {
+                state = (c == ':') ? RS_WEIGHT : RS_NAME;
+            }
+
             if(c == '\'') {
                 if(state == RS_NAME) {
                     state = RS_QUOTED_NAME;
@@ -359,7 +363,7 @@ QList<PhyTree> NewickPhyTreeSerializer::parseTrees(IOAdapter *io, U2OpStatus& si
                 }
                 CHECK_EXT_BREAK(!branchStack.isEmpty(), si.setError(DatatypeSerializers::tr("Branch node stack is empty")));
                 branchStack.pop();
-                state = RS_WEIGHT;
+                state = RS_NAME_OR_WEIGHT;
             } else if (c == ';') {
                 if (!branchStack.isEmpty() || nodeStack.size()!=1) {
                     si.setError(DatatypeSerializers::tr("Unexpected end of file"));
@@ -730,6 +734,7 @@ namespace {
         result += packMap<ResidueIndex, SharedResidue>(data.residueMap, ctx);
         result += packMap<int, Molecule3DModel>(data.models, ctx);
         result += pack(data.name);
+        result += data.chainId;
         result += packBool(data.engineered);
         return result;
     }
@@ -745,6 +750,8 @@ namespace {
         CHECK_OP(os, result);
         result->name = unpack<QString>(data, length, offset, os);
         CHECK_OP(os, result);
+        result->chainId = unpack<char>(data, length, offset, os);
+        CHECK_OP(os, result);
         result->engineered = unpackBool(data, length, offset, os);
         return result;
     }
diff --git a/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp b/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
index 2fd348b..178bc67 100644
--- a/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
+++ b/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
@@ -87,9 +87,13 @@ QByteArray IOAdapterUtils::readFileHeader( IOAdapter* io, int sz ) {
     return data;
 }
 
-IOAdapter* IOAdapterUtils::open(const GUrl& url, U2OpStatus& os, IOAdapterMode mode) {
-    IOAdapterId  ioId = IOAdapterUtils::url2io(url);
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(ioId);
+IOAdapter* IOAdapterUtils::open(const GUrl& url, U2OpStatus& os, IOAdapterMode mode, IOAdapterFactory* _iof) {
+    IOAdapterFactory* iof = _iof;
+
+    if (NULL == iof || (iof->getAdapterId() != BaseIOAdapters::LOCAL_FILE && iof->getAdapterId() != BaseIOAdapters::GZIPPED_LOCAL_FILE)) {
+        IOAdapterId  ioId = IOAdapterUtils::url2io(url);
+        iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(ioId);
+    }
     if (iof == NULL) {
         os.setError(L10N::tr("Failed to detect IO adapter for %1").arg(url.getURLString()));
         return NULL;
diff --git a/src/corelibs/U2Core/src/util/IOAdapterUtils.h b/src/corelibs/U2Core/src/util/IOAdapterUtils.h
index bee8724..01f40d9 100644
--- a/src/corelibs/U2Core/src/util/IOAdapterUtils.h
+++ b/src/corelibs/U2Core/src/util/IOAdapterUtils.h
@@ -39,7 +39,7 @@ public:
     // io - opened IO adapter. before and after the call pos in file the same
     static QByteArray readFileHeader( IOAdapter* io, int size = 65536 );
 
-    static IOAdapter* open(const GUrl& url, U2OpStatus& os, IOAdapterMode mode = IOAdapterMode_Read);
+    static IOAdapter* open(const GUrl& url, U2OpStatus& os, IOAdapterMode mode = IOAdapterMode_Read, IOAdapterFactory* iof = NULL);
 
 
     static IOAdapterFactory* get(const IOAdapterId&);
diff --git a/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp b/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp
index 8d4df3c..73e3f9f 100644
--- a/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp
+++ b/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp
@@ -68,6 +68,7 @@ MAlignmentObject * MAlignmentImporter::createAlignment(const U2DbiRef &dbiRef, c
     if (alignedSeqs.isEmpty()) {
         sequences = importSequences(con, folder, al, os);
         gapModel = al.getGapModel();
+        CHECK_OP(os, NULL);
     } else {
         setChildRankForSequences(con, alignedSeqs, os);
         CHECK_OP(os, NULL);
diff --git a/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp b/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
index d0d4249..4691cb5 100644
--- a/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
+++ b/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
@@ -386,9 +386,78 @@ void MsaDbiUtils::removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qin
     mergeConsecutiveGaps(gaps);
 }
 
-void MsaDbiUtils::cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 count) {
+namespace {
+void calculateGapModelAfterReplaceChar(QList<U2MsaGap>& gapModel, qint64 pos) {
+    SAFE_POINT(pos >= 0, QString("Invalid position '%1'!").arg(pos), );
+
+    for (int i = 0; i < gapModel.count(); ++i) {
+        U2MsaGap& curGap = gapModel[i];
+        qint64 gapStart = curGap.offset;
+        qint64 gapEnd = gapStart + curGap.gap;
+        if (pos >= gapStart && pos <= gapEnd) {
+            if (pos == gapStart) {
+                if (curGap.gap == 1) {
+                    gapModel.removeAt(i);
+                } else {
+                    curGap.offset++;
+                    curGap.gap--;
+                }
+            } else if (pos == gapEnd - 1) {
+                if (curGap.gap == 1) {
+                    gapModel.removeAt(i);
+                } else {
+                    curGap.gap--;
+                }
+            } else {
+                gapModel.removeAt(i);
+                U2MsaGap firstGap(gapStart, pos - gapStart);
+                U2MsaGap secondGap(pos + 1, gapEnd - pos - 1);
+                gapModel.insert(i, secondGap);
+                gapModel.insert(i, firstGap);
+            }
+            break;
+        }
+    }
+}
+
+void calculateGapModelAfterAppendChar(QList<U2MsaGap>& gapModel, qint64 pos, qint64 originalRowLength) {
+    CHECK(pos > originalRowLength, );
+    gapModel.append(U2MsaGap(originalRowLength, pos - originalRowLength));
+}
+}
+
+void MsaDbiUtils::replaceCharInRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint64 pos, char newChar) {
     SAFE_POINT(pos >= 0, "Incorrect position!", );
-    SAFE_POINT(count > 0, "Incorrect characters count!", );
+
+    qint64 rowLength = MsaRowUtils::getRowLengthWithoutTrailing(seq, gaps);
+
+    if (rowLength > pos) {
+        qint64 posInSeq = -1;
+        qint64 endPosInSeq = -1;
+        getStartAndEndSequencePositions(seq, gaps, pos, 1, posInSeq, endPosInSeq);
+        if (posInSeq >= 0 && endPosInSeq > posInSeq) {
+            U2OpStatus2Log os;
+            DNASequenceUtils::replaceChars(seq, posInSeq, QByteArray(1, newChar), os);
+            SAFE_POINT_OP(os, );
+        } else {
+            U2OpStatus2Log os;
+            DNASequenceUtils::insertChars(seq, posInSeq, QByteArray(1, newChar), os);
+            SAFE_POINT_OP(os, );
+            calculateGapModelAfterReplaceChar(gaps, pos);
+        }
+    } else {
+        U2OpStatus2Log os;
+        seq.append(newChar);
+        SAFE_POINT_OP(os, );
+        if (pos != rowLength) {
+            calculateGapModelAfterAppendChar(gaps, pos, rowLength);
+        }
+    }
+}
+
+void MsaDbiUtils::cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 count) {
+    SAFE_POINT(pos >= 0, "Incorrect position!",);
+    SAFE_POINT(count > 0, "Incorrect characters count!",);
 
     // Change the sequence
     qint64 initialRowLength = alRow.getRowLength();
@@ -629,18 +698,58 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     }
 }
 
+qint64 MsaDbiUtils::getMsaLength(const U2EntityRef& msaRef, U2OpStatus& os) {
+    DbiConnection con(msaRef.dbiRef, os);
+    CHECK_OP(os, -1);
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), -1);
+
+    qint64 length = msaDbi->getMsaLength(msaRef.entityId, os);
+    CHECK_OP(os, -1);
+
+    return length;
+}
+
 void MsaDbiUtils::updateMsaLength(const U2EntityRef &msaRef, qint64 newLen, U2OpStatus &os) {
     // Prepare the connection
     DbiConnection con(msaRef.dbiRef, os);
     CHECK_OP(os, );
 
     U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
 
     // Update the data
     msaDbi->updateMsaLength(msaRef.entityId, newLen, os);
 }
 
+U2AlphabetId MsaDbiUtils::getMsaAlphabet(const U2EntityRef& msaRef, U2OpStatus& os) {
+    DbiConnection con(msaRef.dbiRef, os);
+    CHECK_OP(os, U2AlphabetId());
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), U2AlphabetId());
+
+    U2AlphabetId alphabet = msaDbi->getMsaAlphabet(msaRef.entityId, os);
+    CHECK_OP(os, U2AlphabetId());
+
+    return alphabet;
+}
+
+void MsaDbiUtils::updateMsaAlphabet(const U2EntityRef& msaRef, const U2AlphabetId& alphabet, U2OpStatus& os) {
+    // Prepare the connection
+    SAFE_POINT_EXT(alphabet.isValid(), os.setError("Invalid alphabet was passed !"),);
+    DbiConnection con(msaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
+
+    // Update the data
+    msaDbi->updateMsaAlphabet(msaRef.entityId, alphabet, os);
+}
+
+
 void MsaDbiUtils::updateRowContent(const U2EntityRef& msaRef, qint64 rowId,
                                    const QByteArray& seqBytes, const QList<U2MsaGap>& gaps,
                                    U2OpStatus& os) {
@@ -889,6 +998,37 @@ void MsaDbiUtils::removeRegion(const U2EntityRef& msaRef, const QList<qint64>& r
     }
 }
 
+void MsaDbiUtils::replaceCharacterInRow(const U2EntityRef& msaRef, qint64 rowId, qint64 pos, char newChar, U2OpStatus& os) {
+    // Check parameters
+    CHECK_EXT(pos >= 0, os.setError(QString("Negative MSA pos: %1").arg(pos)), );
+
+    // Prepare the connection
+    QScopedPointer<DbiConnection> con(getCheckedConnection(msaRef.dbiRef, os));
+    CHECK_OP(os, );
+    U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
+    U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
+
+    U2Msa msa = msaDbi->getMsaObject(msaRef.entityId, os);
+    CHECK_OP(os, );
+
+    validateRowIds(msaDbi, msaRef.entityId, QList<qint64>() << rowId, os);
+    CHECK_OP(os, );
+
+    U2MsaRow row = msaDbi->getRow(msaRef.entityId, rowId, os);
+    CHECK_OP(os, );
+    qint64 msaLength = msaDbi->getMsaLength(msaRef.entityId, os);
+    CHECK(pos < msaLength,);
+
+    U2Region seqReg(row.gstart, row.gend - row.gstart);
+    QByteArray seq = sequenceDbi->getSequenceData(row.sequenceId, seqReg, os);
+    CHECK_OP(os, );
+
+    replaceCharInRow(seq, row.gaps, pos, newChar);
+
+    msaDbi->updateRowContent(msaRef.entityId, rowId, seq, row.gaps, os);
+    CHECK_OP(os, );
+}
+
 QList<qint64> MsaDbiUtils::removeEmptyRows(const U2EntityRef& msaRef, const QList<qint64>& rowIds, U2OpStatus &os) {
     QScopedPointer<DbiConnection> con(getCheckedConnection(msaRef.dbiRef, os));
     SAFE_POINT_OP(os, QList<qint64>());
diff --git a/src/corelibs/U2Core/src/util/MsaDbiUtils.h b/src/corelibs/U2Core/src/util/MsaDbiUtils.h
index 714fe52..95e292b 100644
--- a/src/corelibs/U2Core/src/util/MsaDbiUtils.h
+++ b/src/corelibs/U2Core/src/util/MsaDbiUtils.h
@@ -44,9 +44,27 @@ public:
      */
     static void updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2OpStatus& os);
 
+    /**
+    * Get the length of the alignment in the database.
+    */
+    static qint64 getMsaLength(const U2EntityRef& msaRef, U2OpStatus& os);
+
+    /**
+    * Update the length of the alignment in the database.
+    */
     static void updateMsaLength(const U2EntityRef& msaRef, qint64 newLen, U2OpStatus& os);
 
     /**
+    * Get the alphabet of the alignment in the database.
+    */
+    static U2AlphabetId getMsaAlphabet(const U2EntityRef& msaRef, U2OpStatus& os);
+
+    /**
+    * Update the alphabet of the alignment in the database.
+    */
+    static void updateMsaAlphabet(const U2EntityRef& msaRef, const U2AlphabetId& alphabet, U2OpStatus& os);
+
+    /**
      * Renames an alignment.
      * Parameter 'newName' must be NOT empty!
      */
@@ -72,6 +90,13 @@ public:
     static void removeRegion(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os);
 
     /**
+    * Replace a character in an alignment.
+    * Parameter 'rowId' must be valid ID of the alignment row in the database!
+    * Parameter 'pos' must be >= 0.
+    */
+    static void replaceCharacterInRow(const U2EntityRef& msaRef, qint64 rowId, qint64 pos, char newChar, U2OpStatus& os);
+
+    /**
      * Keeps only the specified rows in the alignment - 'count' characters from position 'pos'.
      * If a row length is less than 'pos', the sequence and gap model becomes empty.
      * Updates the alignment length.
@@ -190,6 +215,9 @@ private:
     /** Removes chars/gaps from the row */
     static void removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint64 pos, qint64 count);
 
+    /** Replace chars in the row */
+    static void replaceCharInRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint64 pos, char newChar);
+
     /**
      * Crops a row to region from 'pos' to 'pos' + 'count',
      * or a lesser region, if the length of the row is smaller.
diff --git a/src/corelibs/U2Core/src/util/TaskWatchdog.cpp b/src/corelibs/U2Core/src/util/TaskWatchdog.cpp
new file mode 100644
index 0000000..febfb3a
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/TaskWatchdog.cpp
@@ -0,0 +1,57 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/Task.h>
+
+#include "TaskWatchdog.h"
+
+namespace U2 {
+
+TaskWatchdog::TaskWatchdog(QObject *resource, Task *task)
+: resource(resource), task(task), cancelWithError(false)
+{
+    connect(resource, SIGNAL(destroyed()), SLOT(sl_onResourceDestroyed()));
+}
+
+void TaskWatchdog::setCancelError(const QString &errorMessage) {
+    cancelWithError = true;
+    this->errorMessage = errorMessage;
+}
+
+void TaskWatchdog::sl_onResourceDestroyed() {
+    task->cancel();
+    if (cancelWithError && !task->hasError()) {
+        task->setError(errorMessage);
+    }
+}
+
+void TaskWatchdog::trackResourceExistence(QObject *resource, Task *task) {
+    TaskWatchdog *tracker = new TaskWatchdog(resource, task);
+    tracker->setParent(task);
+}
+
+void TaskWatchdog::trackResourceExistence(QObject *resource, Task *task, const QString &errorMessage) {
+    TaskWatchdog *tracker = new TaskWatchdog(resource, task);
+    tracker->setParent(task);
+    tracker->setCancelError(errorMessage);
+}
+
+} // U2
diff --git a/src/corelibs/U2Core/src/util/TaskWatchdog.h b/src/corelibs/U2Core/src/util/TaskWatchdog.h
new file mode 100644
index 0000000..bf0df4f
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/TaskWatchdog.h
@@ -0,0 +1,62 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_WATCHDOG_H_
+#define _U2_TASK_WATCHDOG_H_
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class Task;
+
+/**
+ * Utility class for canceling of a task on different events with GObject, Documents
+ * and other entities that can be used in a task. For example, it can be used to cancel a task
+ * on removing of a document from a project.
+ * This abstraction is needed to move this logic out of Task for making the code simpler.
+ */
+class U2CORE_EXPORT TaskWatchdog : public QObject {
+    Q_OBJECT
+public:
+    TaskWatchdog(QObject *resource, Task *task);
+
+    void setCancelError(const QString &errorMessage);
+
+    // Cancels the task if the resource is destroyed.
+    static void trackResourceExistence(QObject *resource, Task *task);
+
+    // Cancels the task and set the error to the task if the resource is destroyed.
+    static void trackResourceExistence(QObject *resource, Task *task, const QString &errorMessage);
+
+private slots:
+    void sl_onResourceDestroyed();
+
+private:
+    const QObject *resource;
+    Task *task;
+    bool cancelWithError;
+    QString errorMessage;
+};
+
+} // U2
+
+#endif // _U2_TASK_WATCHDOG_H_
diff --git a/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp b/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
index 0f864e8..80b555a 100644
--- a/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
@@ -227,21 +227,23 @@ const DNAAlphabet* U2AlphabetUtils::deriveCommonAlphabet(const DNAAlphabet* al1,
         return al1;
     }
     SAFE_POINT(al1 != NULL && al2 != NULL, "Alphabet is NULL", NULL);
-
-    // DNA extended alphabet is a subset of AMINO alphabet
-    if ( ( BaseDNAAlphabetIds::NUCL_DNA_EXTENDED( ) == al1->getId( )
-        && BaseDNAAlphabetIds::AMINO_DEFAULT( ) == al2->getId( ) )
-        || ( BaseDNAAlphabetIds::AMINO_DEFAULT( ) == al1->getId( )
-        && BaseDNAAlphabetIds::NUCL_DNA_EXTENDED( ) == al2->getId( ) ) )
-    {
-        return getById( BaseDNAAlphabetIds::AMINO_DEFAULT( ) );
+    const DNAAlphabet *raw = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::RAW());
+    if (al1->getId() == BaseDNAAlphabetIds::RAW() || al2->getId() == BaseDNAAlphabetIds::RAW()) {
+        return raw;
     }
     if (al1->getType() != al2->getType()) {
-        return getById(BaseDNAAlphabetIds::RAW());
+        return raw;
+    }
+    //al1 and al2 same types below, DNA and RNA are SAME TYPE
+    QByteArray al1Chars = al1->getAlphabetChars();
+    QByteArray al2Chars = al2->getAlphabetChars();
+    if (al1->containsAll(al2Chars, al2Chars.length())) {
+        return al1;
+    } else if (al2->containsAll(al1Chars, al1Chars.length())) {
+        return al2;
+    } else {
+        return raw;
     }
-
-    const DNAAlphabet* resAl = al1->getNumAlphabetChars() >= al2->getNumAlphabetChars() ? al1 : al2;
-    return resAl;
 }
 
 
diff --git a/src/corelibs/U2Core/transl/english.ts b/src/corelibs/U2Core/transl/english.ts
index 9ecf112..a86fcbf 100644
--- a/src/corelibs/U2Core/transl/english.ts
+++ b/src/corelibs/U2Core/transl/english.ts
@@ -717,29 +717,48 @@
     </message>
 </context>
 <context>
-    <name>U2::AddSequencesToAlignmentTask</name>
+    <name>U2::AddSequenceObjectsToAlignmentTask</name>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="52"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="45"/>
         <source>Object is empty.</source>
         <translation>Object is empty.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="57"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="50"/>
         <source>Object is locked for modifications.</source>
         <translation>Object is locked for modifications.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="168"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="136"/>
         <source>Some sequences have wrong alphabet: </source>
         <translation>Some sequences have wrong alphabet: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="171"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="139"/>
         <source> and others</source>
         <translation> and others</translation>
     </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"/>
@@ -1400,55 +1419,55 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::DatatypeSerializers</name>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="306"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="310"/>
         <source>Incorrect tree parsing state</source>
-        <translation type="unfinished"></translation>
+        <translation>Incorrect tree parsing state</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="309"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="313"/>
         <source>Unexpected weight: %1</source>
         <translation>Unexpected weight: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="313"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="317"/>
         <source>Error parsing weight: %1</source>
         <translation>Error parsing weight: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="320"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="341"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="324"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="345"/>
         <source>Tree node stack is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Tree node stack is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="332"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="336"/>
         <source>Error parsing nodeValue: %1</source>
         <translation>Error parsing nodeValue: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="342"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="360"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="346"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="364"/>
         <source>Branch node stack is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Branch node stack is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="344"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="348"/>
         <source>Unexpected new sibling %1</source>
         <translation>Unexpected new sibling %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="357"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="361"/>
         <source>Unexpected closing bracket :%1</source>
         <translation>Unexpected closing bracket :%1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="365"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="387"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="369"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="391"/>
         <source>Unexpected end of file</source>
         <translation>Unexpected end of file</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="399"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="403"/>
         <source>Empty file</source>
         <translation>Empty file</translation>
     </message>
@@ -1485,27 +1504,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="540"/>
+        <location filename="../src/models/DocumentModel.cpp" line="542"/>
         <source>Document is not loaded</source>
         <translation>Document is not loaded</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="553"/>
+        <location filename="../src/models/DocumentModel.cpp" line="555"/>
         <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="559"/>
+        <location filename="../src/models/DocumentModel.cpp" line="561"/>
         <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="629"/>
+        <location filename="../src/models/DocumentModel.cpp" line="631"/>
         <source>Locked by user</source>
         <translation>Locked by user</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="653"/>
+        <location filename="../src/models/DocumentModel.cpp" line="655"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1558,12 +1577,17 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation>Can not run %1 tool. May be tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="131"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="125"/>
+        <source>Tool %1 is cancelled</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="133"/>
         <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="133"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="135"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -1571,47 +1595,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="327"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="329"/>
         <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="333"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="335"/>
         <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="338"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="340"/>
         <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="351"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="353"/>
         <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="382"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="384"/>
         <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="398"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="400"/>
         <source>Undefined tool: '%1'</source>
         <translation>Undefined tool: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="402"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="404"/>
         <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="443"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="448"/>
         <source>Working directory is "%1"</source>
         <translation>Working directory is "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="452"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="457"/>
         <source>Launching %1 tool: %2 %3</source>
         <translation>Launching %1 tool: %2 %3</translation>
     </message>
@@ -1637,97 +1661,97 @@ these match a protein, A between residue 3 and 125 and B between residue
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="42"/>
         <source>Unknown</source>
-        <translation type="unfinished">Unknown</translation>
+        <translation>Unknown</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="43"/>
         <source>Unloaded</source>
-        <translation type="unfinished">Unloaded</translation>
+        <translation>Unloaded</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="44"/>
         <source>Text</source>
-        <translation type="unfinished">Text</translation>
+        <translation>Text</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="45"/>
         <source>Sequence</source>
-        <translation type="unfinished">Sequence</translation>
+        <translation>Sequence</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="45"/>
         <source>Sequences</source>
-        <translation type="unfinished">Sequences</translation>
+        <translation>Sequences</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="46"/>
         <source>Annotation</source>
-        <translation type="unfinished">Annotation</translation>
+        <translation>Annotation</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="46"/>
         <source>Annotations</source>
-        <translation type="unfinished">Annotations</translation>
+        <translation>Annotations</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="47"/>
         <source>Variation</source>
-        <translation type="unfinished">Variation</translation>
+        <translation>Variation</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="47"/>
         <source>Variations</source>
-        <translation type="unfinished">Variations</translation>
+        <translation>Variations</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="48"/>
         <source>Chromatogram</source>
-        <translation type="unfinished">Chromatogram</translation>
+        <translation>Chromatogram</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="48"/>
         <source>Chromatograms</source>
-        <translation type="unfinished">Chromatograms</translation>
+        <translation>Chromatograms</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
         <source>Alignment</source>
-        <translation type="unfinished">Alignment</translation>
+        <translation>Alignment</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
         <source>Alignments</source>
-        <translation type="unfinished">Alignments</translation>
+        <translation>Alignments</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
         <source>Tree</source>
-        <translation type="unfinished">Tree</translation>
+        <translation>Tree</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
         <source>Trees</source>
-        <translation type="unfinished">Trees</translation>
+        <translation>Trees</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>3D model</source>
-        <translation type="unfinished">3D model</translation>
+        <translation>3D model</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>3D models</source>
-        <translation type="unfinished">3D models</translation>
+        <translation>3D models</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Assembly</source>
-        <translation type="unfinished">Assembly</translation>
+        <translation>Assembly</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Assemblies</source>
-        <translation type="unfinished">Assemblies</translation>
+        <translation>Assemblies</translation>
     </message>
 </context>
 <context>
@@ -2174,10 +2198,10 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation> bp</translation>
     </message>
     <message>
-        <location filename="../src/util/IOAdapterUtils.cpp" line="94"/>
-        <location filename="../src/util/IOAdapterUtils.cpp" line="102"/>
+        <location filename="../src/util/IOAdapterUtils.cpp" line="97"/>
+        <location filename="../src/util/IOAdapterUtils.cpp" line="105"/>
         <source>Failed to detect IO adapter for %1</source>
-        <translation type="unfinished">Failed to detect IO adapter for %1</translation>
+        <translation>Failed to detect IO adapter for %1</translation>
     </message>
 </context>
 <context>
@@ -2271,27 +2295,27 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation>IO adapter factory is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="436"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="444"/>
         <source>Document not found %1</source>
         <translation>Document not found %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="456"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="464"/>
         <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="472"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="480"/>
         <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="502"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="510"/>
         <source>Object not found: %1</source>
         <translation>Object not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="509"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="517"/>
         <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>
@@ -2360,32 +2384,32 @@ these match a protein, A between residue 3 and 125 and B between residue
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="77"/>
         <source>Unexpected gap start</source>
-        <translation type="unfinished">Unexpected gap start</translation>
+        <translation>Unexpected gap start</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="86"/>
         <source>Unexpected gap start (too small)</source>
-        <translation type="unfinished">Unexpected gap start (too small)</translation>
+        <translation>Unexpected gap start (too small)</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="87"/>
         <source>Unexpected gap start (too big)</source>
-        <translation type="unfinished">Unexpected gap start (too big)</translation>
+        <translation>Unexpected gap start (too big)</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="101"/>
         <source> Incorrect gap splitting</source>
-        <translation type="unfinished"> Incorrect gap splitting</translation>
+        <translation> Incorrect gap splitting</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="136"/>
         <source> Alignment walker is ended</source>
-        <translation type="unfinished"> Alignment walker is ended</translation>
+        <translation> Alignment walker is ended</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="137"/>
         <source> Alignment changed</source>
-        <translation type="unfinished"> Alignment changed</translation>
+        <translation> Alignment changed</translation>
     </message>
 </context>
 <context>
@@ -2468,18 +2492,18 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::MsaDbiUtils</name>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="756"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="865"/>
         <source>Can't rename an alignment to an empty name!</source>
         <translation>Can't rename an alignment to an empty name!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="785"/>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="792"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="894"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="901"/>
         <source>Failed to insert gaps into an alignment!</source>
         <translation>Failed to insert gaps into an alignment!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="930"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1070"/>
         <source>Failed to crop an alignment!</source>
         <translation>Failed to crop an alignment!</translation>
     </message>
@@ -2488,30 +2512,38 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation type="obsolete">Failed to add a row to an alignment!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1055"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1195"/>
         <source>Can't rename a row to an empty name!</source>
         <translation>Can't rename a row to an empty name!</translation>
     </message>
 </context>
 <context>
+    <name>U2::PasteTask</name>
+    <message>
+        <location filename="../src/globals/ClipboardController.cpp" line="36"/>
+        <source>Paste data</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RelocateDocumentTask</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="349"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="348"/>
         <source>Relocate document %1 -> %2</source>
         <translation>Relocate document %1 -> %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="356"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="355"/>
         <source>No active project found</source>
         <translation>No active project found</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="360"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="359"/>
         <source>Project is locked</source>
         <translation>Project is locked</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="369"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="368"/>
         <source>Only unloaded objects can be relocated</source>
         <translation>Only unloaded objects can be relocated</translation>
     </message>
@@ -2597,22 +2629,22 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::SaveCopyAndAddToProjectTask</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="309"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="308"/>
         <source>Save a copy %1</source>
         <translation>Save a copy %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="327"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="326"/>
         <source>No active project found</source>
         <translation>No active project found</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="328"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="327"/>
         <source>Project is locked</source>
         <translation>Project is locked</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="332"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="331"/>
         <source>Document is already added to the project %1</source>
         <translation>Document is already added to the project %1</translation>
     </message>
@@ -2666,12 +2698,12 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation>Can't rename saved tmp file to original file</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="184"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="183"/>
         <source>Document '%1' can't be unloaded: </source>
         <translation>Document '%1' can't be unloaded: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="184"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="183"/>
         <source>unexpected error</source>
         <translation>unexpected error</translation>
     </message>
@@ -2679,34 +2711,34 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::SaveMultipleDocuments</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="202"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="201"/>
         <source>Save multiple documents</source>
         <translation>Save multiple documents</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="214"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="213"/>
         <source>Question?</source>
         <translation>Question?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="214"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="213"/>
         <source>Save document: %1</source>
         <translation>Save document: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="265"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="264"/>
         <source>You have no permission to write to '%1' file.
 UGENE contains unsaved modifications.</source>
         <translation>You have no permission to write to '%1' file.
 UGENE contains unsaved modifications.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="266"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="265"/>
         <source>Do you want to save changes to another file?</source>
         <translation>Do you want to save changes to another file?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="287"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="286"/>
         <source>Save as</source>
         <translation>Save as</translation>
     </message>
diff --git a/src/corelibs/U2Core/transl/russian.ts b/src/corelibs/U2Core/transl/russian.ts
index 9a2e019..20250ac 100644
--- a/src/corelibs/U2Core/transl/russian.ts
+++ b/src/corelibs/U2Core/transl/russian.ts
@@ -717,29 +717,48 @@
     </message>
 </context>
 <context>
-    <name>U2::AddSequencesToAlignmentTask</name>
+    <name>U2::AddSequenceObjectsToAlignmentTask</name>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="52"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="45"/>
         <source>Object is empty.</source>
         <translation>Объект пуст.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="57"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="50"/>
         <source>Object is locked for modifications.</source>
         <translation>Объект заблокирован для редактирования.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="168"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="136"/>
         <source>Some sequences have wrong alphabet: </source>
         <translation>Некоторые последовательности имеют неправильный алфавит: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="171"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="139"/>
         <source> and others</source>
         <translation> и другие</translation>
     </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"/>
@@ -1403,55 +1422,55 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::DatatypeSerializers</name>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="306"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="310"/>
         <source>Incorrect tree parsing state</source>
-        <translation type="unfinished"></translation>
+        <translation>Incorrect tree parsing state</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="309"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="313"/>
         <source>Unexpected weight: %1</source>
         <translation>Неожиданный вес: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="313"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="317"/>
         <source>Error parsing weight: %1</source>
         <translation>Ошибка парсинга веса: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="320"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="341"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="324"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="345"/>
         <source>Tree node stack is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Tree node stack is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="332"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="336"/>
         <source>Error parsing nodeValue: %1</source>
         <translation>Error parsing nodeValue: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="342"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="360"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="346"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="364"/>
         <source>Branch node stack is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Branch node stack is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="344"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="348"/>
         <source>Unexpected new sibling %1</source>
         <translation>Неожиданный новый родственник %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="357"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="361"/>
         <source>Unexpected closing bracket :%1</source>
         <translation>Неожиданные закрывающие скобки: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="365"/>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="387"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="369"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="391"/>
         <source>Unexpected end of file</source>
         <translation>Неожиданный конец файла</translation>
     </message>
     <message>
-        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="399"/>
+        <location filename="../src/util/DatatypeSerializeUtils.cpp" line="403"/>
         <source>Empty file</source>
         <translation>Пустой файл</translation>
     </message>
@@ -1488,27 +1507,27 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="540"/>
+        <location filename="../src/models/DocumentModel.cpp" line="542"/>
         <source>Document is not loaded</source>
         <translation>Документ не загружен</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="553"/>
+        <location filename="../src/models/DocumentModel.cpp" line="555"/>
         <source>IO adapter does not support write operation</source>
         <translation>Адаптер ввода/вывода не поддерживает запись</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="559"/>
+        <location filename="../src/models/DocumentModel.cpp" line="561"/>
         <source>No write support for document format</source>
         <translation>Запись для данного формата не поддерживается</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="629"/>
+        <location filename="../src/models/DocumentModel.cpp" line="631"/>
         <source>Locked by user</source>
         <translation>Заблокирован пользователем</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="653"/>
+        <location filename="../src/models/DocumentModel.cpp" line="655"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1561,12 +1580,17 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>Невозможно запустить %1 инструмент. Возможно путь до инструмента '%2' указан неверно?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="131"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="125"/>
+        <source>Tool %1 is cancelled</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="133"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 инструмент завершил работу с кодом %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="133"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="135"/>
         <source>Tool %1 finished successfully</source>
         <translation>Инструмент %1 завершил работу корректно</translation>
     </message>
@@ -1574,47 +1598,47 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::ExternalToolSupportUtils</name>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="327"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="329"/>
         <source>Can not remove temporary directory: path is empty.</source>
         <translation>Невозможно удалить временную директорию: пустой путь.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="333"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="335"/>
         <source>Can not remove files from temporary directory.</source>
         <translation>Невозможно удалить файлы из временной директории.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="338"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="340"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Невозможно удалить директорию для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="351"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="353"/>
         <source>Can not create directory for temporary files: %1</source>
         <translation>Невозможно создать директорию для временных файлов: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="382"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="384"/>
         <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="398"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="400"/>
         <source>Undefined tool: '%1'</source>
         <translation>Неопределенный инструмент: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="402"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="404"/>
         <source>Path for '%1' tool not set</source>
         <translation>Путь до инструмента '%1' не установлен</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="443"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="448"/>
         <source>Working directory is "%1"</source>
         <translation>Рабочая директория "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="452"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="457"/>
         <source>Launching %1 tool: %2 %3</source>
         <translation>Запуск инструмента %1: %2 %3</translation>
     </message>
@@ -1640,97 +1664,97 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="42"/>
         <source>Unknown</source>
-        <translation type="unfinished">Неизвестный тип</translation>
+        <translation>Неизвестный тип</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="43"/>
         <source>Unloaded</source>
-        <translation type="unfinished">Не загруженный</translation>
+        <translation>Не загруженный</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="44"/>
         <source>Text</source>
-        <translation type="unfinished">Текст</translation>
+        <translation>Текст</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="45"/>
         <source>Sequence</source>
-        <translation type="unfinished">Последовательность</translation>
+        <translation>Последовательность</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="45"/>
         <source>Sequences</source>
-        <translation type="unfinished">Последовательности</translation>
+        <translation>Последовательности</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="46"/>
         <source>Annotation</source>
-        <translation type="unfinished">Аннотация</translation>
+        <translation>Аннотация</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="46"/>
         <source>Annotations</source>
-        <translation type="unfinished">Аннотации</translation>
+        <translation>Аннотации</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="47"/>
         <source>Variation</source>
-        <translation type="unfinished">Вариация</translation>
+        <translation>Вариация</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="47"/>
         <source>Variations</source>
-        <translation type="unfinished">Вариации</translation>
+        <translation>Вариации</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="48"/>
         <source>Chromatogram</source>
-        <translation type="unfinished">Хроматограмма</translation>
+        <translation>Хроматограмма</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="48"/>
         <source>Chromatograms</source>
-        <translation type="unfinished">Хроматограммы</translation>
+        <translation>Хроматограммы</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
         <source>Alignment</source>
-        <translation type="unfinished">Выравнивание</translation>
+        <translation>Выравнивание</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
         <source>Alignments</source>
-        <translation type="unfinished">Выравнивания</translation>
+        <translation>Выравнивания</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
         <source>Tree</source>
-        <translation type="unfinished">Дерево</translation>
+        <translation>Дерево</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
         <source>Trees</source>
-        <translation type="unfinished">Деревья</translation>
+        <translation>Деревья</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>3D model</source>
-        <translation type="unfinished">3D модель</translation>
+        <translation>3D модель</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>3D models</source>
-        <translation type="unfinished">3D модели</translation>
+        <translation>3D модели</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Assembly</source>
-        <translation type="unfinished">Сборка</translation>
+        <translation>Сборка</translation>
     </message>
     <message>
         <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Assemblies</source>
-        <translation type="unfinished">Сборки</translation>
+        <translation>Сборки</translation>
     </message>
 </context>
 <context>
@@ -2178,10 +2202,10 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>Внутренняя ошибка! Неверный аргумент: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/IOAdapterUtils.cpp" line="94"/>
-        <location filename="../src/util/IOAdapterUtils.cpp" line="102"/>
+        <location filename="../src/util/IOAdapterUtils.cpp" line="97"/>
+        <location filename="../src/util/IOAdapterUtils.cpp" line="105"/>
         <source>Failed to detect IO adapter for %1</source>
-        <translation type="unfinished">Невозможно определить IO адаптер для %1</translation>
+        <translation>Невозможно определить IO адаптер для %1</translation>
     </message>
 </context>
 <context>
@@ -2275,27 +2299,27 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>IO адаптер NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="436"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="444"/>
         <source>Document not found %1</source>
         <translation>Документ не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="456"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="464"/>
         <source>Not enough memory to load document %1</source>
         <translation>Недостаточно памяти для загрузки документа %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="472"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="480"/>
         <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="502"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="510"/>
         <source>Object not found: %1</source>
         <translation>Объект не найден: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="509"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="517"/>
         <source>Can't add object. Document format constraints check failed: %1</source>
         <translation>Невозможно добавить объект. Проверка ограничений формата завершилась неудачно: %1</translation>
     </message>
@@ -2364,32 +2388,32 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="77"/>
         <source>Unexpected gap start</source>
-        <translation type="unfinished">Unexpected gap start</translation>
+        <translation>Unexpected gap start</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="86"/>
         <source>Unexpected gap start (too small)</source>
-        <translation type="unfinished">Unexpected gap start (too small)</translation>
+        <translation>Unexpected gap start (too small)</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="87"/>
         <source>Unexpected gap start (too big)</source>
-        <translation type="unfinished">Unexpected gap start (too big)</translation>
+        <translation>Unexpected gap start (too big)</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="101"/>
         <source> Incorrect gap splitting</source>
-        <translation type="unfinished"> Incorrect gap splitting</translation>
+        <translation> Incorrect gap splitting</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="136"/>
         <source> Alignment walker is ended</source>
-        <translation type="unfinished"> Alignment walker is ended</translation>
+        <translation> Alignment walker is ended</translation>
     </message>
     <message>
         <location filename="../src/util/MAlignmentWalker.cpp" line="137"/>
         <source> Alignment changed</source>
-        <translation type="unfinished"> Alignment changed</translation>
+        <translation> Alignment changed</translation>
     </message>
 </context>
 <context>
@@ -2472,18 +2496,18 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::MsaDbiUtils</name>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="756"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="865"/>
         <source>Can't rename an alignment to an empty name!</source>
         <translation>Невозможно переименовать выравнивание, т.к. имя пустое!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="785"/>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="792"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="894"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="901"/>
         <source>Failed to insert gaps into an alignment!</source>
         <translation>Не удалось вставить пробелы в выравнивание!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="930"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1070"/>
         <source>Failed to crop an alignment!</source>
         <translation>Не удалось обрезать выравнивание!</translation>
     </message>
@@ -2492,30 +2516,38 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation type="obsolete">Не удалось добавить строку в выравнивание!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1055"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1195"/>
         <source>Can't rename a row to an empty name!</source>
         <translation>Не удалось переименовать строку, т.к. имя пустое!</translation>
     </message>
 </context>
 <context>
+    <name>U2::PasteTask</name>
+    <message>
+        <location filename="../src/globals/ClipboardController.cpp" line="36"/>
+        <source>Paste data</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RelocateDocumentTask</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="349"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="348"/>
         <source>Relocate document %1 -> %2</source>
         <translation>Перемещение документа %1 -> %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="356"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="355"/>
         <source>No active project found</source>
         <translation>Нет проекта</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="360"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="359"/>
         <source>Project is locked</source>
         <translation>Проект заблокирован</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="369"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="368"/>
         <source>Only unloaded objects can be relocated</source>
         <translation>Можно перемещать только выгруженные документы</translation>
     </message>
@@ -2601,22 +2633,22 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::SaveCopyAndAddToProjectTask</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="309"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="308"/>
         <source>Save a copy %1</source>
         <translation>Сохранение копии %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="327"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="326"/>
         <source>No active project found</source>
         <translation>Нет проекта</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="328"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="327"/>
         <source>Project is locked</source>
         <translation>Проект заблокирован</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="332"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="331"/>
         <source>Document is already added to the project %1</source>
         <translation>Документ уже добавлен в проект: %1</translation>
     </message>
@@ -2670,12 +2702,12 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>Невозможно переименовать сохраненный временный файл в оригинальный</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="184"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="183"/>
         <source>Document '%1' can't be unloaded: </source>
         <translation>Документ '%1' не может быть выгружен: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="184"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="183"/>
         <source>unexpected error</source>
         <translation>неожиданная ошибка</translation>
     </message>
@@ -2683,34 +2715,34 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::SaveMultipleDocuments</name>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="202"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="201"/>
         <source>Save multiple documents</source>
         <translation>Сохранение нескольких документов</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="214"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="213"/>
         <source>Question?</source>
         <translation>Вопрос?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="214"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="213"/>
         <source>Save document: %1</source>
         <translation>Сохранить документ: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="265"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="264"/>
         <source>You have no permission to write to '%1' file.
 UGENE contains unsaved modifications.</source>
         <translation>У вас недостаточно прав для записи в '%1' файл.
 UGENE содержит несохраненные изменения.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="266"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="265"/>
         <source>Do you want to save changes to another file?</source>
         <translation>Хотите сохранить изменения в другой файл?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/SaveDocumentTask.cpp" line="287"/>
+        <location filename="../src/tasks/SaveDocumentTask.cpp" line="286"/>
         <source>Save as</source>
         <translation>Сохранить как</translation>
     </message>
diff --git a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
index 677434a..7f3cf86 100644
--- a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
+++ b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
@@ -57,7 +57,7 @@ BreakpointHitCountDialog::BreakpointHitCountDialog(const QStringList &hitCountCo
 {
     ui = new Ui_BreakpointHitCountDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126517");
+    new HelpButton(this, ui->buttonBox, "17466603");
 
     ui->hitConditionCombo->addItems(hitCountConditions);
     ui->hitConditionCombo->setCurrentIndex(hitCountConditions.indexOf(conditionOnLaunch));
diff --git a/src/corelibs/U2Designer/src/DatasetsListWidget.cpp b/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
index fcd7f3b..d8af860 100644
--- a/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
+++ b/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
@@ -24,6 +24,7 @@
 #include <QMessageBox>
 #include <QResizeEvent>
 
+#include <U2Core/Counter.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
@@ -61,6 +62,7 @@ void DatasetsListWidget::appendPage(const QString &name, QWidget *page) {
 }
 
 void DatasetsListWidget::sl_deleteDataset(int idx) {
+    GCOUNTER(cvar, tvar, "WD::Dataset::Delete Dataset");
     QWidget *w = tabs->widget(idx);
     tabs->removeTab(idx);
     ctrl->deleteDataset(idx);
@@ -83,6 +85,7 @@ QString DatasetsListWidget::getTip() const {
 }
 
 void DatasetsListWidget::sl_newDataset() {
+    GCOUNTER(cvar, tvar, "WD::Dataset::New Dataset");
     QString error;
     QString text = getTip();
     do {
@@ -108,6 +111,7 @@ void DatasetsListWidget::sl_newDataset() {
 }
 
 void DatasetsListWidget::sl_renameDataset() {
+    GCOUNTER(cvar, tvar, "WD::Dataset::Rename Dataset");
     QAction *a = dynamic_cast<QAction*>(sender());
     CHECK(NULL != a, );
 
diff --git a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
index 378d850..4081af2 100644
--- a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
@@ -44,7 +44,7 @@ EditBreakpointLabelsDialog::EditBreakpointLabelsDialog(const QStringList &existi
       ui(new Ui::EditBreakpointLabelsDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126517");
+    new HelpButton(this, ui->buttonBox, "17466603");
 
     ui->addLabelButton->setEnabled(false);
     initExistingLabelsList(existingLabels);
diff --git a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
index 136cb56..586369f 100644
--- a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
@@ -41,7 +41,7 @@ EditMarkerGroupDialog::EditMarkerGroupDialog(bool isNew, Marker *marker, Workflo
 : QDialog(parent), isNew(isNew), marker(NULL), allModel(_allModel)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126400");
+    new HelpButton(this, buttonBox, "17466486");
     {
         QStringList types;
         types << MarkerTypes::SEQ_LENGTH().getDisplayName(); typeIds << MarkerTypes::SEQ_LENGTH().getId();
@@ -394,7 +394,7 @@ EditMarkerDialog::EditMarkerDialog(bool isNew, const QString &type, const QStrin
 : QDialog(parent), isNew(isNew), type(type), name(name), values(values), editWidget(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126400");
+    new HelpButton(this, buttonBox, "17466486");
     if (!isNew) {
         markerNameEdit->setText(name);
 
diff --git a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
index 3f2fa4e..cb87475 100644
--- a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
@@ -34,7 +34,7 @@ NewBreakpointDialog::NewBreakpointDialog(const QStringList &elementsNames, QWidg
     Qt::WindowFlags f) : QDialog(parent, f), ui(new Ui::NewBreakpointDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126516");
+    new HelpButton(this, ui->buttonBox, "17466602");
     ui->elementCombo->addItems(elementsNames);
 
     QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
index b863f69..6c2a38e 100644
--- a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
@@ -34,7 +34,7 @@ NewGrouperSlotDialog::NewGrouperSlotDialog(QWidget *parent, QList<Descriptor> &i
 : QDialog(parent), inSlots(inSlots), names(names)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126398");
+    new HelpButton(this, buttonBox, "17466484");
 
     foreach (const Descriptor &d, inSlots) {
         slotBox->addItem(d.getDisplayName(), d.getId());
@@ -102,7 +102,7 @@ AnnsActionDialog::AnnsActionDialog(QWidget *parent, GrouperSlotAction *action, Q
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126398");
+    new HelpButton(this, buttonBox, "17466484");
 
     slotBox->addItem(tr("<Don't shift>"));
     foreach (const QString &slot, mergeSeqSlots) {
@@ -147,7 +147,7 @@ SequeceActionDialog::SequeceActionDialog(QWidget *parent, GrouperSlotAction *act
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126398");
+    new HelpButton(this, buttonBox, "17466484");
 
     if (NULL != action) {
         if (ActionTypes::MERGE_SEQUENCE == action->getType()) {
@@ -210,7 +210,7 @@ MsaActionDialog::MsaActionDialog(QWidget *parent, GrouperSlotAction *action)
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126398");
+    new HelpButton(this, buttonBox, "17466484");
     if (NULL != action) {
         assert(ActionTypes::MERGE_MSA == action->getType());
         if (action->hasParameter(ActionParameters::MSA_NAME)) {
@@ -242,7 +242,7 @@ StringActionDialog::StringActionDialog(QWidget *parent, GrouperSlotAction *actio
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126398");
+    new HelpButton(this, buttonBox, "17466484");
     if (NULL != action) {
         assert(ActionTypes::MERGE_STRING == action->getType());
         if (action->hasParameter(ActionParameters::SEPARATOR)) {
diff --git a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
index b06a4c4..46b4864 100644
--- a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
+++ b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
@@ -64,6 +64,7 @@ OutputDirectoryWidget::OutputDirectoryWidget(QWidget *parent, bool commitOnHide)
     QHBoxLayout *hl = new QHBoxLayout();
     hl->setContentsMargins(0, 0, 0, 0);
     pathEdit = new QLineEdit(this);
+    pathEdit->setObjectName("pathEdit");
     browseButton = new QToolButton(this);
     browseButton->setText("...");
     hl->addWidget(pathEdit);
diff --git a/src/corelibs/U2Designer/src/wizard/WizardController.cpp b/src/corelibs/U2Designer/src/wizard/WizardController.cpp
index 9b630d3..9985a1f 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/WizardController.cpp
@@ -494,17 +494,6 @@ QVariant WizardController::getAttributeValue(const AttributeInfo &info) const {
     return attr->getAttributePureValue();
 }
 
-bool WizardController::canSetValue(const AttributeInfo &info, const QVariant &value) {
-    Actor *actor = WorkflowUtils::actorById(currentActors, info.actorId);
-    Attribute *attr = getAttribute(info);
-
-    bool dir = false;
-    bool isOutUrlAttr = RFSUtils::isOutUrlAttribute(attr, actor, dir);
-    CHECK(isOutUrlAttr, true);
-
-    return getRFS()->canAdd(value.toString(), dir);
-}
-
 void WizardController::setAttributeValue(const AttributeInfo &info, const QVariant &value) {
     values[info.toString()] = value;
 
@@ -518,7 +507,19 @@ void WizardController::setAttributeValue(const AttributeInfo &info, const QVaria
         AttributeInfo related(info.actorId, relation->getRelatedAttrId());
         QVariant newValue = relation->getAffectResult(value, getAttributeValue(related), getTags(info),
                                                       getTags(related, true));
-        if (canSetValue(related, newValue)) {
+        Actor *actor = WorkflowUtils::actorById(currentActors, info.actorId);
+        Attribute *attr = getAttribute(info);
+
+        bool canSetValue = false;
+        bool dir = false;
+        bool isOutUrlAttr = RFSUtils::isOutUrlAttribute(attr, actor, dir);
+        if (!isOutUrlAttr) {
+            canSetValue = true;
+        } else {
+            canSetValue = getRFS()->canAdd(value.toString(), dir);
+        }
+
+        if (canSetValue) {
             setAttributeValue(related, newValue);
             if (propertyControllers.contains(related.toString())) {
                 propertyControllers[related.toString()]->updateGUI(newValue);
@@ -531,13 +532,13 @@ void WizardController::setAttributeValue(const AttributeInfo &info, const QVaria
 /* WidgetCreator */
 /************************************************************************/
 WidgetCreator::WidgetCreator(WizardController *_wc)
-: wc(_wc), labelSize(0), result(NULL), layout(NULL), fullWidth(false)
+: wc(_wc), labelSize(0), result(NULL), layout(NULL), fullWidth(false), widgetsArea(NULL)
 {
 
 }
 
 WidgetCreator::WidgetCreator(WizardController *_wc, int _labelSize)
-: wc(_wc), labelSize(_labelSize), result(NULL), layout(NULL), fullWidth(false)
+: wc(_wc), labelSize(_labelSize), result(NULL), layout(NULL), fullWidth(false), widgetsArea(NULL)
 {
 
 }
@@ -735,7 +736,7 @@ void WidgetCreator::setGroupBoxLayout(GroupBox *gb) {
 /* PageContentCreator */
 /************************************************************************/
 PageContentCreator::PageContentCreator(WizardController *_wc)
-    : wc(_wc), result(NULL), pageTitle(NULL)
+    : wc(_wc), result(NULL), pageTitle(NULL), pageSubtitle(NULL)
 {
 
 }
diff --git a/src/corelibs/U2Designer/src/wizard/WizardController.h b/src/corelibs/U2Designer/src/wizard/WizardController.h
index e8bd3af..b34d307 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardController.h
+++ b/src/corelibs/U2Designer/src/wizard/WizardController.h
@@ -118,8 +118,7 @@ private:
     void replaceCurrentActor(const QString &actorId, const QString &selectorValue);
     void assignParameters();
     void applySettings();
-    void saveDelegateTags();
-    bool canSetValue(const AttributeInfo &info, const QVariant &value);
+    void saveDelegateTags();    
     void run();
     void defaults(QWizardPage *wPage);
     WizardPage * findPage(QWizardPage *wPage);
diff --git a/src/corelibs/U2Designer/transl/english.ts b/src/corelibs/U2Designer/transl/english.ts
index 686f2ce..69df353 100644
--- a/src/corelibs/U2Designer/transl/english.ts
+++ b/src/corelibs/U2Designer/transl/english.ts
@@ -660,12 +660,12 @@ bowtie index file</translation>
     <message>
         <location filename="../src/PropertyWidget.cpp" line="178"/>
         <source>False</source>
-        <translation type="unfinished"></translation>
+        <translation>False</translation>
     </message>
     <message>
         <location filename="../src/PropertyWidget.cpp" line="179"/>
         <source>True</source>
-        <translation type="unfinished"></translation>
+        <translation>True</translation>
     </message>
 </context>
 <context>
@@ -692,43 +692,43 @@ bowtie index file</translation>
 <context>
     <name>U2::Dashboard</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="162"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="170"/>
         <source>Output Files</source>
         <translation>Output Files</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="163"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
         <source>Workflow Task</source>
         <translation>Workflow Task</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="164"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="172"/>
         <source>Common Statistics</source>
         <translation>Common Statistics</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="179"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="248"/>
         <location filename="../src/dashboard/Dashboard.cpp" line="256"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="264"/>
         <source>External Tools</source>
         <translation>External Tools</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="188"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="196"/>
         <source>Problems</source>
         <translation>Problems</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="198"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="206"/>
         <source>Can not create a directory: </source>
         <translation>Can not create a directory: </translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="213"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="221"/>
         <source>Can not open a file for writing: </source>
         <translation>Can not open a file for writing: </translation>
     </message>
@@ -881,22 +881,22 @@ bowtie index file</translation>
 <context>
     <name>U2::GroupBox</name>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="880"/>
+        <location filename="../src/wizard/WizardController.cpp" line="881"/>
         <source>Show</source>
         <translation>Show</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="885"/>
+        <location filename="../src/wizard/WizardController.cpp" line="886"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="905"/>
+        <location filename="../src/wizard/WizardController.cpp" line="906"/>
         <source>additional</source>
         <translation>additional</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="909"/>
+        <location filename="../src/wizard/WizardController.cpp" line="910"/>
         <source> parameters</source>
         <translation> parameters</translation>
     </message>
@@ -940,12 +940,12 @@ bowtie index file</translation>
 <context>
     <name>U2::JavascriptAgent</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="384"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="384"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
         <source>The file does not exist</source>
         <translation>The file does not exist</translation>
     </message>
@@ -1003,7 +1003,7 @@ bowtie index file</translation>
 <context>
     <name>U2::OutputDirectoryWidget</name>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="79"/>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="80"/>
         <source>Select a directory</source>
         <translation>Select a directory</translation>
     </message>
@@ -1062,17 +1062,22 @@ bowtie index file</translation>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="62"/>
+        <source>Information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Element</source>
         <translation>Element</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Message</source>
         <translation>Message</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
@@ -1150,7 +1155,7 @@ bowtie index file</translation>
 <context>
     <name>U2::RemoveDashboardsTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="459"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="471"/>
         <source>Remove dashboards</source>
         <translation>Remove dashboards</translation>
     </message>
@@ -1196,7 +1201,7 @@ bowtie index file</translation>
 <context>
     <name>U2::ScanDashboardsDirTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="413"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="425"/>
         <source>Scan dashboards directory</source>
         <translation>Scan dashboards directory</translation>
     </message>
@@ -1400,7 +1405,7 @@ bowtie index file</translation>
     <message>
         <location filename="../src/DesignerUtils.cpp" line="35"/>
         <source>UGENE workflow documents</source>
-        <translation type="unfinished">UGENE workflow documents</translation>
+        <translation>UGENE workflow documents</translation>
     </message>
 </context>
 <context>
diff --git a/src/corelibs/U2Designer/transl/russian.ts b/src/corelibs/U2Designer/transl/russian.ts
index 367d6df..44981f6 100644
--- a/src/corelibs/U2Designer/transl/russian.ts
+++ b/src/corelibs/U2Designer/transl/russian.ts
@@ -660,12 +660,12 @@ bowtie index file</source>
     <message>
         <location filename="../src/PropertyWidget.cpp" line="178"/>
         <source>False</source>
-        <translation type="unfinished"></translation>
+        <translation>Ложь</translation>
     </message>
     <message>
         <location filename="../src/PropertyWidget.cpp" line="179"/>
         <source>True</source>
-        <translation type="unfinished"></translation>
+        <translation>Истина</translation>
     </message>
 </context>
 <context>
@@ -692,43 +692,43 @@ bowtie index file</source>
 <context>
     <name>U2::Dashboard</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="162"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="170"/>
         <source>Output Files</source>
         <translation>Выходные файлы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="163"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
         <source>Workflow Task</source>
         <translation>Задача схемы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="164"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="172"/>
         <source>Common Statistics</source>
         <translation>Общая статистика</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="179"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="248"/>
         <location filename="../src/dashboard/Dashboard.cpp" line="256"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="264"/>
         <source>External Tools</source>
         <translation>Внешние инструменты</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="188"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="196"/>
         <source>Problems</source>
         <translation>Проблемы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="198"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="206"/>
         <source>Can not create a directory: </source>
         <translation>Невозможно создать директорию: </translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="213"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="221"/>
         <source>Can not open a file for writing: </source>
         <translation>Невозможно открыть файл для записи: </translation>
     </message>
@@ -881,22 +881,22 @@ bowtie index file</source>
 <context>
     <name>U2::GroupBox</name>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="880"/>
+        <location filename="../src/wizard/WizardController.cpp" line="881"/>
         <source>Show</source>
         <translation>Показать</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="885"/>
+        <location filename="../src/wizard/WizardController.cpp" line="886"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="905"/>
+        <location filename="../src/wizard/WizardController.cpp" line="906"/>
         <source>additional</source>
         <translation>дополнительно</translation>
     </message>
     <message>
-        <location filename="../src/wizard/WizardController.cpp" line="909"/>
+        <location filename="../src/wizard/WizardController.cpp" line="910"/>
         <source> parameters</source>
         <translation> параметры</translation>
     </message>
@@ -940,12 +940,12 @@ bowtie index file</source>
 <context>
     <name>U2::JavascriptAgent</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="384"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="384"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
         <source>The file does not exist</source>
         <translation>Файл не существует</translation>
     </message>
@@ -1003,7 +1003,7 @@ bowtie index file</source>
 <context>
     <name>U2::OutputDirectoryWidget</name>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="79"/>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="80"/>
         <source>Select a directory</source>
         <translation>Укажите директорию</translation>
     </message>
@@ -1062,17 +1062,22 @@ bowtie index file</source>
         <translation>Ожидание</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="62"/>
+        <source>Information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Element</source>
         <translation>Элемент</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Message</source>
         <translation>Сообщение</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="115"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
@@ -1150,7 +1155,7 @@ bowtie index file</source>
 <context>
     <name>U2::RemoveDashboardsTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="459"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="471"/>
         <source>Remove dashboards</source>
         <translation>Удалить панель</translation>
     </message>
@@ -1196,7 +1201,7 @@ bowtie index file</source>
 <context>
     <name>U2::ScanDashboardsDirTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="413"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="425"/>
         <source>Scan dashboards directory</source>
         <translation>Сканирование каталога панели</translation>
     </message>
@@ -1401,7 +1406,7 @@ bowtie index file</source>
     <message>
         <location filename="../src/DesignerUtils.cpp" line="35"/>
         <source>UGENE workflow documents</source>
-        <translation type="unfinished">Вычислительные схемы UGENE</translation>
+        <translation>Вычислительные схемы UGENE</translation>
     </message>
 </context>
 <context>
diff --git a/src/corelibs/U2Formats/src/ABIFormat.cpp b/src/corelibs/U2Formats/src/ABIFormat.cpp
index ca9cc23..ec8216e 100644
--- a/src/corelibs/U2Formats/src/ABIFormat.cpp
+++ b/src/corelibs/U2Formats/src/ABIFormat.cpp
@@ -464,7 +464,6 @@ Document* ABIFormat::parseABI(const U2DbiRef& dbiRef, SeekableBuf* fp, IOAdapter
 
 bool ABIFormat::loadABIObjects(SeekableBuf* fp, DNASequence &dna, DNAChromatogram &cd)
 {
-    float fspacing; /* average base spacing */
     uint numPoints, numBases;
     uint signalO;
     int no_bases = 0;
@@ -747,7 +746,7 @@ skip_bases:
         }
 
         /* Get the spacing.. it's a float but don't worry yet */
-        fspacing = 0;
+        float fspacing = 0;
         if (-1 != getABIint4(fp, indexO, SpacingEntryLabel, 1, (uint *)&spacing, 1)) {
             fspacing = int_to_float(spacing);
             sequenceComment.append(QString("SPAC=%1\n").arg(fspacing)); //-6.2f",
diff --git a/src/corelibs/U2Formats/src/ASNFormat.cpp b/src/corelibs/U2Formats/src/ASNFormat.cpp
index 931792a..46fcb00 100644
--- a/src/corelibs/U2Formats/src/ASNFormat.cpp
+++ b/src/corelibs/U2Formats/src/ASNFormat.cpp
@@ -579,9 +579,6 @@ void ASNFormat::BioStructLoader::loadIntraResidueBonds( BioStruct3D& struc )
 
 ///////////////////////////////////////////////////////////////////////////////////////////
 
-#define READ_BUF_SIZE 4096
-
-
 AsnNode* ASNFormat::AsnParser::loadAsnTree()
 {
     try {
@@ -612,12 +609,12 @@ bool ASNFormat::AsnParser::readRootElement()
 {
     Q_ASSERT(io->getProgress() == 0);
 
-    QByteArray readBuff(READ_BUF_SIZE+1, 0);
+    QByteArray readBuff(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buf = readBuff.data();
     quint64 len = 0;
 
     bool lineOk = true;
-    len = io->readUntil(buf, READ_BUF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
+    len = io->readUntil(buf, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
     if (!lineOk) {
         throw AsnParserError(ASNFormat::tr("First line is too long"));
     }
diff --git a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
index 666f24f..8a3f558 100644
--- a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
+++ b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
@@ -63,13 +63,13 @@ AbstractVariationFormat::AbstractVariationFormat(QObject *p, const QStringList &
 }
 
 namespace {
-    const int bufferSize = 10 * 1024; // 10 Kb
+    const int LOCAL_READ_BUFF_SIZE = 10 * 1024; // 10 Kb
 
     inline QByteArray readLine(IOAdapter *io, char *buffer, int bufferSize) {
         QByteArray result;
         bool terminatorFound = false;
         do {
-            qint64 length = io->readLine(buffer, bufferSize, &terminatorFound);
+            qint64 length = io->readLine(buffer, LOCAL_READ_BUFF_SIZE, &terminatorFound);
             CHECK(-1 != length, result);
             result += QByteArray(buffer, length);
         } while (!terminatorFound && !io->isEof());
@@ -88,7 +88,7 @@ Document *AbstractVariationFormat::loadDocument(IOAdapter *io, const U2DbiRef &d
     SAFE_POINT(io, "IO adapter is NULL!",  NULL);
     SAFE_POINT(io->isOpen(), QString("IO adapter is not open %1").arg(io->getURL().getURLString()), NULL);
 
-    QByteArray readBuff(bufferSize + 1, 0);
+    QByteArray readBuff(LOCAL_READ_BUFF_SIZE + 1, 0);
     char* buff = readBuff.data();
 
     SplitAlleles splitting = fs.contains(DocumentReadingMode_SplitVariationAlleles)? AbstractVariationFormat::Split : AbstractVariationFormat::NoSplit;
@@ -101,7 +101,7 @@ Document *AbstractVariationFormat::loadDocument(IOAdapter *io, const U2DbiRef &d
     int lineNumber = 0;
     do {
         os.setProgress(io->getProgress());
-        QString line = readLine(io, buff, bufferSize);
+        QString line = readLine(io, buff, LOCAL_READ_BUFF_SIZE);
         lineNumber++;
         if (line.isEmpty()) {
             continue;
diff --git a/src/corelibs/U2Formats/src/BAMUtils.cpp b/src/corelibs/U2Formats/src/BAMUtils.cpp
index 34c143b..93dbc7e 100644
--- a/src/corelibs/U2Formats/src/BAMUtils.cpp
+++ b/src/corelibs/U2Formats/src/BAMUtils.cpp
@@ -662,7 +662,7 @@ bool BAMUtils::isEqualByLength(const GUrl &fileUrl1, const GUrl &fileUrl2, U2OpS
         int r1 = 0;
         int r2 = 0;
         while ((r1 = samread(in, b1)) >= 0) { // read one alignment from file1
-            if((r2 = samread(out, b2) >= 0)){ //read one alignment from file2
+            if((r2 = samread(out, b2)) >= 0){ //read one alignment from file2
                 if(b1->data_len != b2->data_len) {
                     os.setError("Different alignment of reads");
                     break;
diff --git a/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp b/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
index b132973..5accadc 100644
--- a/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
+++ b/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
@@ -62,7 +62,6 @@ ClustalWAlnFormat::ClustalWAlnFormat(QObject* p) : DocumentFormat(p, DocumentFor
 }
 
 void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap& fs, U2OpStatus& os) {
-    static int READ_BUFF_SIZE = 1024;
     QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     char* buff  = readBuffer.data();
 
diff --git a/src/corelibs/U2Formats/src/DifferentialFormat.cpp b/src/corelibs/U2Formats/src/DifferentialFormat.cpp
index d9afad3..630cb32 100644
--- a/src/corelibs/U2Formats/src/DifferentialFormat.cpp
+++ b/src/corelibs/U2Formats/src/DifferentialFormat.cpp
@@ -92,8 +92,8 @@ FormatCheckResult DifferentialFormat::checkRawData(const QByteArray &rawData,
 
     for (QStringList::iterator i=lines.begin(); i!=lines.end();) {
         // skip the last line because it can be cut
-        QStringList::iterator current = i;
-        i++;
+        QStringList::iterator current(i);
+        ++i;
         if (i == lines.end()) {
             break;
         }
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
index 83c4739..7c8aa81 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
@@ -28,7 +28,6 @@
 #include <U2Core/BioStruct3D.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GenbankFeatures.h>
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.h b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
index 52d1866..6250d09 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.h
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
@@ -22,6 +22,7 @@
 #ifndef _U2_DOCUMENT_FORMAT_UTILS_H_
 #define _U2_DOCUMENT_FORMAT_UTILS_H_
 
+#include <U2Core/DocumentModel.h>
 #include <U2Core/U2Region.h>
 
 #include <QtCore/QStringList>
@@ -33,7 +34,6 @@ class AnnotationTableObject;
 class DNAAlphabet;
 class DNASequence;
 class Document;
-class DocumentFormat;
 class GObject;
 class GObjectReference;
 class GUrl;
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
index 8a87083..1eda7be 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
@@ -50,6 +50,8 @@
 
 namespace U2 {
 
+const int ParserState::LOCAL_READ_BUFFER_SIZE = 40000;
+
 /* TRANSLATOR U2::EMBLGenbankAbstractDocument */
 //TODO: local8bit or ascii??
 
@@ -105,7 +107,7 @@ void EMBLGenbankAbstractDocument::load(const U2DbiRef& dbiRef, IOAdapter* io, QL
 
     GObjectReference sequenceRef(GObjectReference(io->getURL().getURLString(), "", GObjectTypes::SEQUENCE));
 
-    QByteArray readBuffer(ParserState::READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(ParserState::LOCAL_READ_BUFFER_SIZE, '\0');
     ParserState st(isNcbiLikeFormat() ? 12 : 5, io, NULL, os);
     st.buff = readBuffer.data();
 
@@ -294,7 +296,7 @@ DNASequence* EMBLGenbankAbstractDocument::loadSequence(IOAdapter* io, U2OpStatus
 
     QByteArray sequenceData;
     U2MemorySequenceImporter seqImporter(sequenceData);
-    QByteArray readBuffer(ParserState::READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(ParserState::LOCAL_READ_BUFFER_SIZE, '\0');
     ParserState st(isNcbiLikeFormat() ? 12 : 5, io, NULL, os);
     st.buff = readBuffer.data();
 
@@ -625,9 +627,7 @@ bool EMBLGenbankAbstractDocument::readSequence(ParserState* st, U2SequenceImport
     U2OpStatus& si = st->si;
     si.setDescription(tr("Reading sequence %1").arg(st->entry->name));
     //res.reserve(res.size() + headerSeqLen);
-
-    static int READ_BUFF_SIZE = 4096;
-    QByteArray readBuffer(READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(DocumentFormat::READ_BUFF_SIZE, '\0');
     char* buff  = readBuffer.data();
 
     //reading sequence
@@ -637,7 +637,7 @@ bool EMBLGenbankAbstractDocument::readSequence(ParserState* st, U2SequenceImport
     int len;
     int dataOffset = 0;
     bool numIsPrefix = isNcbiLikeFormat();
-    while (ok && (len = io->readLine(buff, READ_BUFF_SIZE)) > 0) {
+    while (ok && (len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE)) > 0) {
         if (si.isCoR()) {
             res.clear();
             break;
@@ -730,7 +730,7 @@ void EMBLGenbankAbstractDocument::readAnnotations(ParserState* st, int offset) {
             break;
         }
         //parsing feature;
-        SharedAnnotationData f = readAnnotation(st->io, st->buff, st->len, ParserState::READ_BUFF_SIZE, st->si, offset, st->entry->seqLen);
+        SharedAnnotationData f = readAnnotation(st->io, st->buff, st->len, ParserState::LOCAL_READ_BUFFER_SIZE, st->si, offset, st->entry->seqLen);
         st->entry->features.push_back(f);
     } while (st->readNextLine());
 }
@@ -780,10 +780,10 @@ bool ParserState::readNextLine(bool emptyOK) {
     CHECK_OP_EXT(si, len = 0, false);
 
     bool ok = false;
-    len = io->readLine(buff, READ_BUFF_SIZE, &ok);
+    len = io->readLine(buff, LOCAL_READ_BUFFER_SIZE, &ok);
     si.setProgress(io->getProgress());
 
-    if (!ok && len == READ_BUFF_SIZE) {
+    if (!ok && len == LOCAL_READ_BUFFER_SIZE) {
         si.setError(U2::EMBLGenbankAbstractDocument::tr("Line is too long."));
     } else if (len == -1) {
         si.setError(U2::EMBLGenbankAbstractDocument::tr("IO error."));
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
index 6aef172..b4ed308 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
@@ -114,7 +114,6 @@ public:
     const int valOffset;
     EMBLGenbankDataEntry* entry;
     IOAdapter* io;
-    static const int READ_BUFF_SIZE = 40000;
     char* buff;
     int len;
     U2OpStatus& si;
@@ -126,6 +125,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;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Formats/src/FastaFormat.cpp b/src/corelibs/U2Formats/src/FastaFormat.cpp
index 0af21cf..b89998c 100644
--- a/src/corelibs/U2Formats/src/FastaFormat.cpp
+++ b/src/corelibs/U2Formats/src/FastaFormat.cpp
@@ -124,7 +124,6 @@ FormatCheckResult FastaFormat::checkRawData(const QByteArray& rawData, const GUr
     return res;
 }
 
-#define READ_BUFF_SIZE  4096
 static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, QList<GObject*>& objects,
                  int gapSize, QString& writeLockReason, U2OpStatus& os)
 {
@@ -138,7 +137,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
     CHECK_OP(os, );
 
     writeLockReason.clear();
-    QByteArray readBuff(READ_BUFF_SIZE + 1, 0);
+    QByteArray readBuff(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buff = readBuff.data();
     qint64 len = 0;
 
@@ -153,7 +152,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
     //skip leading whites if present
     bool lineOk = true;
     static QBitArray nonWhites = ~TextUtils::WHITES;
-    io->readUntil(buff, READ_BUFF_SIZE, nonWhites, IOAdapter::Term_Exclude, &lineOk);
+    io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, nonWhites, IOAdapter::Term_Exclude, &lineOk);
 
     U2SequenceImporter seqImporter(fs, true);
     const QString folder = fs.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
@@ -170,7 +169,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
         //skip start comments and read header
         if(!headerReaded){
             do{
-                len = io->readLine(buff, READ_BUFF_SIZE);
+                len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE);
             }while(buff[0] == fastaCommentStartChar && len > 0);
         }
 
@@ -208,7 +207,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
         int sequenceLen = 0;
         while (!os.isCoR()) {
             do{
-                len = io->readLine(buff, READ_BUFF_SIZE);
+                len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE);
             }while(len <= 0 && !io->isEof());
 
             if (len <= 0 && io->isEof()) {
diff --git a/src/corelibs/U2Formats/src/FastqFormat.cpp b/src/corelibs/U2Formats/src/FastqFormat.cpp
index ca6736a..b880e44 100644
--- a/src/corelibs/U2Formats/src/FastqFormat.cpp
+++ b/src/corelibs/U2Formats/src/FastqFormat.cpp
@@ -130,18 +130,16 @@ FormatCheckResult FastqFormat::checkRawData(const QByteArray& rawData, const GUr
     return res;
 }
 
-#define BUFF_SIZE  4096
-
 static QString readSequenceName(U2OpStatus& os, IOAdapter *io, char beginWith = '@') {
     static const QString errorMessage = U2::FastqFormat::tr("Error while trying to find sequence name start");
 
-    QByteArray buffArray(BUFF_SIZE+1, 0);
+    QByteArray buffArray(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     { // read name string
         char *buff = buffArray.data();
         bool sequenceNameStartFound = false;
         int readedCount = 0;
         while ((readedCount == 0) && !io->isEof()) { // skip \ns
-            readedCount = io->readLine(buff, BUFF_SIZE, &sequenceNameStartFound);
+            readedCount = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE, &sequenceNameStartFound);
         }
         CHECK_EXT(io->isEof() == false,,"");
         CHECK_EXT(readedCount >= 0, os.setError(errorMessage), "");
@@ -163,14 +161,14 @@ static bool checkFirstSymbol(const QByteArray& b, char symbol) {
 
 static void readSequence(U2OpStatus& os, IOAdapter *io, QByteArray &sequence, char readUntil = '+') {
 
-    QByteArray buffArray(BUFF_SIZE+1, 0);
+    QByteArray buffArray(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buff = buffArray.data();
 
     // reading until readUntil symbol i.e. quality or dna sequence name start, ignoring whitespace at the beginning and the end of lines
 
     while (!io->isEof()) {
         bool eolnFound = false;
-        int readedCount = io->readUntil(buff, BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &eolnFound);
+        int readedCount = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &eolnFound);
         CHECK_EXT(readedCount >= 0, os.setError(U2::FastqFormat::tr("Error while reading sequence")),);
 
         QByteArray trimmed = QByteArray(buffArray.data(), readedCount);
@@ -188,7 +186,7 @@ static void readSequence(U2OpStatus& os, IOAdapter *io, QByteArray &sequence, ch
 
 static void readQuality(U2OpStatus& os, IOAdapter *io, QByteArray &sequence, int count) {
 
-    QByteArray buffArray(BUFF_SIZE+1, 0);
+    QByteArray buffArray(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buff = buffArray.data();
 
     // reading quality sequence, ignoring whitespace at the beginning and the end of lines
@@ -196,7 +194,7 @@ static void readQuality(U2OpStatus& os, IOAdapter *io, QByteArray &sequence, int
     int readed = 0;
     while (!io->isEof() && (readed < count)) {
         bool eolnFound = false;
-        int readedCount = io->readUntil(buff, BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &eolnFound);
+        int readedCount = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &eolnFound);
         CHECK_EXT(readedCount >= 0, os.setError(U2::FastqFormat::tr("Error while reading sequence")),);
 
         QByteArray trimmed = QByteArray(buffArray.data(), readedCount);
diff --git a/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp b/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
index 57c0df2..0a6a20d 100644
--- a/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
+++ b/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
@@ -111,15 +111,14 @@ Document* FpkmTrackingFormat::loadDocument(IOAdapter* io, const U2DbiRef&  dbiRe
 }
 
 
-#define READ_BUFF_SIZE 4096
 int readFpkmTrLine(QString &buffer, IOAdapter* io, QScopedArrayPointer<char> &charbuff) {
     int len;
     buffer.clear();
     do {
-        len = io->readLine(charbuff.data(), READ_BUFF_SIZE - 1);
+        len = io->readLine(charbuff.data(), DocumentFormat::READ_BUFF_SIZE - 1);
         charbuff.data()[len] = '\0';
         buffer.append(QString(charbuff.data()));
-    } while (READ_BUFF_SIZE - 1 == len);
+    } while (DocumentFormat::READ_BUFF_SIZE - 1 == len);
     return buffer.length();
 }
 
diff --git a/src/corelibs/U2Formats/src/GFFFormat.cpp b/src/corelibs/U2Formats/src/GFFFormat.cpp
index 86253a2..1b6ead4 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.cpp
+++ b/src/corelibs/U2Formats/src/GFFFormat.cpp
@@ -42,10 +42,11 @@
 
 namespace U2{
 
-#define READ_BUFF_SIZE 32768         //file reader buffer size
 #define SAVE_LINE_LEN 70            //line length for
 #define DEFAULT_EMPTY_FASTA_SEQUENCE_NAME "EMPTY_NAME"            //line length for
 
+const int GFFFormat::LOCAL_READ_BUFFER_SIZE = 32768;
+
 GFFFormat::GFFFormat(QObject* p):DocumentFormat(p, DocumentFormatFlag_SupportWriting, QStringList("gff")){
     formatName = tr("GFF");
     formatDescription = tr("GFF is a format used for storing features and annotations");
@@ -66,14 +67,14 @@ Document* GFFFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const Q
     return doc;
 }
 
-int readLongLine(QString &buffer, IOAdapter* io, QScopedArrayPointer<char> &charbuff) {
+int readLongLine(QString &buffer, IOAdapter* io, QScopedArrayPointer<char> &charbuff, int readBufferSize) {
     int len;
     buffer.clear();
     do {
-        len = io->readLine(charbuff.data(), READ_BUFF_SIZE - 1);
+        len = io->readLine(charbuff.data(), readBufferSize - 1);
         charbuff.data()[len] = '\0';
         buffer.append(QString(charbuff.data()));
-    } while (READ_BUFF_SIZE - 1 == len);
+    } while (readBufferSize - 1 == len);
     return buffer.length();
 }
 
@@ -222,8 +223,8 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
     CHECK_OP(os,);
     Q_UNUSED(opBlock);
 
-    QScopedArrayPointer<char> buff(new char[READ_BUFF_SIZE]);
-    int len = io->readLine(buff.data(), READ_BUFF_SIZE);
+    QScopedArrayPointer<char> buff(new char[LOCAL_READ_BUFFER_SIZE]);
+    int len = io->readLine(buff.data(), LOCAL_READ_BUFFER_SIZE);
     buff.data()[len] = '\0';
     QString qstrbuf(buff.data());
     QStringList words = qstrbuf.split(QRegExp("\\s+"));
@@ -252,7 +253,7 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
     const int objectsCountLimit = hints.contains(DocumentReadingMode_MaxObjectsInDoc) ? hints[DocumentReadingMode_MaxObjectsInDoc].toInt() : -1;
 
     while (!io->isEof()) {
-        len = readLongLine(qstrbuf, io, buff);
+        len = readLongLine(qstrbuf, io, buff, GFFFormat::LOCAL_READ_BUFFER_SIZE);
         //skip empty lines
         if (TextUtils::remove(buff.data(), len, TextUtils::WHITES) == 0) {
             ioLog.info(GFFFormat::tr("Parsing error: file contains empty line %1, line skipped").arg(lineNumber));
@@ -452,6 +453,7 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
         if (os.hasError()) {
             qDeleteAll(seqMap.values());
             seqMap.clear();
+            delete seqObj;
             return;
         }
         SAFE_POINT(seqObj != NULL, "DocumentFormatUtils::addSequenceObject returned NULL but didn't set error",);
diff --git a/src/corelibs/U2Formats/src/GFFFormat.h b/src/corelibs/U2Formats/src/GFFFormat.h
index bf5961f..eabe53d 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.h
+++ b/src/corelibs/U2Formats/src/GFFFormat.h
@@ -53,6 +53,8 @@ private:
     QStringList parseLine(const QString& line) const;
 
     QString formatName;
+
+    static const int LOCAL_READ_BUFFER_SIZE;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Formats/src/GTFFormat.cpp b/src/corelibs/U2Formats/src/GTFFormat.cpp
index bc6cf11..bec1341 100644
--- a/src/corelibs/U2Formats/src/GTFFormat.cpp
+++ b/src/corelibs/U2Formats/src/GTFFormat.cpp
@@ -121,15 +121,14 @@ Document* GTFFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const Q
     return doc;
 }
 
-#define READ_BUFF_SIZE 4096
 int readGTFLine(QString &buffer, IOAdapter *io, QScopedArrayPointer<char> &charbuff) {
     int len;
     buffer.clear();
     do {
-        len = io->readLine(charbuff.data(), READ_BUFF_SIZE - 1);
+        len = io->readLine(charbuff.data(), DocumentFormat::READ_BUFF_SIZE - 1);
         charbuff.data()[len] = '\0';
         buffer.append(QString(charbuff.data()));
-    } while (READ_BUFF_SIZE - 1 == len);
+    } while (DocumentFormat::READ_BUFF_SIZE - 1 == len);
     return buffer.length();
 }
 
diff --git a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
index 1b095e9..6d331c8 100644
--- a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
@@ -532,7 +532,7 @@ bool GenbankPlainTextFormat::checkCircularity(const GUrl& filePath, U2OpStatus&
     bool ok = io->open(filePath, IOAdapterMode_Read);
     CHECK_EXT( ok, os.setError(L10N::errorOpeningFileRead(filePath)), false);
 
-    QByteArray readBuffer(ParserState::READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     ParserState st(12, io, NULL, os);
     st.buff = readBuffer.data();
     EMBLGenbankDataEntry data;
diff --git a/src/corelibs/U2Formats/src/MSFFormat.cpp b/src/corelibs/U2Formats/src/MSFFormat.cpp
index 4a1530a..07d6bad 100644
--- a/src/corelibs/U2Formats/src/MSFFormat.cpp
+++ b/src/corelibs/U2Formats/src/MSFFormat.cpp
@@ -67,21 +67,20 @@ MSFFormat::MSFFormat(QObject* p) : DocumentFormat(p, DocumentFormatFlags(Documen
 }
 
 static bool getNextLine(IOAdapter* io, QByteArray& line) {
-    static int READ_BUFF_SIZE = 1024;
-    QByteArray readBuffer(READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(DocumentFormat::READ_BUFF_SIZE, '\0');
     char* buff = readBuffer.data();
 
     qint64 len;
     bool eolFound = false, eof = false;
     while (!eolFound) {
-        len = io->readLine(buff, READ_BUFF_SIZE, &eolFound);
-        if (len < READ_BUFF_SIZE && !eolFound) {
+        len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE, &eolFound);
+        if (len < DocumentFormat::READ_BUFF_SIZE && !eolFound) {
             eolFound = eof = true;
         }
         line += readBuffer;
     }
-    if (len != READ_BUFF_SIZE) {
-        line.resize(line.size() + len - READ_BUFF_SIZE);
+    if (len != DocumentFormat::READ_BUFF_SIZE) {
+        line.resize(line.size() + len - DocumentFormat::READ_BUFF_SIZE);
     }
     line = line.simplified();
     return eof;
diff --git a/src/corelibs/U2Formats/src/MegaFormat.cpp b/src/corelibs/U2Formats/src/MegaFormat.cpp
index 6476701..d339659 100644
--- a/src/corelibs/U2Formats/src/MegaFormat.cpp
+++ b/src/corelibs/U2Formats/src/MegaFormat.cpp
@@ -96,7 +96,6 @@ FormatCheckResult MegaFormat::checkRawData(const QByteArray& rawData, const GUrl
 
 bool MegaFormat::getNextLine(IOAdapter* io, QByteArray& line) {
     line.clear();
-    static int READ_BUFF_SIZE = 4096;
     QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     char* buff = readBuffer.data();
 
diff --git a/src/corelibs/U2Formats/src/PDBFormat.cpp b/src/corelibs/U2Formats/src/PDBFormat.cpp
index e02079e..d61684c 100644
--- a/src/corelibs/U2Formats/src/PDBFormat.cpp
+++ b/src/corelibs/U2Formats/src/PDBFormat.cpp
@@ -169,19 +169,17 @@ PDBFormat::PDBParser::PDBParser(IOAdapter* _io) : io(_io), currentPDBLine(""), c
     flagAtomRecordPresent = false;
 }
 
-#define READ_BUF_SIZE 4096
-
 void PDBFormat::PDBParser::parseBioStruct3D(BioStruct3D& biostruct, U2OpStatus& ti) {
 
-    QByteArray readBuff(READ_BUF_SIZE+1, 0);
+    QByteArray readBuff(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buf = readBuff.data();
     qint64 len = 0;
-
+    bool firstCompndLine = true;
     while (!ti.isCoR()) {
 
         bool lineOk = true;
 
-        len = io->readUntil(buf, READ_BUF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
+        len = io->readUntil(buf, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
         if (len == 0) {
             break;
         }
@@ -200,6 +198,12 @@ void PDBFormat::PDBParser::parseBioStruct3D(BioStruct3D& biostruct, U2OpStatus&
             continue;
         }
 
+        if (currentPDBLine.startsWith("COMPND")) {
+            parseMacromolecularContent(firstCompndLine, ti);
+            firstCompndLine = false;
+            continue;
+        }
+
         if (currentPDBLine.startsWith("SEQRES")) {
             parseSequence(biostruct, ti);
             continue;
@@ -251,6 +255,42 @@ void PDBFormat::PDBParser::parseBioStruct3D(BioStruct3D& biostruct, U2OpStatus&
 
 }
 
+
+namespace {
+const QString MOLECULE_TAG = "MOLECULE";
+const QString CHAIN_TAG = "CHAIN";
+}
+
+void PDBFormat::PDBParser::parseMacromolecularContent(bool firstCompndLine, U2OpStatus& ti) {
+    /*
+    Record Format
+    COLUMNS       DATA TYPE       FIELD         DEFINITION
+    ----------------------------------------------------------------------------------
+    1 -  6       Record name     "COMPND"
+    8 - 10       Continuation    continuation  Allows concatenation of multiple records.
+    11 - 80      Specification   compound      Description of the molecular components.
+    list
+    Details
+    */
+    if (!firstCompndLine) {
+        QString specification = currentPDBLine.mid(10, currentPDBLine.size() - 11).trimmed().toLatin1();
+        if (specification.startsWith(MOLECULE_TAG)) {
+            QRegExp end(";\\s*$");
+            int index = end.indexIn(specification);
+            index = (index > 0) ? index : specification.size();
+            currentMoleculeName = specification.mid(MOLECULE_TAG.size() + 1, index - MOLECULE_TAG.size() - 1).trimmed();
+        } else if (specification.startsWith(CHAIN_TAG)) {
+            QStringList idetifiers = specification.split(QRegExp(",|:|;"));
+            for (int i = 1; i < idetifiers.size(); i++) {
+                QString identifier = idetifiers.at(i).trimmed();
+                if (identifier.size() > 0 && !currentMoleculeName.isEmpty()) {
+                    chainToMoleculeMap[identifier] = currentMoleculeName;
+                }
+            }
+        }
+    }
+}
+
 void PDBFormat::PDBParser::parseHeader(BioStruct3D& biostruct, U2OpStatus&)
 {
     /*
@@ -518,10 +558,10 @@ int PDBFormat::getElementNumberByName(const QByteArray& elementName)
 
 QByteArray PDBFormat::PDBParser::getNextSpecLine()
 {
-    QByteArray readBuf(READ_BUF_SIZE+1, 0);
+    QByteArray readBuf(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buf = readBuf.data();
     bool lineOk;
-    int len = io->readUntil(buf, READ_BUF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
+    int len = io->readUntil(buf, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
     QByteArray line = QByteArray::fromRawData(buf, len);
     // retrieve back ioAdapter position
     io->skip(-len);
@@ -571,10 +611,12 @@ void PDBFormat::PDBParser::updateSecStructChainIndexes(BioStruct3D& biostruc)
     }
 }
 
-void PDBFormat::PDBParser::createMolecule(char chainIdentifier, BioStruct3D &biostruct, int chainIndex)
-{
+void PDBFormat::PDBParser::createMolecule(char chainIdentifier, BioStruct3D &biostruct, int chainIndex) {
     SharedMolecule newMol(new MoleculeData);
-    newMol->name = QString("chain %1").arg(chainIdentifier);
+    newMol->chainId = chainIdentifier;
+    if (chainToMoleculeMap.contains(QString(chainIdentifier))) {
+        newMol->name = chainToMoleculeMap[QString(chainIdentifier)];
+    }
     biostruct.moleculeMap.insert(chainIndex,newMol);
     chainIndexMap.insert(chainIdentifier, chainIndex);
 }
@@ -781,10 +823,16 @@ Document * PDBFormat::createDocumentFromBioStruct3D(const U2DbiRef &dbiRef, BioS
     CHECK_OP(os, NULL);
     QMap<int, QList<SharedAnnotationData> > anns = bioStruct.generateAnnotations();
     TmpDbiObjects dbiObjects(dbiRef, os);
-    foreach (int key, bioStruct.moleculeMap.keys()) {
+    foreach(int key, bioStruct.moleculeMap.keys()) {
         // Create dna sequence object
-        QByteArray sequence = bioStruct.getRawSequenceByChainId(key);
-        QString sequenceName(QString(bioStruct.pdbId) + QString(" chain %1 sequence").arg(key));
+        QByteArray sequence = bioStruct.getRawSequenceByChainIndex(key);
+        char chainId = bioStruct.getChainIdByIndex(key);
+        QString sequenceName;
+        if (chainId > 0) {
+            sequenceName = QString(bioStruct.pdbId) + QString(" chain %1 sequence").arg(chainId);
+        } else {
+            sequenceName = QString(bioStruct.pdbId) + QString(" chain %1 sequence").arg(key);
+        }
         if (sequenceName.isEmpty()){
             sequenceName = "Sequence";
         }
@@ -804,7 +852,13 @@ Document * PDBFormat::createDocumentFromBioStruct3D(const U2DbiRef &dbiRef, BioS
         }
 
         // create AnnnotationTableObject
-        AnnotationTableObject *aObj = new AnnotationTableObject(QString(bioStruct.pdbId) + QString(" chain %1 annotation").arg(key), dbiRef, hints);
+        QString annotationTableName;
+        if (chainId > 0) {
+            annotationTableName = QString(bioStruct.pdbId) + QString(" chain %1 annotation").arg(chainId);
+        } else {
+            annotationTableName = QString(bioStruct.pdbId) + QString(" chain %1 annotation").arg(key);
+        }
+        AnnotationTableObject *aObj = new AnnotationTableObject(annotationTableName, dbiRef, hints);
         aObj->addAnnotations(anns.value(key));
 
         objects.append(aObj);
diff --git a/src/corelibs/U2Formats/src/PDBFormat.h b/src/corelibs/U2Formats/src/PDBFormat.h
index ce16133..f3de7b0 100644
--- a/src/corelibs/U2Formats/src/PDBFormat.h
+++ b/src/corelibs/U2Formats/src/PDBFormat.h
@@ -71,17 +71,21 @@ private:
         QString currentPDBLine;
         ResidueIndex currentResidueIndex;
         int currentChainIndex;
+        int currentMoleculeIndex;
         int currentModelIndex;
         int residueOrder;
         char currentChainIndentifier;
+        QString currentMoleculeName;
         bool flagMultipleModels, flagAtomRecordPresent;
         QHash<char, int> chainIndexMap;
         QHash<char, QByteArray> seqResMap;
         QSet<QByteArray> resIndSet;
+        QMap <QString, QString> chainToMoleculeMap;
 
         // Methods
         QByteArray getSpecValue(const QByteArray& specLine, const QByteArray& valueName);
         void parseHeader(BioStruct3D& biostruct, U2OpStatus& ti);
+        void parseMacromolecularContent(bool firstCompndLine, U2OpStatus& ti);
         void parseCompound(BioStruct3D& biostruct, U2OpStatus& ti);
         void parseDBRef(BioStruct3D& biostruct, U2OpStatus& ti);
         void parseSequence(BioStruct3D& biostruct, U2OpStatus& ti);
diff --git a/src/corelibs/U2Formats/src/PDWFormat.cpp b/src/corelibs/U2Formats/src/PDWFormat.cpp
index d8deeed..dc87b15 100644
--- a/src/corelibs/U2Formats/src/PDWFormat.cpp
+++ b/src/corelibs/U2Formats/src/PDWFormat.cpp
@@ -71,8 +71,6 @@ FormatCheckResult PDWFormat::checkRawData(const QByteArray& rawData, const GUrl&
     return hasBinaryBlocks ? FormatDetection_NotMatched : FormatDetection_HighSimilarity;
 }
 
-
-#define READ_BUFF_SIZE  4096
 void PDWFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, const GUrl& docUrl, QList<GObject*>& objects, U2OpStatus& os,
                      U2SequenceObject*& seqObj, AnnotationTableObject*& annObj)
 {
diff --git a/src/corelibs/U2Formats/src/PhylipFormat.cpp b/src/corelibs/U2Formats/src/PhylipFormat.cpp
index b03fb0b..9c79ebf 100644
--- a/src/corelibs/U2Formats/src/PhylipFormat.cpp
+++ b/src/corelibs/U2Formats/src/PhylipFormat.cpp
@@ -107,7 +107,6 @@ Document* PhylipFormat::loadDocument(IOAdapter *io, const U2DbiRef &dbiRef, cons
 }
 
 
-#define READ_BUFF_SIZE  1024
 #define MAX_NAME_LEN    10  // max name length for phylip format is 10
 
 #define SEQ_BLOCK_SIZE  100
diff --git a/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp b/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
index 71fac1d..535e64f 100644
--- a/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
+++ b/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
@@ -54,12 +54,11 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef,  QList<GObject*>& object
     DbiOperationsBlock opBlock(dbiRef, os);
     CHECK_OP(os, );
     Q_UNUSED(opBlock);
-    static const int READ_BUFF_SIZE = 4096;
 
     U2SequenceImporter seqImporter(fs, true);
     const QString folder = fs.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
 
-    QByteArray readBuffer(READ_BUFF_SIZE, '\0');
+    QByteArray readBuffer(DocumentFormat::READ_BUFF_SIZE, '\0');
     char* buff  = readBuffer.data();
 
     const QBitArray& ALPHAS = TextUtils::ALPHA_NUMS;
@@ -73,7 +72,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef,  QList<GObject*>& object
     int len = 0;
     bool isStarted = false;
 
-    while (ok && (len = io->readBlock(buff, READ_BUFF_SIZE)) > 0) {
+    while (ok && (len = io->readBlock(buff, DocumentFormat::READ_BUFF_SIZE)) > 0) {
         seq.clear();
         bool isSeek = writer.seek(0);
                 assert(isSeek); Q_UNUSED(isSeek);
diff --git a/src/corelibs/U2Formats/src/SAMFormat.h b/src/corelibs/U2Formats/src/SAMFormat.h
index 5950993..088a15b 100644
--- a/src/corelibs/U2Formats/src/SAMFormat.h
+++ b/src/corelibs/U2Formats/src/SAMFormat.h
@@ -92,7 +92,6 @@ private:
     static const QByteArray TAG_SEQUENCE_URI; //URI of the sequence
     static const QByteArray TAG_SEQUENCE_SPECIES; //Species.
 
-    static const int READ_BUFF_SIZE = 1024;
     static const char SPACE = '\t';
 
     static const Field samFields[];
diff --git a/src/corelibs/U2Formats/src/SCFFormat.cpp b/src/corelibs/U2Formats/src/SCFFormat.cpp
index f1106ea..8e6403b 100644
--- a/src/corelibs/U2Formats/src/SCFFormat.cpp
+++ b/src/corelibs/U2Formats/src/SCFFormat.cpp
@@ -527,17 +527,18 @@ Document* SCFFormat::parseSCF(const U2DbiRef& dbiRef, IOAdapter* io, const QVari
     QList<GObject*> objects;
     const QString folder = fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
     const QString seqObjName = dna.getName().isEmpty() ? "Sequence" : dna.getName() + " sequence";
-    U2SequenceObject* seqObj = DocumentFormatUtils::addSequenceObjectDeprecated(dbiRef, folder, seqObjName, objects, dna, os);
-    CHECK_OP(os, NULL);
-    SAFE_POINT(seqObj != NULL, "DocumentFormatUtils::addSequenceObject returned NULL but didn't set error", NULL);
-
     QVariantMap hints;
     hints.insert(DBI_FOLDER_HINT, fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER));
+    U2SequenceObject* seqObj = DocumentFormatUtils::addSequenceObject(dbiRef, seqObjName, dna.constSequence(), dna.circular, hints, os);
+    CHECK_OP(os, NULL);
+    SAFE_POINT(seqObj != NULL, "DocumentFormatUtils::addSequenceObject returned NULL but didn't set error", NULL);
 
     const QString chromaObjName = dna.getName().isEmpty() ? "Chromatogram" : dna.getName() + " chromatogram";
     DNAChromatogramObject* chromObj = DNAChromatogramObject::createInstance(cd, chromaObjName, dbiRef, os, hints);
     CHECK_OP(os, NULL);
+
     objects.append(chromObj);
+    objects.append(seqObj);
 
     Document* doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objects, fs);
     chromObj->addObjectRelation(GObjectRelation(GObjectReference(seqObj), ObjectRole_Sequence));
diff --git a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
index fa07ebc..dbf316f 100644
--- a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
@@ -218,7 +218,6 @@ bool SwissProtPlainTextFormat::readSequence(ParserState *st, U2SequenceImporter&
     int headerSeqLen = st->entry->seqLen;
     res.reserve(res.size() + headerSeqLen);
 
-    static int READ_BUFF_SIZE = 4096;
     QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     char* buff  = readBuffer.data();
 
@@ -295,7 +294,7 @@ void SwissProtPlainTextFormat::readAnnotations(ParserState *st, int offset){
             break;
         }
         //parsing feature;
-        SharedAnnotationData f = readAnnotation(st->io, st->buff, st->len, ParserState::READ_BUFF_SIZE, st->si, offset);
+        SharedAnnotationData f = readAnnotation(st->io, st->buff, st->len, READ_BUFF_SIZE, st->si, offset);
         st->entry->features.push_back(f);
     } while (st->readNextLine());
 }
diff --git a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
index 136b41c..6d6cb73 100644
--- a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
+++ b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
@@ -147,11 +147,9 @@ void VectorNtiSequenceFormat::storeEntry(IOAdapter *io, const QMap<GObjectType,
         CHECK_OP(os, );
     }
 
-    if (NULL != seq) {
-        QList<U2Region> lowerCaseRegs = U1AnnotationUtils::getRelatedLowerCaseRegions(seq, anns);
-        writeSequence(io, seq, lowerCaseRegs, os);
-        CHECK_OP(os, );
-    }
+    QList<U2Region> lowerCaseRegs = U1AnnotationUtils::getRelatedLowerCaseRegions(seq, anns);
+    writeSequence(io, seq, lowerCaseRegs, os);
+    CHECK_OP(os, );
 
     // write last line marker
     QByteArray lastLine("//\n");
diff --git a/src/corelibs/U2Formats/src/ace/AceFormat.cpp b/src/corelibs/U2Formats/src/ace/AceFormat.cpp
index 28833ab..d8cf1cc 100644
--- a/src/corelibs/U2Formats/src/ace/AceFormat.cpp
+++ b/src/corelibs/U2Formats/src/ace/AceFormat.cpp
@@ -205,12 +205,9 @@ static bool checkSeq(const QByteArray &seq){
     return true;
 }
 
-
-#define READ_BUFF_SIZE  4096
-
 static inline void skipBreaks(U2::IOAdapter *io, U2OpStatus &ti, char* buff, qint64* len){
     bool lineOk = true;
-    *len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
+    *len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
     if (*len == 0) { //end if stream
         ti.setError(ACEFormat::tr("Unexpected end of file"));
         return;
@@ -238,7 +235,7 @@ static inline void parseConsensus(U2::IOAdapter *io, U2OpStatus &ti, char* buff,
     names.insert(consName);
     consensus.clear();
     do {
-        len = io->readUntil(buff, READ_BUFF_SIZE, aceBStart, IOAdapter::Term_Exclude, &ok);
+        len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, aceBStart, IOAdapter::Term_Exclude, &ok);
         if (len <= 0) {
             ti.setError(ACEFormat::tr("No consensus"));
             return ;
@@ -248,7 +245,7 @@ static inline void parseConsensus(U2::IOAdapter *io, U2OpStatus &ti, char* buff,
         consensus.append(buff);
         ti.setProgress(io->getProgress());
     } while (!ti.isCoR() && !ok);
-    len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
+    len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
     line = QString(QByteArray::fromRawData(buff, len)).trimmed();
     if(!line.startsWith("BQ")){
         ti.setError(ACEFormat::tr("BQ keyword hasn't been found"));
@@ -337,7 +334,7 @@ static inline void parseRDandQATag(U2::IOAdapter *io, U2OpStatus &ti, char* buff
 
     sequence.clear();
     do {
-        len = io->readUntil(buff, READ_BUFF_SIZE, aceQStart, IOAdapter::Term_Exclude, &ok);
+        len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, aceQStart, IOAdapter::Term_Exclude, &ok);
         if (len <= 0) {
             ti.setError(ACEFormat::tr("No sequence"));
             return ;
@@ -347,7 +344,7 @@ static inline void parseRDandQATag(U2::IOAdapter *io, U2OpStatus &ti, char* buff
         sequence.append(buff);
         ti.setProgress(io->getProgress());
     } while (!ti.isCoR() && !ok);
-    len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
+    len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
     line = QString(QByteArray::fromRawData(buff, len)).trimmed();
     if(!line.startsWith("QA")){
         ti.setError(ACEFormat::tr("QA keyword hasn't been found"));
diff --git a/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp b/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
index 240be96..70ad648 100644
--- a/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
+++ b/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
@@ -103,7 +103,6 @@ QList<U2AssemblyRead> Assembly::convertReads() const {
 ///////////////////////////////////
 //// AceReader
 ///////////////////////////////////
-const int AceReader::READ_BUFF_SIZE = 4096;
 const int AceReader::CONTIG_COUNT_POS = 1;
 const int AceReader::READS_COUNT_POS = 3;
 const int AceReader::READS_POS = 3;
@@ -126,7 +125,7 @@ AceReader::AceReader(IOAdapter& _io, U2OpStatus &_os) :
     io(&_io),
     os(&_os),
     currentContig(0) {
-    QByteArray readBuff(READ_BUFF_SIZE + 1, 0);
+    QByteArray readBuff(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buff = readBuff.data();
     qint64 len = 0;
 
@@ -144,7 +143,7 @@ Assembly AceReader::getAssembly() {
     Assembly result;
     Assembly::Sequence reference;
 
-    QByteArray readBuff(READ_BUFF_SIZE + 1, 0);
+    QByteArray readBuff(DocumentFormat::READ_BUFF_SIZE + 1, 0);
     char* buff = readBuff.data();
     qint64 len = 0;
     int readsCount = 0;
@@ -208,7 +207,7 @@ bool AceReader::isFinish() {
 
 void AceReader::skipBreaks(IOAdapter *io, char *buff, qint64 *len) {
     bool lineOk = true;
-    *len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
+    *len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
     CHECK_EXT(*len != 0, os->setError(DocumentFormatUtils::tr("Unexpected end of file")), );
     CHECK_EXT(lineOk || io->isEof(), os->setError(DocumentFormatUtils::tr("Line is too long")), );
 }
@@ -266,7 +265,7 @@ void AceReader::parseConsensus(IOAdapter *io, char *buff, QSet<QByteArray> &name
     consensus.name += "_ref";
 
     do {
-        len = io->readUntil(buff, READ_BUFF_SIZE, aceBStart, IOAdapter::Term_Exclude, &ok);
+        len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, aceBStart, IOAdapter::Term_Exclude, &ok);
         CHECK_EXT(len > 0, os->setError(DocumentFormatUtils::tr("No consensus")), );
 
         len = TextUtils::remove(buff, len, TextUtils::WHITES);
@@ -275,7 +274,7 @@ void AceReader::parseConsensus(IOAdapter *io, char *buff, QSet<QByteArray> &name
         os->setProgress(io->getProgress());
     } while (!ok);
 
-    len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
+    len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
     line = (QByteArray::fromRawData(buff, len)).trimmed();
     CHECK_EXT(line.startsWith(BQ), os->setError(DocumentFormatUtils::tr("BQ keyword hasn't been found")), );
 
@@ -462,7 +461,7 @@ void AceReader::parseRdAndQaTag(U2::IOAdapter *io, char *buff, QSet<QByteArray>
     CHECK_EXT(rdBlock.startsWith(RD), os->setError(DocumentFormatUtils::tr("There is no read note")), );
 
     do {    // read the tail of RD part
-        len = io->readUntil(buff, READ_BUFF_SIZE, aceQStart, IOAdapter::Term_Exclude, &ok);
+        len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, aceQStart, IOAdapter::Term_Exclude, &ok);
         CHECK_EXT(len > 0, os->setError(DocumentFormatUtils::tr("Unexpected end of file")), );
         buff[len] = 0;
         rdBlock += QByteArray(" ") + QByteArray(buff);
@@ -480,7 +479,7 @@ void AceReader::parseRdAndQaTag(U2::IOAdapter *io, char *buff, QSet<QByteArray>
         read.data += rdSplitted[chain];
     }
 
-    len = io->readUntil(buff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
+    len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
     QByteArray qaBlock = (QByteArray::fromRawData(buff, len)).trimmed();
     CHECK_EXT(qaBlock.startsWith(QA), os->setError(DocumentFormatUtils::tr("QA keyword hasn't been found")), );
 
diff --git a/src/corelibs/U2Formats/src/ace/AceImportUtils.h b/src/corelibs/U2Formats/src/ace/AceImportUtils.h
index 8716400..b26e8fa 100644
--- a/src/corelibs/U2Formats/src/ace/AceImportUtils.h
+++ b/src/corelibs/U2Formats/src/ace/AceImportUtils.h
@@ -98,7 +98,6 @@ private:
     int contigsCount;
     int currentContig;
 
-    static const int READ_BUFF_SIZE;
     static const int CONTIG_COUNT_POS;
     static const int READS_COUNT_POS;
     static const int READS_POS;
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
index 60df34a..48e3952 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
@@ -205,6 +205,20 @@ QList<qint64> MysqlMsaDbi::getRowsOrder(const U2DataId& msaId, U2OpStatus& os) {
     return res;
 }
 
+U2AlphabetId MysqlMsaDbi::getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os) {
+    QString alphabetName;
+    U2SqlQuery q("SELECT alphabet FROM Msa WHERE object = :object", db, os);
+    q.bindDataId(":object", msaId);
+    if (q.step()) {
+        alphabetName = q.getString(0);
+        q.ensureDone();
+    } else if (!os.hasError()) {
+        os.setError(U2DbiL10n::tr("Msa object not found"));
+    }
+
+    return U2AlphabetId(alphabetName);
+}
+
 U2DataId MysqlMsaDbi::createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os) {
     return createMsaObject(folder, name, alphabet, 0, os);
 }
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
index 23f048b..fa7c324 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
@@ -55,6 +55,12 @@ public:
     /** Returns the list of rows IDs in the database for the specified MSA (in increasing order) */
     virtual QList<qint64> getRowsOrder(const U2DataId& msaId, U2OpStatus& os);
 
+    /** Returns the list of rows IDs in the database for the specified MSA (in increasing order) */
+    virtual U2AlphabetId getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os);
+
+    /** Returns length stored in Msa table */
+    virtual qint64 getMsaLength(const U2DataId& msaId, U2OpStatus& os);
+
     /**
      * Creates a new empty multiple alignment in the database.
      * The folder must exist in the database.
@@ -171,9 +177,6 @@ public:
     void redo(const U2DataId& msaId, qint64 modType, const QByteArray& modDetails, U2OpStatus& os);
 
 private:
-    /** Returns length stored in Msa table */
-    qint64 getMsaLength(const U2DataId& msaId, U2OpStatus& os);
-
     /**
      * Creates new records in MsaRow and MsaRowGap tables for the added row, and
      * sets the parent of the sequence object to the MSA object.
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
index df7cef2..40f5dba 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
@@ -820,7 +820,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByName(const U2DataId &r
 QList<FeatureAndKey> SQLiteFeatureDbi::getFeatureTable(const U2DataId &rootFeatureId, U2OpStatus &os) {
     SQLiteTransaction t(db, os);
     static const QString queryStringk("SELECT " + FDBI_FIELDS + ", fk.name, fk.value FROM Feature AS f "
-        "LEFT OUTER JOIN FeatureKey AS fk ON f.id = fk.feature WHERE f.root = ?1 ORDER BY f.class DESC, f.start, f.len");
+        "LEFT OUTER JOIN FeatureKey AS fk ON f.id = fk.feature WHERE f.root = ?1 ORDER BY f.class DESC, f.parent ASC, f.start, f.len");
     QSharedPointer<SQLiteQuery> q =  t.getPreparedQuery(queryStringk, db, os);
 
     q->bindDataId(1, rootFeatureId);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
index 3a60729..4d6c7ea 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
@@ -57,6 +57,7 @@ void SQLiteMsaDbi::initSqlSchema(U2OpStatus& os) {
         " FOREIGN KEY(sequence) REFERENCES Sequence(object) ON DELETE CASCADE)", db, os).execute();
     SQLiteQuery("CREATE INDEX MsaRow_msa_rowId ON MsaRow(msa, rowId)", db, os).execute();
     SQLiteQuery("CREATE INDEX MsaRow_length ON MsaRow(length)", db, os).execute();
+    SQLiteQuery("CREATE INDEX MsaRow_sequence ON MsaRow(sequence)", db, os).execute();
 
      // Gap info for a MSA row:
      //   msa       - msa object id
@@ -356,6 +357,20 @@ QList<qint64> SQLiteMsaDbi::getRowsOrder(const U2DataId& msaId, U2OpStatus& os)
     return res;
 }
 
+U2AlphabetId SQLiteMsaDbi::getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os) {
+    QString alphabetName;
+    SQLiteQuery q("SELECT alphabet FROM Msa WHERE object = ?1", db, os);
+    q.bindDataId(1, msaId);
+    if (q.step()) {
+        alphabetName = q.getString(0);
+        q.ensureDone();
+    } else if (!os.hasError()) {
+        os.setError(U2DbiL10n::tr("Msa object not found"));
+    }
+
+    return U2AlphabetId(alphabetName);
+}
+
 void SQLiteMsaDbi::setNewRowsOrder(const U2DataId& msaId, const QList<qint64>& rowIds, U2OpStatus& os) {
     // Init track info
     SQLiteTransaction t(db, os);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
index 1e2a97f..3182d71 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
@@ -52,6 +52,13 @@ public:
     /** Returns the list of rows IDs in the database for the specified MSA (in increasing order) */
     virtual QList<qint64> getRowsOrder(const U2DataId& msaId, U2OpStatus& os);
 
+    /** Return the MSA alphabet */
+    virtual U2AlphabetId getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os);
+
+    /** Returns length stored in Msa table */
+    virtual qint64 getMsaLength(const U2DataId& msaId, U2OpStatus& os);
+
+
     /**
      * Creates a new empty multiple alignment in the database.
      * The folder must exist in the database.
@@ -169,9 +176,6 @@ public:
     void redo(const U2DataId& msaId, qint64 modType, const QByteArray& modDetails, U2OpStatus& os);
 
 private:
-    /** Returns length stored in Msa table */
-    qint64 getMsaLength(const U2DataId& msaId, U2OpStatus& os);
-
     /**
      * Creates new records in MsaRow and MsaRowGap tables for the added row, and
      * sets the parent of the sequence object to the MSA object.
diff --git a/src/corelibs/U2Formats/transl/english.ts b/src/corelibs/U2Formats/transl/english.ts
index 9a93137..193bbac 100644
--- a/src/corelibs/U2Formats/transl/english.ts
+++ b/src/corelibs/U2Formats/transl/english.ts
@@ -314,7 +314,7 @@
         <location filename="../src/AbstractVariationFormat.cpp" line="119"/>
         <location filename="../src/AbstractVariationFormat.cpp" line="132"/>
         <source>Line %1: There are too few columns in this line. The line was skipped.</source>
-        <translation type="unfinished"></translation>
+        <translation>Line %1: There are too few columns in this line. The line was skipped.</translation>
     </message>
 </context>
 <context>
@@ -353,7 +353,7 @@
     <message>
         <location filename="../src/BAMUtils.cpp" line="178"/>
         <source>There is no header in the SAM file "%1". The header information will be generated automatically.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is no header in the SAM file "%1". The header information will be generated automatically.</translation>
     </message>
     <message>
         <location filename="../src/BAMUtils.cpp" line="336"/>
@@ -384,112 +384,117 @@
 <context>
     <name>U2::BedFormat</name>
     <message>
-        <location filename="../src/BedFormat.cpp" line="103"/>
+        <location filename="../src/BedFormat.cpp" line="105"/>
         <source>The BED (Browser Extensible Data) format was developed by UCSC for displaying transcript structures in the genome browser.</source>
         <translation>The BED (Browser Extensible Data) format was developed by UCSC for displaying transcript structures in the genome browser.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="139"/>
+        <location filename="../src/BedFormat.cpp" line="143"/>
         <source>File "%1" contains too many annotation tables to be displayed. However, you can process these data using pipelines built with Workflow Designer.</source>
         <translation>File "%1" contains too many annotation tables to be displayed. However, you can process these data using pipelines built with Workflow Designer.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="614"/>
+        <location filename="../src/BedFormat.cpp" line="902"/>
         <source>BED parsing error: incorrect format of the 'track' header line!</source>
         <translation>BED parsing error: incorrect format of the 'track' header line!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="647"/>
+        <location filename="../src/BedFormat.cpp" line="687"/>
         <source>BED parsing error: unexpected number of fields in the first annotations line!</source>
         <translation>BED parsing error: unexpected number of fields in the first annotations line!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="655"/>
+        <location filename="../src/BedFormat.cpp" line="729"/>
+        <source>The file does not contain valid annotations!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/BedFormat.cpp" line="976"/>
         <source>BED parsing error: incorrect number of fields at line %1!</source>
         <translation>BED parsing error: incorrect number of fields at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="661"/>
+        <location filename="../src/BedFormat.cpp" line="980"/>
         <source>BED parsing error: a field at line %1 is empty!</source>
         <translation>BED parsing error: a field at line %1 is empty!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="667"/>
+        <location filename="../src/BedFormat.cpp" line="984"/>
         <source>BED parsing error: incorrect coordinates at line %1!</source>
         <translation>BED parsing error: incorrect coordinates at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="724"/>
+        <location filename="../src/BedFormat.cpp" line="988"/>
         <source>BED parsing error: incorrect score value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect score value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="729"/>
+        <location filename="../src/BedFormat.cpp" line="993"/>
         <source>BED parsing error: incorrect strand value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect strand value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="734"/>
+        <location filename="../src/BedFormat.cpp" line="998"/>
         <source>BED parsing error: incorrect thick coordinates at line %1!</source>
         <translation>BED parsing error: incorrect thick coordinates at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="738"/>
+        <location filename="../src/BedFormat.cpp" line="1002"/>
         <source>BED parsing error: incorrect itemRgb value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect itemRgb value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="743"/>
+        <location filename="../src/BedFormat.cpp" line="1007"/>
         <source>BED parsing error: incorrect value of the block parameters at line %1!</source>
         <translation>BED parsing error: incorrect value of the block parameters at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="772"/>
+        <location filename="../src/BedFormat.cpp" line="427"/>
         <source>Starting BED saving: '%1'</source>
         <translation>Starting BED saving: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="783"/>
+        <location filename="../src/BedFormat.cpp" line="438"/>
         <source>Can not convert GObject to AnnotationTableObject</source>
         <translation>Can not convert GObject to AnnotationTableObject</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="797"/>
+        <location filename="../src/BedFormat.cpp" line="452"/>
         <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/BedFormat.cpp" line="814"/>
+        <location filename="../src/BedFormat.cpp" line="469"/>
         <source>You are trying to save joined annotation to BED format! The joining will be lost</source>
         <translation>You are trying to save joined annotation to BED format! The joining will be lost</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="878"/>
+        <location filename="../src/BedFormat.cpp" line="533"/>
         <source>BED saving error: incorrect thick coordinates in the first annotation!</source>
         <translation>BED saving error: incorrect thick coordinates in the first annotation!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="892"/>
+        <location filename="../src/BedFormat.cpp" line="547"/>
         <source>BED saving error: incorrect block fields in the first annotation!</source>
         <translation>BED saving error: incorrect block fields in the first annotation!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="901"/>
+        <location filename="../src/BedFormat.cpp" line="556"/>
         <source>BED saving: detected %1 fields per line for file '%2'</source>
         <translation>BED saving: detected %1 fields per line for file '%2'</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="908"/>
+        <location filename="../src/BedFormat.cpp" line="563"/>
         <source>BED saving error: an annotation is expected to have '%1' qualifier, but it is absent! Skipping the annotation.</source>
         <translation>BED saving error: an annotation is expected to have '%1' qualifier, but it is absent! Skipping the annotation.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="968"/>
+        <location filename="../src/BedFormat.cpp" line="623"/>
         <source>BED saving error: an annotation is expected to have the block qualifiers! Skipping the annotation.</source>
         <translation>BED saving error: an annotation is expected to have the block qualifiers! Skipping the annotation.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="991"/>
+        <location filename="../src/BedFormat.cpp" line="646"/>
         <source>Finished BED saving: '%1'</source>
         <translation>Finished BED saving: '%1'</translation>
     </message>
@@ -772,7 +777,7 @@
         <location filename="../src/FastqFormat.cpp" line="339"/>
         <location filename="../src/PDWFormat.cpp" line="156"/>
         <source>Document is empty.</source>
-        <translation type="unfinished">Document is empty.</translation>
+        <translation>Document is empty.</translation>
     </message>
 </context>
 <context>
@@ -780,22 +785,22 @@
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="50"/>
         <source>Database connection</source>
-        <translation type="unfinished"></translation>
+        <translation>Database connection</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="51"/>
         <source>A fake format that was added to implement shared database connection within existing document model.</source>
-        <translation type="unfinished">A fake format that was added to implement shared database connection within existing document model.</translation>
+        <translation>A fake format that was added to implement shared database connection within existing document model.</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="90"/>
         <source>You have no permissions to modify the content of this database</source>
-        <translation type="unfinished">You have no permissions to modify the content of this database</translation>
+        <translation>You have no permissions to modify the content of this database</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="110"/>
         <source>Empty object name</source>
-        <translation type="unfinished">Empty object name</translation>
+        <translation>Empty object name</translation>
     </message>
 </context>
 <context>
@@ -1373,7 +1378,7 @@ The following sequences are empty:</translation>
         <translation>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="590"/>
+        <location filename="../src/GFFFormat.cpp" line="591"/>
         <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>
@@ -2176,358 +2181,360 @@ The following sequences are empty:</translation>
         <location filename="../src/mysql_dbi/MysqlAssemblyDbi.cpp" line="84"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="80"/>
         <source>There is no assembly object with the specified id.</source>
-        <translation type="unfinished">There is no assembly object with the specified id.</translation>
+        <translation>There is no assembly object with the specified id.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlAttributeDbi.cpp" line="209"/>
         <location filename="../src/sqlite_dbi/SQLiteAttributeDbi.cpp" line="223"/>
         <source>Unsupported attribute type: %1</source>
-        <translation type="unfinished">Unsupported attribute type: %1</translation>
+        <translation>Unsupported attribute type: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlAttributeDbi.cpp" line="341"/>
         <source>Required attribute is not found</source>
-        <translation type="unfinished">Required attribute is not found</translation>
+        <translation>Required attribute is not found</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="264"/>
         <source>Database url is incorrect</source>
-        <translation type="unfinished">Database url is incorrect</translation>
+        <translation>Database url is incorrect</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="270"/>
         <source>User login is not specified</source>
-        <translation type="unfinished">User login is not specified</translation>
+        <translation>User login is not specified</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="276"/>
         <source>Host is not specified</source>
-        <translation type="unfinished">Host is not specified</translation>
+        <translation>Host is not specified</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="282"/>
         <source>Database name is not specified</source>
-        <translation type="unfinished">Database name is not specified</translation>
+        <translation>Database name is not specified</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="298"/>
         <source>Error opening MySQL database: %1</source>
-        <translation type="unfinished">Error opening MySQL database: %1</translation>
+        <translation>Error opening MySQL database: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="382"/>
         <source>Not a %1 MySQL database: %2, %3</source>
-        <translation type="unfinished">Not a %1 MySQL database: %2, %3</translation>
+        <translation>Not a %1 MySQL database: %2, %3</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="388"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="273"/>
         <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="unfinished">Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</translation>
+        <translation>Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="523"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="328"/>
         <source>Illegal database state: %1</source>
-        <translation type="unfinished">Illegal database state: %1</translation>
+        <translation>Illegal database state: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="554"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="410"/>
         <source>Can't synchronize database state</source>
-        <translation type="unfinished">Can't synchronize database state</translation>
+        <translation>Can't synchronize database state</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlFeatureDbi.cpp" line="148"/>
         <source>Annotation table object is not found.</source>
-        <translation type="unfinished">Annotation table object is not found.</translation>
+        <translation>Annotation table object is not found.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlFeatureDbi.cpp" line="177"/>
         <source>Feature is not found.</source>
-        <translation type="unfinished">Feature is not found.</translation>
+        <translation>Feature is not found.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="134"/>
         <source>An object single modification step not found</source>
-        <translation type="unfinished">An object single modification step not found</translation>
+        <translation>An object single modification step not found</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="170"/>
         <source>Failed to find user step ID</source>
-        <translation type="unfinished">Failed to find user step ID</translation>
+        <translation>Failed to find user step ID</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="378"/>
         <source>Not main thread</source>
-        <translation type="unfinished">Not main thread</translation>
+        <translation>Not main thread</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="390"/>
         <source>Can't create a common user modifications step, previous one is not complete</source>
-        <translation type="unfinished">Can't create a common user modifications step, previous one is not complete</translation>
+        <translation>Can't create a common user modifications step, previous one is not complete</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="453"/>
         <source>Can't create a common multiple modifications step, previous one is not complete</source>
-        <translation type="unfinished">Can't create a common multiple modifications step, previous one is not complete</translation>
+        <translation>Can't create a common multiple modifications step, previous one is not complete</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="489"/>
         <source>Failed to create a common user modifications step</source>
-        <translation type="unfinished">Failed to create a common user modifications step</translation>
+        <translation>Failed to create a common user modifications step</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="510"/>
         <source>Failed to create a common multiple modifications step</source>
-        <translation type="unfinished">Failed to create a common multiple modifications step</translation>
+        <translation>Failed to create a common multiple modifications step</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="102"/>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="118"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="634"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="216"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="648"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="368"/>
         <source>Msa object not found</source>
-        <translation type="unfinished">Msa object not found</translation>
+        <translation>Msa object not found</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="177"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="781"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="821"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="795"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="835"/>
         <source>Msa row not found</source>
-        <translation type="unfinished">Msa row not found</translation>
+        <translation>Msa row not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="586"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="619"/>
+        <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"/>
         <source>Unexpected modification type '%1'</source>
-        <translation type="unfinished">Unexpected modification type '%1'</translation>
+        <translation>Unexpected modification type '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="656"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="670"/>
         <source>Invalid row position: %1</source>
-        <translation type="unfinished">Invalid row position: %1</translation>
+        <translation>Invalid row position: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1030"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1161"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1044"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1175"/>
         <source>An error occurred during updating an alignment alphabet</source>
-        <translation type="unfinished">An error occurred during updating an alignment alphabet</translation>
+        <translation>An error occurred during updating an alignment alphabet</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1048"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1176"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1062"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1190"/>
         <source>An error occurred during reverting adding of rows</source>
-        <translation type="unfinished">An error occurred during reverting adding of rows</translation>
+        <translation>An error occurred during reverting adding of rows</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1066"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1080"/>
         <source>An error occurred during reverting addition of a row</source>
-        <translation type="unfinished">An error occurred during reverting addition of a row</translation>
+        <translation>An error occurred during reverting addition of a row</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1079"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1196"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1093"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1210"/>
         <source>An error occurred during reverting removing of rows</source>
-        <translation type="unfinished">An error occurred during reverting removing of rows</translation>
+        <translation>An error occurred during reverting removing of rows</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1092"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1211"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1225"/>
         <source>An error occurred during reverting removing of a row</source>
-        <translation type="unfinished">An error occurred during reverting removing of a row</translation>
+        <translation>An error occurred during reverting removing of a row</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1222"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1120"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1236"/>
         <source>An error occurred during updating an alignment gaps</source>
-        <translation type="unfinished">An error occurred during updating an alignment gaps</translation>
+        <translation>An error occurred during updating an alignment gaps</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1119"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1232"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1246"/>
         <source>An error occurred during updating an alignment row order</source>
-        <translation type="unfinished">An error occurred during updating an alignment row order</translation>
+        <translation>An error occurred during updating an alignment row order</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1242"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1147"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1256"/>
         <source>An error occurred during updating a row info</source>
-        <translation type="unfinished">An error occurred during updating a row info</translation>
+        <translation>An error occurred during updating a row info</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1148"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1257"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1272"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1282"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1162"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1271"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1287"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1297"/>
         <source>An error occurred during updating an msa length</source>
-        <translation type="unfinished">An error occurred during updating an msa length</translation>
+        <translation>An error occurred during updating an msa length</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1186"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1200"/>
         <source>An error occurred during addition of a row</source>
-        <translation type="unfinished">An error occurred during addition of a row</translation>
+        <translation>An error occurred during addition of a row</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="586"/>
         <source>Can't undo an operation for the object</source>
-        <translation type="unfinished">Can't undo an operation for the object</translation>
+        <translation>Can't undo an operation for the object</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="649"/>
         <source>Can't redo an operation for the object</source>
-        <translation type="unfinished">Can't redo an operation for the object</translation>
+        <translation>Can't redo an operation for the object</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="791"/>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="883"/>
         <source>Object not found</source>
-        <translation type="unfinished">Object not found</translation>
+        <translation>Object not found</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="832"/>
         <source>Folder not found: %1 (canonical: %2)</source>
-        <translation type="unfinished">Folder not found: %1 (canonical: %2)</translation>
+        <translation>Folder not found: %1 (canonical: %2)</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1013"/>
         <source>Not an object, id: %1, type: %2</source>
-        <translation type="unfinished">Not an object, id: %1, type: %2</translation>
+        <translation>Not an object, id: %1, type: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1036"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
         <source>Unknown object type! Id: %1, type: %2</source>
-        <translation type="unfinished">Unknown object type! Id: %1, type: %2</translation>
+        <translation>Unknown object type! Id: %1, type: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1078"/>
         <source>Can't undo an unknown operation: '%1'</source>
-        <translation type="unfinished">Can't undo an unknown operation: '%1'</translation>
+        <translation>Can't undo an unknown operation: '%1'</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1091"/>
         <source>Can't redo an unknown operation: '%1'</source>
-        <translation type="unfinished">Can't redo an unknown operation: '%1'</translation>
+        <translation>Can't redo an unknown operation: '%1'</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1122"/>
         <source>An error occurred during updating an object name</source>
-        <translation type="unfinished">An error occurred during updating an object name</translation>
+        <translation>An error occurred during updating an object name</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1140"/>
         <source>An error occurred during updating an object name!</source>
-        <translation type="unfinished">An error occurred during updating an object name!</translation>
+        <translation>An error occurred during updating an object name!</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="73"/>
         <source>Sequence object not found</source>
-        <translation type="unfinished">Sequence object not found</translation>
+        <translation>Sequence object not found</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="125"/>
         <source>Internal error occurred during the sequence processing</source>
-        <translation type="unfinished">Internal error occurred during the sequence processing</translation>
+        <translation>Internal error occurred during the sequence processing</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="126"/>
         <source>An exception was thrown during reading sequence data from dbi</source>
-        <translation type="unfinished">An exception was thrown during reading sequence data from dbi</translation>
+        <translation>An exception was thrown during reading sequence data from dbi</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="387"/>
         <source>An error occurred during reverting replacing sequence data</source>
-        <translation type="unfinished">An error occurred during reverting replacing sequence data</translation>
+        <translation>An error occurred during reverting replacing sequence data</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="402"/>
         <source>An error occurred during replacing sequence data</source>
-        <translation type="unfinished">An error occurred during replacing sequence data</translation>
+        <translation>An error occurred during replacing sequence data</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="158"/>
         <source>Invalid variant track type: %1</source>
-        <translation type="unfinished">Invalid variant track type: %1</translation>
+        <translation>Invalid variant track type: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="186"/>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="219"/>
         <source>Sequence name is not set</source>
-        <translation type="unfinished">Sequence name is not set</translation>
+        <translation>Sequence name is not set</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="321"/>
         <source>New variant public ID is empty</source>
-        <translation type="unfinished">New variant public ID is empty</translation>
+        <translation>New variant public ID is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="337"/>
         <source>New variant track ID is empty</source>
-        <translation type="unfinished">New variant track ID is empty</translation>
+        <translation>New variant track ID is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="124"/>
         <source>Packed data is empty</source>
-        <translation type="unfinished">Packed data is empty</translation>
+        <translation>Packed data is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="131"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="468"/>
         <source>Packing method prefix is not supported: %1</source>
-        <translation type="unfinished">Packing method prefix is not supported: %1</translation>
+        <translation>Packing method prefix is not supported: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="139"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="476"/>
         <source>Data is corrupted, no name end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no name end marker found: %1</translation>
+        <translation>Data is corrupted, no name end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="148"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="485"/>
         <source>Data is corrupted, no sequence end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no sequence end marker found: %1</translation>
+        <translation>Data is corrupted, no sequence end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="157"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="494"/>
         <source>Data is corrupted, no CIGAR end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no CIGAR end marker found: %1</translation>
+        <translation>Data is corrupted, no CIGAR end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="176"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="513"/>
         <source>Data is corrupted, no rnext end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no rnext end marker found: %1</translation>
+        <translation>Data is corrupted, no rnext end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="191"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="528"/>
         <source>Can not convert pnext to a number: %1</source>
-        <translation type="unfinished">Can not convert pnext to a number: %1</translation>
+        <translation>Can not convert pnext to a number: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="399"/>
         <source>Bound values: </source>
-        <translation type="unfinished">Bound values: </translation>
+        <translation>Bound values: </translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="421"/>
         <source>Cannot start a transaction</source>
-        <translation type="unfinished">Cannot start a transaction</translation>
+        <translation>Cannot start a transaction</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="505"/>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="127"/>
         <source>Failed to detect assembly storage format: %1</source>
-        <translation type="unfinished">Failed to detect assembly storage format: %1</translation>
+        <translation>Failed to detect assembly storage format: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="517"/>
         <source>Failed to parse range: %1, full: %2</source>
-        <translation type="unfinished">Failed to parse range: %1, full: %2</translation>
+        <translation>Failed to parse range: %1, full: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="531"/>
@@ -2537,137 +2544,137 @@ The following sequences are empty:</translation>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="156"/>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="161"/>
         <source>Failed to parse packed row range info %1</source>
-        <translation type="unfinished">Failed to parse packed row range info %1</translation>
+        <translation>Failed to parse packed row range info %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="96"/>
         <source>Unsupported reads storage type: %1</source>
-        <translation type="unfinished">Unsupported reads storage type: %1</translation>
+        <translation>Unsupported reads storage type: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="373"/>
         <source>Packing method is not supported: %1</source>
-        <translation type="unfinished">Packing method is not supported: %1</translation>
+        <translation>Packing method is not supported: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="461"/>
         <source>Packed data is empty!</source>
-        <translation type="unfinished">Packed data is empty!</translation>
+        <translation>Packed data is empty!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="222"/>
         <source>Error checking SQLite database: %1!</source>
-        <translation type="unfinished">Error checking SQLite database: %1!</translation>
+        <translation>Error checking SQLite database: %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="235"/>
         <source>Error creating table: %1, error: %2</source>
-        <translation type="unfinished">Error creating table: %1, error: %2</translation>
+        <translation>Error creating table: %1, error: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="267"/>
         <source>Not a %1 SQLite database: %2</source>
-        <translation type="unfinished">Not a %1 SQLite database: %2</translation>
+        <translation>Not a %1 SQLite database: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="324"/>
         <source>Database is already opened!</source>
-        <translation type="unfinished">Database is already opened!</translation>
+        <translation>Database is already opened!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="334"/>
         <source>URL is not specified</source>
-        <translation type="unfinished">URL is not specified</translation>
+        <translation>URL is not specified</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="348"/>
         <source>Error opening SQLite database: %1!</source>
-        <translation type="unfinished">Error opening SQLite database: %1!</translation>
+        <translation>Error opening SQLite database: %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="400"/>
         <source>Database is already closed!</source>
-        <translation type="unfinished">Database is already closed!</translation>
+        <translation>Database is already closed!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="404"/>
         <source>Illegal database state %1!</source>
-        <translation type="unfinished">Illegal database state %1!</translation>
+        <translation>Illegal database state %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="429"/>
         <source>Failed to close database: %1, err: %2</source>
-        <translation type="unfinished">Failed to close database: %1, err: %2</translation>
+        <translation>Failed to close database: %1, err: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteFeatureDbi.cpp" line="144"/>
         <source>Annotation table object not found.</source>
-        <translation type="unfinished">Annotation table object not found.</translation>
+        <translation>Annotation table object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteModDbi.cpp" line="139"/>
         <source>An object single modification step not found!</source>
-        <translation type="unfinished">An object single modification step not found!</translation>
+        <translation>An object single modification step not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="505"/>
         <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="520"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="712"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="535"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="727"/>
         <source>Msa object not found!</source>
-        <translation type="unfinished">Msa object not found!</translation>
+        <translation>Msa object not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="602"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="742"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="780"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="617"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="757"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="795"/>
         <source>Msa row not found!</source>
-        <translation type="unfinished">Msa row not found!</translation>
+        <translation>Msa row not found!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="266"/>
         <source>Not an object! Id: %1, type: %2</source>
-        <translation type="unfinished">Not an object! Id: %1, type: %2</translation>
+        <translation>Not an object! Id: %1, type: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="600"/>
         <source>Can't undo an operation for the object!</source>
-        <translation type="unfinished">Can't undo an operation for the object!</translation>
+        <translation>Can't undo an operation for the object!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="685"/>
         <source>Can't redo an operation for the object!</source>
-        <translation type="unfinished">Can't redo an operation for the object!</translation>
+        <translation>Can't redo an operation for the object!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="857"/>
         <source>Object not found!</source>
-        <translation type="unfinished">Object not found!</translation>
+        <translation>Object not found!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
         <source>Object not found.</source>
-        <translation type="unfinished">Object not found.</translation>
+        <translation>Object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="954"/>
         <source>Folder not found: %1</source>
-        <translation type="unfinished">Folder not found: %1</translation>
+        <translation>Folder not found: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteSequenceDbi.cpp" line="65"/>
         <source>Sequence object not found.</source>
-        <translation type="unfinished">Sequence object not found.</translation>
+        <translation>Sequence object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteVariantDbi.cpp" line="96"/>
         <location filename="../src/sqlite_dbi/SQLiteVariantDbi.cpp" line="130"/>
         <source>Sequence name is not set!</source>
-        <translation type="unfinished">Sequence name is not set!</translation>
+        <translation>Sequence name is not set!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp" line="68"/>
         <source>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</source>
-        <translation type="unfinished">Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
+        <translation>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
     </message>
 </context>
 <context>
@@ -2683,11 +2690,11 @@ The following sequences are empty:</translation>
         <translation>Vector NTI sequence format is a rich format based on NCBI GenBank format for storing sequences and associated annotations</translation>
     </message>
     <message>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="300"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="316"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="320"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="325"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="331"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="298"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="314"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="318"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="323"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="329"/>
         <source>Error writing document</source>
         <translation>Error writing document</translation>
     </message>
diff --git a/src/corelibs/U2Formats/transl/russian.ts b/src/corelibs/U2Formats/transl/russian.ts
index fcff7a5..3e36c62 100644
--- a/src/corelibs/U2Formats/transl/russian.ts
+++ b/src/corelibs/U2Formats/transl/russian.ts
@@ -314,7 +314,7 @@
         <location filename="../src/AbstractVariationFormat.cpp" line="119"/>
         <location filename="../src/AbstractVariationFormat.cpp" line="132"/>
         <source>Line %1: There are too few columns in this line. The line was skipped.</source>
-        <translation type="unfinished"></translation>
+        <translation>Строка %1: Слишком мало столбцов в этой строке. Строка была проигнорирована.</translation>
     </message>
 </context>
 <context>
@@ -353,7 +353,7 @@
     <message>
         <location filename="../src/BAMUtils.cpp" line="178"/>
         <source>There is no header in the SAM file "%1". The header information will be generated automatically.</source>
-        <translation type="unfinished"></translation>
+        <translation>Нет заголовка в SAM файле "%1". Необходимая информация будет сгенерирована автоматически.</translation>
     </message>
     <message>
         <location filename="../src/BAMUtils.cpp" line="336"/>
@@ -384,112 +384,117 @@
 <context>
     <name>U2::BedFormat</name>
     <message>
-        <location filename="../src/BedFormat.cpp" line="103"/>
+        <location filename="../src/BedFormat.cpp" line="105"/>
         <source>The BED (Browser Extensible Data) format was developed by UCSC for displaying transcript structures in the genome browser.</source>
         <translation>BED (Browser Extensible Data) формат был разработан UCSC для отображения транскриптных структур в геномном браузере.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="139"/>
+        <location filename="../src/BedFormat.cpp" line="143"/>
         <source>File "%1" contains too many annotation tables to be displayed. However, you can process these data using pipelines built with Workflow Designer.</source>
         <translation>File "%1" contains too many annotation tables to be displayed. However, you can process these data using pipelines built with Workflow Designer.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="614"/>
+        <location filename="../src/BedFormat.cpp" line="902"/>
         <source>BED parsing error: incorrect format of the 'track' header line!</source>
         <translation>BED parsing error: incorrect format of the 'track' header line!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="647"/>
+        <location filename="../src/BedFormat.cpp" line="687"/>
         <source>BED parsing error: unexpected number of fields in the first annotations line!</source>
         <translation>BED parsing error: unexpected number of fields in the first annotations line!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="655"/>
+        <location filename="../src/BedFormat.cpp" line="729"/>
+        <source>The file does not contain valid annotations!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/BedFormat.cpp" line="976"/>
         <source>BED parsing error: incorrect number of fields at line %1!</source>
         <translation>BED parsing error: incorrect number of fields at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="661"/>
+        <location filename="../src/BedFormat.cpp" line="980"/>
         <source>BED parsing error: a field at line %1 is empty!</source>
         <translation>BED parsing error: a field at line %1 is empty!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="667"/>
+        <location filename="../src/BedFormat.cpp" line="984"/>
         <source>BED parsing error: incorrect coordinates at line %1!</source>
         <translation>BED parsing error: incorrect coordinates at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="724"/>
+        <location filename="../src/BedFormat.cpp" line="988"/>
         <source>BED parsing error: incorrect score value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect score value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="729"/>
+        <location filename="../src/BedFormat.cpp" line="993"/>
         <source>BED parsing error: incorrect strand value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect strand value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="734"/>
+        <location filename="../src/BedFormat.cpp" line="998"/>
         <source>BED parsing error: incorrect thick coordinates at line %1!</source>
         <translation>BED parsing error: incorrect thick coordinates at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="738"/>
+        <location filename="../src/BedFormat.cpp" line="1002"/>
         <source>BED parsing error: incorrect itemRgb value '%1' at line %2!</source>
         <translation>BED parsing error: incorrect itemRgb value '%1' at line %2!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="743"/>
+        <location filename="../src/BedFormat.cpp" line="1007"/>
         <source>BED parsing error: incorrect value of the block parameters at line %1!</source>
         <translation>BED parsing error: incorrect value of the block parameters at line %1!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="772"/>
+        <location filename="../src/BedFormat.cpp" line="427"/>
         <source>Starting BED saving: '%1'</source>
         <translation>Сохранение BED: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="783"/>
+        <location filename="../src/BedFormat.cpp" line="438"/>
         <source>Can not convert GObject to AnnotationTableObject</source>
         <translation>Can not convert GObject to AnnotationTableObject</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="797"/>
+        <location filename="../src/BedFormat.cpp" line="452"/>
         <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/BedFormat.cpp" line="814"/>
+        <location filename="../src/BedFormat.cpp" line="469"/>
         <source>You are trying to save joined annotation to BED format! The joining will be lost</source>
         <translation>Вы пытаетесь сохранить связанные аннотации в BED формат! Соединения будут потеряны</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="878"/>
+        <location filename="../src/BedFormat.cpp" line="533"/>
         <source>BED saving error: incorrect thick coordinates in the first annotation!</source>
         <translation>BED saving error: incorrect thick coordinates in the first annotation!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="892"/>
+        <location filename="../src/BedFormat.cpp" line="547"/>
         <source>BED saving error: incorrect block fields in the first annotation!</source>
         <translation>BED saving error: incorrect block fields in the first annotation!</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="901"/>
+        <location filename="../src/BedFormat.cpp" line="556"/>
         <source>BED saving: detected %1 fields per line for file '%2'</source>
         <translation>BED saving: detected %1 fields per line for file '%2'</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="908"/>
+        <location filename="../src/BedFormat.cpp" line="563"/>
         <source>BED saving error: an annotation is expected to have '%1' qualifier, but it is absent! Skipping the annotation.</source>
         <translation>BED saving error: an annotation is expected to have '%1' qualifier, but it is absent! Skipping the annotation.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="968"/>
+        <location filename="../src/BedFormat.cpp" line="623"/>
         <source>BED saving error: an annotation is expected to have the block qualifiers! Skipping the annotation.</source>
         <translation>BED saving error: an annotation is expected to have the block qualifiers! Skipping the annotation.</translation>
     </message>
     <message>
-        <location filename="../src/BedFormat.cpp" line="991"/>
+        <location filename="../src/BedFormat.cpp" line="646"/>
         <source>Finished BED saving: '%1'</source>
         <translation>Сохранение BED закончено: '%1'</translation>
     </message>
@@ -645,7 +650,7 @@
     <message>
         <location filename="../src/ace/ConvertAceToSqliteTask.cpp" line="47"/>
         <source>Convert ACE to UGENE database (%1)</source>
-        <translation>Конвертация ACE в UGENE database формат(%1)</translation>
+        <translation>Преобразование ACE в UGENE database формат(%1)</translation>
     </message>
     <message>
         <location filename="../src/ace/ConvertAceToSqliteTask.cpp" line="59"/>
@@ -772,7 +777,7 @@
         <location filename="../src/FastqFormat.cpp" line="339"/>
         <location filename="../src/PDWFormat.cpp" line="156"/>
         <source>Document is empty.</source>
-        <translation type="unfinished">Документ не содержит данных.</translation>
+        <translation>Документ не содержит данных.</translation>
     </message>
 </context>
 <context>
@@ -780,22 +785,22 @@
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="50"/>
         <source>Database connection</source>
-        <translation type="unfinished"></translation>
+        <translation>Подключение к базе данных</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="51"/>
         <source>A fake format that was added to implement shared database connection within existing document model.</source>
-        <translation type="unfinished">Неверный формат, который был добавлен  в процессе реализации подключения к базе данных в рамках существующей модели документа.</translation>
+        <translation>Неверный формат, который был добавлен  в процессе реализации подключения к базе данных в рамках существующей модели документа.</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="90"/>
         <source>You have no permissions to modify the content of this database</source>
-        <translation type="unfinished">У вас недостаточно прав чтобы изменять содержимое этой базы данных</translation>
+        <translation>У вас недостаточно прав чтобы изменять содержимое этой базы данных</translation>
     </message>
     <message>
         <location filename="../src/DatabaseConnectionFormat.cpp" line="110"/>
         <source>Empty object name</source>
-        <translation type="unfinished">Имя объекта пусто</translation>
+        <translation>Имя объекта пусто</translation>
     </message>
 </context>
 <context>
@@ -1373,7 +1378,7 @@ The following sequences are empty:</translation>
         <translation>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="590"/>
+        <location filename="../src/GFFFormat.cpp" line="591"/>
         <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>
@@ -2176,358 +2181,360 @@ The following sequences are empty:</translation>
         <location filename="../src/mysql_dbi/MysqlAssemblyDbi.cpp" line="84"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="80"/>
         <source>There is no assembly object with the specified id.</source>
-        <translation type="unfinished">Не найден объект сборки с указанным идентификатором.</translation>
+        <translation>Не найден объект сборки с указанным идентификатором.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlAttributeDbi.cpp" line="209"/>
         <location filename="../src/sqlite_dbi/SQLiteAttributeDbi.cpp" line="223"/>
         <source>Unsupported attribute type: %1</source>
-        <translation type="unfinished">Неподдерживаемый тип атрибута: %1</translation>
+        <translation>Неподдерживаемый тип атрибута: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlAttributeDbi.cpp" line="341"/>
         <source>Required attribute is not found</source>
-        <translation type="unfinished">Требуемый атрибут не найдет</translation>
+        <translation>Требуемый атрибут не найдет</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="264"/>
         <source>Database url is incorrect</source>
-        <translation type="unfinished">Неправильный путь базы данных</translation>
+        <translation>Неправильный путь базы данных</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="270"/>
         <source>User login is not specified</source>
-        <translation type="unfinished">Не указано имя пользователя</translation>
+        <translation>Не указано имя пользователя</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="276"/>
         <source>Host is not specified</source>
-        <translation type="unfinished">Не указан хост</translation>
+        <translation>Не указан хост</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="282"/>
         <source>Database name is not specified</source>
-        <translation type="unfinished">Не указано имя базы данных</translation>
+        <translation>Не указано имя базы данных</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="298"/>
         <source>Error opening MySQL database: %1</source>
-        <translation type="unfinished">Ошибка открытия базы данных MySQL: %1</translation>
+        <translation>Ошибка открытия базы данных MySQL: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="382"/>
         <source>Not a %1 MySQL database: %2, %3</source>
-        <translation type="unfinished">Не %1 MySQL база данных: %2, %3</translation>
+        <translation>Не %1 MySQL база данных: %2, %3</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="388"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="273"/>
         <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="unfinished">Предупреждение! База данных была создана с более новой %1 версией: %2. Не все возможности базы данных могут быть выполнены! Текущая %1 версия: %3.</translation>
+        <translation>Предупреждение! База данных была создана с более новой %1 версией: %2. Не все возможности базы данных могут быть выполнены! Текущая %1 версия: %3.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="523"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="328"/>
         <source>Illegal database state: %1</source>
-        <translation type="unfinished">Неправильное состояние базы данных: %1</translation>
+        <translation>Неправильное состояние базы данных: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="554"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="410"/>
         <source>Can't synchronize database state</source>
-        <translation type="unfinished">Невозможно синхронизовать состояние базы данных</translation>
+        <translation>Невозможно синхронизовать состояние базы данных</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlFeatureDbi.cpp" line="148"/>
         <source>Annotation table object is not found.</source>
-        <translation type="unfinished">Не найдена таблица аннотаций.</translation>
+        <translation>Не найдена таблица аннотаций.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlFeatureDbi.cpp" line="177"/>
         <source>Feature is not found.</source>
-        <translation type="unfinished">Аннотация не найдена.</translation>
+        <translation>Аннотация не найдена.</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="134"/>
         <source>An object single modification step not found</source>
-        <translation type="unfinished">Объект единичной модификации не найден</translation>
+        <translation>Объект единичной модификации не найден</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="170"/>
         <source>Failed to find user step ID</source>
-        <translation type="unfinished">Невозможно найти идентификатор объекта единичной модификации</translation>
+        <translation>Невозможно найти идентификатор объекта единичной модификации</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="378"/>
         <source>Not main thread</source>
-        <translation type="unfinished">Не основной поток</translation>
+        <translation>Не основной поток</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="390"/>
         <source>Can't create a common user modifications step, previous one is not complete</source>
-        <translation type="unfinished">Невозможно создать новую единичную модификацию, т.к. прошлая модификация еще не завершена</translation>
+        <translation>Невозможно создать новую единичную модификацию, т.к. прошлая модификация еще не завершена</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="453"/>
         <source>Can't create a common multiple modifications step, previous one is not complete</source>
-        <translation type="unfinished">Невозможно создать новые модификации, т.к. прошлая модификация еще не завершена</translation>
+        <translation>Невозможно создать новые модификации, т.к. прошлая модификация еще не завершена</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="489"/>
         <source>Failed to create a common user modifications step</source>
-        <translation type="unfinished">Не удалось создать новую единичную модификацию</translation>
+        <translation>Не удалось создать новую единичную модификацию</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlModDbi.cpp" line="510"/>
         <source>Failed to create a common multiple modifications step</source>
-        <translation type="unfinished">Не удалось создать новые модификации</translation>
+        <translation>Не удалось создать новые модификации</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="102"/>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="118"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="634"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="216"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="648"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="368"/>
         <source>Msa object not found</source>
-        <translation type="unfinished">Объект msa не найден</translation>
+        <translation>Объект msa не найден</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="177"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="781"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="821"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="795"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="835"/>
         <source>Msa row not found</source>
-        <translation type="unfinished">Столбец msa не найден</translation>
+        <translation>Столбец msa не найден</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="586"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="619"/>
+        <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"/>
         <source>Unexpected modification type '%1'</source>
-        <translation type="unfinished">Неожиданный тип модификации '%1'</translation>
+        <translation>Неожиданный тип модификации '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="656"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="670"/>
         <source>Invalid row position: %1</source>
-        <translation type="unfinished">Неправильное расположение столбца: %1</translation>
+        <translation>Неправильное расположение столбца: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1030"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1161"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1044"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1175"/>
         <source>An error occurred during updating an alignment alphabet</source>
-        <translation type="unfinished">Возникла ошибка во время обновления алфавита выравнивания</translation>
+        <translation>Возникла ошибка во время обновления алфавита выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1048"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1176"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1062"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1190"/>
         <source>An error occurred during reverting adding of rows</source>
-        <translation type="unfinished">Возникла ошибка во время отмены добавления столбцов</translation>
+        <translation>Возникла ошибка во время отмены добавления столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1066"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1080"/>
         <source>An error occurred during reverting addition of a row</source>
-        <translation type="unfinished">Возникла ошибка во время отмены добавления столбца</translation>
+        <translation>Возникла ошибка во время отмены добавления столбца</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1079"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1196"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1093"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1210"/>
         <source>An error occurred during reverting removing of rows</source>
-        <translation type="unfinished">Возникла ошибка во время отмены удаления столбцов</translation>
+        <translation>Возникла ошибка во время отмены удаления столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1092"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1211"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1225"/>
         <source>An error occurred during reverting removing of a row</source>
-        <translation type="unfinished">Возникла ошибка во время отмены удаления столбца</translation>
+        <translation>Возникла ошибка во время отмены удаления столбца</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1222"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1120"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1236"/>
         <source>An error occurred during updating an alignment gaps</source>
-        <translation type="unfinished">Возникла ошибка во время обновления промежутков выравнивания</translation>
+        <translation>Возникла ошибка во время обновления промежутков выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1119"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1232"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1246"/>
         <source>An error occurred during updating an alignment row order</source>
-        <translation type="unfinished">Возникла ошибка во время обновления порядка столбцов</translation>
+        <translation>Возникла ошибка во время обновления порядка столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1242"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1147"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1256"/>
         <source>An error occurred during updating a row info</source>
-        <translation type="unfinished">Возникла ошибка во время обновления информации о столбце</translation>
+        <translation>Возникла ошибка во время обновления информации о столбце</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1148"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1257"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1272"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1282"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1162"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1271"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1287"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1297"/>
         <source>An error occurred during updating an msa length</source>
-        <translation type="unfinished">An error occurred during updating an msa length</translation>
+        <translation>An error occurred during updating an msa length</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1186"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1200"/>
         <source>An error occurred during addition of a row</source>
-        <translation type="unfinished">Возникла ошибка во время добавления столбца</translation>
+        <translation>Возникла ошибка во время добавления столбца</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="586"/>
         <source>Can't undo an operation for the object</source>
-        <translation type="unfinished">Невозможно отменить операцию для объекта</translation>
+        <translation>Невозможно отменить операцию для объекта</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="649"/>
         <source>Can't redo an operation for the object</source>
-        <translation type="unfinished">Невозможно передвинуться на одну операцию вперед для объекта</translation>
+        <translation>Невозможно передвинуться на одну операцию вперед для объекта</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="791"/>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="883"/>
         <source>Object not found</source>
-        <translation type="unfinished">Объект не найден</translation>
+        <translation>Объект не найден</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="832"/>
         <source>Folder not found: %1 (canonical: %2)</source>
-        <translation type="unfinished">Папка не найдена: %1 (каноническое: %2)</translation>
+        <translation>Папка не найдена: %1 (каноническое: %2)</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1013"/>
         <source>Not an object, id: %1, type: %2</source>
-        <translation type="unfinished">Не является объектом, id: %1, тип: %2</translation>
+        <translation>Не является объектом, id: %1, тип: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1036"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
         <source>Unknown object type! Id: %1, type: %2</source>
-        <translation type="unfinished">Unknown object type! Id: %1, type: %2</translation>
+        <translation>Unknown object type! Id: %1, type: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1078"/>
         <source>Can't undo an unknown operation: '%1'</source>
-        <translation type="unfinished">Can't undo an unknown operation: '%1'</translation>
+        <translation>Can't undo an unknown operation: '%1'</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1091"/>
         <source>Can't redo an unknown operation: '%1'</source>
-        <translation type="unfinished">Can't redo an unknown operation: '%1'</translation>
+        <translation>Can't redo an unknown operation: '%1'</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1122"/>
         <source>An error occurred during updating an object name</source>
-        <translation type="unfinished">An error occurred during updating an object name</translation>
+        <translation>An error occurred during updating an object name</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1140"/>
         <source>An error occurred during updating an object name!</source>
-        <translation type="unfinished">An error occurred during updating an object name!</translation>
+        <translation>An error occurred during updating an object name!</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="73"/>
         <source>Sequence object not found</source>
-        <translation type="unfinished">Последовательность не найдена</translation>
+        <translation>Последовательность не найдена</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="125"/>
         <source>Internal error occurred during the sequence processing</source>
-        <translation type="unfinished">Internal error occurred during the sequence processing</translation>
+        <translation>Internal error occurred during the sequence processing</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="126"/>
         <source>An exception was thrown during reading sequence data from dbi</source>
-        <translation type="unfinished">An exception was thrown during reading sequence data from dbi</translation>
+        <translation>An exception was thrown during reading sequence data from dbi</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="387"/>
         <source>An error occurred during reverting replacing sequence data</source>
-        <translation type="unfinished">An error occurred during reverting replacing sequence data</translation>
+        <translation>An error occurred during reverting replacing sequence data</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="402"/>
         <source>An error occurred during replacing sequence data</source>
-        <translation type="unfinished">An error occurred during replacing sequence data</translation>
+        <translation>An error occurred during replacing sequence data</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="158"/>
         <source>Invalid variant track type: %1</source>
-        <translation type="unfinished">Invalid variant track type: %1</translation>
+        <translation>Invalid variant track type: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="186"/>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="219"/>
         <source>Sequence name is not set</source>
-        <translation type="unfinished">Sequence name is not set</translation>
+        <translation>Sequence name is not set</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="321"/>
         <source>New variant public ID is empty</source>
-        <translation type="unfinished">New variant public ID is empty</translation>
+        <translation>New variant public ID is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlVariantDbi.cpp" line="337"/>
         <source>New variant track ID is empty</source>
-        <translation type="unfinished">New variant track ID is empty</translation>
+        <translation>New variant track ID is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="124"/>
         <source>Packed data is empty</source>
-        <translation type="unfinished">Packed data is empty</translation>
+        <translation>Packed data is empty</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="131"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="468"/>
         <source>Packing method prefix is not supported: %1</source>
-        <translation type="unfinished">Packing method prefix is not supported: %1</translation>
+        <translation>Packing method prefix is not supported: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="139"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="476"/>
         <source>Data is corrupted, no name end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no name end marker found: %1</translation>
+        <translation>Data is corrupted, no name end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="148"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="485"/>
         <source>Data is corrupted, no sequence end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no sequence end marker found: %1</translation>
+        <translation>Data is corrupted, no sequence end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="157"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="494"/>
         <source>Data is corrupted, no CIGAR end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no CIGAR end marker found: %1</translation>
+        <translation>Data is corrupted, no CIGAR end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="176"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="513"/>
         <source>Data is corrupted, no rnext end marker found: %1</source>
-        <translation type="unfinished">Data is corrupted, no rnext end marker found: %1</translation>
+        <translation>Data is corrupted, no rnext end marker found: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlAssemblyUtils.cpp" line="191"/>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="528"/>
         <source>Can not convert pnext to a number: %1</source>
-        <translation type="unfinished">Can not convert pnext to a number: %1</translation>
+        <translation>Can not convert pnext to a number: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="399"/>
         <source>Bound values: </source>
-        <translation type="unfinished">Связанные значения: </translation>
+        <translation>Связанные значения: </translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="421"/>
         <source>Cannot start a transaction</source>
-        <translation type="unfinished">Cannot start a transaction</translation>
+        <translation>Cannot start a transaction</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="505"/>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="127"/>
         <source>Failed to detect assembly storage format: %1</source>
-        <translation type="unfinished">Failed to detect assembly storage format: %1</translation>
+        <translation>Failed to detect assembly storage format: %1</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="517"/>
         <source>Failed to parse range: %1, full: %2</source>
-        <translation type="unfinished">Failed to parse range: %1, full: %2</translation>
+        <translation>Failed to parse range: %1, full: %2</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp" line="531"/>
@@ -2537,137 +2544,137 @@ The following sequences are empty:</translation>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="156"/>
         <location filename="../src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp" line="161"/>
         <source>Failed to parse packed row range info %1</source>
-        <translation type="unfinished">Failed to parse packed row range info %1</translation>
+        <translation>Failed to parse packed row range info %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="96"/>
         <source>Unsupported reads storage type: %1</source>
-        <translation type="unfinished">Unsupported reads storage type: %1</translation>
+        <translation>Unsupported reads storage type: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="373"/>
         <source>Packing method is not supported: %1</source>
-        <translation type="unfinished">Packing method is not supported: %1</translation>
+        <translation>Packing method is not supported: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteAssemblyDbi.cpp" line="461"/>
         <source>Packed data is empty!</source>
-        <translation type="unfinished">Packed data is empty!</translation>
+        <translation>Packed data is empty!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="222"/>
         <source>Error checking SQLite database: %1!</source>
-        <translation type="unfinished">Error checking SQLite database: %1!</translation>
+        <translation>Error checking SQLite database: %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="235"/>
         <source>Error creating table: %1, error: %2</source>
-        <translation type="unfinished">Error creating table: %1, error: %2</translation>
+        <translation>Error creating table: %1, error: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="267"/>
         <source>Not a %1 SQLite database: %2</source>
-        <translation type="unfinished">Not a %1 SQLite database: %2</translation>
+        <translation>Not a %1 SQLite database: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="324"/>
         <source>Database is already opened!</source>
-        <translation type="unfinished">База данных уже открыта!</translation>
+        <translation>База данных уже открыта!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="334"/>
         <source>URL is not specified</source>
-        <translation type="unfinished">Не задан путь</translation>
+        <translation>Не задан путь</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="348"/>
         <source>Error opening SQLite database: %1!</source>
-        <translation type="unfinished">Error opening SQLite database: %1!</translation>
+        <translation>Error opening SQLite database: %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="400"/>
         <source>Database is already closed!</source>
-        <translation type="unfinished">База данных уже закрыта!</translation>
+        <translation>База данных уже закрыта!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="404"/>
         <source>Illegal database state %1!</source>
-        <translation type="unfinished">Illegal database state %1!</translation>
+        <translation>Illegal database state %1!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="429"/>
         <source>Failed to close database: %1, err: %2</source>
-        <translation type="unfinished">Failed to close database: %1, err: %2</translation>
+        <translation>Failed to close database: %1, err: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteFeatureDbi.cpp" line="144"/>
         <source>Annotation table object not found.</source>
-        <translation type="unfinished">Annotation table object not found.</translation>
+        <translation>Annotation table object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteModDbi.cpp" line="139"/>
         <source>An object single modification step not found!</source>
-        <translation type="unfinished">An object single modification step not found!</translation>
+        <translation>An object single modification step not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="505"/>
         <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="520"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="712"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="535"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="727"/>
         <source>Msa object not found!</source>
-        <translation type="unfinished">Msa object not found!</translation>
+        <translation>Msa object not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="602"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="742"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="780"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="617"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="757"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="795"/>
         <source>Msa row not found!</source>
-        <translation type="unfinished">Msa row not found!</translation>
+        <translation>Msa row not found!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="266"/>
         <source>Not an object! Id: %1, type: %2</source>
-        <translation type="unfinished">Not an object! Id: %1, type: %2</translation>
+        <translation>Not an object! Id: %1, type: %2</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="600"/>
         <source>Can't undo an operation for the object!</source>
-        <translation type="unfinished">Can't undo an operation for the object!</translation>
+        <translation>Can't undo an operation for the object!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="685"/>
         <source>Can't redo an operation for the object!</source>
-        <translation type="unfinished">Can't redo an operation for the object!</translation>
+        <translation>Can't redo an operation for the object!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="857"/>
         <source>Object not found!</source>
-        <translation type="unfinished">Object not found!</translation>
+        <translation>Object not found!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
         <source>Object not found.</source>
-        <translation type="unfinished">Object not found.</translation>
+        <translation>Object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="954"/>
         <source>Folder not found: %1</source>
-        <translation type="unfinished">Folder not found: %1</translation>
+        <translation>Folder not found: %1</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteSequenceDbi.cpp" line="65"/>
         <source>Sequence object not found.</source>
-        <translation type="unfinished">Sequence object not found.</translation>
+        <translation>Sequence object not found.</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/SQLiteVariantDbi.cpp" line="96"/>
         <location filename="../src/sqlite_dbi/SQLiteVariantDbi.cpp" line="130"/>
         <source>Sequence name is not set!</source>
-        <translation type="unfinished">Sequence name is not set!</translation>
+        <translation>Sequence name is not set!</translation>
     </message>
     <message>
         <location filename="../src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp" line="68"/>
         <source>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</source>
-        <translation type="unfinished">Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
+        <translation>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
     </message>
 </context>
 <context>
@@ -2683,11 +2690,11 @@ The following sequences are empty:</translation>
         <translation>Формат Vector NTI это формат основанный на формате NCBI GenBank для хранения последовательностей и аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="300"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="316"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="320"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="325"/>
-        <location filename="../src/VectorNtiSequenceFormat.cpp" line="331"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="298"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="314"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="318"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="323"/>
+        <location filename="../src/VectorNtiSequenceFormat.cpp" line="329"/>
         <source>Error writing document</source>
         <translation>Ошибка записи</translation>
     </message>
diff --git a/src/corelibs/U2Gui/U2Gui.qrc b/src/corelibs/U2Gui/U2Gui.qrc
index deaf7f1..5087109 100644
--- a/src/corelibs/U2Gui/U2Gui.qrc
+++ b/src/corelibs/U2Gui/U2Gui.qrc
@@ -175,5 +175,6 @@
         <file>images/zoom_view.png</file>
         <file>images/hide_all_views.png</file>
         <file>images/show_all_views.png</file>
+        <file>images/wrap_sequence.png</file>
     </qresource>
 </RCC>
diff --git a/src/corelibs/U2Gui/images/notch.png b/src/corelibs/U2Gui/images/notch.png
index 5542a1d..c3d7431 100644
Binary files a/src/corelibs/U2Gui/images/notch.png and b/src/corelibs/U2Gui/images/notch.png differ
diff --git a/src/corelibs/U2Gui/images/paste.png b/src/corelibs/U2Gui/images/paste.png
new file mode 100644
index 0000000..2eeb76b
Binary files /dev/null and b/src/corelibs/U2Gui/images/paste.png differ
diff --git a/src/corelibs/U2Gui/images/ruler_coverage.png b/src/corelibs/U2Gui/images/ruler_coverage.png
index bed3a3b..1773a8a 100644
Binary files a/src/corelibs/U2Gui/images/ruler_coverage.png and b/src/corelibs/U2Gui/images/ruler_coverage.png differ
diff --git a/src/corelibs/U2Gui/images/set_reference.png b/src/corelibs/U2Gui/images/set_reference.png
index d80003e..f2ac52c 100644
Binary files a/src/corelibs/U2Gui/images/set_reference.png and b/src/corelibs/U2Gui/images/set_reference.png differ
diff --git a/src/corelibs/U2Gui/images/tooltip.png b/src/corelibs/U2Gui/images/tooltip.png
index 8b57c56..1aec1f5 100644
Binary files a/src/corelibs/U2Gui/images/tooltip.png and b/src/corelibs/U2Gui/images/tooltip.png differ
diff --git a/src/corelibs/U2Gui/src/MainWindow.h b/src/corelibs/U2Gui/src/MainWindow.h
index cb544ca..ff3340c 100644
--- a/src/corelibs/U2Gui/src/MainWindow.h
+++ b/src/corelibs/U2Gui/src/MainWindow.h
@@ -76,6 +76,7 @@ class QMainWindow;
 #define ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB         "action_projectsupport__access_remote_db"
 #define ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB         "action_projectsupport__access_shared_db"
 #define ACTION_PROJECTSUPPORT__SEARCH_GENBANK           "action_projectsupport__search_genbank"
+#define ACTION_PROJECTSUPPORT__NEW_SECTION_SEPARATOR    "action_projectsupport__new_section_separator"
 
 #define ACTION_PROJECT__ADD_MENU                    "action_project__add_menu"
 #define ACTION_PROJECT__ADD_OBJECT                  "action_project__add_object"
diff --git a/src/corelibs/U2Gui/src/OpenViewTask.cpp b/src/corelibs/U2Gui/src/OpenViewTask.cpp
index 0c67a7e..11f34c0 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.cpp
+++ b/src/corelibs/U2Gui/src/OpenViewTask.cpp
@@ -26,7 +26,6 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/Log.h>
-#include <U2Core/DASSource.h>
 #include <U2Core/ResourceTracker.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GObjectReference.h>
@@ -41,7 +40,6 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/LoadRemoteDocumentTask.h>
-#include <U2Core/LoadDASDocumentTask.h>
 
 #include <U2Gui/ObjectViewModel.h>
 
@@ -348,91 +346,4 @@ QList<Task*> AddDocumentAndOpenViewTask::onSubTaskFinished(Task* t) {
     return res;
 }
 
-
-//////////////////////////////////////////////////////////////////////////
-//LoadDASDocumentsAndOpenViewTask
-LoadDASDocumentsAndOpenViewTask::LoadDASDocumentsAndOpenViewTask( const QString& accId, const QString& _fullPath, const DASSource& _referenceSource, const QList<DASSource>& _featureSources, bool _convertId )
-: Task(tr("Load DAS documents and open view"), TaskFlags_NR_FOSE_COSC | TaskFlag_MinimizeSubtaskErrorText | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)
-,accNumber(accId)
-,fullpath(_fullPath)
-,referenceSource(_referenceSource)
-,featureSources(_featureSources)
-,loadDasDocumentTask(NULL)
-,convertId(_convertId)
-{
-
-}
-
-void LoadDASDocumentsAndOpenViewTask::prepare(){
-    loadDasDocumentTask = new ConvertIdAndLoadDasDocumentTask(accNumber, fullpath, referenceSource, featureSources, convertId);
-
-    addSubTask(loadDasDocumentTask);
-}
-
-QString LoadDASDocumentsAndOpenViewTask::generateReport() const {
-    QString result = tr("Resource ID: %1").arg(accNumber);
-    result += "<br>";
-
-    if (NULL != loadDasDocumentTask) {
-        const QString convertedAccessionNumber = loadDasDocumentTask->getConvertedAccessionNumber();
-        if (!convertedAccessionNumber.isEmpty()) {
-            result += tr("Converted resource ID: %2").arg(convertedAccessionNumber);
-            result += "<br>";
-        }
-    }
-
-    result += tr("Resolution: ");
-    if (isCanceled()) {
-        result += tr("<font color=\'%1\'>cancelled</font>").arg(L10N::errorColorLabelHtmlStr());
-    } else if (hasError()) {
-        result += tr("<font color=\'%1\'>error</font>").arg(L10N::errorColorLabelHtmlStr());
-        result += "<br>";
-        result += getError();
-    } else {
-        result += tr("<font color=\'%1\'>success</font>").arg(L10N::successColorLabelHtmlStr());
-    }
-
-    return result;
-}
-
-QList<Task*> LoadDASDocumentsAndOpenViewTask::onSubTaskFinished( Task* subTask ){
-    QList<Task*> subTasks;
-
-    if (subTask->hasError() || subTask->isCanceled()) {
-        return subTasks;
-    }
-
-    if (subTask == loadDasDocumentTask ) {
-        QString fullPath = loadDasDocumentTask->getLocalUrl();
-        Project* proj = AppContext::getProject();
-        if (proj == NULL) {
-            Task* openWithProjectTask = AppContext::getProjectLoader()->openWithProjectTask(fullPath);
-            if (openWithProjectTask != NULL) {
-                subTasks.append(openWithProjectTask);
-            }
-        } else {
-            Document* doc = loadDasDocumentTask->getDocument();
-            SAFE_POINT(doc != NULL, "loadRemoteDocTask->takeDocument() returns NULL!", subTasks);
-            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));
-                }
-            } else {
-                // Add document to project
-                doc = loadDasDocumentTask->takeDocument();
-                SAFE_POINT(doc != NULL, "loadRemoteDocTask->takeDocument() returns NULL!", subTasks);
-                subTasks.append(new AddDocumentTask(doc));
-                subTasks.append(new LoadUnloadedDocumentAndOpenViewTask(doc));
-            }
-
-        }
-    }
-
-    return subTasks;
-}
-
 }//namespace
diff --git a/src/corelibs/U2Gui/src/OpenViewTask.h b/src/corelibs/U2Gui/src/OpenViewTask.h
index cbc0638..d7d43de 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.h
+++ b/src/corelibs/U2Gui/src/OpenViewTask.h
@@ -25,14 +25,12 @@
 #include <U2Core/Task.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/AddDocumentTask.h>
-#include <U2Core/DASSource.h>
 
 namespace U2 {
 
 class Document;
 class LoadUnloadedDocumentTask;
 class LoadRemoteDocumentTask;
-class ConvertIdAndLoadDasDocumentTask;
 class DocumentProviderTask;
 
 class U2GUI_EXPORT LoadUnloadedDocumentAndOpenViewTask : public Task {
@@ -73,26 +71,6 @@ private:
     LoadRemoteDocumentTask* loadRemoteDocTask;
 };
 
-class U2GUI_EXPORT LoadDASDocumentsAndOpenViewTask : public Task {
-    Q_OBJECT
-public:
-    LoadDASDocumentsAndOpenViewTask(const QString& accId, const QString& fullPath, const DASSource& referenceSource, const QList<DASSource>& featureSources, bool convertId = true);
-
-    virtual void prepare();
-    QString generateReport() const;
-
-protected:
-    QList<Task*> onSubTaskFinished(Task* subTask);
-
-private:
-    QString                             accNumber;
-    QString                             fullpath;
-    DASSource                           referenceSource;
-    QList<DASSource>                    featureSources;
-    ConvertIdAndLoadDasDocumentTask*    loadDasDocumentTask;
-    bool                                convertId;
-};
-
 class U2GUI_EXPORT OpenViewTask : public Task {
     Q_OBJECT
 public:
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.cpp b/src/corelibs/U2Gui/src/ToolsMenu.cpp
index decf163..1341cee 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.cpp
+++ b/src/corelibs/U2Gui/src/ToolsMenu.cpp
@@ -98,6 +98,8 @@ const QString ToolsMenu::EXPERT_DISCOVERY = "EXPERT_DISCOVERY";
 const QString ToolsMenu::QUERY_DESIGNER = "QUERY_DESIGNER";
 const QString ToolsMenu::WORKFLOW_DESIGNER = "WORKFLOW_DESIGNER";
 
+const QString ToolsMenu::GUI_TEST_RUNNER = "GUI_TEST_RUNNER";
+
 QMap<QString, QString> ToolsMenu::actionText;
 QMap<QString, QString> ToolsMenu::actionIcon;
 QMap<QString, QStringList> ToolsMenu::subMenuAction;
@@ -208,6 +210,7 @@ void ToolsMenu::init() {
     subMenuAction[TOOLS] << EXPERT_DISCOVERY;
     subMenuAction[TOOLS] << QUERY_DESIGNER;
     subMenuAction[TOOLS] << WORKFLOW_DESIGNER;
+    subMenuAction[TOOLS] << GUI_TEST_RUNNER;
 }
 
 QMenu * ToolsMenu::getToolsMenu() {
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.h b/src/corelibs/U2Gui/src/ToolsMenu.h
index 85e2b52..2f0ba1c 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.h
+++ b/src/corelibs/U2Gui/src/ToolsMenu.h
@@ -32,7 +32,7 @@ class QMenu;
 namespace U2 {
 
 class U2GUI_EXPORT ToolsMenu : public QObject {
-    Q_OBJECT
+    Q_OBJECT
 public:
     static void init();
 
@@ -105,6 +105,7 @@ public:
     static const QString EXPERT_DISCOVERY;
     static const QString QUERY_DESIGNER;
     static const QString WORKFLOW_DESIGNER;
+    static const QString GUI_TEST_RUNNER;
 
 private:
     static QMenu * getToolsMenu();
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
index 0fcb33d..9392da4 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
@@ -35,7 +35,12 @@ GroupOptionsWidget::GroupOptionsWidget(const QString& _groupId, const QString& _
       widget(_widget),
       title(_title)
 {
-    setStyleSheet("font-size: 11px;");
+
+#ifdef Q_OS_MAC
+    setStyleSheet("font-size: 11.25pt;");
+#else
+    setStyleSheet("font-size: 8.25pt;");
+#endif
 
     titleWidget = new QLabel(title);
     titleWidget->setObjectName("titleWidget");
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
index 699b4be..f61adf2 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
@@ -48,7 +48,7 @@ AddNewDocumentDialogImpl::AddNewDocumentDialogImpl(QWidget* p, AddNewDocumentDia
 : QDialog(p), model(m)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126654");
+    new HelpButton(this, buttonBox, "17466052");
     if (model.format.isEmpty()) {
         model.format = AppContext::getSettings()->getValue(SETTINGS_LASTFORMAT, QString("")).toString();
     }
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
index bc4da11..4fa3474 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
@@ -39,7 +39,7 @@ AuthenticationDialog::AuthenticationDialog(const QString &text, QWidget* parent)
     authenticationWidget(new AuthenticationWidget)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126929");
+    new HelpButton(this, ui->buttonBox, "17466327");
     ui->mainLayout->insertWidget(1, authenticationWidget);
 
     if (text.isEmpty()) {
diff --git a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
index 7130fcc..49c8877 100644
--- a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
@@ -35,7 +35,7 @@ BreakpointConditionEditDialog::BreakpointConditionEditDialog(QWidget *parent,
 {
     ui = new Ui_BreakpointConditionEditDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126517");
+    new HelpButton(this, ui->buttonBox, "17466603");
 
     scriptEdit = new ScriptEditorWidget(this);
     scriptEdit->setVariablesText(variablesText);
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
index e9f2141..91340d3 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
@@ -53,7 +53,7 @@ CreateAnnotationDialog::CreateAnnotationDialog(QWidget* p, CreateAnnotationModel
     ui->setupUi(this);
     annWidgetController = new CreateAnnotationWidgetController(m, this, CreateAnnotationWidgetController::Full);
     
-    new HelpButton(this, ui->buttonBox, "16126621");
+    new HelpButton(this, ui->buttonBox, "17466019");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
 
     ui->mainLayout->insertWidget(0, annWidgetController->getWidget());
diff --git a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
index e8ffc5b..0835c17 100644
--- a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
@@ -47,7 +47,7 @@ namespace U2{
 CreateDocumentFromTextDialogController::CreateDocumentFromTextDialogController(QWidget* p): QDialog(p) {
     ui = new Ui_CreateDocumentFromTextDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126557");
+    new HelpButton(this, ui->buttonBox, "17465955");
 
     //TODO: use format name here 
     ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
index 7241bb1..e90e1c9 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
@@ -32,7 +32,6 @@
 #endif
 
 #include <U2Core/AppContext.h>
-#include <U2Core/DASSource.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/LoadRemoteDocumentTask.h>
@@ -60,10 +59,8 @@ QString DownloadRemoteFileDialog::defaultDB("");
 DownloadRemoteFileDialog::DownloadRemoteFileDialog(QWidget *p):QDialog(p), isQueryDB(false) {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126571");
+    new HelpButton(this, ui->buttonBox, "17465969");
 
-    ui->dasfeaturesWidget->setResizeMode(QListView::Adjust);
-    ui->dasBox->hide();
     ui->formatBox->hide();
     ui->formatLabel->hide();
     adjustSize();
@@ -74,14 +71,6 @@ DownloadRemoteFileDialog::DownloadRemoteFileDialog(QWidget *p):QDialog(p), isQue
         ui->databasesBox->addItem(dbName, dbName);
     }
 
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    if (dasRegistry){
-        const QList<DASSource>& dasSources = dasRegistry->getReferenceSources();
-        foreach(const DASSource& s, dasSources){
-            ui->databasesBox->addItem(s.getName(), s.getId());
-        }
-    }
-
     if (!defaultDB.isEmpty()) {
         int index = ui->databasesBox->findData(defaultDB);
         if (index != -1){
@@ -105,10 +94,8 @@ DownloadRemoteFileDialog::DownloadRemoteFileDialog( const QString& id, const QSt
 {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126584");
+    new HelpButton(this, ui->buttonBox, "17465982");
 
-    ui->dasfeaturesWidget->setResizeMode(QListView::Adjust);
-    ui->dasBox->hide();
     ui->formatBox->addItem(GENBANK_FORMAT);
     ui->formatBox->addItem(FASTA_FORMAT);
     connect(ui->formatBox, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
@@ -199,48 +186,20 @@ void DownloadRemoteFileDialog::accept()
     QStringList resIds = resourceId.split(QRegExp("[\\s,;]+"));
     QList<Task*> tasks;
 
-    if (isDefaultDb(dbId)) {
-        QString fileFormat;
-        if (ui->formatBox->count() > 0) {
-            fileFormat = ui->formatBox->currentText();
-        }
-
-        QVariantMap hints;
-        hints.insert(FORCE_DOWNLOAD_SEQUENCE_HINT, ui->chbForceDownloadSequence->isVisible() && ui->chbForceDownloadSequence->isChecked());
+    QString fileFormat;
+    if (ui->formatBox->count() > 0) {
+        fileFormat = ui->formatBox->currentText();
+    }
 
-        foreach (const QString &resId, resIds) {
-            tasks.append(new LoadRemoteDocumentAndOpenViewTask(resId, dbId, fullPath, fileFormat, hints));
-        }
+    QVariantMap hints;
+    hints.insert(FORCE_DOWNLOAD_SEQUENCE_HINT, ui->chbForceDownloadSequence->isVisible() && ui->chbForceDownloadSequence->isChecked());
 
-        AppContext::getTaskScheduler()->registerTopLevelTask(new MultiTask(tr("Download remote documents"), tasks));
-    } else { //DAS ID
-        DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-        if (dasRegistry){
-            //get features
-            QList<DASSource> featureSources;
-            for(int i = 0; i < ui->dasfeaturesWidget->count(); i++){
-                QListWidgetItem* item = ui->dasfeaturesWidget->item(i);
-                if (item->checkState() == Qt::Checked){
-                    QString featureId = item->data(Qt::UserRole).toString();
-                    DASSource fSource = dasRegistry->findById(featureId);
-                    if (fSource.isValid()){
-                        featureSources.append(fSource);
-                    }
-                }
-            }
-            //get sequence
-            DASSource refSource = dasRegistry->findById(dbId);
-            if (refSource.isValid()) {
-                foreach (const QString &resId, resIds) {
-                    tasks.append(new LoadDASDocumentsAndOpenViewTask(resId, fullPath, refSource, featureSources));
-                }
-                TaskFlags multiTaskFlags(TaskFlag_NoRun | TaskFlag_ReportingIsEnabled | TaskFlag_ReportingIsSupported);
-                Task *multiTask = new MultiTask("Load DAS Documents", tasks, false, multiTaskFlags);
-                AppContext::getTaskScheduler()->registerTopLevelTask(multiTask);
-            }
-        }
+    foreach (const QString &resId, resIds) {
+        tasks.append(new LoadRemoteDocumentAndOpenViewTask(resId, dbId, fullPath, fileFormat, hints));
     }
 
+    AppContext::getTaskScheduler()->registerTopLevelTask(new MultiTask(tr("Download remote documents"), tasks));
+
     QDialog::accept();
 }
 
@@ -249,12 +208,6 @@ DownloadRemoteFileDialog::~DownloadRemoteFileDialog() {
     delete ui;
 }
 
-bool DownloadRemoteFileDialog::isDefaultDb(const QString& dbId){
-    RemoteDBRegistry& registry = RemoteDBRegistry::getRemoteDBRegistry();
-
-    return registry.hasDbId(dbId);
-}
-
 bool DownloadRemoteFileDialog::isNcbiDb(const QString &dbId) const {
     return dbId == RemoteDBRegistry::GENBANK_DNA || dbId == RemoteDBRegistry::GENBANK_PROTEIN;
 }
@@ -266,32 +219,8 @@ void DownloadRemoteFileDialog::sl_onDbChanged(){
 
     ui->chbForceDownloadSequence->setVisible(isNcbiDb(dbId));
 
-    if (isDefaultDb(dbId)) {
-        RemoteDBRegistry& registry = RemoteDBRegistry::getRemoteDBRegistry();
-        hint = description = registry.getHint(dbId);
-        ui->dasBox->hide();
-        adjustSize();
-    } else {
-        DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-        if (dasRegistry){
-            const DASSource& dasSource = dasRegistry->findById(dbId);
-            if (dasSource.isValid()){
-                description = dasSource.getDescription();
-                hint = dasSource.getHint();
-
-                ui->dasfeaturesWidget->clear();
-                const QList<DASSource>& featureSources = dasRegistry->getFeatureSourcesByType(dasSource.getReferenceType());
-                foreach(const DASSource& s, featureSources){
-                    QListWidgetItem* item = new QListWidgetItem(s.getName());
-                    item->setData(Qt::UserRole, s.getId());
-                    item->setToolTip(s.getHint());
-                    item->setCheckState(Qt::Checked);
-                    ui->dasfeaturesWidget->addItem(item);
-                }
-            }
-        }
-        ui->dasBox->show();
-    }
+    RemoteDBRegistry& registry = RemoteDBRegistry::getRemoteDBRegistry();
+    hint = description = registry.getHint(dbId);
 
     setupHintText( hint );
     ui->idLineEdit->setToolTip(description);
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
index 8c1df36..c36846e 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
@@ -66,7 +66,6 @@ public:
 
 private:
     void setSaveFilename();
-    bool isDefaultDb(const QString& dbId);
     bool isNcbiDb(const QString& dbId) const;
     void setupHintText( const QString &sampleText = QString( ) );
 
diff --git a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
index 6d2d6e4..2797682 100644
--- a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
@@ -40,7 +40,7 @@ EditQualifierDialog::EditQualifierDialog(QWidget* p, const U2Qualifier& q, bool
 {
     ui = new Ui_EditQualifierDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126628");
+    new HelpButton(this, ui->buttonBox, "17466026");
     
     if(true == ro){
         this->setWindowTitle(tr("View Qualifier"));
diff --git a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
index 05144e7..8f355aa 100644
--- a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
@@ -70,7 +70,7 @@ EditSequenceDialogController::EditSequenceDialogController(const EditSequencDial
 {
     ui = new Ui_EditSequenceDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126611");
+    new HelpButton(this, ui->buttonBox, "17466009");
 
     connect(ui->browseButton, SIGNAL(clicked()), SLOT(sl_browseButtonClicked()));
     addSeqpasterWidget();
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
index 349bbb4..45bbf0d 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
@@ -43,7 +43,7 @@ ExportAnnotationsDialog::ExportAnnotationsDialog( const QString &filename, QWidg
     : QDialog( parent ), ui( new Ui::ExportAnnotationsDialog( ) )
 {
     ui->setupUi( this );
-    new HelpButton(this, ui->buttonBox, "16126633");
+    new HelpButton(this, ui->buttonBox, "17466031");
 
     ui->fileNameEdit->setText( filename );
     connect( ui->chooseFileButton, SIGNAL( clicked( ) ), SLOT( sl_onChooseFileButtonClicked( ) ) );
diff --git a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
index c6731c8..3874df3 100644
--- a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
@@ -45,7 +45,7 @@ ExportDocumentDialogController::ExportDocumentDialogController(Document* d, QWid
 {
     ui = new Ui_ExportDocumentDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126558");
+    new HelpButton(this, ui->buttonBox, "17465956");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -69,7 +69,7 @@ ExportDocumentDialogController::ExportDocumentDialogController(GObject *object,
             ->getSupportedDocumentFileExtensions().first());
     }
     ui->fileNameEdit->setText(fileName);
-    new HelpButton(this, ui->buttonBox, "16126558");
+    new HelpButton(this, ui->buttonBox, "17465956");
 }
 
 void ExportDocumentDialogController::initSaveController(const QList<GObject *> &objects,
diff --git a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
index 1da219f..f22bf2a 100644
--- a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
@@ -214,28 +214,28 @@ void ExportImageDialog::init() {
 
     switch (source) {
     case WD:
-        new HelpButton(this, ui->buttonBox, "16126276");
+        new HelpButton(this, ui->buttonBox, "17466362");
         break;
     case CircularView:
-        new HelpButton(this, ui->buttonBox, "16126637");
+        new HelpButton(this, ui->buttonBox, "17466035");
         break;
     case MSA:
-        new HelpButton(this, ui->buttonBox, "16126707");
+        new HelpButton(this, ui->buttonBox, "17466105");
         break;
     case SequenceView:
         new HelpButton(this, ui->buttonBox, "");
         break;
     case AssemblyView:
-        new HelpButton(this, ui->buttonBox, "16126743");
+        new HelpButton(this, ui->buttonBox, "17466141");
         break;
     case PHYTreeView:
-        new HelpButton(this, ui->buttonBox, "16126771");
+        new HelpButton(this, ui->buttonBox, "17466169");
         break;
     case DotPlot:
-        new HelpButton(this, ui->buttonBox, "16126668");
+        new HelpButton(this, ui->buttonBox, "17466066");
         break;
     case MolView:
-        new HelpButton(this, ui->buttonBox, "16126651");
+        new HelpButton(this, ui->buttonBox, "17466049");
         break;
     default:
         FAIL("Can't find help Id",);
@@ -282,7 +282,7 @@ void ExportImageDialog::init() {
     if (settingsWidget == NULL) {
         ui->settingsGroupBox->hide();
     } else {
-        ui->settingsGroupBox->setTitle( tr( ui->settingsGroupBox->title().prepend(exportController->getExportDescription()).toLatin1().data() ) );
+        //ui->settingsGroupBox->setTitle( tr( ui->settingsGroupBox->title().prepend(exportController->getExportDescription()).toLatin1().data() ) );
         ui->settingsLayout->addWidget(settingsWidget);
     }
 
diff --git a/src/corelibs/U2Gui/src/util/GUIUtils.cpp b/src/corelibs/U2Gui/src/util/GUIUtils.cpp
index fcc0765..c716d98 100644
--- a/src/corelibs/U2Gui/src/util/GUIUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/GUIUtils.cpp
@@ -67,16 +67,6 @@ QAction* GUIUtils::findActionByData(QList<QAction*> actions, const QString& data
         return NULL;
 }
 
-QAction *GUIUtils::findActionByTooltip(QList<QAction *> actions, const QString &tooltip) {
-    foreach (QAction* action, actions) {
-        if (action->toolTip() == tooltip) {
-            return action;
-        }
-    }
-    return NULL;
-}
-
-
 QAction* GUIUtils::findAction(const QList<QAction*>& actions, const QString& name) {
     foreach(QAction* a, actions) {
         const QString& aname =  a->objectName();
diff --git a/src/corelibs/U2Gui/src/util/GUIUtils.h b/src/corelibs/U2Gui/src/util/GUIUtils.h
index 63f77e7..a5d5dab 100644
--- a/src/corelibs/U2Gui/src/util/GUIUtils.h
+++ b/src/corelibs/U2Gui/src/util/GUIUtils.h
@@ -47,7 +47,6 @@ public:
 
     static QAction* getCheckedAction(QList<QAction*> actions);
     static QAction* findActionByData(QList<QAction*> actions, const QString& data);
-    static QAction* findActionByTooltip(QList<QAction*> actions, const QString& tooltip);
     
     static QAction* findActionAfter(const QList<QAction*>& actions, const QString& name);
 
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
index 476c82f..08960aa 100644
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
@@ -49,7 +49,7 @@ const QString AceImportDialog::EXTENSION = ".ugenedb";
 AceImportDialog::AceImportDialog(const QVariantMap& _settings) :
     ImportDialog(_settings) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126754");
+    new HelpButton(this, buttonBox, "17466152");
 
     QString src = settings.value(AceImporter::SRC_URL).toString();
     leSource->setText(src);
diff --git a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
index f033245..db1309d 100644
--- a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
+++ b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
@@ -21,12 +21,12 @@
 
 #include "ObjectViewTreeController.h"
 
-#include <U2Core/ProjectModel.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/ProjectModel.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2SafePoints.h>
 
-
 #include <QtCore/QEvent>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QMenu>
@@ -348,6 +348,7 @@ void ObjectViewTreeController::sl_onTreeCurrentChanged(QTreeWidgetItem * current
 
 
 void ObjectViewTreeController::sl_activateView() {
+    GCOUNTER(cvar, tvar, "Bookmarks::Bookmark Activated");
     OVTViewItem* vi = currentViewItem();
     if (vi!=NULL && vi->viewWindow!=NULL) { //raise existing view, no state change
         AppContext::getMainWindow()->getMDIManager()->activateWindow(vi->viewWindow);
@@ -384,6 +385,7 @@ void ObjectViewTreeController::makeViewPersistent(GObjectViewWindow* w) {
 }
 
 void ObjectViewTreeController::sl_addState() {
+    GCOUNTER(cvar, tvar, "Bookmarks::Add New Bookmark");
     OVTViewItem* vi = activeViewItem();
     SAFE_POINT(vi != NULL, QString("Can't find view item to add state!"),);
     SAFE_POINT(vi->viewWindow != NULL, QString("View window is NULL: %1").arg(vi->viewName),);
@@ -406,6 +408,7 @@ void ObjectViewTreeController::makeViewTransient(GObjectViewWindow* w) {
 }
 
 void ObjectViewTreeController::sl_removeState() {
+    GCOUNTER(cvar, tvar, "Bookmarks::Remove Bookmark");
     OVTStateItem* si = currentStateItem();
     Project* p = AppContext::getProject();
     if (si!=NULL) {
@@ -424,6 +427,7 @@ void ObjectViewTreeController::sl_removeState() {
 }
 
 void ObjectViewTreeController::sl_renameState() {
+    GCOUNTER(cvar, tvar, "Bookmarks::Rename Bookmark");
     OVTStateItem* si = currentStateItem();
     SAFE_POINT(si != NULL, QString("Can't find state item to rename!"),);
 
diff --git a/src/corelibs/U2Gui/src/util/RangeSelector.cpp b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
index 6cace9b..922aac2 100644
--- a/src/corelibs/U2Gui/src/util/RangeSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
@@ -240,7 +240,7 @@ MultipleRangeSelector::MultipleRangeSelector(QWidget* _parent, const QVector<U2R
 
     ui = new Ui_RangeSelectionDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126603");
+    new HelpButton(this, ui->buttonBox, "17466001");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Go"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
index 5ae8927..11571c9 100644
--- a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
@@ -48,7 +48,7 @@ RemovePartFromSequenceDialogController::RemovePartFromSequenceDialogController(U
 {
     ui = new Ui_RemovePartFromSequenceDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126611");
+    new HelpButton(this, ui->buttonBox, "17466009");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
index 5f1a1f2..480172a 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
@@ -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, "16126284");
+    new HelpButton(this, ui->buttonBox, "17466370");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Done"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
index fd31c2d..ba6262c 100644
--- a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
@@ -44,7 +44,7 @@ SearchGenbankSequenceDialogController::SearchGenbankSequenceDialogController(QWi
 {
     ui = new Ui_SearchGenbankSequenceDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126584");
+    new HelpButton(this, ui->buttonBox, "17465982");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Download"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
index 054cb39..181bf3b 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
@@ -64,7 +64,7 @@ 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)
+    proxyModel(NULL), markActiveView(NULL), objectIsBeingRecycled(NULL), renameInProgress(false)
 {
     Project *project = AppContext::getProject();
     SAFE_POINT(NULL != project, "NULL project", );
@@ -625,6 +625,7 @@ 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);
 }
@@ -897,6 +898,14 @@ 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);
     CHECK(NULL != tree, false);
@@ -906,7 +915,7 @@ bool ProjectTreeController::eventFilter(QObject *o, QEvent *e) {
         CHECK(NULL != kEvent, false);
         int key = kEvent->key();
         bool hasSelection = !documentSelection.isEmpty() || !objectSelection.isEmpty() || !folderSelection.isEmpty();
-        if (key == Qt::Key_F2 && hasSelection) {
+        if (!renameInProgress && isHotkeyPressed(key) && hasSelection) {
             if (renameAction->isEnabled()) {
                 sl_onRename();
             }
@@ -925,8 +934,11 @@ 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;
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
index 61c01a1..b2a906c 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
@@ -179,6 +179,7 @@ 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/ProjectUtils.cpp b/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
index a34d36b..67d16a4 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
@@ -23,6 +23,7 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/Folder.h>
+#include <U2Core/LoadDocumentTask.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2SafePoints.h>
@@ -74,4 +75,28 @@ bool ProjectUtils::isSystemFolder(const QString &folderPath) {
     return folderPath == U2ObjectDbi::ROOT_FOLDER || folderPath == RECYCLE_BIN_FOLDER_PATH;
 }
 
+Document * ProjectUtils::findDocument(const QString &url) {
+    Project *project = AppContext::getProject();
+    CHECK(NULL != project, NULL);
+    return project->findDocumentByURL(url);
+}
+
+bool ProjectUtils::hasLoadedDocument(const QString &url) {
+    const Document *doc = findDocument(url);
+    CHECK(NULL != doc, false);
+    return doc->isLoaded();
+}
+
+bool ProjectUtils::hasUnloadedDocument(const QString &url) {
+    const Document *doc = findDocument(url);
+    CHECK(NULL != doc, false);
+    return !doc->isLoaded();
+}
+
+LoadUnloadedDocumentTask * ProjectUtils::findLoadTask(const QString &url) {
+    Document *doc = findDocument(url);
+    CHECK(NULL != doc, NULL);
+    return LoadUnloadedDocumentTask::findActiveLoadingTask(doc);
+}
+
 } // U2
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectUtils.h b/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
index c589141..20bdde2 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
@@ -28,6 +28,7 @@ namespace U2 {
 
 class Document;
 class Folder;
+class LoadUnloadedDocumentTask;
 
 class U2GUI_EXPORT ProjectUtils {
 public:
@@ -42,6 +43,11 @@ public:
 
     static bool isSystemFolder(const QString &folderPath);
 
+    static Document * findDocument(const QString &url);
+    static bool hasLoadedDocument(const QString &url);
+    static bool hasUnloadedDocument(const QString &url);
+    static LoadUnloadedDocumentTask * findLoadTask(const QString &url);
+
     static const int MAX_OBJS_TO_SHOW_LOAD_PROGRESS;
     static const QString RECYCLE_BIN_FOLDER_PATH;
 };
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
index 37a86c3..6d235e6 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
@@ -356,7 +356,7 @@ QVariant ProjectViewFilterModel::getObjectData(const QModelIndex &index, int rol
             const bool isDatabase = parentDoc->isDatabaseConnection();
             const QString itemDocInfo = parentDoc->getName() + (isDatabase ? ": " + objectPath : QString());
             const QString objectName = getStyledObjectName(object, toGroup(index.parent()));
-            result = QString("%1<p style=\"margin-top:0px;font-size:9px;\">%2</p>").arg(objectName).arg(itemDocInfo);
+            result = QString("%1<p style=\"margin-top:0px;font-size:small;\">%2</p>").arg(objectName).arg(itemDocInfo);
         }
     }
     return result;
diff --git a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
index d3b90e0..8a28f97 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, "16126931");
+    new HelpButton(this, buttonBox, "17466329");
     init(baseFolder, options);
 }
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
index f4ebadc..6637dd8 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
@@ -45,7 +45,7 @@ EditConnectionDialog::EditConnectionDialog(QWidget *parent, const QString &dbiUr
     ui(new Ui::EditConnectionDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126929");
+    new HelpButton(this, ui->buttonBox, "17466327");
     adjustSize();
     init(dbiUrl, connectionName, userName);
 }
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
index 4afb726..d832a12 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
@@ -61,7 +61,7 @@ ImportToDatabaseDialog::ImportToDatabaseDialog(Document *dbConnection, const QSt
     baseFolder(U2DbiUtils::makeFolderCanonical(defaultFolder))
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126931");
+    new HelpButton(this, ui->buttonBox, "17466329");
     init();
     connectSignals();
     updateState();
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
index 1a8b9c8..cc319c1 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
@@ -32,7 +32,7 @@ ItemToImportEditDialog::ItemToImportEditDialog(const QString &item, const QStrin
     ui(new Ui::ItemToImportEditDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126931");
+    new HelpButton(this, ui->buttonBox, "17466329");
     init(item, folder, options);
 }
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
index 48ff235..f7ccfbb 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
@@ -84,7 +84,7 @@ SharedConnectionsDialog::SharedConnectionsDialog(QWidget *parent) :
     ui(new Ui::SharedConnectionsDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126929");
+    new HelpButton(this, ui->buttonBox, "17466327");
 
     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), "16126929");
+        HelpButton(question.data(), question->button(QMessageBox::Help), "17466327");
         question->setDefaultButton(QMessageBox::Cancel);
         const int dialogResult = question->exec();
         CHECK(!question.isNull(), true);
diff --git a/src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui b/src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui
index b148b48..945fa05 100644
--- a/src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui
+++ b/src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>533</width>
-    <height>389</height>
+    <width>480</width>
+    <height>233</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -143,55 +143,6 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="dasBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>130</height>
-      </size>
-     </property>
-     <property name="title">
-      <string>DAS features</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <item>
-       <widget class="QListWidget" name="dasfeaturesWidget">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>0</width>
-          <height>60</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="baseSize">
-         <size>
-          <width>0</width>
-          <height>0</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <widget class="QLabel" name="hintLabel">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
diff --git a/src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui b/src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui
index 1da115d..84c1dc2 100644
--- a/src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui
+++ b/src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui
@@ -38,7 +38,7 @@
       </sizepolicy>
      </property>
      <property name="title">
-      <string notr="true"> export settings</string>
+      <string notr="true">Export settings</string>
      </property>
      <layout class="QVBoxLayout" name="settingsLayout">
       <property name="spacing">
@@ -56,9 +56,6 @@
       <string>Export to file</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_3">
-      <property name="spacing">
-       <number>0</number>
-      </property>
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
@@ -120,7 +117,7 @@
           <property name="minimumSize">
            <size>
             <width>70</width>
-            <height>0</height>
+            <height>29</height>
            </size>
           </property>
           <property name="text">
diff --git a/src/corelibs/U2Gui/transl/english.ts b/src/corelibs/U2Gui/transl/english.ts
index 3e56a0f..d027b91 100644
--- a/src/corelibs/U2Gui/transl/english.ts
+++ b/src/corelibs/U2Gui/transl/english.ts
@@ -804,7 +804,7 @@
         <translation type="obsolete">Export settings</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="59"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="56"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
@@ -814,33 +814,33 @@
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="221"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="237"/>
         <source>DPI</source>
         <translation>DPI</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="264"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="316"/>
         <source>Width</source>
         <translation>Width</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="292"/>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="352"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="296"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="344"/>
         <source>px</source>
         <translation>px</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="372"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="397"/>
         <source>Hint</source>
         <translation>Hint</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="321"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="268"/>
         <source>Height</source>
         <translation>Height</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="155"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="158"/>
         <source>Quality</source>
         <translation>Quality</translation>
     </message>
@@ -1666,54 +1666,50 @@ complement(5..15)</translation>
 <context>
     <name>U2::CreateDocumentFromTextDialogController</name>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="88"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="71"/>
         <source>Select file to save...</source>
         <translation>Select file to save...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="107"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="90"/>
         <source>No path specified</source>
         <translation>No path specified</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="120"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="103"/>
         <source>Sequence name is empty</source>
         <translation>Sequence name is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="102"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="85"/>
         <source>Filename is empty</source>
         <translation>File name is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="73"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="56"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="74"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="57"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="141"/>
         <source>Error</source>
-        <translation>Error</translation>
+        <translation type="vanished">Error</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="141"/>
         <source>The project cannot be created</source>
-        <translation>The project cannot be created</translation>
+        <translation type="vanished">The project cannot be created</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="159"/>
         <source>warning</source>
-        <translation>warning</translation>
+        <translation type="vanished">warning</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="159"/>
         <source>The document already in the project</source>
-        <translation>The document already in the project</translation>
+        <translation type="vanished">The document already in the project</translation>
     </message>
 </context>
 <context>
@@ -1730,6 +1726,19 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::CreateSequenceFromTextAndOpenViewTask</name>
+    <message>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="40"/>
+        <source>Create sequence from raw data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="55"/>
+        <source>Can't create a project</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::DialogUtils</name>
     <message>
         <location filename="../src/util/DialogUtils.cpp" line="42"/>
@@ -2078,24 +2087,24 @@ complement(5..15)</translation>
 <context>
     <name>U2::GUIUtils</name>
     <message>
+        <location filename="../src/util/GUIUtils.cpp" line="148"/>
         <location filename="../src/util/GUIUtils.cpp" line="158"/>
-        <location filename="../src/util/GUIUtils.cpp" line="168"/>
-        <location filename="../src/util/GUIUtils.cpp" line="186"/>
+        <location filename="../src/util/GUIUtils.cpp" line="176"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
+        <location filename="../src/util/GUIUtils.cpp" line="148"/>
         <source>Document URL is empty!</source>
         <translation>Document URL is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="168"/>
+        <location filename="../src/util/GUIUtils.cpp" line="158"/>
         <source>Unable to launch default web browser.</source>
         <translation>Unable to launch default web browser.</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="186"/>
+        <location filename="../src/util/GUIUtils.cpp" line="176"/>
         <source>Please specify the browser executable</source>
         <translation>Please specify the browser executable</translation>
     </message>
@@ -2153,6 +2162,14 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::ImportSequenceFromRawDataTask</name>
+    <message>
+        <location filename="../src/util/ImportSequenceFromRawDataTask.cpp" line="31"/>
+        <source>Import sequence from raw data</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::ImportToDatabaseDialog</name>
     <message>
         <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="98"/>
@@ -2479,6 +2496,35 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::PasteFactory</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="73"/>
+        <source>Unable to handle so huge data in clipboard.</source>
+        <translation type="unfinished"></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>
+    </message>
+</context>
+<context>
+    <name>U2::PasteTextTask</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="205"/>
+        <source>Cannot detect file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::PasteUrlsTask</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="179"/>
+        <source>Pasting of directories is not supported:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PositionSelector</name>
     <message>
         <location filename="../src/util/PositionSelector.cpp" line="51"/>
@@ -2724,13 +2770,13 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="305"/>
-        <location filename="../src/util/RegionSelector.cpp" line="322"/>
+        <location filename="../src/util/RegionSelector.cpp" line="326"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="310"/>
-        <location filename="../src/util/RegionSelector.cpp" line="328"/>
+        <location filename="../src/util/RegionSelector.cpp" line="313"/>
+        <location filename="../src/util/RegionSelector.cpp" line="332"/>
         <source>-</source>
         <translation>-</translation>
     </message>
diff --git a/src/corelibs/U2Gui/transl/russian.ts b/src/corelibs/U2Gui/transl/russian.ts
index b088a45..64b7d80 100644
--- a/src/corelibs/U2Gui/transl/russian.ts
+++ b/src/corelibs/U2Gui/transl/russian.ts
@@ -804,7 +804,7 @@
         <translation type="obsolete">Настройки экспорта</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="59"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="56"/>
         <source>Export to file</source>
         <translation>Экспортировать в файл</translation>
     </message>
@@ -814,33 +814,33 @@
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="221"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="237"/>
         <source>DPI</source>
         <translation>DPI</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="264"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="316"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="292"/>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="352"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="296"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="344"/>
         <source>px</source>
         <translation>px</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="372"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="397"/>
         <source>Hint</source>
         <translation>Подсказка</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="321"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="268"/>
         <source>Height</source>
         <translation>Высота</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="155"/>
+        <location filename="../src/util/ui/ExportImageDialog.ui" line="158"/>
         <source>Quality</source>
         <translation>Качество</translation>
     </message>
@@ -1666,52 +1666,48 @@ complement(5..15)</translation>
 <context>
     <name>U2::CreateDocumentFromTextDialogController</name>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="88"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="71"/>
         <source>Select file to save...</source>
         <translation>Сохранение файла...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="73"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="56"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="74"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="57"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="107"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="90"/>
         <source>No path specified</source>
         <translation>Путь не задан</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="141"/>
         <source>Error</source>
-        <translation>Ошибка</translation>
+        <translation type="vanished">Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="141"/>
         <source>The project cannot be created</source>
-        <translation>Проект не может быть создан</translation>
+        <translation type="vanished">Проект не может быть создан</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="159"/>
         <source>warning</source>
-        <translation>Внимание</translation>
+        <translation type="vanished">Внимание</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="159"/>
         <source>The document already in the project</source>
-        <translation>Документ уже открыт в проекте</translation>
+        <translation type="vanished">Документ уже открыт в проекте</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="120"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="103"/>
         <source>Sequence name is empty</source>
         <translation>Имя последовательности пусто</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="102"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="85"/>
         <source>Filename is empty</source>
         <translation>Не задано имя файла</translation>
     </message>
@@ -1730,6 +1726,19 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::CreateSequenceFromTextAndOpenViewTask</name>
+    <message>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="40"/>
+        <source>Create sequence from raw data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="55"/>
+        <source>Can't create a project</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::DialogUtils</name>
     <message>
         <location filename="../src/util/DialogUtils.cpp" line="42"/>
@@ -2078,24 +2087,24 @@ complement(5..15)</translation>
 <context>
     <name>U2::GUIUtils</name>
     <message>
+        <location filename="../src/util/GUIUtils.cpp" line="148"/>
         <location filename="../src/util/GUIUtils.cpp" line="158"/>
-        <location filename="../src/util/GUIUtils.cpp" line="168"/>
-        <location filename="../src/util/GUIUtils.cpp" line="186"/>
+        <location filename="../src/util/GUIUtils.cpp" line="176"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
+        <location filename="../src/util/GUIUtils.cpp" line="148"/>
         <source>Document URL is empty!</source>
         <translation>Пустая ссылка!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="168"/>
+        <location filename="../src/util/GUIUtils.cpp" line="158"/>
         <source>Unable to launch default web browser.</source>
         <translation>Не удалось запустить браузер Интернет, установленный по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="186"/>
+        <location filename="../src/util/GUIUtils.cpp" line="176"/>
         <source>Please specify the browser executable</source>
         <translation>Не указано приложение браузера</translation>
     </message>
@@ -2153,6 +2162,14 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::ImportSequenceFromRawDataTask</name>
+    <message>
+        <location filename="../src/util/ImportSequenceFromRawDataTask.cpp" line="31"/>
+        <source>Import sequence from raw data</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::ImportToDatabaseDialog</name>
     <message>
         <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="98"/>
@@ -2478,6 +2495,35 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::PasteFactory</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="73"/>
+        <source>Unable to handle so huge data in clipboard.</source>
+        <translation type="unfinished"></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>
+    </message>
+</context>
+<context>
+    <name>U2::PasteTextTask</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="205"/>
+        <source>Cannot detect file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::PasteUrlsTask</name>
+    <message>
+        <location filename="../src/PasteController.cpp" line="179"/>
+        <source>Pasting of directories is not supported:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PositionSelector</name>
     <message>
         <location filename="../src/util/PositionSelector.cpp" line="51"/>
@@ -2723,13 +2769,13 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="305"/>
-        <location filename="../src/util/RegionSelector.cpp" line="322"/>
+        <location filename="../src/util/RegionSelector.cpp" line="326"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="310"/>
-        <location filename="../src/util/RegionSelector.cpp" line="328"/>
+        <location filename="../src/util/RegionSelector.cpp" line="313"/>
+        <location filename="../src/util/RegionSelector.cpp" line="332"/>
         <source>-</source>
         <translation>-</translation>
     </message>
diff --git a/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp b/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
index b81b784..401916f 100644
--- a/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
@@ -56,7 +56,7 @@ const Descriptor BaseActorCategories::CATEGORY_ASSEMBLY() {
 }
 
 const Descriptor BaseActorCategories::CATEGORY_NGS_BASIC() {
-    return Descriptor("ngs_base", tr("NGS: Basic"), "");
+    return Descriptor("ngs_base", tr("NGS: Basic Functions"), "");
 }
 
 const Descriptor BaseActorCategories::CATEGORY_NGS_ALIGN_SHORT_READS() {
@@ -72,7 +72,7 @@ const Descriptor BaseActorCategories::CATEGORY_VARIATION_ANALYSIS() {
 }
 
 const Descriptor BaseActorCategories::CATEGORY_TRANSCRIPTION() {
-    return Descriptor("tr", tr("Transcription Factor"), "");
+    return Descriptor("tr", tr("Transcription Factor Binding Sites"), "");
 }
 
 const Descriptor BaseActorCategories::CATEGORY_SCRIPT() {
diff --git a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
index 0f300fa..0b5ef9a 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
@@ -578,7 +578,8 @@ void RunCmdlineWorkflowTask::prepare() {
 
     proc->start(cmdlineUgenePath, args);
 #if (defined(Q_OS_WIN32) || defined(Q_OS_WINCE))
-    processLogPrefix = QString("process:%1>").arg(proc->pid()->dwProcessId);
+    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
diff --git a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
index 154c5e8..c6a57fb 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
@@ -1085,9 +1085,9 @@ bool checkDbConnectionAndFixProblems(const QString &dbUrl, ProblemList &problemL
         problemList << problemMsg;
         return false;
     } else {
-        for (ProblemList::iterator i = problemList.begin(); i != problemList.end(); ++i) {
-            if (i->message == problemMsg.message && i->type == problemMsg.type) {
-                problemList.erase(i);
+        foreach(Problem problem, problemList) {
+            if (problem.message == problemMsg.message && problem.type == problemMsg.type) {
+                problemList.removeAll(problem);
             }
         }
         return true;
diff --git a/src/corelibs/U2Lang/src/support/serialize/Utils.cpp b/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
index 500efa2..aa284cb 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
@@ -26,7 +26,7 @@
 namespace U2 {
 namespace WorkflowSerialize {
 
-FlowGraph::FlowGraph( const QList<QPair<Port*, Port*> >& d ) : dataflowLinks(d) {
+FlowGraph::FlowGraph(const QList<QPair<Port*, Port*> >& d) : dataflowLinks(d), findRecursion(0) {
     removeDuplicates();
     for(int i = 0; i < dataflowLinks.size(); ++i) {
         const QPair<Port*, Port*> & pair = dataflowLinks.at(i);
diff --git a/src/corelibs/U2Lang/transl/english.ts b/src/corelibs/U2Lang/transl/english.ts
index 8e92a82..48fd522 100644
--- a/src/corelibs/U2Lang/transl/english.ts
+++ b/src/corelibs/U2Lang/transl/english.ts
@@ -1091,7 +1091,7 @@
     <message>
         <location filename="../src/support/serialize/HRVisualSerializer.cpp" line="180"/>
         <source>Undefined data-flow link: '%1'. Define it in actor-bindings</source>
-        <translation type="unfinished">Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
+        <translation>Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
     </message>
 </context>
 <context>
@@ -1530,8 +1530,8 @@
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="59"/>
-        <source>NGS: Basic</source>
-        <translation>NGS: Basic</translation>
+        <source>NGS: Basic Functions</source>
+        <translation>NGS: Basic Functions</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="63"/>
@@ -1555,8 +1555,8 @@
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="75"/>
-        <source>Transcription Factor</source>
-        <translation>Transcription Factor</translation>
+        <source>Transcription Factor Binding Sites</source>
+        <translation>Transcription Factor Binding Sites</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="79"/>
@@ -2159,17 +2159,17 @@
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="122"/>
         <source>Required parameter has no datasets specified: %1</source>
-        <translation type="unfinished">Required parameter has no datasets specified: %1</translation>
+        <translation>Required parameter has no datasets specified: %1</translation>
     </message>
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="129"/>
         <source>Required parameter has no input urls specified: %1</source>
-        <translation type="unfinished">Required parameter has no input urls specified: %1</translation>
+        <translation>Required parameter has no input urls specified: %1</translation>
     </message>
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="134"/>
         <source>Required parameter %1 has empty dataset: %2</source>
-        <translation type="unfinished">Required parameter %1 has empty dataset: %2</translation>
+        <translation>Required parameter %1 has empty dataset: %2</translation>
     </message>
 </context>
 <context>
diff --git a/src/corelibs/U2Lang/transl/russian.ts b/src/corelibs/U2Lang/transl/russian.ts
index 6d5cf78..a4c2cf3 100644
--- a/src/corelibs/U2Lang/transl/russian.ts
+++ b/src/corelibs/U2Lang/transl/russian.ts
@@ -1091,7 +1091,7 @@
     <message>
         <location filename="../src/support/serialize/HRVisualSerializer.cpp" line="180"/>
         <source>Undefined data-flow link: '%1'. Define it in actor-bindings</source>
-        <translation type="unfinished">Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
+        <translation>Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
     </message>
 </context>
 <context>
@@ -1506,7 +1506,7 @@
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="39"/>
         <source>Data Converters</source>
-        <translation>Конвертация данных</translation>
+        <translation>Преобразование данных</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="43"/>
@@ -1526,42 +1526,42 @@
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="55"/>
         <source>DNA Assembly</source>
-        <translation>Сборка ДНК</translation>
+        <translation>Сборка последовательностей ДНК</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="59"/>
-        <source>NGS: Basic</source>
-        <translation>NGS: Базовые</translation>
+        <source>NGS: Basic Functions</source>
+        <translation>NGS: основные функции</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="63"/>
         <source>NGS: Align Short Reads</source>
-        <translation>NGS: Выравнивание коротких ридов</translation>
+        <translation>NGS: выравнивание коротких прочтений</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="67"/>
         <source>NGS: RNA-Seq Analysis</source>
-        <translation>NGS: Анализ RNA-Seq</translation>
+        <translation>NGS: анализ данных RNA-Seq</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="71"/>
         <source>NGS: Variant Analysis</source>
-        <translation>NGS: Анализ вариаций</translation>
+        <translation>NGS: анализ вариабельных позиций</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="100"/>
         <source>NGS: ChIP-Seq Analysis</source>
-        <translation>NGS: Анализ ChIP-Seq</translation>
+        <translation>NGS: анализ данных ChIP-Seq</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="75"/>
-        <source>Transcription Factor</source>
-        <translation>Фактор транскрипции</translation>
+        <source>Transcription Factor Binding Sites</source>
+        <translation>Сайты связывания транскрипционных факторов</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="79"/>
         <source>Custom Elements with Script</source>
-        <translation>Элементы пользователя со скриптами</translation>
+        <translation>Пользовательские элементы</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="83"/>
@@ -1576,7 +1576,7 @@
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="91"/>
         <source>Includes</source>
-        <translation>Включения</translation>
+        <translation>Дополнительные инструменты</translation>
     </message>
     <message>
         <location filename="../src/library/BaseActorCategories.cpp" line="96"/>
@@ -2159,17 +2159,17 @@
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="122"/>
         <source>Required parameter has no datasets specified: %1</source>
-        <translation type="unfinished">Required parameter has no datasets specified: %1</translation>
+        <translation>Required parameter has no datasets specified: %1</translation>
     </message>
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="129"/>
         <source>Required parameter has no input urls specified: %1</source>
-        <translation type="unfinished">Required parameter has no input urls specified: %1</translation>
+        <translation>Required parameter has no input urls specified: %1</translation>
     </message>
     <message>
         <location filename="../src/model/url_attribute/URLAttribute.cpp" line="134"/>
         <source>Required parameter %1 has empty dataset: %2</source>
-        <translation type="unfinished">Required parameter %1 has empty dataset: %2</translation>
+        <translation>Required parameter %1 has empty dataset: %2</translation>
     </message>
 </context>
 <context>
diff --git a/src/corelibs/U2Private/src/AppContextImpl.h b/src/corelibs/U2Private/src/AppContextImpl.h
index 239b389..bf03d74 100644
--- a/src/corelibs/U2Private/src/AppContextImpl.h
+++ b/src/corelibs/U2Private/src/AppContextImpl.h
@@ -92,7 +92,6 @@ public:
         alignmentAlgorithmsRegistry = NULL;
         dpr = NULL;
         workingDirectoryPath = "";
-        dsr = NULL;
         str = NULL;
         credentialsAsker = NULL;
         passwordStorage = NULL;
@@ -171,8 +170,6 @@ public:
 
     void setDataPathRegistry( U2DataPathRegistry* _dpr) { assert( dpr == NULL || _dpr == NULL ); dpr = _dpr;}
 
-    void setDASSourceRegistry( DASSourceRegistry* _dsr) { assert( dsr == NULL || _dsr == NULL ); dsr = _dsr;}
-
     void setScriptingToolRegistry( ScriptingToolRegistry* _str) { assert( str == NULL || _str == NULL ); str = _str;}
 
     void setProtocolInfoRegistry( ProtocolInfoRegistry * pr ) { assert( NULL == protocolInfoRegistry || NULL == pr );
@@ -403,7 +400,6 @@ protected:
     virtual AppFileStorage*                 _getAppFileStorage() const { return appFileStorage; }
     virtual AlignmentAlgorithmsRegistry*      _getAlignmentAlgorithmsRegistry() const { return alignmentAlgorithmsRegistry; }
     virtual U2DataPathRegistry*             _getDataPathRegistry() const { return dpr; }
-    virtual DASSourceRegistry*              _getDASSourceRegistry() const { return dsr; }
     virtual ScriptingToolRegistry*          _getScriptingToolRegistry() const { return str; }
     virtual CredentialsAsker*               _getCredentialsAsker() const { return credentialsAsker; }
     virtual PasswordStorage*                _getPasswordStorage() const { return passwordStorage; }
@@ -480,7 +476,6 @@ private:
     AppFileStorage *appFileStorage;
     AlignmentAlgorithmsRegistry* alignmentAlgorithmsRegistry;
     U2DataPathRegistry *dpr;
-    DASSourceRegistry *dsr;
     ScriptingToolRegistry *str;
     CredentialsAsker* credentialsAsker;
     PasswordStorage* passwordStorage;
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
index 5078fea..1fa22e0 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
@@ -36,6 +36,7 @@ namespace U2 {
 
 class CrashHandlerPrivateWin : public CrashHandlerPrivate {
 public:
+    CrashHandlerPrivateWin() {};
     ~CrashHandlerPrivateWin();
 
     void setupHandler();
diff --git a/src/corelibs/U2Private/transl/english.ts b/src/corelibs/U2Private/transl/english.ts
index 92f1d75..5e9bdbf 100644
--- a/src/corelibs/U2Private/transl/english.ts
+++ b/src/corelibs/U2Private/transl/english.ts
@@ -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="656"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
         <source>New</source>
         <translation>New</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="660"/>
         <source>Prepared</source>
         <translation>Prepared</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="660"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="662"/>
         <source>Running</source>
         <translation>Running</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="662"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="664"/>
         <source>Finished</source>
         <translation>Finished</translation>
     </message>
@@ -353,32 +353,32 @@ By default, loglevel="ERROR".</translation>
         <translation>Subtask {%1} is failed: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="363"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="365"/>
         <source>Waiting for resource '%1', count: %2</source>
         <translation>Waiting for resource '%1', count: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="378"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="380"/>
         <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="379"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="381"/>
         <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="386"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="388"/>
         <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="389"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="391"/>
         <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="522"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="524"/>
         <source>Registering new task: %1</source>
         <translation>Registering new task: %1</translation>
     </message>
@@ -388,47 +388,47 @@ By default, loglevel="ERROR".</translation>
         <translation>Subtask {%1} is canceled %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="580"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="582"/>
         <source>Unregistering task: %1</source>
         <translation>Unregistering task: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="665"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="667"/>
         <source>Invalid name</source>
         <translation>Invalid name</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="739"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
         <source>Promoting task {%1} to '%2'</source>
         <translation>Promoting task {%1} to '%2'</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="743"/>
         <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="751"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="753"/>
         <source>Starting {%1} task</source>
         <translation>Starting {%1} task</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="779"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="781"/>
         <source>Task {%1} finished with error: %2</source>
         <translation>Task {%1} finished with error: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="783"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="785"/>
         <source>Task {%1} canceled</source>
         <translation>Task {%1} canceled</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="786"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="788"/>
         <source>Task {%1} finished</source>
         <translation>Task {%1} finished</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="889"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="891"/>
         <source>Deleting task: %1</source>
         <translation>Deleting task: %1</translation>
     </message>
diff --git a/src/corelibs/U2Private/transl/russian.ts b/src/corelibs/U2Private/transl/russian.ts
index 90b8238..b3ea8b9 100644
--- a/src/corelibs/U2Private/transl/russian.ts
+++ b/src/corelibs/U2Private/transl/russian.ts
@@ -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="656"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
         <source>New</source>
         <translation>Новая</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="660"/>
         <source>Prepared</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="662"/>
         <source>Running</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="664"/>
         <source>Finished</source>
         <translation>Завершена</translation>
     </message>
@@ -352,37 +352,37 @@ By default, loglevel="ERROR".</source>
         <translation>Подзадача {%1} завершена с ошибкой: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="363"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="365"/>
         <source>Waiting for resource '%1', count: %2</source>
         <translation>Ожидание ресурса "%1", требуется: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="386"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="388"/>
         <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="389"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="391"/>
         <source>Waiting for resource '%1', count: %2%3</source>
         <translation>Ожидание ресурса "%1", требуется: %2%3</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="522"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="524"/>
         <source>Registering new task: %1</source>
         <translation>Добавлена задача "%1"</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="665"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="667"/>
         <source>Invalid name</source>
         <translation>Неизвестное состояние</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="889"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="891"/>
         <source>Deleting task: %1</source>
         <translation>Удаляется задача "%1"</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="739"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
         <source>Promoting task {%1} to '%2'</source>
         <translation>Задача {%1} %2</translation>
     </message>
@@ -392,42 +392,42 @@ By default, loglevel="ERROR".</source>
         <translation>Подзадача {%1} отменена %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="378"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="380"/>
         <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="379"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="381"/>
         <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="580"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="582"/>
         <source>Unregistering task: %1</source>
         <translation>Незарегистрированная задача: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="743"/>
         <source>Promoting task {%1} to '%2', error '%3'</source>
         <translation>Задача {%1} %2; ошибка: %3</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="751"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="753"/>
         <source>Starting {%1} task</source>
         <translation>Старт задачи {%1}</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="779"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="781"/>
         <source>Task {%1} finished with error: %2</source>
         <translation>Задача {%1} завершена с ошибкой: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="783"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="785"/>
         <source>Task {%1} canceled</source>
         <translation>Отменяется задача {%1}</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="786"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="788"/>
         <source>Task {%1} finished</source>
         <translation>Задача {%1} завершена</translation>
     </message>
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h
index c464894..aeaafaa 100644
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h
+++ b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h
@@ -53,7 +53,7 @@ struct RemoteMachineItemInfo {
     bool                        isSelected;
 
     RemoteMachineItemInfo(const RemoteMachineSettingsPtr& s)
-        : settings( s ) {
+        : settings(s), isSelected(false) {
         assert( NULL != settings );
     }
     RemoteMachineItemInfo()
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
index 8e800ff..2431533 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
@@ -47,7 +47,6 @@
 #include <U2Core/CMDLineRegistry.h>
 #include <U2Core/CMDLineUtils.h>
 #include <U2Core/ConsoleShutdownTask.h>
-#include <U2Core/DASSource.h>
 #include <U2Core/DBXRefRegistry.h>
 #include <U2Core/DNAAlphabetRegistryImpl.h>
 #include <U2Core/DNATranslation.h>
@@ -306,9 +305,6 @@ UgeneContextWrapper::UgeneContextWrapper( const QString &workingDirectoryPath )
     dpr = new U2DataPathRegistry( );
     appContext->setDataPathRegistry( dpr );
 
-    dsr = new DASSourceRegistry( );
-    appContext->setDASSourceRegistry( dsr );
-
     GReportableCounter launchCounter( "U2Script is ready", "", 1 );
     ++launchCounter.totalCount;
 
@@ -331,9 +327,6 @@ UgeneContextWrapper::~UgeneContextWrapper( ) {
     delete vfsReg;
     appContext->setVirtualFileSystemRegistry( NULL );
 
-    delete dsr;
-    appContext->setDASSourceRegistry( NULL );
-
     delete rdc;
     appContext->setRecentlyDownloadedCache( NULL );
 
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.h b/src/corelibs/U2Script/src/UgeneContextWrapper.h
index 77f64e7..9bd027d 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.h
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.h
@@ -29,7 +29,6 @@ namespace U2 {
 class Task;
 class AppContextImpl;
 class CMDLineRegistry;
-class DASSourceRegistry;
 class SettingsImpl;
 class AppSettings;
 class UserAppsSettings;
@@ -93,7 +92,6 @@ private:
 
     AppContextImpl *                        appContext;
     CMDLineRegistry *                       cmdLineRegistry;
-    DASSourceRegistry *                     dsr;
     SettingsImpl *                          globalSettings;
     SettingsImpl *                          settings;
     AppSettings *                           appSettings;
diff --git a/src/corelibs/U2Script/transl/english.ts b/src/corelibs/U2Script/transl/english.ts
index fd14f3f..86d5c37 100644
--- a/src/corelibs/U2Script/transl/english.ts
+++ b/src/corelibs/U2Script/transl/english.ts
@@ -41,7 +41,7 @@
     <message>
         <location filename="../src/UgeneContextWrapper.cpp" line="171"/>
         <source>UGENE script environment initialization started</source>
-        <translation type="unfinished">UGENE script environment initialization started</translation>
+        <translation>UGENE script environment initialization started</translation>
     </message>
 </context>
 </TS>
diff --git a/src/corelibs/U2Script/transl/russian.ts b/src/corelibs/U2Script/transl/russian.ts
index 37dcaca..7688f8a 100644
--- a/src/corelibs/U2Script/transl/russian.ts
+++ b/src/corelibs/U2Script/transl/russian.ts
@@ -41,7 +41,7 @@
     <message>
         <location filename="../src/UgeneContextWrapper.cpp" line="171"/>
         <source>UGENE script environment initialization started</source>
-        <translation type="unfinished">UGENE script environment initialization started</translation>
+        <translation>UGENE script environment initialization started</translation>
     </message>
 </context>
 </TS>
diff --git a/src/corelibs/U2Test/U2Test.pri b/src/corelibs/U2Test/U2Test.pri
index 8255df5..3e170b1 100644
--- a/src/corelibs/U2Test/U2Test.pri
+++ b/src/corelibs/U2Test/U2Test.pri
@@ -4,17 +4,18 @@ UGENE_RELATIVE_DESTDIR = ''
 MODULE_ID=U2Test
 include( ../../ugene_lib_common.pri )
 
-QT += xml
+QT += xml gui
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2TEST_DLL
-LIBS += -L../../_release -lU2Core
+LIBS += -L../../_release -lU2Core -lhumimit
+INCLUDEPATH += ../../libs_3rdparty/humimit/src
 
 !debug_and_release|build_pass {
 
     CONFIG(debug, debug|release) {
         DESTDIR=../../_debug
-        LIBS -= -L../../_release -lU2Core
-        LIBS += -L../../_debug -lU2Cored
+        LIBS -= -L../../_release -lU2Core -lhumimit
+        LIBS += -L../../_debug -lU2Cored -lhumimitd
     }
 
     CONFIG(release, debug|release) {
diff --git a/src/corelibs/U2Test/U2Test.pro b/src/corelibs/U2Test/U2Test.pro
index fbe0c97..f11b1f0 100644
--- a/src/corelibs/U2Test/U2Test.pro
+++ b/src/corelibs/U2Test/U2Test.pro
@@ -3,31 +3,30 @@ include (U2Test.pri)
 # Input
 HEADERS += src/GTest.h \
            src/GTestFrameworkComponents.h \
-           src/TestRunnerTask.h \
            src/TestRunnerSettings.h \
-           src/xmltest/XMLTestFormat.h \
-           src/xmltest/XMLTestUtils.h \
-           src/gui_tests/GUITest.h \
+           src/TestRunnerTask.h \
            src/gui_tests/GUITestBase.h \
            src/gui_tests/GUITestLauncher.h \
-           src/gui_tests/GUITestOpStatus.h \
            src/gui_tests/GUITestService.h \
            src/gui_tests/GUITestTeamcityLogger.h \
-           src/gui_tests/GUITestWindow.h
+           src/gui_tests/GUITestThread.h \
+           src/gui_tests/GUITestWindow.h \
+           src/xmltest/XMLTestFormat.h \
+           src/xmltest/XMLTestUtils.h
+
 SOURCES += src/GTest.cpp \
            src/GTestFrameworkComponents.cpp \
            src/TestRunnerTask.cpp \
-           src/xmltest/XMLTestFormat.cpp \
-           src/xmltest/XMLTestUtils.cpp \
-           src/gui_tests/GUITest.cpp \
            src/gui_tests/GUITestBase.cpp \
            src/gui_tests/GUITestLauncher.cpp \
            src/gui_tests/GUITestService.cpp \
            src/gui_tests/GUITestTeamcityLogger.cpp \
-           src/gui_tests/GUITestWindow.cpp
+           src/gui_tests/GUITestThread.cpp \
+           src/gui_tests/GUITestWindow.cpp \
+           src/xmltest/XMLTestFormat.cpp \
+           src/xmltest/XMLTestUtils.cpp
 
 TRANSLATIONS += transl/english.ts \
                 transl/russian.ts
 
-FORMS += \
-           GUITestingWindow.ui
+FORMS += GUITestingWindow.ui
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestBase.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestBase.cpp
index a30213f..abe3109 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestBase.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestBase.cpp
@@ -12,7 +12,7 @@ GUITestBase::~GUITestBase() {
     qDeleteAll(postAdditionalChecks);
 }
 
-bool GUITestBase::registerTest(GUITest *test, TestType testType) {
+bool GUITestBase::registerTest(HI::GUITest *test, TestType testType) {
 
     Q_ASSERT(test);
 
@@ -26,7 +26,7 @@ bool GUITestBase::registerTest(GUITest *test, TestType testType) {
     return false;
 }
 
-QString GUITestBase::nameUnnamedTest(GUITest* test, TestType testType) {
+QString GUITestBase::nameUnnamedTest(HI::GUITest* test, TestType testType) {
 
     Q_ASSERT(test);
     if (!test) {
@@ -41,15 +41,15 @@ QString GUITestBase::nameUnnamedTest(GUITest* test, TestType testType) {
     return testName;
 }
 
-bool GUITestBase::isNewTest(GUITest *test, TestType testType) {
+bool GUITestBase::isNewTest(HI::GUITest *test, TestType testType) {
 
-    return test && !findTest(test->getName(), testType);
+    return test && !findTest(test->getFullName(), testType);
 }
 
-void GUITestBase::addTest(GUITest *test, TestType testType) {
+void GUITestBase::addTest(HI::GUITest *test, TestType testType) {
 
     if (test) {
-        getMap(testType).insert(test->getName(), test);
+        getMap(testType).insert(test->getFullName(), test);
     }
 }
 
@@ -59,14 +59,19 @@ QString GUITestBase::getNextTestName(TestType testType) {
     return unnamedTestsPrefix + QString::number(testsCount);
 }
 
-GUITest *GUITestBase::findTest(const QString &name, TestType testType) {
+HI::GUITest *GUITestBase::findTest(const QString &name, TestType testType) {
     GUITestMap map = getMap(testType);
     return map.value(name);
 }
 
-GUITest *GUITestBase::getTest(const QString &name, TestType testType) {
+HI::GUITest *GUITestBase::getTest(const QString &suite, const QString &name, TestType testType) {
 
-    return getMap(testType).take(name);
+    return getMap(testType).value(suite + ":" + name);
+}
+
+HI::GUITest *GUITestBase::takeTest(const QString &suite, const QString &name, TestType testType) {
+
+    return getMap(testType).take(suite + ":" + name);
 }
 
 GUITestMap& GUITestBase::getMap(TestType testType) {
@@ -87,9 +92,17 @@ GUITestMap& GUITestBase::getMap(TestType testType) {
 GUITests GUITestBase::getTests(TestType testType) {
 
     GUITests testList = getMap(testType).values();
+
+    return testList;
+}
+
+GUITests GUITestBase::takeTests(TestType testType) {
+
+    GUITests testList = getMap(testType).values();
     getMap(testType).clear();
 
     return testList;
 }
 
+
 } // namespace
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestBase.h b/src/corelibs/U2Test/src/gui_tests/GUITestBase.h
index 082fc4b..971d75a 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestBase.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestBase.h
@@ -2,6 +2,7 @@
 #define _U2_GUI_TEST_BASE_H_
 
 #include <U2Core/global.h>
+#include <U2Core/U2IdTypes.h>
 #include <U2Core/Task.h>
 #include <U2Core/MultiTask.h>
 #include <U2Core/GObject.h>
@@ -10,16 +11,17 @@
 #include <U2View/ADVSingleSequenceWidget.h>
 
 #include <QtGui>
-#include "GUITest.h"
+#include <core/GUITest.h>
 
 namespace U2 {
 
-#define TESTNAME(className) QString(GUI_TEST_PREFIX) + #className
+#define TESTNAME(className) #className
+#define SUITENAME(className) QString(GUI_TEST_SUITE)
 
 #define DIALOG_FILLER_DECLARATION(className, DialogName) \
     class className : public Filler { \
     public: \
-        className(U2OpStatus& os):Filler(os, DialogName){} \
+        className(HI::GUITestOpStatus& os):Filler(os, DialogName){} \
         virtual void run(); \
     }
 
@@ -27,25 +29,26 @@ namespace U2 {
     void className::run()
 
 #define GUI_TEST_CLASS_DECLARATION(className) \
-    class className : public GUITest { \
+    class className : public HI::GUITest { \
     public: \
-        className () : GUITest(TESTNAME(className)){} \
+        className () : HI::GUITest(TESTNAME(className), SUITENAME(className)){} \
     protected: \
-        virtual void run(U2OpStatus &os); \
+        virtual void run(HI::GUITestOpStatus &os); \
     };
 
 #define GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(className, timeout) \
-    class className : public GUITest { \
+    class className : public HI::GUITest { \
     public: \
-        className () : GUITest(TESTNAME(className), timeout){} \
+        className () : HI::GUITest(TESTNAME(className), SUITENAME(className), timeout){} \
     protected: \
-        virtual void run(U2OpStatus &os); \
+        virtual void run(HI::GUITestOpStatus &os); \
     };
 
 #define GUI_TEST_CLASS_DEFINITION(className) \
-    void className::run(U2OpStatus &os)
+    void className::run(HI::GUITestOpStatus &os)
 
-typedef QMap<QString, GUITest*> GUITestMap;
+typedef QMap<QString, HI::GUITest*> GUITestMap;
+typedef QList<HI::GUITest*> GUITests;
 
 class U2TEST_EXPORT GUITestBase {
 public:
@@ -53,10 +56,16 @@ public:
 
     virtual ~GUITestBase();
 
-    bool registerTest(GUITest *test, TestType testType = Normal);
-    GUITest *getTest(const QString &name, TestType testType = Normal); // removes item from GUITestBase
+    bool registerTest(HI::GUITest *test, TestType testType = Normal);
+    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 GUITestBase
 
     GUITests getTests(TestType testType = Normal);
+    GUITests takeTests(TestType testType = Normal); // removes items from GUITestBase
+
+    GUITests getTestsWithoutRemoving(TestType testType = Normal);
+
+    HI::GUITest *findTest(const QString &name, TestType testType = Normal);
 
     static const QString unnamedTestsPrefix;
 
@@ -67,16 +76,14 @@ private:
     GUITestMap postAdditionalActions;
      // GUI checks additional to the launched checks
 
-    GUITest *findTest(const QString &name, TestType testType);
-
     GUITestMap &getMap(TestType testType);
 
     QString getNextTestName(TestType testType);
 
-    bool isNewTest(GUITest *test, TestType testType);
-    void addTest(GUITest *test, TestType testType);
+    bool isNewTest(HI::GUITest *test, TestType testType);
+    void addTest(HI::GUITest *test, TestType testType);
 
-    QString nameUnnamedTest(GUITest* test, TestType testType);
+    QString nameUnnamedTest(HI::GUITest* test, TestType testType);
 };
 
 }
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
index ffb5c49..b5951f7 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
@@ -19,7 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QMap>
+#include <QApplication>
+#include <QMap>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineCoreOptions.h>
@@ -41,7 +42,7 @@
 #elif defined(Q_OS_UNIX)
 #define NUMBER_OF_TESTS_IN_SUITE 550
 #elif defined(Q_OS_WIN)
-#define NUMBER_OF_TESTS_IN_SUITE 1050
+#define NUMBER_OF_TESTS_IN_SUITE 700
 #endif
 
 #define GUITESTING_REPORT_PREFIX "GUITesting"
@@ -54,6 +55,11 @@ GUITestLauncher::GUITestLauncher(int _suiteNumber, bool _noIgnored)
 
     tpm = Task::Progress_Manual;
     testOutDir = getTestOutDir();
+
+    QWidget *splashScreen = QApplication::activeWindow();
+    if (NULL != splashScreen) {
+        splashScreen->hide();
+    }
 }
 
 GUITestLauncher::GUITestLauncher(QString _pathToSuite, bool _noIgnored)
@@ -79,21 +85,22 @@ void GUITestLauncher::run() {
     }
 
     int finishedCount = 0;
-    foreach(GUITest* t, tests) {
+    foreach(HI::GUITest* t, tests) {
         if (isCanceled()) {
             return;
         }
 
         Q_ASSERT(t);
         if (t) {
-            QString testName = t->getName();
+            QString testName = t->getFullName();
+            QString testNameForTeamCity = t->getSuite() +"_"+ t->getName();
             results[testName] = "";
 
             firstTestRunCheck(testName);
 
             if (!t->isIgnored()) {
                 qint64 startTime = GTimer::currentTimeMicros();
-                GUITestTeamcityLogger::testStarted(testName);
+                GUITestTeamcityLogger::testStarted(testNameForTeamCity);
 
                 QString testResult = performTest(testName);
                 results[testName] = testResult;
@@ -102,10 +109,10 @@ void GUITestLauncher::run() {
                 }
 
                 qint64 finishTime = GTimer::currentTimeMicros();
-                GUITestTeamcityLogger::teamCityLogResult(testName, testResult, GTimer::millisBetween(startTime, finishTime));
+                GUITestTeamcityLogger::teamCityLogResult(testNameForTeamCity, testResult, GTimer::millisBetween(startTime, finishTime));
             }
-            else if(t->getReason() == GUITest::Bug){
-                GUITestTeamcityLogger::testIgnored(testName, t->getIgnoreMessage());
+            else if(t->getReason() == HI::GUITest::Bug){
+                GUITestTeamcityLogger::testIgnored(testNameForTeamCity, t->getIgnoreMessage());
             }
         }
 
@@ -122,13 +129,13 @@ void GUITestLauncher::firstTestRunCheck(const QString& testName) {
 bool GUITestLauncher::initGUITestBase() {
     GUITestBase* b = AppContext::getGUITestBase();
     SAFE_POINT(NULL != b, "Test base is NULL", false);
-    QList<GUITest *> list = b->getTests();
+    QList<HI::GUITest *> list = b->getTests();
     if (list.isEmpty()) {
         setError(tr("No tests to run"));
         return false;
     }
 
-    QList<QList<GUITest *> > suiteList;
+    QList<QList<HI::GUITest *> > suiteList;
     if(suiteNumber){
         for(int i=0; i<(list.length()/NUMBER_OF_TESTS_IN_SUITE + 1);i++){
             suiteList << list.mid(i*NUMBER_OF_TESTS_IN_SUITE,NUMBER_OF_TESTS_IN_SUITE);
@@ -150,8 +157,8 @@ bool GUITestLauncher::initGUITestBase() {
                 testName.remove('\t');
                 testName.remove(' ');
                 bool added = false;
-                foreach (GUITest* t, list) {
-                    if(t->getName() == testName){
+                foreach (HI::GUITest* t, list) {
+                    if((t->getFullName()) == testName){
                         tests<<t;
                         added = true;
                         break;
@@ -168,7 +175,7 @@ bool GUITestLauncher::initGUITestBase() {
     }
 
     if(noIgnored){
-        foreach(GUITest* test, tests){
+        foreach(HI::GUITest* test, tests){
             test->setIgnored(false);
         }
     }
@@ -189,7 +196,13 @@ QString GUITestLauncher::testOutFile(const QString &testName) {
 
 QString GUITestLauncher::getTestOutDir(){
     QString date = QDate::currentDate().toString("dd.MM.yyyy");
-    QString initPath = QDir::homePath() + "/gui_testing_output/" + date;
+    QString guiTestOutputDirectory = qgetenv("GUI_TESTING_OUTPUT");
+    QString initPath;
+    if(guiTestOutputDirectory.isEmpty()){
+        initPath = QDir::homePath() + "/gui_testing_output/" + date;
+    }else{
+        initPath = guiTestOutputDirectory + "/gui_testing_output/" + date;
+    }
     QDir d(initPath);
     int i = 1;
     while(d.exists()){
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
index 1783eec..5274687 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
@@ -27,11 +27,10 @@
 #include <U2Core/MultiTask.h>
 #include <U2Gui/MainWindow.h>
 #include <QtCore/QProcessEnvironment>
+#include <core/GUITest.h>
 
 namespace U2 {
 
-class GUITest;
-
 class GUITestLauncher: public Task {
     Q_OBJECT
 public:
@@ -42,7 +41,7 @@ public:
     virtual QString generateReport() const;
 
 private:
-    QList<GUITest *> tests;
+    QList<HI::GUITest *> tests;
     QMap<QString, QString> results;
     int suiteNumber;
     bool noIgnored;
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
index c48d8bd..629d0c1 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QPixmap>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtGui/QScreen>
-#endif
+#include <QMainWindow>
+#include <QScreen>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineCoreOptions.h>
@@ -35,15 +29,18 @@
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/GObject.h>
 #include <U2Core/Log.h>
+#include <U2Core/TaskSignalMapper.h>
 #include <U2Core/TaskStarter.h>
 #include <U2Core/Timer.h>
 #include <U2Core/U2SafePoints.h>
 
+#include <core/MainThreadRunnable.h>
 #include "GUITestBase.h"
+#include <core/GUITestOpStatus.h>
 #include "GUITestService.h"
 #include "GUITestTeamcityLogger.h"
+#include "GUITestThread.h"
 #include "GUITestWindow.h"
-#include "GUITestOpStatus.h"
 
 /**************************************************** to use qt file dialog *************************************************************/
 #ifdef Q_OS_LINUX
@@ -65,16 +62,18 @@ extern Q_GUI_EXPORT _qt_filedialog_existing_directory_hook qt_filedialog_existin
 #endif
 /******************************************************************************************************************************************/
 
-#define GUITESTING_REPORT_PREFIX "GUITesting"
-
-
 namespace U2 {
 
 #define ULOG_CAT_TEAMCITY "Teamcity Log"
 static Logger log(ULOG_CAT_TEAMCITY);
+const QString GUITestService::GUITESTING_REPORT_PREFIX = "GUITesting";
+const qint64 GUITestService::TIMER_INTERVAL = 100;
 
-GUITestService::GUITestService(QObject *) : Service(Service_GUITesting, tr("GUI test viewer"), tr("Service to support UGENE GUI testing")),
-runTestsAction(NULL), testLauncher(NULL) {
+GUITestService::GUITestService(QObject *) :
+    Service(Service_GUITesting, tr("GUI test viewer"), tr("Service to support UGENE GUI testing")),
+    runTestsAction(NULL),
+    testLauncher(NULL)
+{
     connect(AppContext::getPluginSupport(), SIGNAL(si_allStartUpPluginsLoaded()), SLOT(sl_allStartUpPluginsLoaded()));
     setQtFileDialogView();
 }
@@ -83,13 +82,20 @@ GUITestService::~GUITestService() {
     delete runTestsAction;
 }
 
+GUITestService *GUITestService::getGuiTestService() {
+    QList<Service *> services = AppContext::getServiceRegistry()->findServices(Service_GUITesting);
+    return services.isEmpty() ? NULL : qobject_cast<GUITestService *>(services.first());
+}
+
 void GUITestService::sl_registerService() {
+    registerServiceTask();
+}
 
+void GUITestService::sl_serviceRegistered() {
     const LaunchOptions launchedFor = getLaunchOptions(AppContext::getCMDLineRegistry());
 
     switch (launchedFor) {
         case RUN_ONE_TEST:
-
             QTimer::singleShot(1000, this, SLOT(runGUITest()));
             break;
 
@@ -119,7 +125,6 @@ void GUITestService::sl_registerService() {
 
         case NONE:
         default:
-            registerServiceTask();
             break;
     }
 }
@@ -216,7 +221,7 @@ GUITests GUITestService::preChecks() {
     GUITestBase* tb = AppContext::getGUITestBase();
     SAFE_POINT(NULL != tb,"",GUITests());
 
-    GUITests additionalChecks = tb->getTests(GUITestBase::PreAdditional);
+    GUITests additionalChecks = tb->takeTests(GUITestBase::PreAdditional);
     SAFE_POINT(additionalChecks.size()>0,"",GUITests());
 
     return additionalChecks;
@@ -227,7 +232,7 @@ GUITests GUITestService::postChecks() {
     GUITestBase* tb = AppContext::getGUITestBase();
     SAFE_POINT(NULL != tb,"",GUITests());
 
-    GUITests additionalChecks = tb->getTests(GUITestBase::PostAdditionalChecks);
+    GUITests additionalChecks = tb->takeTests(GUITestBase::PostAdditionalChecks);
     SAFE_POINT(additionalChecks.size()>0,"",GUITests());
 
     return additionalChecks;
@@ -238,7 +243,7 @@ GUITests GUITestService::postActions() {
     GUITestBase* tb = AppContext::getGUITestBase();
     SAFE_POINT(NULL != tb,"",GUITests());
 
-    GUITests additionalChecks = tb->getTests(GUITestBase::PostAdditionalActions);
+    GUITests additionalChecks = tb->takeTests(GUITestBase::PostAdditionalActions);
     SAFE_POINT(additionalChecks.size()>0,"",GUITests());
 
     return additionalChecks;
@@ -257,27 +262,28 @@ void GUITestService::runAllGUITests() {
     GUITests postChecksTests = postChecks();
     GUITests postActiosTests = postActions();
 
-    GUITests tests = AppContext::getGUITestBase()->getTests();
+    GUITests tests = AppContext::getGUITestBase()->takeTests();
     SAFE_POINT(false == tests.isEmpty(),"",);
 
-    foreach(GUITest* t, tests) {
+    foreach(HI::GUITest* t, tests) {
         SAFE_POINT(NULL != t,"",);
         if (!t) {
             continue;
         }
-        QString testName = t->getName();
+        QString testName = t->getFullName();
+        QString testNameForTeamCity = t->getSuite() +"_"+ t->getName();
 
         if (t->isIgnored()) {
-            GUITestTeamcityLogger::testIgnored(testName, t->getIgnoreMessage());
+            GUITestTeamcityLogger::testIgnored(testNameForTeamCity, t->getIgnoreMessage());
             continue;
         }
 
         qint64 startTime = GTimer::currentTimeMicros();
-        GUITestTeamcityLogger::testStarted(testName);
+        GUITestTeamcityLogger::testStarted(testNameForTeamCity);
 
-        TaskStateInfo os;
+        HI::GUITestOpStatus os;
         log.trace("GTRUNNER - runAllGUITests - going to run initial checks before " + testName);
-        foreach(GUITest* t, initTests) {
+        foreach(HI::GUITest* t, initTests) {
             if (t) {
                 t->run(os);
             }
@@ -288,14 +294,14 @@ void GUITestService::runAllGUITests() {
         t->run(os);
         log.trace("GTRUNNER - runAllGUITests - finished running test " + testName);
 
-        foreach(GUITest* t, postChecksTests) {
+        foreach(HI::GUITest* t, postChecksTests) {
             if (t) {
                 t->run(os);
             }
         }
 
-        TaskStateInfo os2;
-        foreach(GUITest* t, postActiosTests) {
+        HI::GUITestOpStatus os2;
+        foreach(HI::GUITest* t, postActiosTests) {
             if (t) {
                 t->run(os2);
             }
@@ -304,7 +310,7 @@ void GUITestService::runAllGUITests() {
         QString testResult = os.hasError() ? os.getError() : GUITestTeamcityLogger::successResult;
 
         qint64 finishTime = GTimer::currentTimeMicros();
-        GUITestTeamcityLogger::teamCityLogResult(testName, testResult, GTimer::millisBetween(startTime, finishTime));
+        GUITestTeamcityLogger::teamCityLogResult(testNameForTeamCity, testResult, GTimer::millisBetween(startTime, finishTime));
     }
 
     log.trace("GTRUNNER - runAllGUITests - shutting down UGENE");
@@ -320,7 +326,7 @@ void GUITestService::runGUITest() {
 
     GUITestBase *tb = AppContext::getGUITestBase();
     SAFE_POINT(NULL != tb,"",);
-    GUITest *t = tb->getTest(testName);
+    HI::GUITest *t = tb->takeTest(testName.split(":").first(), testName.split(":").last());
 
     runGUITest(t);
 }
@@ -328,58 +334,22 @@ void GUITestService::runGUITest() {
 void GUITestService::runGUICrazyUserTest() {
     GUITestBase *tb = AppContext::getGUITestBase();
     SAFE_POINT(tb,"",);
-    GUITest *t = tb->getTest("simple_crazy_user");
+    HI::GUITest *t = tb->takeTest("","simple_crazy_user");
 
     runGUITest(t);
 }
 
-void GUITestService::runGUITest(GUITest* t) {
-    SAFE_POINT(NULL != t,"",);
-    GUITestOpStatus os;
-
-    GUITests tests = preChecks();
-    if (!t) {
-        os.setError("GUITestService __ Test not found");
-    }
-    tests.append(t);
-    tests.append(postChecks());
-
-    clearSandbox();    
-
-    QTimer::singleShot(t->getTimeout(), this, SLOT(sl_testTimeOut()));
-    try {
-        foreach (GUITest* t, tests) {
-            if (t) {
-                t->run(os);
-            }
-        }
-    } catch(GUITestOpStatus *) {
-
-    }
-
-#if (QT_VERSION < 0x050000) // deprecated method
-    QPixmap originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
-#else
-    QPixmap originalPixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
-#endif
-    originalPixmap.save(GUITest::screenshotDir + t->getName() + ".jpg");
-
-    foreach(GUITest* t, postActions()){
-        TaskStateInfo os1;
-        t->run(os1);
-    }
-
-    QString testResult = os.hasError() ? os.getError() : GUITestTeamcityLogger::successResult;
-    writeTestResult(testResult);
-
-    //exit(0);
-    AppContext::getMainWindow()->getQMainWindow()->close();
+void GUITestService::runGUITest(HI::GUITest *test) {
+    SAFE_POINT(NULL != test, "GUITest is NULL", );
+    GUITestThread *testThread = new GUITestThread(test, log);
+    connect(testThread, SIGNAL(finished()), SLOT(sl_testThreadFinish()));
+    testThread->start();
 }
 
 void GUITestService::registerServiceTask() {
-
     Task *registerServiceTask = AppContext::getServiceRegistry()->registerServiceTask(this);
-    SAFE_POINT(NULL != registerServiceTask,"",);
+    SAFE_POINT(NULL != registerServiceTask, "registerServiceTask is NULL", );
+    connect(new TaskSignalMapper(registerServiceTask), SIGNAL(si_taskFinished(Task *)), SLOT(sl_serviceRegistered()));
 
     AppContext::getTaskScheduler()->registerTopLevelTask(registerServiceTask);
 }
@@ -389,28 +359,6 @@ void GUITestService::serviceStateChangedCallback(ServiceState, bool enabledState
     if (!enabledStateChanged) {
         return;
     }
-
-    if (isEnabled()) {
-        addServiceMenuItem();
-    } else {
-        deleteServiceMenuItem();
-    }
-}
-
-void GUITestService::deleteServiceMenuItem() {
-
-    delete runTestsAction; runTestsAction = NULL;
-}
-
-void GUITestService::addServiceMenuItem() {
-
-    deleteServiceMenuItem();
-    runTestsAction = new QAction(tr("GUI testing"), this);
-    SAFE_POINT(NULL != runTestsAction,"",);
-    runTestsAction->setObjectName("action_guitest");
-
-    connect(runTestsAction, SIGNAL(triggered()), SLOT(sl_registerTestLauncherTask()));
-    AppContext::getMainWindow()->getTopLevelMenu(MWMENU_TOOLS)->addAction(runTestsAction);
 }
 
 void GUITestService::sl_registerTestLauncherTask() {
@@ -460,7 +408,7 @@ void GUITestService::clearSandbox()
 {
     log.trace("GUITestService __ clearSandbox");
 
-    QString pathToSandbox = GUITest::testDir + "_common_data/scenarios/sandbox/";
+    QString pathToSandbox = HI::GUITest::testDir + "_common_data/scenarios/sandbox/";
     QDir sandbox(pathToSandbox);
 
     foreach (QString fileName, sandbox.entryList()) {
@@ -498,25 +446,9 @@ void GUITestService::removeDir(QString dirName)
     }dir.rmdir(dir.absoluteFilePath(dirName));
 }
 
-void GUITestService::sl_testTimeOut(){
-    CMDLineRegistry* cmdLine = AppContext::getCMDLineRegistry();
-    SAFE_POINT(NULL != cmdLine,"",);
-    QString testName = cmdLine->getParameterValue(CMDLineCoreOptions::LAUNCH_GUI_TEST);
-
-#if (QT_VERSION < 0x050000) // deprecated method
-    QPixmap originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
-#else
-    QPixmap originalPixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
-#endif
-    originalPixmap.save(GUITest::screenshotDir + testName + ".jpg");
-
-    foreach(GUITest* t, postActions()){
-        TaskStateInfo os1;
-        t->run(os1);
-    }
-
-    writeTestResult("test timed out");
-
-    exit(0);
+void GUITestService::sl_testThreadFinish() {
+    sender()->deleteLater();
+    AppContext::getMainWindow()->getQMainWindow()->close();
 }
+
 }
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.h b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
index 2387b06..c50a49a 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
@@ -19,60 +19,64 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_TESTS_VIEWER_H_
-#define _U2_GUI_TESTS_VIEWER_H_
+#ifndef _U2_GUI_TEST_SERVICE_H_
+#define _U2_GUI_TEST_SERVICE_H_
 
-#include <U2Core/global.h>
-#include <U2Core/Task.h>
 #include <U2Core/MultiTask.h>
-#include <U2Gui/MainWindow.h>
+#include <U2Core/Task.h>
+#include <U2Core/global.h>
 
-#include <QtGui>
+#include <U2Gui/MainWindow.h>
 
-#include "GUITest.h"
+#include <core/GUITest.h>
 #include "GUITestLauncher.h"
-
+//#include "MainThreadTimer.h"
 
 namespace U2 {
 
+class CMDLineRegistry;
 class GUITestLauncher;
 class GUITestService;
-class CMDLineRegistry;
+class MainThreadRunnable;
 
-class U2TEST_EXPORT GUITestService: public Service {
+class U2TEST_EXPORT GUITestService : public Service {
     Q_OBJECT
 public:
     enum LaunchOptions {NONE, RUN_ONE_TEST, RUN_ALL_TESTS, RUN_ALL_TESTS_BATCH, RUN_TEST_SUITE, RUN_CRAZY_USER_MODE, CREATE_GUI_TEST, RUN_ALL_TESTS_NO_IGNORED};
 
     GUITestService(QObject *parent = NULL);
-    virtual ~GUITestService();
+    ~GUITestService();
+
+    void runTest(HI::GUITests testsToRun);
+//    qint64 getMainThreadTimerValue() const;
+
+    static GUITestService * getGuiTestService();    // the service should be already created and registered
 
-    void runTest(GUITests testsToRun);
+    static const QString GUITESTING_REPORT_PREFIX;
+    static const qint64 TIMER_INTERVAL;
 
 public slots:
      void runGUICrazyUserTest();
      void runGUITest();
-     void runGUITest(GUITest* t);
+     void runGUITest(HI::GUITest* t);
 
-    static void runAllGUITests();
+    void runAllGUITests();
 
-protected:
-    virtual void serviceStateChangedCallback(ServiceState oldState, bool enabledStateChanged);
-
-    static GUITests preChecks();
-    static GUITests postChecks();
-    static GUITests postActions();
-
-protected slots:
+private slots:
     void sl_allStartUpPluginsLoaded();
     void sl_registerService();
+    void sl_serviceRegistered();
     void sl_registerTestLauncherTask();
     void sl_taskStateChanged(Task*);
-
-private slots:
-    static void sl_testTimeOut();
+    void sl_testThreadFinish();
 
 private:
+    virtual void serviceStateChangedCallback(ServiceState oldState, bool enabledStateChanged);
+
+    static HI::GUITests preChecks();
+    static HI::GUITests postChecks();
+    static HI::GUITests postActions();
+
     static void clearSandbox();
     static void removeDir(QString dirName);
 
@@ -83,9 +87,6 @@ private:
     void registerTestSuiteTask();
     void registerServiceTask();
 
-    void addServiceMenuItem();
-    void deleteServiceMenuItem();
-
     Task* createTestLauncherTask(int suiteNumber = 0, bool noIgnored = false) const;
     Task* createTestSuiteLauncherTask() const;
     static void writeTestResult(const QString &result);
@@ -94,9 +95,10 @@ private:
 
     QAction *runTestsAction;
     Task *testLauncher;
-    GUITests testsToRun;
+    HI::GUITests testsToRun;
+//    MainThreadTimer timer;
 };
 
-} // U2
+}   // namespace U2
 
-#endif
+#endif // _U2_GUI_TEST_SERVICE_H_
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
new file mode 100644
index 0000000..420bd60
--- /dev/null
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
@@ -0,0 +1,221 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include <QDesktopWidget>
+
+#include <QGuiApplication>
+#include <U2Core/AppContext.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "core/MainThreadRunnable.h"
+
+#include <core/GUITest.h>
+#include "GUITestBase.h"
+#include <core/GUITestOpStatus.h>
+#include "GUITestService.h"
+#include "GUITestTeamcityLogger.h"
+#include "GUITestThread.h"
+
+namespace U2 {
+
+GUITestThread::GUITestThread(HI::GUITest *test, Logger &log, bool _needCleanup) :
+    test(test),
+    log(log),
+    needCleanup(_needCleanup),
+    testResult("Not runned")
+{
+    SAFE_POINT(NULL != test, "GUITest is NULL", );
+}
+
+void GUITestThread::run() {
+    SAFE_POINT(NULL != test, "GUITest is NULL", );
+
+    GUITests tests;
+    tests << preChecks();
+    tests << test;
+    tests << postChecks();
+
+    clearSandbox();
+
+    const QString error = launchTest(tests);
+
+    if(needCleanup){
+        cleanup();
+    }
+
+    testResult = error.isEmpty() ? GUITestTeamcityLogger::successResult : error;
+    writeTestResult();
+
+    exit();
+}
+
+void GUITestThread::sl_testTimeOut() {
+    saveScreenshot();
+    cleanup();
+    testResult = QString("test timed out");
+    writeTestResult();
+    exit();
+}
+
+QString GUITestThread::launchTest(const GUITests &tests) {
+    QTimer::singleShot(test->getTimeout(), this, SLOT(sl_testTimeOut()));
+
+    HI::GUITestOpStatus os;
+    try {
+        foreach (HI::GUITest *t, tests) {
+            if (NULL != t) {
+                t->run(os);
+            }
+        }
+    } catch(HI::GUITestOpStatus *) {
+
+    }
+    QString result = os.getError();
+
+    //Run post checks if has error
+    if (!result.isEmpty()){
+        try {
+            foreach (HI::GUITest *t, postChecks()) {
+                if (NULL != t) {
+                    t->run(os);
+                }
+            }
+        } catch(HI::GUITestOpStatus *) {
+
+        }
+    }
+
+    return result;
+}
+
+GUITests GUITestThread::preChecks() {
+    GUITestBase *tb = AppContext::getGUITestBase();
+    SAFE_POINT(NULL != tb, "GUITestBase is NULL", GUITests());
+
+//    GUITests additionalChecks = tb->takeTests(GUITestBase::PreAdditional);
+    GUITests additionalChecks = tb->getTests(GUITestBase::PreAdditional);
+    SAFE_POINT(!additionalChecks.isEmpty(), "additionalChecks is empty", GUITests());
+
+    return additionalChecks;
+}
+
+GUITests GUITestThread::postChecks() {
+    GUITestBase *tb = AppContext::getGUITestBase();
+    SAFE_POINT(NULL != tb, "GUITestBase is NULL", GUITests());
+
+//    GUITests additionalChecks = tb->takeTests(GUITestBase::PostAdditionalChecks);
+    GUITests additionalChecks = tb->getTests(GUITestBase::PostAdditionalChecks);
+    SAFE_POINT(!additionalChecks.isEmpty(), "additionalChecks is empty", GUITests());
+
+    return additionalChecks;
+}
+
+GUITests GUITestThread::postActions() {
+    GUITestBase *tb = AppContext::getGUITestBase();
+    SAFE_POINT(NULL != tb, "GUITestBase is NULL", GUITests());
+
+//    GUITests additionalChecks = tb->takeTests(GUITestBase::PostAdditionalActions);
+    GUITests additionalChecks = tb->getTests(GUITestBase::PostAdditionalActions);
+    SAFE_POINT(!additionalChecks.isEmpty(), "additionalChecks is empty", GUITests());
+
+    return additionalChecks;
+}
+
+void GUITestThread::clearSandbox() {
+    log.trace("GUITestThread __ clearSandbox");
+
+    const QString pathToSandbox = HI::GUITest::testDir + "_common_data/scenarios/sandbox/";
+    QDir sandbox(pathToSandbox);
+
+    foreach (const QString &fileName, sandbox.entryList()) {
+        if (fileName != "." && fileName != "..") {
+            if (QFile::remove(pathToSandbox + fileName)) {
+                continue;
+            } else {
+                QDir dir(pathToSandbox + fileName);
+                removeDir(dir.absolutePath());
+            }
+        }
+    }
+}
+
+void GUITestThread::removeDir(const QString &dirName) {
+    QDir dir(dirName);
+
+    foreach (const QFileInfo &fileInfo, dir.entryInfoList()) {
+        const QString fileName = fileInfo.fileName();
+        const QString filePath = fileInfo.filePath();
+        if (fileName != "." && fileName != "..") {
+            if (QFile::remove(filePath)) {
+                continue;
+            } else {
+                QDir dir(filePath);
+                if (dir.rmdir(filePath)) {
+                    continue;
+                } else {
+                    removeDir(filePath);
+                }
+            }
+        }
+    }
+    dir.rmdir(dir.absoluteFilePath(dirName));
+}
+
+void GUITestThread::saveScreenshot() {
+    class Scenario : public HI::CustomScenario {
+    public:
+        Scenario(HI::GUITest *test) :
+            test(test)
+        {
+
+        }
+
+        void run(HI::GUITestOpStatus &) {
+            const QPixmap originalPixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
+            originalPixmap.save(HI::GUITest::screenshotDir + test->getFullName() + ".jpg");
+        }
+
+    private:
+        HI::GUITest *test;
+    };
+
+    HI::GUITestOpStatus os;
+    HI::MainThreadRunnable::runInMainThread(os, new Scenario(test));
+}
+
+void GUITestThread::cleanup() {
+    foreach (HI::GUITest *postAction, postActions()) {
+        HI::GUITestOpStatus os;
+        try {
+            postAction->run(os);
+        } catch (HI::GUITestOpStatus *opStatus) {
+            coreLog.error(opStatus->getError());
+        }
+    }
+}
+
+void GUITestThread::writeTestResult() {
+    printf("%s\n", (GUITestService::GUITESTING_REPORT_PREFIX + ": " + testResult).toUtf8().data());
+}
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
similarity index 50%
copy from src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
copy to src/corelibs/U2Test/src/gui_tests/GUITestThread.h
index c43bc30..79907c2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
@@ -19,23 +19,49 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_ITEM_TO_IMPORT_EDIT_DIALOG_FILLER_H_
-#define _U2_ITEM_TO_IMPORT_EDIT_DIALOG_FILLER_H_
+#ifndef _U2_GUI_TEST_THREAD_H_
+#define _U2_GUI_TEST_THREAD_H_
 
-#include "GTUtilsDialog.h"
+#include <QThread>
+#include <U2Core/global.h>
+#include <core/GUITest.h>
 
 namespace U2 {
 
-class ItemToImportEditDialogFiller : public Filler {
+class Logger;
+typedef QList<HI::GUITest *> GUITests;
+
+class U2TEST_EXPORT GUITestThread : public QThread {
+    Q_OBJECT
 public:
-    ItemToImportEditDialogFiller(U2OpStatus& os, const QVariantMap& data);
+    GUITestThread(HI::GUITest *test, Logger &log, bool needCleanup = true);
 
     void run();
 
+    HI::GUITest* getTest(){ return test; }
+    QString getTestResult() { return testResult; }
+
+private slots:
+    void sl_testTimeOut();
+
 private:
-    QVariantMap data;
+    QString launchTest(const GUITests &tests);
+
+    static GUITests preChecks();
+    static GUITests postChecks();
+    static GUITests postActions();
+    void clearSandbox();
+    static void removeDir(const QString &dirName);
+    void saveScreenshot();
+    static void cleanup();
+    void writeTestResult();
+
+    HI::GUITest *test;
+    Logger &log;
+    bool needCleanup;
+    QString testResult;
 };
 
 }   // namespace U2
 
-#endif // _U2_ITEM_TO_IMPORT_EDIT_DIALOG_FILLER_H_
+#endif // _U2_GUI_TEST_THREAD_H_
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
index f857a91..6ed30be 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
@@ -268,12 +268,12 @@ QString EventFilter::setValuesWhenFocusGone(QWidget *w){
     return "";
 }
 
-QString EventFilter::menuBarCode(QMenuBar *menuBar) const{
+QString EventFilter::menuBarCode(QMenuBar *menuBar) const {
     QString result("");
     CHECK(m != NULL, "");
     CHECK(menuBar != NULL, "");
     QAction* menuBarAct = menuBar->actionAt(menuBar->mapFromGlobal(m->globalPos()));
-    if(menuBarAct != NULL){
+    if (menuBarAct != NULL) {
         result.append(QString("QMenu* menu = GTMenu::showMainMenu(os, \"%1\");\n").arg(menuBarAct->objectName()));
     }
     return result;
@@ -380,7 +380,7 @@ QString EventFilter::generateFillerHeader(){
     QString fillerName = dialog->objectName() + "Filler";
 
     result.append("#include \"GTUtilsDialog.h\"\n"
-              "#include \"api/GTFileDialog.h\"\n\n");
+              "#include \"base_dialogs/GTFileDialog.h\"\n\n");
     result.append(QString("namespace U2 {\n"
                   "\n"
                   "class %1 : public Filler {\n"
@@ -415,12 +415,12 @@ QString EventFilter::generateFillerSource() const{
     QString fillerName = dialog->objectName() + "Filler";
 
     result.append(QString("#include \"%1.h\"\n"
-              "#include \"api/GTWidget.h\"\n"
-              "#include \"api/GTSpinBox.h\"\n"
+              "#include \"primitives/GTWidget.h\"\n"
+              "#include \"primitives/GTSpinBox.h\"\n"
               "#include \"api/GTDoubleSpinBox.h\"\n"
               "#include \"api/GTCheckBox.h\"\n"
-              "#include \"api/GTLineEdit.h\"\n"
-              "#include \"api/GTComboBox.h\"\n"
+              "#include \"primitives/GTLineEdit.h\"\n"
+              "#include \"primitives/GTComboBox.h\"\n"
               "#include \"api/GTRadioButton.h\"\n"
               "#include <QtGui/QApplication>\n"
               "#include <QtGui/QGroupBox>\n"
diff --git a/src/corelibs/U2Test/transl/english.ts b/src/corelibs/U2Test/transl/english.ts
index 87baddf..bec09de 100644
--- a/src/corelibs/U2Test/transl/english.ts
+++ b/src/corelibs/U2Test/transl/english.ts
@@ -6,47 +6,47 @@
     <message>
         <location filename="../GUITestingWindow.ui" line="14"/>
         <source>GUI testing window</source>
-        <translation type="unfinished"></translation>
+        <translation>GUI testing window</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="22"/>
         <source>get parent info</source>
-        <translation type="unfinished"></translation>
+        <translation>get parent info</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="29"/>
         <source>switch off code generation</source>
-        <translation type="unfinished"></translation>
+        <translation>switch off code generation</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="36"/>
         <source>generate filler</source>
-        <translation type="unfinished"></translation>
+        <translation>generate filler</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="87"/>
         <source>Class name</source>
-        <translation type="unfinished"></translation>
+        <translation>Class name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="92"/>
         <source>Object name</source>
-        <translation type="unfinished"></translation>
+        <translation>Object name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="97"/>
         <source>Action name</source>
-        <translation type="unfinished"></translation>
+        <translation>Action name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="102"/>
         <source>Action text</source>
-        <translation type="unfinished"></translation>
+        <translation>Action text</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="107"/>
         <source>value</source>
-        <translation type="unfinished"></translation>
+        <translation>value</translation>
     </message>
 </context>
 <context>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="127"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="133"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="137"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="143"/>
         <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="226"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="238"/>
         <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="243"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="255"/>
         <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="245"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="257"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="289"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="289"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -137,22 +137,22 @@
 <context>
     <name>U2::GUITestService</name>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="76"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="73"/>
         <source>GUI test viewer</source>
         <translation>GUI test viewer</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="76"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="73"/>
         <source>Service to support UGENE GUI testing</source>
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="249"/>
+        <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>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="408"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="382"/>
         <source>GUI testing</source>
         <translation>GUI testing</translation>
     </message>
diff --git a/src/corelibs/U2Test/transl/russian.ts b/src/corelibs/U2Test/transl/russian.ts
index b61e1b2..3424ec0 100644
--- a/src/corelibs/U2Test/transl/russian.ts
+++ b/src/corelibs/U2Test/transl/russian.ts
@@ -6,47 +6,47 @@
     <message>
         <location filename="../GUITestingWindow.ui" line="14"/>
         <source>GUI testing window</source>
-        <translation type="unfinished"></translation>
+        <translation>GUI testing window</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="22"/>
         <source>get parent info</source>
-        <translation type="unfinished"></translation>
+        <translation>get parent info</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="29"/>
         <source>switch off code generation</source>
-        <translation type="unfinished"></translation>
+        <translation>switch off code generation</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="36"/>
         <source>generate filler</source>
-        <translation type="unfinished"></translation>
+        <translation>generate filler</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="87"/>
         <source>Class name</source>
-        <translation type="unfinished"></translation>
+        <translation>Class name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="92"/>
         <source>Object name</source>
-        <translation type="unfinished"></translation>
+        <translation>Object name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="97"/>
         <source>Action name</source>
-        <translation type="unfinished"></translation>
+        <translation>Action name</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="102"/>
         <source>Action text</source>
-        <translation type="unfinished"></translation>
+        <translation>Action text</translation>
     </message>
     <message>
         <location filename="../GUITestingWindow.ui" line="107"/>
         <source>value</source>
-        <translation type="unfinished"></translation>
+        <translation>value</translation>
     </message>
 </context>
 <context>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="127"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="133"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="137"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="143"/>
         <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="226"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="238"/>
         <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="243"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="255"/>
         <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="245"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="257"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="289"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="289"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -137,22 +137,22 @@
 <context>
     <name>U2::GUITestService</name>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="76"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="73"/>
         <source>GUI test viewer</source>
         <translation>GUI test viewer</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="76"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="73"/>
         <source>Service to support UGENE GUI testing</source>
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="249"/>
+        <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>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="408"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="382"/>
         <source>GUI testing</source>
         <translation>GUI testing</translation>
     </message>
diff --git a/src/corelibs/U2View/U2View.pro b/src/corelibs/U2View/U2View.pro
index 72f1967..d37803a 100644
--- a/src/corelibs/U2View/U2View.pro
+++ b/src/corelibs/U2View/U2View.pro
@@ -56,7 +56,7 @@ HEADERS += src/LicenseDialog.h \
            src/ov_msa/MSAEditor.h \
            src/ov_msa/MSAEditorConsensusArea.h \
            src/ov_msa/MSAEditorConsensusCache.h \
-           src/ov_msa/MSAEditorDataList.h \
+           src/ov_msa/MsaEditorSimilarityColumn.h \
            src/ov_msa/MSAEditorFactory.h \
            src/ov_msa/MSAEditorNameList.h \
            src/ov_msa/MSAEditorOffsetsView.h \
@@ -66,6 +66,7 @@ HEADERS += src/LicenseDialog.h \
            src/ov_msa/MSAEditorStatusBar.h \
            src/ov_msa/MSAEditorTasks.h \
            src/ov_msa/MSAEditorUndoFramework.h \
+           src/ov_msa/MsaUpdatedWidgetInterface.h \
            src/ov_msa/MsaOpSavableTab.h \
            src/ov_msa/MSASelectSubalignmentDialog.h \
            src/ov_msa/MsaEditorUserModStepController.h \
@@ -80,6 +81,7 @@ HEADERS += src/LicenseDialog.h \
            src/ov_msa/PairAlign/PairAlignFactory.h \
            src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h \
            src/ov_msa/PhyTrees/MSAEditorTreeManager.h \
+           src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h \
            src/ov_msa/PhyTrees/MSAEditorTreeViewer.h \
            src/ov_msa/SaveSelectedSequenceFromMSADialogController.h \
            src/ov_msa/SeqStatistics/SeqStatisticsWidget.h \
@@ -119,9 +121,6 @@ HEADERS += src/LicenseDialog.h \
            src/ov_sequence/AnnotationsTreeView.h \
            src/ov_sequence/AutoAnnotationUtils.h \
            src/ov_sequence/CreateRulerDialogController.h \
-           src/ov_sequence/Das/DasOptionsPanelSavableTab.h \
-           src/ov_sequence/Das/DasOptionsPanelWidget.h \
-           src/ov_sequence/Das/DasWidgetFactory.h \
            src/ov_sequence/DetView.h \
            src/ov_sequence/EditAnnotationDialogController.h \
            src/ov_sequence/GSequenceGraphView.h \
@@ -159,6 +158,12 @@ HEADERS += src/LicenseDialog.h \
            src/ov_sequence/sequence_info/DinuclOccurTask.h \
            src/ov_sequence/sequence_info/SequenceInfo.h \
            src/ov_sequence/sequence_info/SequenceInfoFactory.h \
+           src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h \
+           src/ov_sequence/view_rendering/DetViewRenderer.h \
+           src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h \
+           src/ov_sequence/view_rendering/PanViewRenderer.h \
+           src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h \
+           src/ov_sequence/view_rendering/SequenceViewRenderer.h \
            src/ov_text/SimpleTextObjectView.h \
            src/ov_text/SimpleTextObjectViewTasks.h \
            src/phyltree/BaseSettingsDialog.h \
@@ -199,8 +204,6 @@ FORMS += src/ov_assembly/ui/ExportConsensusDialog.ui \
          src/ov_msa/ui/SequenceSelectorWidget.ui \
          src/ov_msa/ui/TreeOptionsWidget.ui \
          src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui \
-         src/ov_sequence/Das/ui/DasBlastSettingsWidget.ui \
-         src/ov_sequence/Das/ui/DasOptionsPanelWidget.ui \
          src/ov_sequence/find_pattern/ui/FindPatternForm.ui \
          src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui \
          src/ov_sequence/ui/CreateRulerDialog.ui \
@@ -273,7 +276,7 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_msa/MSAEditor.cpp \
            src/ov_msa/MSAEditorConsensusArea.cpp \
            src/ov_msa/MSAEditorConsensusCache.cpp \
-           src/ov_msa/MSAEditorDataList.cpp \
+           src/ov_msa/MsaEditorSimilarityColumn.cpp \
            src/ov_msa/MSAEditorFactory.cpp \
            src/ov_msa/MSAEditorNameList.cpp \
            src/ov_msa/MSAEditorOffsetsView.cpp \
@@ -299,9 +302,10 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_msa/PairAlign/PairAlignFactory.cpp \
            src/ov_msa/TreeOptions/TreeOptionsWidget.cpp \
            src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp \
-           src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp \
            src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp \
            src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp \
+           src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp \
+           src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp \
            src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp \
            src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp \
            src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp \
@@ -335,9 +339,6 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/AnnotationsTreeView.cpp \
            src/ov_sequence/AutoAnnotationUtils.cpp \
            src/ov_sequence/CreateRulerDialogController.cpp \
-           src/ov_sequence/Das/DasOptionsPanelSavableTab.cpp \
-           src/ov_sequence/Das/DasOptionsPanelWidget.cpp \
-           src/ov_sequence/Das/DasWidgetFactory.cpp \
            src/ov_sequence/DetView.cpp \
            src/ov_sequence/EditAnnotationDialogController.cpp \
            src/ov_sequence/GraphLabelModel.cpp \
@@ -360,6 +361,7 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.cpp \
            src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp \
            src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp \
+           src/ov_sequence/codon_table/CodonTable.cpp \
            src/ov_sequence/find_pattern/FindPatternTask.cpp \
            src/ov_sequence/find_pattern/FindPatternWidget.cpp \
            src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp \
@@ -373,7 +375,12 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/sequence_info/DNAStatisticsTask.cpp \
            src/ov_sequence/sequence_info/SequenceInfo.cpp \
            src/ov_sequence/sequence_info/SequenceInfoFactory.cpp \
-           src/ov_sequence/codon_table/CodonTable.cpp \
+           src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp \
+           src/ov_sequence/view_rendering/DetViewRenderer.cpp \
+           src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp \
+           src/ov_sequence/view_rendering/PanViewRenderer.cpp \
+           src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp \
+           src/ov_sequence/view_rendering/SequenceViewRenderer.cpp \
            src/ov_text/SimpleTextObjectView.cpp \
            src/ov_text/SimpleTextObjectViewTasks.cpp \
            src/phyltree/BaseSettingsDialog.cpp \
diff --git a/src/corelibs/U2View/src/UndoRedoFramework.cpp b/src/corelibs/U2View/src/UndoRedoFramework.cpp
index f75c9e4..773c6ca 100644
--- a/src/corelibs/U2View/src/UndoRedoFramework.cpp
+++ b/src/corelibs/U2View/src/UndoRedoFramework.cpp
@@ -117,7 +117,9 @@ void MsaUndoRedoFramework::sl_undo() {
     objDbi->undo(msaRef.entityId, os);
     SAFE_POINT_OP(os, );
 
-    maObj->updateCachedMAlignment();
+    MAlignmentModInfo modInfo;
+    modInfo.type = MAlignmentModType_Undo;
+    maObj->updateCachedMAlignment(modInfo);
 }
 
 void MsaUndoRedoFramework::sl_redo() {
@@ -138,7 +140,9 @@ void MsaUndoRedoFramework::sl_redo() {
     objDbi->redo(msaRef.entityId, os);
     SAFE_POINT_OP(os, );
 
-    maObj->updateCachedMAlignment();
+    MAlignmentModInfo modInfo;
+    modInfo.type = MAlignmentModType_Redo;
+    maObj->updateCachedMAlignment(modInfo);
 }
 
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
index 5fc51b1..cb803f0 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
@@ -38,6 +38,7 @@
 #include <U2Core/FormatUtils.h>
 #include <U2Core/GObjectSelection.h>
 #include <U2Core/L10n.h>
+#include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/QObjectScopedPointer.h>
@@ -62,6 +63,7 @@
 #include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/OptionsPanel.h>
 #include <U2Gui/PositionSelector.h>
+#include <U2Gui/ProjectUtils.h>
 #include <U2Gui/ProjectView.h>
 
 #include <U2View/ConvertAssemblyToSamDialog.h>
@@ -974,13 +976,14 @@ namespace {
         return loadReferenceTask->property(REFERENCE_URL_PROPERTY).toString();
     }
 
+    void prepareLoadReferenceTask(const QString &referenceUrl, Task *loadReferenceTask) {
+        loadReferenceTask->setProperty(REFERENCE_URL_PROPERTY, referenceUrl);
+    }
+
     Task * createLoadReferenceTask(const QString &url) {
         QVariantMap hints;
         hints[ProjectLoaderHint_LoadWithoutView] = true;
-        Task *task = AppContext::getProjectLoader()->openWithProjectTask(QList<GUrl>() << url, hints);
-        CHECK(NULL != task, NULL);
-        task->setProperty(REFERENCE_URL_PROPERTY, url);
-        return task;
+        return AppContext::getProjectLoader()->openWithProjectTask(QList<GUrl>() << url, hints);
     }
 }
 
@@ -1009,14 +1012,43 @@ void AssemblyBrowser::loadReferenceFromFile() {
     QString url = chooseReferenceUrl();
     CHECK(!url.isEmpty(), );
 
-    loadReferenceTask = createLoadReferenceTask(url);
-    CHECK(NULL != loadReferenceTask, );
+    if (ProjectUtils::hasLoadedDocument(url)) {
+        setReference(ProjectUtils::findDocument(url));
+        return;
+    }
 
-    connect(loadReferenceTask, SIGNAL(si_stateChanged()), SLOT(sl_onReferenceLoaded()));
-    AppContext::getTaskScheduler()->registerTopLevelTask(loadReferenceTask);
+    bool loadInProgress = false;
+    if (ProjectUtils::hasUnloadedDocument(url)) {
+        loadReferenceTask = ProjectUtils::findLoadTask(url);
+        if (NULL == loadReferenceTask) {
+            loadReferenceTask = new LoadUnloadedDocumentTask(ProjectUtils::findDocument(url));
+        } else {
+            loadInProgress = true;
+        }
+    } else {
+        loadReferenceTask = createLoadReferenceTask(url);
+        CHECK(NULL != loadReferenceTask, );
+    }
 
+    prepareLoadReferenceTask(url, loadReferenceTask);
+    connect(loadReferenceTask, SIGNAL(si_stateChanged()), SLOT(sl_onReferenceLoaded()));
     setReferenceAction->setDisabled(true);
     model->setLoadingReference(true);
+
+    if (!loadInProgress) {
+        AppContext::getTaskScheduler()->registerTopLevelTask(loadReferenceTask);
+    }
+}
+
+void AssemblyBrowser::setReference(const Document *doc) {
+    CHECK(NULL != doc, );
+    const QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::SEQUENCE);
+
+    if (1 == objects.size()) {
+        tryAddObject(objects.first());
+    } else {
+        showReferenceLoadingError(objects, doc->getURLString());
+    }
 }
 
 void AssemblyBrowser::sl_setReference() {
@@ -1052,15 +1084,8 @@ void AssemblyBrowser::sl_onReferenceLoaded() {
 
     const Project *project = AppContext::getProject();
     CHECK(NULL != project, );
-    const Document *doc = project->findDocumentByURL(url);
-    CHECK(NULL != doc, );
-    const QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::SEQUENCE);
 
-    if (1 == objects.size()) {
-        tryAddObject(objects.first());
-    } else {
-        showReferenceLoadingError(objects, url);
-    }
+    setReference(project->findDocumentByURL(url));
 }
 
 //==============================================================================
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
index 655ea43..1507003 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
@@ -186,6 +186,7 @@ private:
     QString chooseReferenceUrl() const;
     void loadReferenceFromFile();
     void showReferenceLoadingError(const QList<GObject*> &sequenceObjects, const QString &url) const;
+    void setReference(const Document *doc);
 
 private:
     AssemblyBrowserUi * ui;
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
index 031c9f3..c9d126c 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
@@ -65,7 +65,15 @@ void OpenAssemblyBrowserTask::open() {
         Document* doc = documentsToLoad.first();
         QList<GObject*> objects;
         if (unloadedObjRef.isValid()) {
-            GObject* obj = doc->findGObjectByName(unloadedObjRef.objName);
+            //To do: replace the object finding to "GObject* obj = doc->findGObjectByName(unloadedObjRef.objName);" after fixing of UGENE-4904
+            QList<GObject*> objs = doc->findGObjectByType(unloadedObjRef.objType);
+            GObject* obj = NULL;
+            foreach(GObject* curObj, objs) {
+                if (curObj->getGObjectName() == unloadedObjRef.objName) {
+                    obj = curObj;
+                    break;
+                }
+            }
             if (obj!=NULL && obj->getGObjectType() == GObjectTypes::ASSEMBLY) {
                 selectedObjects.append(qobject_cast<AssemblyObject*>(obj));
             }
@@ -148,7 +156,14 @@ void OpenSavedAssemblyBrowserTask::open() {
     if (doc->isDatabaseConnection() && ref.entityRef.isValid()) {
         obj = doc->getObjectById(ref.entityRef.entityId);
     } else {
-        obj = doc->findGObjectByName(ref.objName);
+        //To do: replace the object finding to "GObject* obj = doc->findGObjectByName(unloadedObjRef.objName);" after fixing of UGENE-4904
+        QList<GObject*> objs = doc->findGObjectByType(ref.objType);
+        foreach(GObject* curObj, objs) {
+            if (curObj->getGObjectName() == ref.objName) {
+                obj = curObj;
+                break;
+            }
+        }
     }
     if (obj == NULL || obj->getGObjectType() != GObjectTypes::ASSEMBLY) {
         stateIsIllegal = true;
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
index 7a18b51..399da3c 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 = "16126749";
+const QString AssemblyInfoWidgetFactory::GROUP_DOC_PAGE = "17466147";
 
 
 AssemblyInfoWidgetFactory::AssemblyInfoWidgetFactory()
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
index 1929977..dcf5d1c 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 = "16126747";
+const QString AssemblyNavigationWidgetFactory::GROUP_DOC_PAGE = "17466145";
 
 AssemblyNavigationWidgetFactory::AssemblyNavigationWidgetFactory() {
     objectViewOfWidget = ObjViewType_AssemblyBrowser;
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
index 80195a2..9d80483 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 = "16126748";
+const QString AssemblySettingsWidgetFactory::GROUP_DOC_PAGE = "17466146";
 
 
 AssemblySettingsWidgetFactory::AssemblySettingsWidgetFactory()
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
index f4ed3a6..a5cd128 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
@@ -44,7 +44,7 @@ ExportConsensusDialog::ExportConsensusDialog(QWidget *p, const ExportConsensusTa
     : QDialog(p), settings(settings_)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126742");
+    new HelpButton(this, buttonBox, "17466140");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
index 1ba9924..1f63e2e 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
@@ -47,7 +47,7 @@ ExportConsensusVariationsDialog::ExportConsensusVariationsDialog(QWidget *p, con
 {
     setupUi(this);
     setWindowTitle(tr("Export Consensus Variations"));
-    new HelpButton(this, buttonBox, "16126744");
+    new HelpButton(this, buttonBox, "17466142");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
index 5ecc92d..b6da892 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
@@ -171,7 +171,7 @@ void ExportCoverageDialog::sl_formatChanged(const QString &format) {
 
 void ExportCoverageDialog::initLayout() {
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
-    new HelpButton(this, buttonBox, "16126745");
+    new HelpButton(this, buttonBox, "17466143");
     gbAdditionalOptions->hide();
     adjustSize();
 }
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
index 7e4a679..1e7cbae 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
@@ -46,7 +46,7 @@ namespace U2 {
 
 ExportReadsDialog::ExportReadsDialog(QWidget * p, const QList<DocumentFormatId> & formats) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126740");
+    new HelpButton(this, buttonBox, "17466138");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
index 1c81982..1045dbf 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
@@ -1,323 +1,328 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/DocumentSelection.h>
-#include <U2Core/DocumentUtils.h>
-#include <U2Core/ExternalToolRunTask.h>
-#include <U2Core/GObjectSelection.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MSAUtils.h>
-#include <U2Core/MsaDbiUtils.h>
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2DbiUtils.h>
-#include <U2Core/U2MsaDbi.h>
-#include <U2Core/U2SequenceUtils.h>
-
-#include <U2Gui/U2FileDialog.h>
-#include <U2Gui/ProjectView.h>
-#include <U2View/MSAEditor.h>
-
-#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
-#include <U2Algorithm/AbstractAlignmentTask.h>
-#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
-
-#include "AlignSequencesToAlignmentTask.h"
-
-#include <QtCore/QDir>
-#include <QMessageBox>
-
-namespace U2 {
-
-const int LoadSequencesTask::maxErrorListSize = 5;
-
-/************************************************************************/
-/* SequencesExtractor */
-/************************************************************************/
-SequenceObjectsExtractor::SequenceObjectsExtractor() : extractFromMsa(false), sequencesMaxLength(0) {}
-
-void SequenceObjectsExtractor::setAlphabet(const DNAAlphabet* newAlphabet) {
-    seqsAlphabet = newAlphabet;
-}
-
-void SequenceObjectsExtractor::extractSequencesFromDocuments(const QList<Document*>& documentsList) {
-    foreach(Document* curDocument, documentsList) {
-        extractSequencesFromDocument(curDocument);
-    }
-}
-
-void SequenceObjectsExtractor::extractSequencesFromDocument(Document* doc) {
-    extractSequencesFromObjects(doc->getObjects());
-}
-
-void SequenceObjectsExtractor::extractSequencesFromObjects(const QList<GObject*>& objects) {
-    foreach(GObject* object, objects) {
-        Document* doc = object->getDocument();
-        if(doc != NULL) {
-            if(!usedDocuments.contains(doc)){
-                usedDocuments << doc;
-            }
-        }
-
-        if(object->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT) {
-            extractFromMsa = true;
-            MAlignmentObject* curObj = qobject_cast<MAlignmentObject*>(object);
-            SAFE_POINT(curObj != NULL, "MAlignmentObject is null",);
-
-            checkAlphabet(curObj->getAlphabet(), curObj->getGObjectName());
-            sequencesMaxLength = qMax(sequencesMaxLength, curObj->getLength());
-
-            foreach(const MAlignmentRow& row, curObj->getMAlignment().getRows()) {
-                U2EntityRef seqRef(curObj->getEntityRef().dbiRef, row.getRowDBInfo().sequenceId);
-                sequenceRefs << seqRef;
-                sequenceNames << row.getName();
-            }
-        } else if(object->getGObjectType() == GObjectTypes::SEQUENCE) {
-            U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(object);
-            SAFE_POINT(dnaObj != NULL, "U2SequenceObject is null",);
-            sequencesMaxLength = qMax(sequencesMaxLength, dnaObj->getSequenceLength());
-            sequenceRefs << dnaObj->getEntityRef();
-            sequenceNames << dnaObj->getSequenceName();
-
-            checkAlphabet(dnaObj->getAlphabet(), dnaObj->getGObjectName());
-        }
-    }
-}
-
-void SequenceObjectsExtractor::checkAlphabet(const DNAAlphabet* newAlphabet, const QString& objectName) {
-    if(seqsAlphabet == NULL) {
-        seqsAlphabet = newAlphabet;
-    } else {
-        const DNAAlphabet* commonAlphabet = U2AlphabetUtils::deriveCommonAlphabet(newAlphabet, seqsAlphabet);
-        if(commonAlphabet == NULL) {
-            errorList << objectName;
-        } else {
-            seqsAlphabet = commonAlphabet;
-        }
-    }
-}
-
-const QStringList& SequenceObjectsExtractor::getErrorList() const {
-    return errorList;
-}
-
-const DNAAlphabet* SequenceObjectsExtractor::getAlphabet() const {
-    return seqsAlphabet;
-}
-
-const QList<U2EntityRef>& SequenceObjectsExtractor::getSequenceRefs() const {
-    return sequenceRefs;
-}
-
-const QStringList& SequenceObjectsExtractor::getSequenceNames() const {
-    return sequenceNames;
-}
-qint64 SequenceObjectsExtractor::getMaxSequencesLength() const {
-    return sequencesMaxLength;
-}
-
-const QList<Document*>& SequenceObjectsExtractor::getUsedDocuments() const {
-    return usedDocuments;
-}
-
-/************************************************************************/
-/* LoadSequencesTask */
-/************************************************************************/
-LoadSequencesTask::LoadSequencesTask(const DNAAlphabet* msaAlphabet, const QStringList& fileWithSequencesUrls)
-: Task(tr("Load sequences task"), TaskFlag_NoRun), msaAlphabet(msaAlphabet), urls(fileWithSequencesUrls), extractor()
-{
-    assert(!fileWithSequencesUrls.isEmpty());
-    extractor.setAlphabet(msaAlphabet);
-}
-
-void LoadSequencesTask::prepare()
-{
-    foreach( const QString& fileWithSequencesUrl, urls) {
-        QList<FormatDetectionResult> detectedFormats = DocumentUtils::detectFormat(fileWithSequencesUrl);
-        if (!detectedFormats.isEmpty()) {
-            LoadDocumentTask* loadTask = LoadDocumentTask::getDefaultLoadDocTask(fileWithSequencesUrl);
-            if(loadTask != NULL) {
-                addSubTask(loadTask);
-            }
-        } else {
-            setError("Unknown format");
-        }
-    }
-}
-
-QList<Task*> LoadSequencesTask::onSubTaskFinished(Task* subTask) {
-    QList<Task*> subTasks;
-
-    propagateSubtaskError();
-    if (subTask->isCanceled() || isCanceled() || hasError() ) {
-        return subTasks;
-    }
-
-    LoadDocumentTask* loadTask = qobject_cast<LoadDocumentTask*>(subTask);
-    SAFE_POINT(loadTask != NULL, "LoadDocumentTask is null", subTasks);
-
-    CHECK(loadTask->getDocument() != NULL, subTasks);
-    extractor.extractSequencesFromDocument(loadTask->getDocument());
-    return subTasks;
-}
-
-void LoadSequencesTask::setupError() {
-    CHECK(!extractor.getErrorList().isEmpty(), );
-
-    QStringList smallList = extractor.getErrorList().mid(0, maxErrorListSize);
-    QString error = tr("Some sequences have wrong alphabet: ");
-    error += smallList.join(", ");
-    if (smallList.size() < extractor.getErrorList().size()) {
-        error += tr(" and others");
-    }
-    setError(error);
-}
-
-Task::ReportResult LoadSequencesTask::report() {
-    CHECK_OP(stateInfo, ReportResult_Finished);
-
-    if(!extractor.getErrorList().isEmpty()) {
-        setupError();
-    }
-    if(extractor.getSequenceRefs().isEmpty()) {
-        QString filesSeparator(", ");
-        setError(tr("There are no sequences to align in the document(s): %1").arg(urls.join(filesSeparator)));
-        return ReportResult_Finished;
-    }
-    if(U2AlphabetUtils::deriveCommonAlphabet(extractor.getAlphabet(), msaAlphabet) == NULL) {
-        setError(tr("Sequences have incompatible alphabets"));
-    }
-    return ReportResult_Finished;
-}
-
-const SequenceObjectsExtractor& LoadSequencesTask::getExtractor() const {
-    return extractor;
-}
-
-
-
-/************************************************************************/
-/* AlignSequencesToAlignmentTask */
-/************************************************************************/
-AlignSequencesToAlignmentTask::AlignSequencesToAlignmentTask(MAlignmentObject* obj, const SequenceObjectsExtractor& extractor)
-: Task(tr("Align sequences to alignment task"), TaskFlags_NR_FOSE_COSC), maObj(obj), stateLock(NULL), docStateLock(NULL), sequencesMaxLength(extractor.getMaxSequencesLength())
-{
-    fillSettingsByDefault();
-    settings.addedSequencesRefs = extractor.getSequenceRefs();
-    settings.addedSequencesNames = extractor.getSequenceNames();
-    settings.maxSequenceLength = extractor.getMaxSequencesLength();
-    settings.alphabet = extractor.getAlphabet()->getId();
-    usedDocuments = extractor.getUsedDocuments();
-}
-
-void AlignSequencesToAlignmentTask::prepare()
-{
-    if (maObj.isNull()) {
-        stateInfo.setError(tr("Object is empty."));
-        return;
-    }
-
-    if (maObj->isStateLocked()) {
-        stateInfo.setError(tr("Object is locked for modifications."));
-        return;
-    }
-    Document* document =  maObj->getDocument();
-    SAFE_POINT(NULL != document, "MSA object is NULL.", );
-    docStateLock = new StateLock("Lock MSA for align sequences to alignment", StateLockFlag_LiveLock);
-    document->lockState(docStateLock);
-    foreach(Document* curDoc, usedDocuments) {
-        curDoc->lockState(docStateLock);
-    }
-
-    stateLock = new StateLock("Align sequences to alignment", StateLockFlag_LiveLock);
-    maObj->lockState(stateLock);
-
-    AlignmentAlgorithmsRegistry* alignmentRegistry = AppContext::getAlignmentAlgorithmsRegistry();
-    SAFE_POINT(NULL != alignmentRegistry, "AlignmentAlgorithmsRegistry is NULL.", );
-    AlignmentAlgorithm* addAlgorithm = alignmentRegistry->getAlgorithm(settings.algorithmName);
-    SAFE_POINT_EXT(NULL != addAlgorithm, setError(QString("Can not find \"%1\" algorithm").arg(settings.algorithmName)), );
-    addSubTask(addAlgorithm->getFactory()->getTaskInstance(&settings));
-}
-
-void AlignSequencesToAlignmentTask::fillSettingsByDefault() {
-    AlignmentAlgorithmsRegistry* alignmentRegistry = AppContext::getAlignmentAlgorithmsRegistry();
-    SAFE_POINT(NULL != alignmentRegistry, "AlignmentAlgorithmsRegistry is NULL.", );
-    if(alignmentRegistry->getAvailableAlgorithmIds(AddToAlignment).contains(BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT)) {
-        settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT;
-    } else {
-        settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_UGENE;
-    }
-    settings.addAsFragments = sequencesMaxLength < 100 && maObj->getLength() / sequencesMaxLength > 3;
-    settings.msaRef = maObj->getEntityRef();
-    settings.inNewWindow = false;
-}
-
-Task::ReportResult AlignSequencesToAlignmentTask::report() {
-    if(stateLock != NULL) {
-        maObj->unlockState(stateLock);
-        delete stateLock;
-    }
-
-    if(docStateLock != NULL) {
-        Document* document =  maObj->getDocument();
-        document->unlockState(docStateLock);
-
-        foreach(Document* curDoc, usedDocuments) {
-            curDoc->unlockState(docStateLock);
-        }
-
-        delete docStateLock;
-    }
-
-    if(!hasError() && !isCanceled()) {
-        maObj->updateCachedMAlignment();
-    }
-
-    return ReportResult_Finished;
-}
-
-/************************************************************************/
-/* LoadSequencesAndAlignToAlignmentTask */
-/************************************************************************/
-LoadSequencesAndAlignToAlignmentTask::LoadSequencesAndAlignToAlignmentTask(MAlignmentObject* obj, const QStringList& urls)
-: Task(tr("Load sequences and add to alignment task"), TaskFlag_NoRun), urls(urls), maObj(obj), loadSequencesTask(NULL) {
-    SAFE_POINT_EXT(obj != NULL, setError("MAlignmentObject is null"), );
-    loadSequencesTask = new LoadSequencesTask(obj->getAlphabet(), urls);
-    loadSequencesTask->setSubtaskProgressWeight(5);
-    addSubTask(loadSequencesTask);
-}
-
-QList<Task*> LoadSequencesAndAlignToAlignmentTask::onSubTaskFinished(Task* subTask) {
-    QList<Task*> subTasks;
-    propagateSubtaskError();
-    if(subTask == loadSequencesTask && !loadSequencesTask->hasError() && !loadSequencesTask->isCanceled()) {
-        AlignSequencesToAlignmentTask* alignSequencesToAlignmentTask = new AlignSequencesToAlignmentTask(maObj, loadSequencesTask->getExtractor());
-        alignSequencesToAlignmentTask->setSubtaskProgressWeight(95);
-        subTasks << alignSequencesToAlignmentTask;
-    }
-    return subTasks;
-}
-
-}
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/DocumentSelection.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/ExternalToolRunTask.h>
+#include <U2Core/GObjectSelection.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2SequenceUtils.h>
+
+#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/ProjectView.h>
+#include <U2View/MSAEditor.h>
+
+#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
+#include <U2Algorithm/AbstractAlignmentTask.h>
+#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
+
+#include "AlignSequencesToAlignmentTask.h"
+
+#include <QtCore/QDir>
+#include <QMessageBox>
+
+namespace U2 {
+
+const int LoadSequencesTask::maxErrorListSize = 5;
+
+/************************************************************************/
+/* SequencesExtractor */
+/************************************************************************/
+SequenceObjectsExtractor::SequenceObjectsExtractor() : extractFromMsa(false), sequencesMaxLength(0) {}
+
+void SequenceObjectsExtractor::setAlphabet(const DNAAlphabet* newAlphabet) {
+    seqsAlphabet = newAlphabet;
+}
+
+void SequenceObjectsExtractor::extractSequencesFromDocuments(const QList<Document*>& documentsList) {
+    foreach(Document* curDocument, documentsList) {
+        extractSequencesFromDocument(curDocument);
+    }
+}
+
+void SequenceObjectsExtractor::extractSequencesFromDocument(Document* doc) {
+    extractSequencesFromObjects(doc->getObjects());
+}
+
+void SequenceObjectsExtractor::extractSequencesFromObjects(const QList<GObject*>& objects) {
+    foreach(GObject* object, objects) {
+        Document* doc = object->getDocument();
+        if(doc != NULL) {
+            if(!usedDocuments.contains(doc)){
+                usedDocuments << doc;
+            }
+        }
+
+        if(object->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT) {
+            extractFromMsa = true;
+            MAlignmentObject* curObj = qobject_cast<MAlignmentObject*>(object);
+            SAFE_POINT(curObj != NULL, "MAlignmentObject is null",);
+
+            checkAlphabet(curObj->getAlphabet(), curObj->getGObjectName());
+            sequencesMaxLength = qMax(sequencesMaxLength, curObj->getLength());
+
+            foreach(const MAlignmentRow& row, curObj->getMAlignment().getRows()) {
+                U2EntityRef seqRef(curObj->getEntityRef().dbiRef, row.getRowDBInfo().sequenceId);
+                sequenceRefs << seqRef;
+                sequenceNames << row.getName();
+            }
+        } else if(object->getGObjectType() == GObjectTypes::SEQUENCE) {
+            U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(object);
+            SAFE_POINT(dnaObj != NULL, "U2SequenceObject is null",);
+            sequencesMaxLength = qMax(sequencesMaxLength, dnaObj->getSequenceLength());
+            sequenceRefs << dnaObj->getEntityRef();
+            sequenceNames << dnaObj->getSequenceName();
+
+            checkAlphabet(dnaObj->getAlphabet(), dnaObj->getGObjectName());
+        }
+    }
+}
+
+void SequenceObjectsExtractor::checkAlphabet(const DNAAlphabet* newAlphabet, const QString& objectName) {
+    if(seqsAlphabet == NULL) {
+        seqsAlphabet = newAlphabet;
+    } else {
+        const DNAAlphabet* commonAlphabet = U2AlphabetUtils::deriveCommonAlphabet(newAlphabet, seqsAlphabet);
+        if(commonAlphabet == NULL) {
+            errorList << objectName;
+        } else {
+            seqsAlphabet = commonAlphabet;
+        }
+    }
+}
+
+const QStringList& SequenceObjectsExtractor::getErrorList() const {
+    return errorList;
+}
+
+const DNAAlphabet* SequenceObjectsExtractor::getAlphabet() const {
+    return seqsAlphabet;
+}
+
+const QList<U2EntityRef>& SequenceObjectsExtractor::getSequenceRefs() const {
+    return sequenceRefs;
+}
+
+const QStringList& SequenceObjectsExtractor::getSequenceNames() const {
+    return sequenceNames;
+}
+qint64 SequenceObjectsExtractor::getMaxSequencesLength() const {
+    return sequencesMaxLength;
+}
+
+const QList<Document*>& SequenceObjectsExtractor::getUsedDocuments() const {
+    return usedDocuments;
+}
+
+/************************************************************************/
+/* LoadSequencesTask */
+/************************************************************************/
+LoadSequencesTask::LoadSequencesTask(const DNAAlphabet* msaAlphabet, const QStringList& fileWithSequencesUrls)
+: Task(tr("Load sequences task"), TaskFlag_NoRun), msaAlphabet(msaAlphabet), urls(fileWithSequencesUrls), extractor()
+{
+    assert(!fileWithSequencesUrls.isEmpty());
+    extractor.setAlphabet(msaAlphabet);
+}
+
+void LoadSequencesTask::prepare()
+{
+    foreach( const QString& fileWithSequencesUrl, urls) {
+        QList<FormatDetectionResult> detectedFormats = DocumentUtils::detectFormat(fileWithSequencesUrl);
+        if (!detectedFormats.isEmpty()) {
+            LoadDocumentTask* loadTask = LoadDocumentTask::getDefaultLoadDocTask(fileWithSequencesUrl);
+            if(loadTask != NULL) {
+                addSubTask(loadTask);
+            }
+        } else {
+            setError("Unknown format");
+        }
+    }
+}
+
+QList<Task*> LoadSequencesTask::onSubTaskFinished(Task* subTask) {
+    QList<Task*> subTasks;
+
+    propagateSubtaskError();
+    if (subTask->isCanceled() || isCanceled() || hasError() ) {
+        return subTasks;
+    }
+
+    LoadDocumentTask* loadTask = qobject_cast<LoadDocumentTask*>(subTask);
+    SAFE_POINT(loadTask != NULL, "LoadDocumentTask is null", subTasks);
+
+    CHECK(loadTask->getDocument() != NULL, subTasks);
+    extractor.extractSequencesFromDocument(loadTask->getDocument());
+    return subTasks;
+}
+
+void LoadSequencesTask::setupError() {
+    CHECK(!extractor.getErrorList().isEmpty(), );
+
+    QStringList smallList = extractor.getErrorList().mid(0, maxErrorListSize);
+    QString error = tr("Some sequences have wrong alphabet: ");
+    error += smallList.join(", ");
+    if (smallList.size() < extractor.getErrorList().size()) {
+        error += tr(" and others");
+    }
+    setError(error);
+}
+
+Task::ReportResult LoadSequencesTask::report() {
+    CHECK_OP(stateInfo, ReportResult_Finished);
+
+    if(!extractor.getErrorList().isEmpty()) {
+        setupError();
+    }
+    if(extractor.getSequenceRefs().isEmpty()) {
+        QString filesSeparator(", ");
+        setError(tr("There are no sequences to align in the document(s): %1").arg(urls.join(filesSeparator)));
+        return ReportResult_Finished;
+    }
+    if(U2AlphabetUtils::deriveCommonAlphabet(extractor.getAlphabet(), msaAlphabet) == NULL) {
+        setError(tr("Sequences have incompatible alphabets"));
+    }
+    return ReportResult_Finished;
+}
+
+const SequenceObjectsExtractor& LoadSequencesTask::getExtractor() const {
+    return extractor;
+}
+
+
+
+/************************************************************************/
+/* AlignSequencesToAlignmentTask */
+/************************************************************************/
+AlignSequencesToAlignmentTask::AlignSequencesToAlignmentTask(MAlignmentObject* obj, const SequenceObjectsExtractor& extractor)
+    : Task(tr("Align sequences to alignment task"), TaskFlags_NR_FOSE_COSC), maObj(obj), stateLock(NULL), docStateLock(NULL), 
+    sequencesMaxLength(extractor.getMaxSequencesLength()), extr(extractor)
+{
+    fillSettingsByDefault();
+    settings.addedSequencesRefs = extractor.getSequenceRefs();
+    settings.addedSequencesNames = extractor.getSequenceNames();
+    settings.maxSequenceLength = extractor.getMaxSequencesLength();
+    settings.alphabet = extractor.getAlphabet()->getId();
+    usedDocuments = extractor.getUsedDocuments();
+    initialMAlignmentAlphabet = obj->getAlphabet();
+}
+
+void AlignSequencesToAlignmentTask::prepare()
+{
+    if (maObj.isNull()) {
+        stateInfo.setError(tr("Object is empty."));
+        return;
+    }
+
+    if (maObj->isStateLocked()) {
+        stateInfo.setError(tr("Object is locked for modifications."));
+        return;
+    }
+    Document* document =  maObj->getDocument();
+    SAFE_POINT(NULL != document, "MSA object is NULL.", );
+    docStateLock = new StateLock("Lock MSA for align sequences to alignment", StateLockFlag_LiveLock);
+    document->lockState(docStateLock);
+    foreach(Document* curDoc, usedDocuments) {
+        curDoc->lockState(docStateLock);
+    }
+
+    stateLock = new StateLock("Align sequences to alignment", StateLockFlag_LiveLock);
+    maObj->lockState(stateLock);
+
+    AlignmentAlgorithmsRegistry* alignmentRegistry = AppContext::getAlignmentAlgorithmsRegistry();
+    SAFE_POINT(NULL != alignmentRegistry, "AlignmentAlgorithmsRegistry is NULL.", );
+    AlignmentAlgorithm* addAlgorithm = alignmentRegistry->getAlgorithm(settings.algorithmName);
+    SAFE_POINT_EXT(NULL != addAlgorithm, setError(QString("Can not find \"%1\" algorithm").arg(settings.algorithmName)), );
+    addSubTask(addAlgorithm->getFactory()->getTaskInstance(&settings));
+}
+
+void AlignSequencesToAlignmentTask::fillSettingsByDefault() {
+    AlignmentAlgorithmsRegistry* alignmentRegistry = AppContext::getAlignmentAlgorithmsRegistry();
+    SAFE_POINT(NULL != alignmentRegistry, "AlignmentAlgorithmsRegistry is NULL.", );
+    if(alignmentRegistry->getAvailableAlgorithmIds(AddToAlignment).contains(BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT) 
+        && maObj->getMAlignment().getNumRows() != 0) {
+        settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT;
+    } else {
+        settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_UGENE;
+    }
+    settings.addAsFragments = sequencesMaxLength < 100 && maObj->getLength() / sequencesMaxLength > 3;
+    settings.msaRef = maObj->getEntityRef();
+    settings.inNewWindow = false;
+}
+
+Task::ReportResult AlignSequencesToAlignmentTask::report() {
+    if(stateLock != NULL) {
+        maObj->unlockState(stateLock);
+        delete stateLock;
+    }
+
+    if(docStateLock != NULL) {
+        Document* document =  maObj->getDocument();
+        document->unlockState(docStateLock);
+
+        foreach(Document* curDoc, usedDocuments) {
+            curDoc->unlockState(docStateLock);
+        }
+
+        delete docStateLock;
+    }
+    MAlignmentModInfo mi;
+    mi.alphabetChanged = extr.getAlphabet()->getId() != initialMAlignmentAlphabet->getId();
+    mi.sequenceListChanged = true;
+    if(!hasError() && !isCanceled()) {
+        maObj->updateCachedMAlignment(mi);
+    }
+
+    return ReportResult_Finished;
+}
+
+/************************************************************************/
+/* LoadSequencesAndAlignToAlignmentTask */
+/************************************************************************/
+LoadSequencesAndAlignToAlignmentTask::LoadSequencesAndAlignToAlignmentTask(MAlignmentObject* obj, const QStringList& urls)
+: Task(tr("Load sequences and add to alignment task"), TaskFlag_NoRun), urls(urls), maObj(obj), loadSequencesTask(NULL) {
+    SAFE_POINT_EXT(obj != NULL, setError("MAlignmentObject is null"), );
+    loadSequencesTask = new LoadSequencesTask(obj->getAlphabet(), urls);
+    loadSequencesTask->setSubtaskProgressWeight(5);
+    addSubTask(loadSequencesTask);
+}
+
+QList<Task*> LoadSequencesAndAlignToAlignmentTask::onSubTaskFinished(Task* subTask) {
+    QList<Task*> subTasks;
+    propagateSubtaskError();
+    if(subTask == loadSequencesTask && !loadSequencesTask->hasError() && !loadSequencesTask->isCanceled()) {
+        AlignSequencesToAlignmentTask* alignSequencesToAlignmentTask = new AlignSequencesToAlignmentTask(maObj, loadSequencesTask->getExtractor());
+        alignSequencesToAlignmentTask->setSubtaskProgressWeight(95);
+        subTasks << alignSequencesToAlignmentTask;
+    }
+    return subTasks;
+}
+
+}
diff --git a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
index 37310d1..63e701a 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
+++ b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
@@ -64,6 +64,8 @@ public:
 
     const QList<Document*>& getUsedDocuments() const;
 
+    const DNAAlphabet* resultingAlphabet() const;
+
 private:
     void checkAlphabet(const DNAAlphabet* alphabet, const QString& objectName);
 
@@ -115,6 +117,8 @@ private:
     qint64 sequencesMaxLength;
     AlignSequencesToAlignmentTaskSettings settings;
     QList<Document*> usedDocuments;
+    const DNAAlphabet *initialMAlignmentAlphabet;
+    SequenceObjectsExtractor extr;
 };
 
 class LoadSequencesAndAlignToAlignmentTask : public Task {
diff --git a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
index a1d1b0f..c8a7704 100644
--- a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
@@ -98,7 +98,7 @@ QStringList MsaClipboardDataTaskFactory::getNamesBySelection(MSAEditor *context,
 }
 
 FormatsMsaClipboardTask::FormatsMsaClipboardTask(MAlignmentObject *msaObj, const U2Region &window, const QStringList &names, const DocumentFormatId &formatId)
-    :PrepareMsaClipboardDataTask(window, names), msaObj(msaObj), formatId(formatId){
+    :PrepareMsaClipboardDataTask(window, names), createSubalignmentTask(NULL), msaObj(msaObj), formatId(formatId){
 
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
index b59d72b..4fd08ee 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
@@ -44,7 +44,7 @@ ColorSchemaDialogController::ColorSchemaDialogController(QMap<char, QColor>& col
 
 int ColorSchemaDialogController::adjustAlphabetColors(){
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126679");
+    new HelpButton(this, buttonBox, "17466077");
     alphabetColorsView = new QPixmap(alphabetColorsFrame->size());
     connect(clearButton, SIGNAL(clicked()), SLOT(sl_onClear()));
     connect(restoreButton, SIGNAL(clicked()), SLOT(sl_onRestore()));
@@ -172,7 +172,7 @@ void ColorSchemaDialogController::mouseReleaseEvent(QMouseEvent * event){
 
 CreateColorSchemaDialog::CreateColorSchemaDialog(CustomColorSchema* _newSchema, QStringList _usedNames) : usedNames(_usedNames), newSchema(_newSchema) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126679");
+    new HelpButton(this, buttonBox, "17466077");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
index 6c570eb..4a809b3 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
@@ -91,7 +91,7 @@ static void setSchemaColors(const CustomColorSchema& customSchema){
 }
 
 
-const QString ColorSchemaSettingsPageController::helpPageId = QString("16126582");
+const QString ColorSchemaSettingsPageController::helpPageId = QString("17465980");
 
 ColorSchemaSettingsPageController::ColorSchemaSettingsPageController(MSAColorSchemeRegistry* mcsr, QObject* p)
 : AppSettingsGUIPageController(tr("Alignment Color Scheme"), ColorSchemaSettingsPageId, p) {
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
index 7250ec8..645cb62 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
@@ -56,7 +56,7 @@ namespace U2{
 CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmentObject *_mobj, const QRect& selection, QWidget *p)
 : QDialog(p), mobj(_mobj), saveContoller(NULL){
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126706");
+    new HelpButton(this, buttonBox, "17466104");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Extract"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
index 81dfb3c..3d3c5d4 100644
--- a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
@@ -32,7 +32,7 @@ namespace U2 {
 
 DeleteGapsDialog::DeleteGapsDialog(QWidget* parent, int rowNum): QDialog(parent) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126692");
+    new HelpButton(this, buttonBox, "17466090");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
index 061ddb4..0830aad 100644
--- a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
@@ -30,9 +30,6 @@
 #include "ui_MSAExportSettings.h"
 #include "../MSASelectSubalignmentDialog.h"
 
-//400000 characters convert to 200 mb file in SVG format
-#define MAX_SVG_CHARACTERS 400000
-
 namespace U2 {
 
 MSAImageExportTask::MSAImageExportTask(MSAEditorUI *ui,
@@ -278,11 +275,22 @@ void MSAImageExportController::checkRegionToExport() {
     emit si_showMessage( disableMessage );
 }
 
+namespace {
+//400000 characters convert to 200 mb file in SVG format
+const qint64 MaxSvgCharacters = 400000;
+//SVG renderer can crash on regions large than 40000000
+const qint64 MaxSvgImageSize = 40000000;
+}
+
 bool MSAImageExportController::fitsInLimits() const {
     MSAEditor* editor = ui->getEditor();
     SAFE_POINT(editor != NULL, L10N::nullPointerError("MSAEditor"), false);
-    if ((msaSettings.exportAll ? editor->getAlignmentLen() : msaSettings.region.length) * editor->getColumnWidth() > IMAGE_SIZE_LIMIT
-            || (msaSettings.exportAll ? editor->getNumSequences() : msaSettings.seqIdx.size()) * editor->getRowHeight() > IMAGE_SIZE_LIMIT) {
+    qint64 imageWidth = (msaSettings.exportAll ? editor->getAlignmentLen() : msaSettings.region.length) * editor->getColumnWidth();
+    qint64 imageHeight = (msaSettings.exportAll ? editor->getNumSequences() : msaSettings.seqIdx.size()) * editor->getRowHeight();
+    if (imageWidth > IMAGE_SIZE_LIMIT || imageHeight > IMAGE_SIZE_LIMIT) {
+        return false;
+    } 
+    if (format.contains("svg", Qt::CaseInsensitive) && imageWidth * imageHeight > MaxSvgImageSize) {
         return false;
     }
     return true;
@@ -292,7 +300,7 @@ bool MSAImageExportController::canExportToSvg() const {
     MSAEditor* editor = ui->getEditor();
     SAFE_POINT(editor != NULL, L10N::nullPointerError("MSAEditor"), false);
     int charactersNumber = msaSettings.exportAll ? (editor->getNumSequences() * editor->getAlignmentLen()) : (msaSettings.region.length * msaSettings.seqIdx.size());
-    return charactersNumber < MAX_SVG_CHARACTERS;
+    return charactersNumber < MaxSvgCharacters;
 }
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
index 1b54676..2ef27f1 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 = "16126683";
+const QString MSAExportConsensusFactoryTab::GROUP_DOC_PAGE = "17466081";
 
 MSAExportConsensusFactoryTab::MSAExportConsensusFactoryTab() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
index 1bfb8c3..a5ec1a0 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
@@ -43,7 +43,7 @@ namespace U2{
 
 ExportHighligtningDialogController::ExportHighligtningDialogController(MSAEditorUI *msaui_, QWidget* p ): QDialog(p), msaui(msaui_){
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126684");
+    new HelpButton(this, buttonBox, "17466082");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     CHECK(AppContext::getAppSettings(), );
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
index bd66f13..b82224a 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 = "16126682";
+const QString MSAGeneralTabFactory::GROUP_DOC_PAGE = "17466080";
 
 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 1d6bed1..3d687ba 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
@@ -142,6 +142,10 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
 
     seqArea = msa->getUI()->getSequenceArea();
 
+    savableTab.disableSavingForWidgets(QStringList() << thresholdSlider->objectName() << highlightingScheme->objectName()
+        << colorScheme->objectName() << highlightingScheme->objectName());
+    U2WidgetStateStorage::restoreWidgetState(savableTab);
+
     initColorCB();
     sl_sync();
     connect(useDots, SIGNAL(stateChanged(int)), seqArea, SLOT(sl_doUseDots()));
@@ -155,12 +159,9 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
     connect(exportHighlightning, SIGNAL(clicked()), SLOT(sl_exportHighlightningClicked()));
     connect(thresholdSlider, SIGNAL(valueChanged(int)), SLOT(sl_highlightingParametersChanged()));
     connect(thresholdMoreRb, SIGNAL(toggled(bool)), SLOT(sl_highlightingParametersChanged()));
-    connect(thresholdLessRb, SIGNAL(toggled(bool)), SLOT(sl_highlightingParametersChanged()));
+    connect(thresholdLessRb, SIGNAL(toggled(bool)), SLOT(sl_highlightingParametersChanged()));   
 
     sl_updateHint();
-
-    savableTab.disableSavingForWidgets(QStringList() << thresholdSlider->objectName() << highlightingScheme->objectName());
-    U2WidgetStateStorage::restoreWidgetState(savableTab);
     sl_highlightingParametersChanged();
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
index cb2465d..44082b0 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 = "16126684";
+const QString MSAHighlightingFactory::GROUP_DOC_PAGE = "17466082";
 
 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 29749e9..3e025d7 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
@@ -80,7 +80,7 @@
 #include "ExportHighlightedDialogController.h"
 #include "MSAEditor.h"
 #include "MSAEditorConsensusArea.h"
-#include "MSAEditorDataList.h"
+#include "MsaEditorSimilarityColumn.h"
 #include "MSAEditorFactory.h"
 #include "MSAEditorNameList.h"
 #include "MSAEditorOffsetsView.h"
@@ -1042,7 +1042,7 @@ void MSAEditorUI::createDistanceColumn(MSADistanceMatrix* matrix)
 {
     dataList->setMatrix(matrix);
     dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-    MSAEditorAlignmentDependentWidget* statisticsWidget = new MSAEditorAlignmentDependentWidget(dataList);
+    MsaEditorAlignmentDependentWidget* statisticsWidget = new MsaEditorAlignmentDependentWidget(dataList);
 
     view.addObject(nameAreaContainer, statisticsWidget, 0.04, 1);
 }
@@ -1075,9 +1075,9 @@ void MSAEditorUI::showSimilarity() {
         settings.algoName = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmIds().at(0);
         settings.ui = this;
 
-        dataList = new MSAEditorSimilarityColumn(this, new QScrollBar(Qt::Horizontal), &settings);
+        dataList = new MsaEditorSimilarityColumn(this, new QScrollBar(Qt::Horizontal), &settings);
         dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-        similarityStatistics = new MSAEditorAlignmentDependentWidget(dataList);
+        similarityStatistics = new MsaEditorAlignmentDependentWidget(dataList);
 
         view.addObject(nameAreaContainer, similarityStatistics, 0.04, 1);
     }
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditor.h b/src/corelibs/U2View/src/ov_msa/MSAEditor.h
index a747cdc..dc8fff6 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditor.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditor.h
@@ -62,11 +62,11 @@ class MSAEditorUndoFramework;
 class PhyTreeGeneratorLauncherTask;
 class MSAEditorTreeViewer;
 class MSACollapsibleItemModel;
-class MSAEditorSimilarityColumn;
+class MsaEditorSimilarityColumn;
 class MSADistanceMatrix;
 class MSASNPHighligtingScheme;
 class SimilarityStatisticsSettings;
-class MSAEditorAlignmentDependentWidget;
+class MsaEditorAlignmentDependentWidget;
 class TreeViewer;
 class MSAEditorMultiTreeViewer;
 class PairwiseAlignmentTask;
@@ -303,7 +303,7 @@ class U2VIEW_EXPORT MSAEditorUI : public QWidget {
     friend class MSAEditorNameList;
     friend class MSAEditorTreeViewer;
     friend class MSAEditor;
-    friend class MSAEditorSimilarityColumn;
+    friend class MsaEditorSimilarityColumn;
 
 public:
     MSAEditorUI(MSAEditor* editor);
@@ -336,7 +336,7 @@ public:
     void showSimilarity();
     void hideSimilarity();
 
-    const MSAEditorAlignmentDependentWidget* getSimilarityWidget(){return similarityStatistics;}
+    const MsaEditorAlignmentDependentWidget* getSimilarityWidget(){return similarityStatistics;}
 
     MSAEditorTreeViewer* getCurrentTree() const;
 
@@ -352,6 +352,9 @@ signals:
     void si_showTreeOP();
     void si_hideTreeOP();
 
+    void si_startMsaChanging();
+    void si_stopMsaChanging(bool modifyed = false);
+
 private:
     MSAEditor*                         editor;
     MSAEditorNameList*                 nameList;
@@ -374,9 +377,9 @@ private:
     MSACollapsibleItemModel*        collapseModel;
     bool                            collapsibleMode;
 
-    MSAEditorSimilarityColumn*         dataList;
+    MsaEditorSimilarityColumn*         dataList;
     MSAEditorMultiTreeViewer*          multiTreeViewer;
-    MSAEditorAlignmentDependentWidget* similarityStatistics;
+    MsaEditorAlignmentDependentWidget* similarityStatistics;
     MSAEditorTreeViewer*               treeViewer;
 
     QAction                         *copySelectionAction;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.cpp
deleted file mode 100644
index 3ce9a28..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.cpp
+++ /dev/null
@@ -1,514 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "MSAEditorDataList.h"
-#include "MSAEditor.h"
-#include "MSAEditorSequenceArea.h"
-#include "PhyTrees/MSAEditorTreeManager.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/TaskSignalMapper.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/PhyTreeObject.h>
-
-#include <U2Gui/GUIUtils.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QSplitter>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QSplitter>
-#endif
-
-#include <QtGui/QClipboard>
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
-
-#include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
-#include <U2Algorithm/MSADistanceAlgorithm.h>
-
-namespace U2
-{
-
-const QString MSAEditorAlignmentDependentWidget::DataIsOutdatedMessage(QString("<FONT COLOR=#FF0000>%1</FONT>").arg(QObject::tr("Data is outdated")));
-const QString MSAEditorAlignmentDependentWidget::DataIsValidMessage(QString("<FONT COLOR=#00FF00>%1</FONT>").arg(QObject::tr("Data is valid")));
-const QString MSAEditorAlignmentDependentWidget::DataIsBeingUpdatedMessage(QString("<FONT COLOR=#0000FF>%1</FONT>").arg(QObject::tr("Data is being updated")));
-
-MSAEditorSimilarityColumn::MSAEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings)
-    : MSAEditorNameList(ui, nhBar),
-      matrix(NULL),
-      autoUpdate(true)
-{
-    newSettings = curSettings = *_settings;
-    updateDistanceMatrix();
-    setObjectName("msa_editor_similarity_column");
-}
-
-MSAEditorSimilarityColumn::~MSAEditorSimilarityColumn() {
-    CHECK(NULL != matrix, );
-    delete matrix;
-}
-
-QString MSAEditorSimilarityColumn::getTextForRow( int s ) {
-    if (NULL == matrix || state == DataIsBeingUpdated) {
-        return tr("-");
-    }
-
-    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
-    const qint64 referenceRowId = editor->getReferenceRowId();
-    if(MAlignmentRow::invalidRowId() == referenceRowId) {
-        return tr("-");
-    }
-
-    U2OpStatusImpl os;
-    const int refSequenceIndex = ma.getRowIndexByRowId(referenceRowId, os);
-    CHECK_OP(os, QString());
-
-    int sim = matrix->getSimilarity(refSequenceIndex, s);
-    CHECK(-1 != sim, tr("-"));
-    const QString units = matrix->areUsePercents() ? "%" : "";
-    return QString("%1").arg(sim) + units;
-}
-
-QString MSAEditorSimilarityColumn::getSeqName(int s) {
-    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
-
-    return ma.getRowNames().at(s);
-}
-
-void MSAEditorSimilarityColumn::updateScrollBar() {
-    // do nothing
-}
-
-void MSAEditorSimilarityColumn::setSettings(const UpdatedWidgetSettings* _settings) {
-    const SimilarityStatisticsSettings* set= static_cast<const SimilarityStatisticsSettings*>(_settings);
-    CHECK(NULL != set,);
-    autoUpdate = set->autoUpdate;
-    state = DataIsValid;
-    if(curSettings.algoName != set->algoName) {
-        state = DataIsOutdated;
-    }
-    if(curSettings.excludeGaps != set->excludeGaps) {
-        state = DataIsOutdated;
-    }
-    if(curSettings.usePercents != set->usePercents) {
-        if(NULL != matrix) {
-            matrix->showSimilarityInPercents(set->usePercents);
-            updateContent();
-        }
-        curSettings.usePercents = set->usePercents;
-    }
-    newSettings = *set;
-    if(autoUpdate && DataIsOutdated == state) {
-        state = DataIsBeingUpdated;
-        emit si_dataStateChanged(state);
-        updateDistanceMatrix();
-    }
-    emit si_dataStateChanged(state);
-}
-
-QString MSAEditorSimilarityColumn::getHeaderText() const {
-    return curSettings.usePercents ? "%" : tr("score");
-}
-
-void MSAEditorSimilarityColumn::updateDistanceMatrix() {
-    createDistanceMatrixTaskRunner.cancel();
-
-    CreateDistanceMatrixTask* createDistanceMatrixTask = new CreateDistanceMatrixTask(newSettings);
-    connect(new TaskSignalMapper(createDistanceMatrixTask), SIGNAL(si_taskFinished(Task*)), this, SLOT(sl_createMatrixTaskFinished(Task*)));
-
-    state = DataIsBeingUpdated;
-    createDistanceMatrixTaskRunner.run( createDistanceMatrixTask );
-}
-
-void MSAEditorSimilarityColumn::onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&) {
-    if(autoUpdate) {
-        state = DataIsBeingUpdated;
-        updateDistanceMatrix();
-    }
-    else {
-        state = DataIsOutdated;
-    }
-    emit si_dataStateChanged(state);
-}
-
-void MSAEditorSimilarityColumn::sl_createMatrixTaskFinished(Task* t) {
-    CreateDistanceMatrixTask* task = qobject_cast<CreateDistanceMatrixTask*> (t);
-    if(NULL != task && !task->hasError() && !task->isCanceled()) {
-        if(NULL != matrix) {
-            delete matrix;
-        }
-        matrix = task->getResult();
-        if(NULL != matrix) {
-            matrix->showSimilarityInPercents(newSettings.usePercents);
-        }
-    }
-    updateContent();
-    state = DataIsValid;
-    curSettings = newSettings;
-    emit si_dataStateChanged(state);
-}
-
-CreateDistanceMatrixTask::CreateDistanceMatrixTask(const SimilarityStatisticsSettings& _s)
-    : BackgroundTask<MSADistanceMatrix*>(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC),
-      s(_s),
-      resMatrix(NULL) {
-    SAFE_POINT(NULL != s.ma, QString("Incorrect MAlignment in MSAEditorSimilarityColumnTask ctor!"), );
-    SAFE_POINT(NULL != s.ui, QString("Incorrect MSAEditorUI in MSAEditorSimilarityColumnTask ctor!"), );
-    setVerboseLogMode(true);
-}
-
-void CreateDistanceMatrixTask::prepare() {
-    MSADistanceAlgorithmFactory* factory = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmFactory(s.algoName);
-    CHECK(NULL != factory,);
-    if(s.excludeGaps){
-        factory->setFlag(DistanceAlgorithmFlag_ExcludeGaps);
-    }else{
-        factory->resetFlag(DistanceAlgorithmFlag_ExcludeGaps);
-    }
-
-    MSADistanceAlgorithm* algo = factory->createAlgorithm(s.ma->getMAlignment());
-    //connect(s.ma, SIGNAL(si_rowsAdded()), algo, SLOT(sl_addEmptyDistanceRow()));
-    CHECK(NULL != algo,);
-    addSubTask(algo);
-}
-
-QList<Task*> CreateDistanceMatrixTask::onSubTaskFinished(Task* subTask){
-    QList<Task*> res;
-    if (isCanceled()) {
-        return res;
-    }
-    MSADistanceAlgorithm* algo = qobject_cast<MSADistanceAlgorithm*>(subTask);
-    MSADistanceMatrix *matrix = new MSADistanceMatrix(algo, s.usePercents && s.excludeGaps);
-    if(NULL != algo) {
-        if(algo->hasError()) {
-            setError(algo->getError());
-            return res;
-        }
-        resMatrix = matrix;
-    }
-    return res;
-}
-MSAEditorAlignmentDependentWidget::MSAEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget)
-: contentWidget(_contentWidget), automaticUpdating(true){
-    SAFE_POINT(NULL != _contentWidget, QString("Argument is NULL in constructor MSAEditorAlignmentDependentWidget()"),);
-
-    settings = &contentWidget->getSettings();
-    connect(settings->ma, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        this, SLOT(sl_onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-    connect(dynamic_cast<QObject*>(contentWidget), SIGNAL(si_dataStateChanged(DataState)),
-        this, SLOT(sl_onDataStateChanged(DataState)));
-    connect(settings->ui->getEditor(), SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_onFontChanged(const QFont&)));
-
-    createWidgetUI();
-
-    setSettings(settings);
-}
-void MSAEditorAlignmentDependentWidget::createWidgetUI() {
-    QVBoxLayout* mainLayout = new QVBoxLayout();
-
-    mainLayout->setMargin(0);
-    mainLayout->setSpacing(0);
-
-    createHeaderWidget();
-
-    mainLayout->addWidget(headerWidget);
-    mainLayout->addWidget(contentWidget->getWidget());
-    nameWidget.setText(contentWidget->getHeaderText());
-    nameWidget.setObjectName("Distance column name");
-
-    this->setLayout(mainLayout);
-}
-void MSAEditorAlignmentDependentWidget::createHeaderWidget() {
-    QVBoxLayout* headerLayout = new QVBoxLayout();
-    headerLayout->setMargin(0);
-    headerLayout->setSpacing(0);
-
-    nameWidget.setAlignment(Qt::AlignCenter);
-    nameWidget.setFont(settings->ui->getEditor()->getFont());
-    headerLayout->addWidget(&nameWidget);
-
-    state = DataIsValid;
-    headerWidget = new MSAWidget(settings->ui);
-    headerWidget->setLayout(headerLayout);
-}
-
-void MSAEditorAlignmentDependentWidget::setSettings(const UpdatedWidgetSettings* _settings) {
-    settings = _settings;
-    automaticUpdating = settings->autoUpdate;
-    contentWidget->setSettings(settings);
-    nameWidget.setText(contentWidget->getHeaderText());
-}
-
-void MSAEditorAlignmentDependentWidget::sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) {
-    contentWidget->onAlignmentChanged(maBefore, modInfo);
-}
-
-void MSAEditorAlignmentDependentWidget::sl_onUpdateButonPressed() {
-    contentWidget->updateWidget();
-}
-
-void MSAEditorAlignmentDependentWidget::sl_onDataStateChanged(DataState newState) {
-    state = DataIsValid;
-    switch(newState) {
-        case DataIsValid:
-            statusBar.setText(DataIsValidMessage);
-            updateButton.setEnabled(false);
-            break;
-        case DataIsBeingUpdated:
-            statusBar.setText(DataIsBeingUpdatedMessage);
-            updateButton.setEnabled(false);
-            break;
-        case DataIsOutdated:
-            statusBar.setText(DataIsOutdatedMessage);
-            updateButton.setEnabled(true);
-            break;
-    }
-}
-
-void MSAEditorAlignmentDependentWidget::sl_onFontChanged(const QFont& font) {
-    nameWidget.setFont(font);
-}
-
-UpdatedTabWidget::UpdatedTabWidget(QWidget* parent)
-: QTabWidget(parent) {
-    tabBar()->installEventFilter(this);
-    setTabsClosable(true);
-    buildMenu();
-    connect(this, SIGNAL(tabCloseRequested(int)), SLOT(sl_onTabCloseRequested(int)));
-}
-void UpdatedTabWidget::sl_onTabCloseRequested(int index) {
-    emit si_onTabCloseRequested(widget(index));
-}
-
-void UpdatedTabWidget::buildMenu()
-{
-    tabsMenu = new QMenu(this);
-    refreshAction = tabsMenu->addAction(tr("Refresh tab"));
-    connect(refreshAction, SIGNAL(triggered(bool)), SLOT(sl_refreshTriggered()));
-    refreshAllAction = tabsMenu->addAction(tr("Refresh all tabs"));
-    connect(refreshAllAction, SIGNAL(triggered(bool)), SLOT(sl_refreshAllTriggered()));
-
-    tabsMenu->addSeparator();
-
-    closeOtherTabs = tabsMenu->addAction(tr("Close other tabs"));
-    connect(closeOtherTabs, SIGNAL(triggered(bool)), SLOT(sl_closeOtherTabsTriggered()));
-    closeAllTabs = tabsMenu->addAction(tr("Close all tabs"));
-    connect(closeAllTabs, SIGNAL(triggered(bool)), SLOT(sl_closeAllTabsTriggered()));
-    closeTab = tabsMenu->addAction(tr("Close tab"));
-    connect(closeTab, SIGNAL(triggered(bool)), SLOT(sl_closeTabTriggered()));
-
-    tabsMenu->addSeparator();
-
-    addHorizontalSplitter = tabsMenu->addAction(tr("Add horizontal splitter"));
-    connect(addHorizontalSplitter, SIGNAL(triggered(bool)), SLOT(sl_addHSplitterTriggered()));
-    addVerticalSplitter = tabsMenu->addAction(tr("Add vertical splitter"));
-    connect(addVerticalSplitter, SIGNAL(triggered(bool)), SLOT(sl_addVSplitterTriggered()));
-}
-
-void UpdatedTabWidget::updateActionsState() {
-
-}
-
-
-int UpdatedTabWidget::addTab(QWidget *page, const QString &label ) {
-    return QTabWidget::addTab(page, label);
-}
-
-bool UpdatedTabWidget::eventFilter(QObject *target, QEvent *event)
-{
-    if (target == tabBar()) {
-        QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent *>(event);
-        if(NULL == mouseEvent) {
-            return QTabWidget::eventFilter(target, event);
-        }
-        if (mouseEvent->button() == Qt::RightButton) {
-            updateActionsState();
-            menuPos = mouseEvent->pos();
-            tabsMenu->popup( mouseEvent->globalPos());
-            return true;
-        }
-    }
-    return QTabWidget::eventFilter(target, event);
-}
-
-void UpdatedTabWidget::sl_refreshTriggered() {
-
-}
-void UpdatedTabWidget::sl_refreshAllTriggered() {
-
-}
-void UpdatedTabWidget::sl_closeOtherTabsTriggered() {
-    int selectedIndex = tabBar()->tabAt(menuPos);
-    int i = 0, start = 0;
-    while(1 < count()) {
-        if(i == selectedIndex) {
-            start = 1;
-            continue;
-        }
-        delete widget(start);
-        removeTab(start);
-        i++;
-    }
-}
-void UpdatedTabWidget::sl_closeAllTabsTriggered() {
-    while(count()) {
-        delete widget(0);
-        removeTab(0);
-    }
-}
-void UpdatedTabWidget::sl_closeTabTriggered() {
-    int index = tabBar()->tabAt(menuPos);
-    QWidget* pageWidget = widget(index);
-    removeTab(index);
-    delete pageWidget;
-}
-
-void UpdatedTabWidget::sl_addHSplitterTriggered() {
-    int index = tabBar()->tabAt(menuPos);
-    QWidget* pageWidget = widget(index);
-    if(pageWidget) {
-        emit si_addSplitterTriggered(Qt::Vertical, pageWidget, tabText(index));
-    }
-}
-void UpdatedTabWidget::sl_addVSplitterTriggered() {
-    int index = tabBar()->tabAt(menuPos);
-    QWidget* pageWidget = widget(index);
-    if(pageWidget) {
-        emit si_addSplitterTriggered(Qt::Horizontal, pageWidget, tabText(index));
-    }
-}
-TabWidgetArea::TabWidgetArea(QWidget* parent)
-: QWidget(parent), tabsCount(0), currentWidget(NULL), currentLayout(NULL) {
-}
-void TabWidgetArea::initialize() {
-    currentWidget = createTabWidget();
-    currentLayout = new QVBoxLayout();
-    currentLayout->setMargin(0);
-    currentLayout->setSpacing(0);
-    currentLayout->addWidget(currentWidget);
-    setLayout(currentLayout);
-}
-void TabWidgetArea::sl_onWidgetSelected(UpdatedTabWidget* widget) {
-    currentWidget = widget;
-}
-UpdatedTabWidget* TabWidgetArea::createTabWidget() {
-    UpdatedTabWidget* widget = new UpdatedTabWidget(this);
-    connect(widget, SIGNAL(si_onTabCloseRequested(QWidget*)), SLOT(sl_onTabCloseRequested(QWidget*)));
-    connect(widget, SIGNAL(si_addSplitterTriggered(Qt::Orientation, QWidget*, const QString &)), SLOT(sl_addSplitter(Qt::Orientation, QWidget*, const QString &)));
-    tabWidgets << widget;
-    return widget;
-}
-TabWidgetArea::~TabWidgetArea() {
-    foreach(QSplitter* splitter, splitters) {
-        delete splitter;
-    }
-}
-void TabWidgetArea::sl_onTabCloseRequested(QWidget* page) {
-    deleteTab(page);
-}
-void TabWidgetArea::deleteTab(QWidget *page) {
-    CHECK(-1 != currentWidget->indexOf(page),);
-    if(NULL != page) {
-        delete page;
-        tabsCount--;
-        emit si_tabsCountChanged(tabsCount);
-    }
-}
-void TabWidgetArea::addTab(QWidget *page, const QString &label) {
-    currentWidget->addTab(page, label);
-    widgetLocations[page] = currentWidget;
-    tabsCount++;
-    emit si_tabsCountChanged(tabsCount);
-}
-void TabWidgetArea::sl_addSplitter(Qt::Orientation splitterOrientation, QWidget* page, const QString &label) {
-    QSplitter* newSplitter = new QSplitter(splitterOrientation, this);
-    QWidget*   oldArea = new QWidget(this);
-    oldArea->setLayout(currentLayout);
-    UpdatedTabWidget* newTabs = createTabWidget();
-    newTabs->addTab(page, label);
-    newSplitter->addWidget(oldArea);
-    newSplitter->addWidget(newTabs);
-    splitters << newSplitter;
-
-    QVBoxLayout *layout = new QVBoxLayout();
-    layout->setMargin(0);
-    layout->setSpacing(0);
-    layout->addWidget(newSplitter);
-    setLayout(layout);
-    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-    currentLayout = layout;
-}
-void TabWidgetArea::paintEvent(QPaintEvent *) {
-    QPainter p(this);
-    p.fillRect(rect(), Qt::white);
-}
-
-MSAEditorUpdatedTabWidget::MSAEditorUpdatedTabWidget(MSAEditor* _msa, QWidget* parent)
-:   UpdatedTabWidget(parent), msa(_msa){
-    addTabButton = new QPushButton(QIcon(":/core/images/add_tree.png"), "", this);
-    addTabButton->setToolTip(tr("Add existing tree"));
-    setCornerWidget(addTabButton);
-    connect(addTabButton, SIGNAL(clicked(bool)), this, SLOT(sl_addTabTriggered()));
-}
-void MSAEditorUpdatedTabWidget::sl_addTabTriggered() {
-    emit si_widgetSelected(this);
-
-    msa->getTreeManager()->openTreeFromFile();
-}
-
-void MSAEditorUpdatedTabWidget::addExistingTree() {
-    msa->getTreeManager()->openTreeFromFile();
-}
-
-MSAEditorTabWidgetArea::MSAEditorTabWidgetArea(MSAEditor* _msa, QWidget* parent )
-: TabWidgetArea(parent), addTabButton(NULL), msa(_msa) {
-    initialize();
-}
-
-UpdatedTabWidget* MSAEditorTabWidgetArea::createTabWidget()
-{
-    MSAEditorUpdatedTabWidget* widget = new MSAEditorUpdatedTabWidget(msa, this);
-    connect(widget, SIGNAL(si_onTabCloseRequested(QWidget*)), SLOT(sl_onTabCloseRequested(QWidget*)));
-    connect(widget, SIGNAL(si_addSplitterTriggered(Qt::Orientation, QWidget*, const QString &)), SLOT(sl_addSplitter(Qt::Orientation, QWidget*, const QString &)));
-    connect(widget, SIGNAL(si_widgetSelected(UpdatedTabWidget*)), this, SLOT(sl_onWidgetSelected(UpdatedTabWidget*)));
-    tabWidgets << widget;
-    return widget;
-}
-
-void MSAEditorTabWidgetArea::deleteTab(QWidget *page) {
-    GObjectViewWindow* win = qobject_cast<GObjectViewWindow*>(page);
-    const GObject* obj = win->getObjectView()->getObjects().at(0);
-    Document* doc = obj->getDocument();
-    GObjectReference treeRef(doc->getURLString(), "", GObjectTypes::PHYLOGENETIC_TREE);
-    treeRef.objName = obj->getGObjectName();
-    msa->getMSAObject()->removeObjectRelation(GObjectRelation(treeRef, ObjectRole_PhylogeneticTree));
-
-    TabWidgetArea::deleteTab(page);
-}
-
-} //namespace
-
-
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.h b/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.h
deleted file mode 100644
index 438dc78..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorDataList.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_DATA_LIST_H_
-#define _U2_MSA_EDITOR_DATA_LIST_H_
-
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QTabWidget>
-#include <QtGui/QSplitter>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTabWidget>
-#include <QtWidgets/QSplitter>
-#endif
-
-#include <U2Core/BackgroundTaskRunner.h>
-#include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
-#include "MSAEditorNameList.h"
-
-namespace U2
-{
-
-class CreateDistanceMatrixTask;
-class MAlignmentRow;
-class MSADistanceMatrix;
-class MSAWidget;
-class Task;
-
-class UpdatedWidgetSettings {
-public:
-    UpdatedWidgetSettings()
-        : ma(NULL), ui(NULL), autoUpdate(true) {}
-    const MAlignmentObject* ma;
-    MSAEditorUI*            ui;
-    bool                    autoUpdate;
-};
-enum DataState {
-    DataIsOutdated,
-    DataIsValid,
-    DataIsBeingUpdated
-};
-class UpdatedWidgetInterface{
-public:
-    virtual ~UpdatedWidgetInterface() {}
-    virtual void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) = 0;
-    virtual void setSettings(const UpdatedWidgetSettings* settings) = 0;
-    virtual QWidget* getWidget() = 0;
-    virtual const UpdatedWidgetSettings& getSettings() const = 0;
-    virtual void updateWidget() = 0;
-    virtual QString getHeaderText() const = 0;
-};
-class SimilarityStatisticsSettings : public UpdatedWidgetSettings {
-public:
-    SimilarityStatisticsSettings() : usePercents(false), excludeGaps(false){}
-    QString                         algoName;// selected algorithm
-    bool                            usePercents;
-    bool                            excludeGaps;
-};
-
-class MSAEditorSimilarityColumn : public MSAEditorNameList, public UpdatedWidgetInterface {
-    friend class GTUtilsMSAEditorSequenceArea;
-    Q_OBJECT
-public:
-    MSAEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings);
-    virtual ~MSAEditorSimilarityColumn();
-
-    void setSettings(const UpdatedWidgetSettings* _settings);
-    const UpdatedWidgetSettings& getSettings() const {return curSettings;}
-    QWidget* getWidget(){return this;}
-    void updateWidget(){updateDistanceMatrix();}
-    QString getHeaderText() const;
-
-    DataState getState() {return state;}
-
-    void setMatrix(MSADistanceMatrix* _matrix) {matrix = _matrix;}
-
-protected:
-    QString getTextForRow(int s);
-    QString getSeqName(int s);
-    void updateScrollBar();
-
-signals:
-    void si_dataStateChanged(DataState newState);
-private slots:
-
-    void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
-    void sl_createMatrixTaskFinished(Task*);
-private:
-    void sl_buildStaticMenu(GObjectView*, QMenu*) {}
-    void sl_buildContextMenu(GObjectView*, QMenu*) {}
-    void updateDistanceMatrix();
-
-    MSADistanceMatrix* matrix;
-    SimilarityStatisticsSettings newSettings;
-    SimilarityStatisticsSettings curSettings;
-
-    BackgroundTaskRunner<MSADistanceMatrix*> createDistanceMatrixTaskRunner;
-
-    DataState state;
-    bool      autoUpdate;
-};
-
-
-class CreateDistanceMatrixTask : public BackgroundTask<MSADistanceMatrix*> {
-    Q_OBJECT
-public:
-    CreateDistanceMatrixTask(const SimilarityStatisticsSettings& _s);
-
-    virtual void prepare();
-
-    MSADistanceMatrix* getResult() const {return resMatrix;}
-
-    QList<Task*> onSubTaskFinished(Task* subTask);
-private:
-    SimilarityStatisticsSettings   s;
-    QString                             resultText;
-    MSADistanceMatrix*                  resMatrix;
-};
-
-
-
-class MSAEditorAlignmentDependentWidget : public QWidget {
-    Q_OBJECT
-public:
-    MSAEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget);
-
-    void setSettings(const UpdatedWidgetSettings* _settings);
-    const DataState& getDataState() const{return state;}
-    const UpdatedWidgetSettings* getSettings() const {return settings;}
-
-private slots:
-    void sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
-    void sl_onUpdateButonPressed();
-    void sl_onDataStateChanged(DataState newState);
-    void sl_onFontChanged(const QFont&);
-private:
-    void createWidgetUI();
-    void createHeaderWidget();
-
-    MSAWidget*                   headerWidget;
-    QLabel                       statusBar;
-    QLabel                       nameWidget;
-    QPushButton                  updateButton;
-    UpdatedWidgetInterface*      contentWidget;
-    const UpdatedWidgetSettings* settings;
-    DataState                    state;
-    QWidget*                     updateBar;
-
-    bool                         automaticUpdating;
-
-    static const QString DataIsOutdatedMessage;
-    static const QString DataIsValidMessage;
-    static const QString DataIsBeingUpdatedMessage;
-};
-class UpdatedTabWidget : public QTabWidget {
-    Q_OBJECT
-public:
-    UpdatedTabWidget(QWidget* parent);
-    virtual ~UpdatedTabWidget() {}
-    int addTab(QWidget *page, const QString &label);
-    QWidget* getCurrentWidget() {return currentWidget();}
-protected slots:
-    void sl_refreshTriggered();
-    void sl_refreshAllTriggered();
-    void sl_closeOtherTabsTriggered();
-    void sl_closeAllTabsTriggered();
-    void sl_closeTabTriggered();
-    void sl_addHSplitterTriggered();
-    void sl_addVSplitterTriggered();
-    void sl_onTabCloseRequested(int index);
-signals:
-    void si_onTabCloseRequested(QWidget*);
-    void si_addSplitterTriggered(Qt::Orientation splitterOrientation, QWidget* page, const QString &label);
-    void si_widgetSelected(UpdatedTabWidget*);
-protected:
-    void buildMenu();
-    bool eventFilter(QObject *target, QEvent *event);
-    void updateActionsState();
-
-    QMenu*              tabsMenu;
-    QPoint              menuPos;
-    QAction*            refreshAction;
-    QAction*            refreshAllAction;
-    QAction*            closeOtherTabs;
-    QAction*            closeAllTabs;
-    QAction*            closeTab;
-    QAction*            addHorizontalSplitter;
-    QAction*            addVerticalSplitter;
-};
-class TabWidgetArea : public QWidget{
-    Q_OBJECT
-public:
-    TabWidgetArea(QWidget* parent);
-    virtual ~TabWidgetArea();
-
-    virtual void addTab(QWidget *page, const QString &label);
-    virtual void deleteTab(QWidget *page);
-
-    UpdatedTabWidget* getCurrentTabWidget() {return currentWidget;}
-    QWidget*          getCurrentWidget() {return currentWidget->getCurrentWidget();}
-protected:
-    void paintEvent(QPaintEvent *);
-    virtual UpdatedTabWidget* createTabWidget();
-    void initialize();
-
-    QList<UpdatedTabWidget*>            tabWidgets;
-
-private slots:
-    void sl_onWidgetSelected(UpdatedTabWidget*);
-    void sl_addSplitter(Qt::Orientation splitterOrientation, QWidget* page, const QString &label);
-    void sl_onTabCloseRequested(QWidget* page);
-signals:
-    void si_tabsCountChanged(int curTabsNumber);
-private:
-    int                                 tabsCount;
-    QMap<QWidget*, UpdatedTabWidget*>   widgetLocations;
-    QList<QSplitter*>                   splitters;
-    UpdatedTabWidget*                   currentWidget;
-    QLayout*                            currentLayout;
-};
-class MSAEditorUpdatedTabWidget : public UpdatedTabWidget {
-    Q_OBJECT
-public:
-    MSAEditorUpdatedTabWidget(MSAEditor* _msa, QWidget* parent);
-    ~MSAEditorUpdatedTabWidget(){}
-
-    void addExistingTree();
-public slots:
-    void sl_addTabTriggered();
-private:
-    MSAEditor* msa;
-    QPushButton* addTabButton;
-};
-
-class MSAEditorTabWidgetArea : public TabWidgetArea{
-    Q_OBJECT
-public:
-    MSAEditorTabWidgetArea(MSAEditor* msa, QWidget* parent);
-    ~MSAEditorTabWidgetArea(){}
-
-    virtual void deleteTab(QWidget *page);
-protected:
-    virtual UpdatedTabWidget* createTabWidget();
-private:
-    QPushButton* addTabButton;
-    MSAEditor*   msa;
-};
-
-
-} //namespace
-
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp
index 35aa560..a7b7593 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp
@@ -82,6 +82,11 @@ MSAEditorNameList::MSAEditorNameList(MSAEditorUI* _ui, QScrollBar* _nhBar)
         connect(editor->getMSAObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
     }
 
+    connect(this,   SIGNAL(si_startMsaChanging()),
+            ui,     SIGNAL(si_startMsaChanging()));
+    connect(this,   SIGNAL(si_stopMsaChanging(bool)),
+            ui,     SIGNAL(si_stopMsaChanging(bool)));
+
     if (ui->seqArea) {
         connect(ui->seqArea, SIGNAL(si_startChanged(const QPoint &, const QPoint &)), SLOT(sl_startChanged(const QPoint &, const QPoint &)));
         connect(ui->seqArea, SIGNAL(si_selectionChanged(const MSAEditorSelection &, const MSAEditorSelection &)),
@@ -298,7 +303,7 @@ void MSAEditorNameList::keyPressEvent(QKeyEvent *e) {
     static int newSeq = 0;
     switch(key) {
     case Qt::Key_Delete:
-        ui->seqArea->deleteCurrentSelection();
+        ui->seqArea->sl_delCurrentSelection();
         break;
     case Qt::Key_Up:
         if (0 != (Qt::ShiftModifier & e->modifiers()) && ui->seqArea->isSeqInRange(newSeq - 1)) {
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
index efd7015..94b9405 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
@@ -59,6 +59,8 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/MainWindow.h>
+#include <U2Gui/Notification.h>
 #include <U2Gui/OPWidgetFactory.h>
 #include <U2Gui/OPWidgetFactory.h>
 #include <U2Gui/OptionsPanel.h>
@@ -88,8 +90,8 @@ namespace U2 {
 #define SETTINGS_COPY_FORMATTED "copyformatted"
 
 MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, GScrollBar* vb)
-    : editor(_ui->editor), ui(_ui), shBar(hb), svBar(vb), prevPressedButton(Qt::NoButton),
-    changeTracker(editor->getMSAObject()->getEntityRef()), useDotsAction(NULL), colorScheme(NULL), highlightingScheme(NULL)
+    : editor(_ui->editor), ui(_ui), shBar(hb), svBar(vb), editModeAnimationTimer(this), prevPressedButton(Qt::NoButton),
+    msaVersionBeforeShifting(-1), useDotsAction(NULL), colorScheme(NULL), highlightingScheme(NULL), changeTracker(editor->getMSAObject()->getEntityRef())
 {
     setObjectName("msa_editor_sequence_area");
     setFocusPolicy(Qt::WheelFocus);
@@ -97,6 +99,7 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     cachedView = new QPixmap();
 
     completeRedraw = true;
+    selectionColor = Qt::black;
 
     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
     setMinimumSize(100, 100);
@@ -106,11 +109,13 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     selecting = false;
     shifting = false;
 
+    msaMode = ViewMode;
+    connect(&editModeAnimationTimer, SIGNAL(timeout()), SLOT(sl_changeSelectionColor()));
+
     rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
 
     delSelectionAction = new QAction(tr("Remove selection"), this);
     delSelectionAction->setObjectName("Remove selection");
-    delSelectionAction->setShortcutContext(Qt::WidgetShortcut);
     connect(delSelectionAction, SIGNAL(triggered()), SLOT(sl_delCurrentSelection()));
 
     connect(ui->getCopySelectionAction(), SIGNAL(triggered()), SLOT(sl_copyCurrentSelection()));
@@ -123,23 +128,21 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     delColAction->setObjectName("remove_columns_of_gaps");
     delColAction->setShortcut(QKeySequence(Qt::SHIFT| Qt::Key_Delete));
     delColAction->setShortcutContext(Qt::WidgetShortcut);
+    addAction(delColAction);
     connect(delColAction, SIGNAL(triggered()), SLOT(sl_delCol()));
 
     insSymAction = new QAction(tr("Fill selection with gaps"), this);
     insSymAction->setObjectName("fill_selection_with_gaps");
-    insSymAction->setShortcutContext(Qt::WidgetShortcut);
     connect(insSymAction, SIGNAL(triggered()), SLOT(sl_fillCurrentSelectionWithGaps()));
     addAction(insSymAction);
 
 
     createSubaligniment = new QAction(tr("Save subalignment"), this);
     createSubaligniment->setObjectName("Save subalignment");
-    createSubaligniment->setShortcutContext(Qt::WidgetShortcut);
     connect(createSubaligniment, SIGNAL(triggered()), SLOT(sl_createSubaligniment()));
 
     saveSequence = new QAction(tr("Save sequence"), this);
     saveSequence->setObjectName("Save sequence");
-    saveSequence->setShortcutContext(Qt::WidgetShortcut);
     connect(saveSequence, SIGNAL(triggered()), SLOT(sl_saveSequence()));
 
     gotoAction = new QAction(QIcon(":core/images/goto.png"), tr("Go to position..."), this);
@@ -179,6 +182,13 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     reverseComplementAction->setObjectName("replace_selected_rows_with_reverse-complement");
     connect(reverseComplementAction, SIGNAL(triggered()), SLOT(sl_reverseComplementCurrentSelection()));
 
+    replaceCharacterAction = new QAction(tr("Replace selected character"), this);
+    replaceCharacterAction->setObjectName("replace_selected_character");
+    replaceCharacterAction->setShortcut(QKeySequence(Qt::SHIFT | Qt::Key_R));
+    replaceCharacterAction->setShortcutContext(Qt::WidgetShortcut);
+    addAction(replaceCharacterAction);
+    connect(replaceCharacterAction, SIGNAL(triggered()), SLOT(sl_replaceSelectedCharacter()));
+
     reverseAction = new QAction(tr("Replace selected rows with reverse"), this);
     reverseAction->setObjectName("replace_selected_rows_with_reverse");
     connect(reverseAction, SIGNAL(triggered()), SLOT(sl_reverseCurrentSelection()));
@@ -192,6 +202,11 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     connect(editor->getMSAObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
     connect(editor->getMSAObject(), SIGNAL(si_rowsRemoved(const QList<qint64> &)), SLOT(sl_updateCollapsingMode()));
 
+    connect(this,   SIGNAL(si_startMsaChanging()),
+            ui,     SIGNAL(si_startMsaChanging()));
+    connect(this,   SIGNAL(si_stopMsaChanging(bool)),
+            ui,     SIGNAL(si_stopMsaChanging(bool)));
+
     connect(editor, SIGNAL(si_buildStaticMenu(GObjectView*, QMenu*)), SLOT(sl_buildStaticMenu(GObjectView*, QMenu*)));
     connect(editor, SIGNAL(si_buildStaticToolbar(GObjectView*, QToolBar*)), SLOT(sl_buildStaticToolbar(GObjectView*, QToolBar*)));
     connect(editor, SIGNAL(si_buildPopupMenu(GObjectView* , QMenu*)), SLOT(sl_buildContextMenu(GObjectView*, QMenu*)));
@@ -214,11 +229,15 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     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*)));
 
+    updateColorAndHighlightSchemes();
     updateActions();
 }
 
 MSAEditorSequenceArea::~MSAEditorSequenceArea() {
+    exitFromEditCharacterMode();
     delete cachedView;
     deleteOldCustomSchemes();
     delete colorScheme;
@@ -606,25 +625,40 @@ void MSAEditorSequenceArea::sl_changeHighlightScheme(){
     emit si_highlightingChanged();
 }
 
+void MSAEditorSequenceArea::exitFromEditCharacterMode() {
+    if (msaMode == EditCharacterMode) {
+        editModeAnimationTimer.stop();
+        highlightSelection = false;
+        selectionColor = Qt::black;
+        msaMode = ViewMode;
+        update();
+    }
+}
+
 void MSAEditorSequenceArea::updateActions() {
     MAlignmentObject* maObj = editor->getMSAObject();
     assert(maObj != NULL);
     bool readOnly = maObj->isStateLocked();
 
-    delSelectionAction->setEnabled(!readOnly && !isAlignmentEmpty());
-    delColAction->setEnabled(!readOnly && !isAlignmentEmpty());
-    insSymAction->setEnabled(!readOnly && !isAlignmentEmpty());
     createSubaligniment->setEnabled(!isAlignmentEmpty());
     saveSequence->setEnabled(!isAlignmentEmpty());
-    removeAllGapsAction->setEnabled(!readOnly && !isAlignmentEmpty());
     addSeqFromProjectAction->setEnabled(!readOnly);
     addSeqFromFileAction->setEnabled(!readOnly);
     sortByNameAction->setEnabled(!readOnly && !isAlignmentEmpty());
     collapseModeSwitchAction->setEnabled(!readOnly && !isAlignmentEmpty());
-    reverseComplementAction->setEnabled(!readOnly && maObj->getAlphabet()->isNucleic() && !isAlignmentEmpty());
-    reverseAction->setEnabled(!readOnly && maObj->getAlphabet()->isNucleic() && !isAlignmentEmpty());
-    complementAction->setEnabled(!readOnly && maObj->getAlphabet()->isNucleic() && !isAlignmentEmpty());
-    updateColorAndHighlightSchemes();
+
+//Update actions of "Edit" group
+    bool canEditAlignment = !readOnly && !isAlignmentEmpty();
+    bool canEditSelectedArea = canEditAlignment && !selection.isNull();
+    delSelectionAction->setEnabled(canEditSelectedArea);
+    insSymAction->setEnabled(canEditSelectedArea);
+    bool oneCharacterIsSelected = selection.width() == 1 && selection.height() == 1;
+    replaceCharacterAction->setEnabled(canEditSelectedArea && oneCharacterIsSelected);
+    delColAction->setEnabled(canEditAlignment);
+    reverseComplementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
+    reverseAction->setEnabled(canEditSelectedArea);
+    complementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
+    removeAllGapsAction->setEnabled(canEditAlignment);
 
     assert(checkState());
 }
@@ -648,7 +682,6 @@ void MSAEditorSequenceArea::drawAll() {
     }
     QPainter p(this);
     p.drawPixmap(0, 0, *cachedView);
-    //drawCursor(p);
     drawSelection(p);
     drawFocus(p);
 }
@@ -766,8 +799,10 @@ void MSAEditorSequenceArea::drawSelection(QPainter &p) {
     U2Region xRange = getBaseXRange(x, true);
     U2Region yRange = getSequenceYRange(y, true);
 
-    QPen pen(highlightSelection || hasFocus()? Qt::black : Qt::gray);
-    pen.setStyle(Qt::DashLine);
+    QPen pen(highlightSelection || hasFocus()? selectionColor : Qt::gray);
+    if (msaMode != EditCharacterMode) {
+        pen.setStyle(Qt::DashLine);
+    }
     pen.setWidth(highlightSelection ? 2 : 1);
     p.setPen(pen);
     if(yRange.startPos > 0) {
@@ -782,20 +817,6 @@ void MSAEditorSequenceArea::drawSelection(QPainter &p) {
     }
 }
 
-void MSAEditorSequenceArea::drawCursor(QPainter& p) {
-    if (!isVisible(cursorPos, true)) {
-        return;
-    }
-    U2Region xRange = getBaseXRange(cursorPos.x(), true);
-    U2Region yRange = getSequenceYRange(cursorPos.y(), true);
-
-    QPen pen(highlightSelection || hasFocus()? Qt::black : Qt::gray);
-    pen.setStyle(Qt::DashLine);
-    pen.setWidth(highlightSelection ? 2 : 1);
-    p.setPen(pen);
-    p.drawRect(xRange.startPos, yRange.startPos, xRange.length, yRange.length);
-}
-
 void MSAEditorSequenceArea::drawFocus(QPainter& p) {
     if (hasFocus()) {
         p.setPen(QPen(Qt::black, 1, Qt::DotLine));
@@ -1000,6 +1021,7 @@ void MSAEditorSequenceArea::updateVScrollBar() {
 }
 
 void MSAEditorSequenceArea::onVisibleRangeChanged() {
+    exitFromEditCharacterMode();
     qint64 firstVisibleSeq = getFirstVisibleSequence();
     qint64 lastVisibleSeq  = getLastVisibleSequence(true);
 
@@ -1286,12 +1308,13 @@ void MSAEditorSequenceArea::mouseReleaseEvent(QMouseEvent *e) {
     newCurPos.setY(yPosWithValidations);
 
     if (shifting) {
-        emit si_stopMSAChanging(true);
+        emit si_stopMsaChanging(msaVersionBeforeShifting != editor->getMSAObject()->getModificationVersion());
     } else if (Qt::LeftButton == e->button() && Qt::LeftButton == prevPressedButton) {
         updateSelection(newCurPos);
     }
     shifting = false;
     selecting = false;
+    msaVersionBeforeShifting = -1;
 
     shBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
     svBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
@@ -1320,11 +1343,12 @@ void MSAEditorSequenceArea::mousePressEvent(QMouseEvent *e) {
             const MSAEditorSelection &s = ui->seqArea->getSelection();
             if (s.getRect().contains(cursorPos) && !isAlignmentLocked()) {
                 shifting = true;
+                msaVersionBeforeShifting = editor->getMSAObject()->getModificationVersion();
                 U2OpStatus2Log os;
                 changeTracker.startTracking(os);
                 CHECK_OP(os, );
                 editor->getMSAObject()->saveState();
-                emit si_startMSAChanging();
+                emit si_startMsaChanging();
             }
         }
 
@@ -1350,6 +1374,11 @@ void MSAEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
     }
 
     int key = e->key();
+    if (msaMode == EditCharacterMode) {
+        processCharacterInEditMode(e);
+        return;
+    }
+
     bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
     const bool ctrl = e->modifiers().testFlag(Qt::ControlModifier);
 #ifdef Q_OS_MAC
@@ -1531,13 +1560,9 @@ void MSAEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
             }
             break;
         case Qt::Key_Delete:
-            if(!isAlignmentLocked()) {
-                if (shift) {
-                    sl_delCol();
-                } else {
-                    deleteCurrentSelection();
-                    emit si_startMSAChanging();
-                }
+            if (!isAlignmentLocked() && !shift) {
+                emit si_startMsaChanging();
+                deleteCurrentSelection();
             }
             break;
         case Qt::Key_Backspace:
@@ -1547,8 +1572,8 @@ void MSAEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
         case Qt::Key_Space:
             // We can't use Command+Space on Mac OS X - it is reserved
             if(!isAlignmentLocked()) {
+                emit si_startMsaChanging();
                 insertGapsBeforeSelection(genuineCtrl ? 1 : -1);
-                emit si_startMSAChanging();
             }
             break;
         case Qt::Key_Shift:
@@ -1566,10 +1591,10 @@ void MSAEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
 
 void MSAEditorSequenceArea::keyReleaseEvent(QKeyEvent *ke) {
     if ((ke->key() == Qt::Key_Space || ke->key() == Qt::Key_Delete) && !isAlignmentLocked() && !ke->isAutoRepeat()) {
-        emit si_stopMSAChanging(true);
+        emit si_stopMsaChanging(true);
     }
 
-    QWidget::keyPressEvent(ke);
+    QWidget::keyReleaseEvent(ke);
 }
 
 void MSAEditorSequenceArea::focusInEvent(QFocusEvent* fe) {
@@ -1579,6 +1604,7 @@ void MSAEditorSequenceArea::focusInEvent(QFocusEvent* fe) {
 
 void MSAEditorSequenceArea::focusOutEvent(QFocusEvent* fe) {
     QWidget::focusOutEvent(fe);
+    exitFromEditCharacterMode();
     update();
 }
 
@@ -1692,6 +1718,7 @@ QPoint MSAEditorSequenceArea::coordToPos(const QPoint& coord) const {
 
 void MSAEditorSequenceArea::setSelection(const MSAEditorSelection& s, bool newHighlightSelection) {
     // TODO: assert(isInRange(s));
+    exitFromEditCharacterMode();
     if (highlightSelection != newHighlightSelection) {
         highlightSelection = newHighlightSelection;
         update();
@@ -1724,6 +1751,7 @@ void MSAEditorSequenceArea::setSelection(const MSAEditorSelection& s, bool newHi
     emit si_selectionChanged(selectedRowNames);
     emit si_selectionChanged(selection, prevSelection);
     update();
+    updateActions();
 
     const QPoint topLeft = selection.topLeft();
     if (!selection.isNull() && !isVisible(topLeft, false)) {
@@ -1765,7 +1793,7 @@ void MSAEditorSequenceArea::setCursorPos(int pos) {
     setCursorPos(QPoint(pos, cursorPos.y()));
 }
 
-void MSAEditorSequenceArea::highlightCurrentCursorPos()  {
+void MSAEditorSequenceArea::highlightCurrentSelection()  {
     highlightSelection = true;
     update();
 }
@@ -1820,6 +1848,7 @@ void MSAEditorSequenceArea::removeGapsPrecedingSelection(int countOfGaps) {
 }
 
 void MSAEditorSequenceArea::sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo& modInfo) {
+    exitFromEditCharacterMode();
     int nSeq = editor->getNumSequences();
     int aliLen = editor->getAlignmentLen();
     if (ui->isCollapsibleMode()) {
@@ -1845,7 +1874,6 @@ void MSAEditorSequenceArea::sl_alignmentChanged(const MAlignment&, const MAlignm
         // we don't emit "selection changed" signal to avoid redrawing
         setSelection(newSelection);
     }
-    emit si_alignmentUpdated();
 
     updateHScrollBar();
     updateVScrollBar();
@@ -1909,7 +1937,7 @@ void MSAEditorSequenceArea::sl_buildContextMenu(GObjectView*, QMenu* m) {
     SAFE_POINT(editMenu != NULL, "editMenu", );
 
     QList<QAction*> actions;
-    actions << delSelectionAction << insSymAction << reverseComplementAction << reverseAction << complementAction << delColAction << removeAllGapsAction;
+    actions << delSelectionAction << insSymAction << replaceCharacterAction << reverseComplementAction << reverseAction << complementAction << delColAction << removeAllGapsAction;
 
     QMenu* copyMenu = GUIUtils::findSubMenu(m, MSAE_MENU_COPY);
     SAFE_POINT(copyMenu != NULL, "copyMenu", );
@@ -1939,7 +1967,7 @@ void MSAEditorSequenceArea::buildMenu(QMenu* m) {
     QMenu* editMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EDIT);
     SAFE_POINT(editMenu != NULL, "editMenu", );
     QList<QAction*> actions;
-    actions << reverseComplementAction  << reverseAction << complementAction << removeAllGapsAction;
+    actions << replaceCharacterAction << reverseComplementAction <<  reverseAction << complementAction << removeAllGapsAction;
     editMenu->insertActions(editMenu->isEmpty() ? NULL : editMenu->actions().first(), actions);
 
     QMenu * exportMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EXPORT);
@@ -2003,6 +2031,23 @@ void MSAEditorSequenceArea::sl_fontChanged(QFont font) {
     repaint();
 }
 
+void MSAEditorSequenceArea::sl_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet) {
+    updateColorAndHighlightSchemes();
+
+    QString message;
+    if (mi.alphabetChanged || mi.type != MAlignmentModType_Undo) {
+        message = tr("The alignment has been modified, so that its alphabet has been switched from \"%1\" to \"%2\". Use \"Undo\", if you'd like to restore the original alignment.")
+            .arg(prevAlphabet->getName()).arg(editor->getMSAObject()->getAlphabet()->getName());
+    }
+
+    if (message.isEmpty()) {
+        return;
+    }
+    const NotificationStack *notificationStack = AppContext::getMainWindow()->getNotificationStack();
+    CHECK(notificationStack != NULL, );
+    notificationStack->addNotification(message, Info_Not);
+}
+
 void MSAEditorSequenceArea::sl_delCol() {
     QObjectScopedPointer<DeleteGapsDialog> dlg = new DeleteGapsDialog(this, editor->getMSAObject()->getNumRows());
     dlg->exec();
@@ -2055,9 +2100,9 @@ void MSAEditorSequenceArea::sl_delCol() {
 
 void MSAEditorSequenceArea::sl_fillCurrentSelectionWithGaps() {
     if(!isAlignmentLocked()) {
-        emit si_startMSAChanging();
+        emit si_startMsaChanging();
         insertGapsBeforeSelection();
-        emit si_stopMSAChanging(true);
+        emit si_stopMsaChanging(true);
     }
 }
 
@@ -2319,9 +2364,17 @@ void MSAEditorSequenceArea::updateVBarPosition(int seq) {
     }
 }
 
+void MSAEditorSequenceArea::sl_replaceSelectedCharacter() {
+    msaMode = EditCharacterMode;
+    editModeAnimationTimer.start(500);
+    highlightCurrentSelection();
+}
+
 void MSAEditorSequenceArea::sl_delCurrentSelection()
 {
+    emit si_startMsaChanging();
     deleteCurrentSelection();
+    emit si_stopMsaChanging(true);
 }
 
 U2Region MSAEditorSequenceArea::getSelectedRows() const {
@@ -2462,6 +2515,54 @@ void MSAEditorSequenceArea::deleteCurrentSelection() {
     cancelSelection();
 }
 
+void MSAEditorSequenceArea::processCharacterInEditMode(QKeyEvent *e) {
+    if (e->key() == Qt::Key_Escape) {
+        exitFromEditCharacterMode();
+        return;
+    }
+
+    QString text = e->text().toUpper();
+    if (1 == text.length()) {
+        QChar emDash(0x2015);
+        QRegExp latinCharacterOrGap(QString("([A-Z]| |-|%1)").arg(emDash));
+        if (latinCharacterOrGap.exactMatch(text)) {
+            QChar newChar = text.at(0);
+            newChar = (newChar == '-' || newChar == emDash || newChar == ' ') ? MAlignment_GapChar : newChar;
+            replaceSelectedCharacter(newChar.toLatin1());
+        }
+        else {
+            MainWindow *mainWindow = AppContext::getMainWindow();
+            const QString message = tr("It is not possible to insert the character into the alignment."
+                                       "Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').").arg(emDash);
+            mainWindow->addNotification(message, Error_Not);
+            exitFromEditCharacterMode();
+        }
+    }
+}
+
+void MSAEditorSequenceArea::replaceSelectedCharacter(char newCharacter) {
+    if (selection.isNull()) {
+        return;
+    }
+    SAFE_POINT(isInRange(selection.topLeft()), "Incorrect selection is detected!", );
+    MAlignmentObject* maObj = editor->getMSAObject();
+    if (maObj == NULL || maObj->isStateLocked()) {
+        return;
+    }
+
+    U2OpStatusImpl os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    const U2Region& sel = getSelectedRows();
+    for (qint64 rowIndex = sel.startPos; rowIndex < sel.endPos(); rowIndex++) {
+        maObj->replaceCharacter(selection.x(), rowIndex, newCharacter);
+    }
+
+    exitFromEditCharacterMode();
+}
+
 void MSAEditorSequenceArea::addRowToSelection(int rowNumber) {
     selectedRows.append(rowNumber);
 }
@@ -2815,6 +2916,12 @@ void MSAEditorSequenceArea::sl_setCollapsingRegions(const QList<QStringList>& co
     updateVScrollBar();
 }
 
+void MSAEditorSequenceArea::sl_changeSelectionColor() {
+    QColor black(Qt::black);
+    selectionColor = (black == selectionColor) ? Qt::darkGray : Qt::black;
+    update(); 
+}
+
 int MSAEditorSequenceArea::getHeight(){
     return editor->getRowHeight() * (getNumVisibleSequences(true) - 1);
 }
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
index 36f190f..22d6a68 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
@@ -34,6 +34,7 @@
 #include <QtWidgets/QToolBar>
 #include <QtWidgets/QRubberBand>
 #endif
+#include <QTimer>
 
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
@@ -252,6 +253,9 @@ public:
 
     void deleteCurrentSelection();
 
+    void processCharacterInEditMode(QKeyEvent *e);
+    void replaceSelectedCharacter(char newCharacter);
+
     void addRowToSelection(int rowNumber);
     void deleteRowFromSelection(int rowNumber);
     void clearSelection();
@@ -284,7 +288,7 @@ private:
 
     void moveCursor(int dx, int dy);
 
-    void highlightCurrentCursorPos();
+    void highlightCurrentSelection();
 
 public:
     void centerPos(const QPoint& pos);
@@ -325,16 +329,16 @@ signals:
     void si_highlightingChanged();
     void si_visibleRangeChanged(QStringList visibleSequences, int reqHeight);
     void si_visibleRangeChanged();
-    void si_startMSAChanging();
-    void si_stopMSAChanging(bool msaUpdated);
+    void si_startMsaChanging();
+    void si_stopMsaChanging(bool msaUpdated);
     void si_copyFormattedChanging(bool enabled);
-    void si_alignmentUpdated();
     void si_highlightingAndColorActionsChanged();
 
 public slots:
     void sl_changeColorSchemeOutside(const QString &name);
     void sl_doUseDots();
     void sl_changeCopyFormat(const QString& alg);
+    void sl_delCurrentSelection();
 
 protected:
     void resizeEvent(QResizeEvent *);
@@ -359,7 +363,7 @@ private slots:
     void sl_addSeqFromFile();
     void sl_addSeqFromProject();
 
-    void sl_delCurrentSelection();
+    void sl_replaceSelectedCharacter();
     void sl_copyCurrentSelection();
     void sl_copyFormattedSelection();
     void sl_fillCurrentSelectionWithGaps();
@@ -395,10 +399,20 @@ private slots:
     void sl_useDots();
     void sl_fontChanged(QFont font);
 
+    void sl_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet);
+
+    void sl_changeSelectionColor();
+
+
 protected:
     virtual void wheelEvent (QWheelEvent * event);
 
 private:
+    enum MsaMode {
+        ViewMode,
+        EditCharacterMode
+    };
+
     void buildMenu(QMenu* m);
     void updateColorAndHighlightSchemes();
 
@@ -408,13 +422,14 @@ private:
 
     void getColorAndHighlightingIds(QString &csid, QString &hsid, DNAAlphabetType atype, bool isFirstInitialization);
 
+    void exitFromEditCharacterMode();
+
     void updateActions();
 
     void updateHScrollBar();
     void updateVScrollBar();
 
     void drawAll();
-    void drawCursor(QPainter& p);
     void drawFocus(QPainter& p);
     void drawSelection(QPainter &p);
 
@@ -465,6 +480,9 @@ private:
 
     int             startPos; //first visible x pos
     int             startSeq; //first visible y pos
+    MsaMode         msaMode;
+    QTimer          editModeAnimationTimer;
+    QColor          selectionColor;
 
     bool                shifting;
     bool                selecting;
@@ -475,6 +493,7 @@ private:
     MSAEditorSelection  baseSelection; // selection with rows indexes in absolute coordinates
     QList<int>          selectedRows;
     QStringList         selectedRowNames;
+    int                 msaVersionBeforeShifting;
 
     QAction*        copySelectionAction;
     QAction*        delSelectionAction;
@@ -489,6 +508,7 @@ private:
     QAction*        sortByNameAction;
     QAction*        collapseModeSwitchAction;
     QAction*        collapseModeUpdateAction;
+    QAction*        replaceCharacterAction;
     QAction*        reverseComplementAction;
     QAction*        reverseAction;
     QAction*        complementAction;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp
index b4e4ab9..0d4e79c 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp
@@ -217,7 +217,7 @@ void UpdateMSAEditorTask::update() {
 ExportMSAConsensusTask::ExportMSAConsensusTask(const ExportMSAConsensusTaskSettings& s )
 : DocumentProviderTask(tr("Export consensus to MSA")
 , (TaskFlags(TaskFlag_NoRun) | TaskFlag_FailOnSubtaskError | TaskFlag_CancelOnSubtaskCancel))
-, settings(s){
+, settings(s), extractConsensus(NULL) {
     setVerboseLogMode(true);
     SAFE_POINT_EXT(s.msa != NULL, setError("Given msa pointer is NULL"), );
 }
diff --git a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
index c366221..02c2163 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, "16126707");
+    new HelpButton(this, buttonBox, "17466105");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
 
     connect(allButton, SIGNAL(clicked()), SLOT(sl_allButtonClicked()));
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
new file mode 100644
index 0000000..63af6a8
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
@@ -0,0 +1,281 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "MsaEditorSimilarityColumn.h"
+#include "MSAEditor.h"
+#include "MSAEditorSequenceArea.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MAlignment.h>
+#include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
+#include <U2Algorithm/MSADistanceAlgorithm.h>
+
+namespace U2
+{
+
+const QString MsaEditorAlignmentDependentWidget::DataIsOutdatedMessage(QString("<FONT COLOR=#FF0000>%1</FONT>").arg(QObject::tr("Data is outdated")));
+const QString MsaEditorAlignmentDependentWidget::DataIsValidMessage(QString("<FONT COLOR=#00FF00>%1</FONT>").arg(QObject::tr("Data is valid")));
+const QString MsaEditorAlignmentDependentWidget::DataIsBeingUpdatedMessage(QString("<FONT COLOR=#0000FF>%1</FONT>").arg(QObject::tr("Data is being updated")));
+
+MsaEditorSimilarityColumn::MsaEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings)
+    : MSAEditorNameList(ui, nhBar),
+      matrix(NULL),
+      autoUpdate(true)
+{
+    newSettings = curSettings = *_settings;
+    updateDistanceMatrix();
+    setObjectName("msa_editor_similarity_column");
+}
+
+MsaEditorSimilarityColumn::~MsaEditorSimilarityColumn() {
+    CHECK(NULL != matrix, );
+    delete matrix;
+}
+
+QString MsaEditorSimilarityColumn::getTextForRow( int s ) {
+    if (NULL == matrix || state == DataIsBeingUpdated) {
+        return tr("-");
+    }
+
+    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
+    const qint64 referenceRowId = editor->getReferenceRowId();
+    if(MAlignmentRow::invalidRowId() == referenceRowId) {
+        return tr("-");
+    }
+
+    U2OpStatusImpl os;
+    const int refSequenceIndex = ma.getRowIndexByRowId(referenceRowId, os);
+    CHECK_OP(os, QString());
+
+    int sim = matrix->getSimilarity(refSequenceIndex, s);
+    CHECK(-1 != sim, tr("-"));
+    const QString units = matrix->areUsePercents() ? "%" : "";
+    return QString("%1").arg(sim) + units;
+}
+
+QString MsaEditorSimilarityColumn::getSeqName(int s) {
+    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
+
+    return ma.getRowNames().at(s);
+}
+
+void MsaEditorSimilarityColumn::updateScrollBar() {
+    // do nothing
+}
+
+void MsaEditorSimilarityColumn::setSettings(const UpdatedWidgetSettings* _settings) {
+    const SimilarityStatisticsSettings* set= static_cast<const SimilarityStatisticsSettings*>(_settings);
+    CHECK(NULL != set,);
+    autoUpdate = set->autoUpdate;
+    state = DataIsValid;
+    if(curSettings.algoName != set->algoName) {
+        state = DataIsOutdated;
+    }
+    if(curSettings.excludeGaps != set->excludeGaps) {
+        state = DataIsOutdated;
+    }
+    if(curSettings.usePercents != set->usePercents) {
+        if(NULL != matrix) {
+            matrix->showSimilarityInPercents(set->usePercents);
+            updateContent();
+        }
+        curSettings.usePercents = set->usePercents;
+    }
+    newSettings = *set;
+    if(autoUpdate && DataIsOutdated == state) {
+        state = DataIsBeingUpdated;
+        emit si_dataStateChanged(state);
+        updateDistanceMatrix();
+    }
+    emit si_dataStateChanged(state);
+}
+
+QString MsaEditorSimilarityColumn::getHeaderText() const {
+    return curSettings.usePercents ? "%" : tr("score");
+}
+
+void MsaEditorSimilarityColumn::updateDistanceMatrix() {
+    createDistanceMatrixTaskRunner.cancel();
+
+    CreateDistanceMatrixTask* createDistanceMatrixTask = new CreateDistanceMatrixTask(newSettings);
+    connect(new TaskSignalMapper(createDistanceMatrixTask), SIGNAL(si_taskFinished(Task*)), this, SLOT(sl_createMatrixTaskFinished(Task*)));
+
+    state = DataIsBeingUpdated;
+    createDistanceMatrixTaskRunner.run( createDistanceMatrixTask );
+}
+
+void MsaEditorSimilarityColumn::onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&) {
+    if(autoUpdate) {
+        state = DataIsBeingUpdated;
+        updateDistanceMatrix();
+    }
+    else {
+        state = DataIsOutdated;
+    }
+    emit si_dataStateChanged(state);
+}
+
+void MsaEditorSimilarityColumn::sl_createMatrixTaskFinished(Task* t) {
+    CreateDistanceMatrixTask* task = qobject_cast<CreateDistanceMatrixTask*> (t);
+    if(NULL != task && !task->hasError() && !task->isCanceled()) {
+        if(NULL != matrix) {
+            delete matrix;
+        }
+        matrix = task->getResult();
+        if(NULL != matrix) {
+            matrix->showSimilarityInPercents(newSettings.usePercents);
+        }
+    }
+    updateContent();
+    state = DataIsValid;
+    curSettings = newSettings;
+    emit si_dataStateChanged(state);
+}
+
+CreateDistanceMatrixTask::CreateDistanceMatrixTask(const SimilarityStatisticsSettings& _s)
+    : BackgroundTask<MSADistanceMatrix*>(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC),
+      s(_s),
+      resMatrix(NULL) {
+    SAFE_POINT(NULL != s.ma, QString("Incorrect MAlignment in MsaEditorSimilarityColumnTask ctor!"), );
+    SAFE_POINT(NULL != s.ui, QString("Incorrect MSAEditorUI in MsaEditorSimilarityColumnTask ctor!"), );
+    setVerboseLogMode(true);
+}
+
+void CreateDistanceMatrixTask::prepare() {
+    MSADistanceAlgorithmFactory* factory = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmFactory(s.algoName);
+    CHECK(NULL != factory,);
+    if(s.excludeGaps){
+        factory->setFlag(DistanceAlgorithmFlag_ExcludeGaps);
+    }else{
+        factory->resetFlag(DistanceAlgorithmFlag_ExcludeGaps);
+    }
+
+    MSADistanceAlgorithm* algo = factory->createAlgorithm(s.ma->getMAlignment());
+    //connect(s.ma, SIGNAL(si_rowsAdded()), algo, SLOT(sl_addEmptyDistanceRow()));
+    CHECK(NULL != algo,);
+    addSubTask(algo);
+}
+
+QList<Task*> CreateDistanceMatrixTask::onSubTaskFinished(Task* subTask){
+    QList<Task*> res;
+    if (isCanceled()) {
+        return res;
+    }
+    MSADistanceAlgorithm* algo = qobject_cast<MSADistanceAlgorithm*>(subTask);
+    MSADistanceMatrix *matrix = new MSADistanceMatrix(algo, s.usePercents && s.excludeGaps);
+    if(NULL != algo) {
+        if(algo->hasError()) {
+            setError(algo->getError());
+            return res;
+        }
+        resMatrix = matrix;
+    }
+    return res;
+}
+MsaEditorAlignmentDependentWidget::MsaEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget)
+: contentWidget(_contentWidget), automaticUpdating(true){
+    SAFE_POINT(NULL != _contentWidget, QString("Argument is NULL in constructor MsaEditorAlignmentDependentWidget()"),);
+
+    settings = &contentWidget->getSettings();
+    connect(settings->ma, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
+        this, SLOT(sl_onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
+    connect(dynamic_cast<QObject*>(contentWidget), SIGNAL(si_dataStateChanged(DataState)),
+        this, SLOT(sl_onDataStateChanged(DataState)));
+    connect(settings->ui->getEditor(), SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_onFontChanged(const QFont&)));
+
+    createWidgetUI();
+
+    setSettings(settings);
+}
+void MsaEditorAlignmentDependentWidget::createWidgetUI() {
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+
+    mainLayout->setMargin(0);
+    mainLayout->setSpacing(0);
+
+    createHeaderWidget();
+
+    mainLayout->addWidget(headerWidget);
+    mainLayout->addWidget(contentWidget->getWidget());
+    nameWidget.setText(contentWidget->getHeaderText());
+    nameWidget.setObjectName("Distance column name");
+
+    this->setLayout(mainLayout);
+}
+void MsaEditorAlignmentDependentWidget::createHeaderWidget() {
+    QVBoxLayout* headerLayout = new QVBoxLayout();
+    headerLayout->setMargin(0);
+    headerLayout->setSpacing(0);
+
+    nameWidget.setAlignment(Qt::AlignCenter);
+    nameWidget.setFont(settings->ui->getEditor()->getFont());
+    headerLayout->addWidget(&nameWidget);
+
+    state = DataIsValid;
+    headerWidget = new MSAWidget(settings->ui);
+    headerWidget->setLayout(headerLayout);
+}
+
+void MsaEditorAlignmentDependentWidget::setSettings(const UpdatedWidgetSettings* _settings) {
+    settings = _settings;
+    automaticUpdating = settings->autoUpdate;
+    contentWidget->setSettings(settings);
+    nameWidget.setText(contentWidget->getHeaderText());
+}
+
+void MsaEditorAlignmentDependentWidget::sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) {
+    contentWidget->onAlignmentChanged(maBefore, modInfo);
+}
+
+void MsaEditorAlignmentDependentWidget::sl_onUpdateButonPressed() {
+    contentWidget->updateWidget();
+}
+
+void MsaEditorAlignmentDependentWidget::sl_onDataStateChanged(DataState newState) {
+    state = DataIsValid;
+    switch(newState) {
+        case DataIsValid:
+            statusBar.setText(DataIsValidMessage);
+            updateButton.setEnabled(false);
+            break;
+        case DataIsBeingUpdated:
+            statusBar.setText(DataIsBeingUpdatedMessage);
+            updateButton.setEnabled(false);
+            break;
+        case DataIsOutdated:
+            statusBar.setText(DataIsOutdatedMessage);
+            updateButton.setEnabled(true);
+            break;
+    }
+}
+
+void MsaEditorAlignmentDependentWidget::sl_onFontChanged(const QFont& font) {
+    nameWidget.setFont(font);
+}
+
+} //namespace
+
+
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h
new file mode 100644
index 0000000..9d59dea
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h
@@ -0,0 +1,149 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EDITOR_DATA_LIST_H_
+#define _U2_MSA_EDITOR_DATA_LIST_H_
+
+#include <QLabel>
+#include <QPushButton>
+
+#include <U2Core/BackgroundTaskRunner.h>
+#include <U2Core/Task.h>
+#include <U2Core/MAlignment.h>
+#include "MSAEditorNameList.h"
+#include "MsaUpdatedWidgetInterface.h"
+
+
+namespace U2
+{
+
+class CreateDistanceMatrixTask;
+class MAlignmentRow;
+class MSADistanceMatrix;
+class MSAWidget;
+class Task;
+
+class SimilarityStatisticsSettings : public UpdatedWidgetSettings {
+public:
+    SimilarityStatisticsSettings() : usePercents(false), excludeGaps(false){}
+    QString                         algoName;// selected algorithm
+    bool                            usePercents;
+    bool                            excludeGaps;
+};
+
+class MsaEditorSimilarityColumn : public MSAEditorNameList, public UpdatedWidgetInterface {
+    friend class GTUtilsMSAEditorSequenceArea;
+    Q_OBJECT
+public:
+    MsaEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings);
+    virtual ~MsaEditorSimilarityColumn();
+
+    void setSettings(const UpdatedWidgetSettings* _settings);
+    const UpdatedWidgetSettings& getSettings() const {return curSettings;}
+    QWidget* getWidget(){return this;}
+    void updateWidget(){updateDistanceMatrix();}
+    QString getHeaderText() const;
+
+    DataState getState() {return state;}
+
+    void setMatrix(MSADistanceMatrix* _matrix) {matrix = _matrix;}
+
+protected:
+    QString getTextForRow(int s);
+    QString getSeqName(int s);
+    void updateScrollBar();
+
+signals:
+    void si_dataStateChanged(DataState newState);
+private slots:
+
+    void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
+    void sl_createMatrixTaskFinished(Task*);
+private:
+    void sl_buildStaticMenu(GObjectView*, QMenu*) {}
+    void sl_buildContextMenu(GObjectView*, QMenu*) {}
+    void updateDistanceMatrix();
+
+    MSADistanceMatrix* matrix;
+    SimilarityStatisticsSettings newSettings;
+    SimilarityStatisticsSettings curSettings;
+
+    BackgroundTaskRunner<MSADistanceMatrix*> createDistanceMatrixTaskRunner;
+
+    DataState state;
+    bool      autoUpdate;
+};
+
+
+class CreateDistanceMatrixTask : public BackgroundTask<MSADistanceMatrix*> {
+    Q_OBJECT
+public:
+    CreateDistanceMatrixTask(const SimilarityStatisticsSettings& _s);
+
+    virtual void prepare();
+
+    MSADistanceMatrix* getResult() const {return resMatrix;}
+
+    QList<Task*> onSubTaskFinished(Task* subTask);
+private:
+    SimilarityStatisticsSettings   s;
+    QString                             resultText;
+    MSADistanceMatrix*                  resMatrix;
+};
+
+
+class MsaEditorAlignmentDependentWidget : public QWidget {
+    Q_OBJECT
+public:
+    MsaEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget);
+
+    void setSettings(const UpdatedWidgetSettings* _settings);
+    const DataState& getDataState() const{return state;}
+    const UpdatedWidgetSettings* getSettings() const {return settings;}
+
+private slots:
+    void sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
+    void sl_onUpdateButonPressed();
+    void sl_onDataStateChanged(DataState newState);
+    void sl_onFontChanged(const QFont&);
+private:
+    void createWidgetUI();
+    void createHeaderWidget();
+
+    MSAWidget*                   headerWidget;
+    QLabel                       statusBar;
+    QLabel                       nameWidget;
+    QPushButton                  updateButton;
+    UpdatedWidgetInterface*      contentWidget;
+    const UpdatedWidgetSettings* settings;
+    DataState                    state;
+    QWidget*                     updateBar;
+
+    bool                         automaticUpdating;
+
+    static const QString DataIsOutdatedMessage;
+    static const QString DataIsValidMessage;
+    static const QString DataIsBeingUpdatedMessage;
+};
+} //namespace
+
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h b/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h
new file mode 100644
index 0000000..004c629
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h
@@ -0,0 +1,60 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_UPDATED_WIDGET_INTERFACE_H_
+#define _U2_MSA_UPDATED_WIDGET_INTERFACE_H_
+
+#include <qglobal.h>
+#include <U2Core/MAlignmentObject.h>
+#include "MSAEditor.h"
+
+namespace U2 {
+
+class UpdatedWidgetSettings {
+public:
+    UpdatedWidgetSettings()
+        : ma(NULL), ui(NULL), autoUpdate(true) {}
+    const MAlignmentObject* ma;
+    MSAEditorUI*            ui;
+    bool                    autoUpdate;
+};
+
+enum DataState {
+    DataIsOutdated,
+    DataIsValid,
+    DataIsBeingUpdated
+};
+
+class UpdatedWidgetInterface{
+public:
+    virtual ~UpdatedWidgetInterface() {}
+    virtual void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) = 0;
+    virtual void setSettings(const UpdatedWidgetSettings* settings) = 0;
+    virtual QWidget* getWidget() = 0;
+    virtual const UpdatedWidgetSettings& getSettings() const = 0;
+    virtual void updateWidget() = 0;
+    virtual QString getHeaderText() const = 0;
+};
+
+} //namespace
+
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
index 8a605c0..7d342d7 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
@@ -19,20 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSAGraphOverview.h"
-#include "MSAGraphCalculationTask.h"
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2Algorithm/MSAColorScheme.h>
 
 #include <U2Core/Settings.h>
+
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorConsensusArea.h>
 #include <U2View/MSAEditorConsensusCache.h>
 #include <U2View/MSAEditorNameList.h>
 #include <U2View/MSAEditorSequenceArea.h>
-#include <U2Algorithm/MSAColorScheme.h>
-
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
 
+#include "MSAGraphCalculationTask.h"
+#include "MSAGraphOverview.h"
 
 namespace U2 {
 
@@ -40,6 +41,7 @@ MSAGraphOverview::MSAGraphOverview(MSAEditorUI *ui)
     : MSAOverview(ui),
       redrawGraph(true),
       isBlocked(false),
+      lastDrawnVersion(-1),
       method(Strict),
       graphCalculationTask(NULL)
 {
@@ -61,18 +63,16 @@ MSAGraphOverview::MSAGraphOverview(MSAEditorUI *ui)
         displaySettings->orientation = (MSAGraphOverviewDisplaySettings::OrientationMode)s->getValue(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY).toInt();
     }
 
-    connect(&graphCalculationTaskRunner, SIGNAL(si_finished()), SLOT(sl_redraw()));
+    connect(&graphCalculationTaskRunner,    SIGNAL(si_finished()),
+                                            SLOT(sl_redraw()));
+
     connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-            SLOT(sl_drawGraph()));
+                                    SLOT(sl_drawGraph()));
 
-    connect(ui->getEditorNameList(), SIGNAL(si_startMsaChanging()),
-            SLOT(sl_blockRendering()));
-    connect(ui->getEditorNameList(), SIGNAL(si_stopMsaChanging(bool)),
-            SLOT(sl_unblockRendering(bool)));
-    connect(sequenceArea, SIGNAL(si_startMSAChanging()),
-             SLOT(sl_blockRendering()));
-    connect(sequenceArea, SIGNAL(si_stopMSAChanging(bool)),
-            SLOT(sl_unblockRendering(bool)));
+    connect(ui, SIGNAL(si_startMsaChanging()),
+                SLOT(sl_blockRendering()));
+    connect(ui, SIGNAL(si_stopMsaChanging(bool)),
+                SLOT(sl_unblockRendering(bool)));
 
     sl_drawGraph();
 }
@@ -128,6 +128,7 @@ void MSAGraphOverview::paintEvent(QPaintEvent *e) {
     drawVisibleRange(pVisibleRange);
 
     p.drawPixmap(0, 0, cachedView);
+    lastDrawnVersion = editor->getMSAObject()->getModificationVersion();
 
     QWidget::paintEvent(e);
 }
@@ -262,10 +263,7 @@ void MSAGraphOverview::sl_stopRendering() {
 }
 
 void MSAGraphOverview::sl_blockRendering() {
-    graphCalculationTaskRunner.cancel();
-
     disconnect(editor->getMSAObject(), 0, this, 0);
-
     isBlocked = true;
 }
 
@@ -274,7 +272,8 @@ void MSAGraphOverview::sl_unblockRendering(bool update) {
         return;
     }
     isBlocked = false;
-    if (update) {
+
+    if (update && lastDrawnVersion != editor->getMSAObject()->getModificationVersion()) {
         sl_drawGraph();
     } else {
         this->update();
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h
index a898cb6..01ab631 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h
@@ -115,6 +115,7 @@ private:
     bool redrawGraph;
     bool isRendering;
     bool isBlocked;
+    int lastDrawnVersion;
 
     BackgroundTaskRunner<QPolygonF>     graphCalculationTaskRunner;
 
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
index b8bc3f1..fd33c93 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
@@ -36,7 +36,8 @@ namespace U2 {
 
 MSASimpleOverview::MSASimpleOverview(MSAEditorUI *_ui)
     : MSAOverview(_ui),
-      redrawMSAOverview(true)
+      redrawMSAOverview(true),
+      redrawSelection(true)
 {
     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
     setFixedHeight(FIXED_HEIGTH);
@@ -74,20 +75,15 @@ void MSASimpleOverview::sl_selectionChanged() {
     if (!isValid()) {
         return;
     }
-    const MSAEditorSelection& selection = sequenceArea->getSelection();
-
-    cachedSelection.setX( qRound( selection.x() * stepX ) );
-    cachedSelection.setY( qRound( selection.y() * stepY ) );
-
-    //(!) [(a - b)*c] != [a*c] - [b*c]
-    cachedSelection.setWidth( qRound(stepX * (selection.x() + selection.width())) - qRound(stepX * selection.x()));
-    cachedSelection.setHeight( qRound(stepY * (selection.y() + selection.height())) - qRound(stepY * selection.y()));
+    redrawSelection = true;
 
     update();
 }
 
 void MSASimpleOverview::sl_redraw() {
     redrawMSAOverview = true;
+    redrawSelection = true;
+
     update();
 }
 
@@ -118,6 +114,11 @@ void MSASimpleOverview::paintEvent(QPaintEvent *e) {
     drawVisibleRange(pVisibleRange);
     pVisibleRange.end();
 
+    if (redrawSelection) {
+        recalculateSelection();
+        redrawSelection = false;
+    }
+
     QPainter pSelection(&cachedView);
     drawSelection(pSelection);
     pSelection.end();
@@ -129,6 +130,7 @@ void MSASimpleOverview::paintEvent(QPaintEvent *e) {
 
 void MSASimpleOverview::resizeEvent(QResizeEvent *e) {
     redrawMSAOverview = true;
+    redrawSelection = true;
     QWidget::resizeEvent(e);
 }
 
@@ -139,8 +141,7 @@ void MSASimpleOverview::drawOverview(QPainter &p) {
         return;
     }
 
-    stepX = width() / (double)editor->getAlignmentLen();
-    stepY = height() / (double)editor->getNumSequences();
+    recalculateScale();
 
     QString highlightingSchemeId = sequenceArea->getCurrentHighlightingScheme()->getFactory()->getId();
 
@@ -244,5 +245,22 @@ void MSASimpleOverview::moveVisibleRange(QPoint _pos) {
     sequenceArea->setFirstVisibleSequence(pos);
 }
 
+void MSASimpleOverview::recalculateSelection() {
+    recalculateScale();
+
+    const MSAEditorSelection& selection = sequenceArea->getSelection();
+
+    cachedSelection.setX( qRound( selection.x() * stepX ) );
+    cachedSelection.setY( qRound( selection.y() * stepY ) );
+
+    //(!) [(a - b)*c] != [a*c] - [b*c]
+    cachedSelection.setWidth( qRound(stepX * (selection.x() + selection.width())) - qRound(stepX * selection.x()));
+    cachedSelection.setHeight( qRound(stepY * (selection.y() + selection.height())) - qRound(stepY * selection.y()));
+}
+
+void MSASimpleOverview::recalculateScale() {
+    stepX = width() / (double)editor->getAlignmentLen();
+    stepY = height() / (double)editor->getNumSequences();
+}
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
index 0a412be..e0ee503 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
@@ -62,10 +62,14 @@ private:
 
     void moveVisibleRange(QPoint pos);
 
+    void recalculateSelection();
+    void recalculateScale();
+
 private:
     mutable QPixmap cachedMSAOverview;
 
     mutable bool    redrawMSAOverview;
+    mutable bool    redrawSelection;
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
index 8bf4996..db34a6f 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 = "16126710";
+const QString PairAlignFactory::GROUP_DOC_PAGE = "17466108";
 
 
 PairAlignFactory::PairAlignFactory() {
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
index eff8f20..2d15f0b 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
@@ -19,23 +19,19 @@
 * MA 02110-1301, USA.
 */
 #include "MSAEditorMultiTreeViewer.h"
+#include "MsaEditorTreeTabArea.h"
 #include <U2View/GraphicsRectangularBranchItem.h>
-#include <U2View/MSAEditorDataList.h>
 #include <U2View/MSAEditor.h>
 #include <U2Gui/ObjectViewModel.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QVBoxLayout>
-#endif
 #include <U2Core/DocumentModel.h>
+#include <QVBoxLayout>
 
 
 namespace U2 {
 
 MSAEditorMultiTreeViewer::MSAEditorMultiTreeViewer(QString _title, MSAEditor* _editor)
 : editor(_editor) {
-    treeTabs = new MSAEditorTabWidgetArea(editor, this);
+    treeTabs = new MsaEditorTreeTabArea(editor, this);
     titleWidget = _editor->getUI()->createLabelWidget(_title);
     MSAWidget* title = dynamic_cast<MSAWidget*>(titleWidget);
     title->setHeightMargin(-55);
@@ -69,7 +65,7 @@ QWidget* MSAEditorMultiTreeViewer::getCurrentWidget() const {
     return treeTabs->getCurrentWidget();
 }
 
-UpdatedTabWidget* MSAEditorMultiTreeViewer::getCurrentTabWidget() const {
+MsaEditorTreeTab* MSAEditorMultiTreeViewer::getCurrentTabWidget() const {
     return treeTabs->getCurrentTabWidget();
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
index a651d74..0610c91 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
@@ -37,10 +37,10 @@
 namespace U2 {
 
 class MSAEditor;
-class MSAEditorTabWidgetArea;
+class MsaEditorTreeTabArea;
 class MSALabelWidget;
 class GObjectViewWindow;
-class UpdatedTabWidget;
+class MsaEditorTreeTab;
 
 class U2VIEW_EXPORT MSAEditorMultiTreeViewer: public QWidget {
     Q_OBJECT
@@ -52,7 +52,7 @@ public:
 
     QWidget* getCurrentWidget() const;
 
-    UpdatedTabWidget* getCurrentTabWidget() const;
+    MsaEditorTreeTab* getCurrentTabWidget() const;
 
     const QStringList& getTreeNames() const;
 signals:
@@ -60,7 +60,7 @@ signals:
 public slots:
     void sl_onTabCloseRequested(QWidget*);
 private:
-    MSAEditorTabWidgetArea*         treeTabs;
+    MsaEditorTreeTabArea*           treeTabs;
     QWidget*                        titleWidget;
     MSAEditor*                      editor;
     QList<QWidget*>                 treeViews;
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
index 64e8be7..f200362 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
@@ -49,7 +49,6 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorDataList.h>
 #include <U2View/MSAEditorNameList.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
@@ -60,6 +59,7 @@
 #include "ov_phyltree/TreeViewer.h"
 #include "ov_phyltree/TreeViewerTasks.h"
 #include "phyltree/CreatePhyTreeDialogController.h"
+#include "MsaEditorTreeTabArea.h"
 
 namespace U2 {
 MSAEditorTreeManager::MSAEditorTreeManager(MSAEditor* _editor)
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
index ca7d495..1193e01 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
@@ -20,6 +20,7 @@
 */
 
 #include "MSAEditorTreeViewer.h"
+#include "MsaEditorTreeTabArea.h"
 
 #include <U2Core/AppContext.h>
 #include <U2Core/PhyTree.h>
@@ -32,7 +33,6 @@
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
 #include <U2View/MSAEditorNameList.h>
-#include <U2View/MSAEditorDataList.h>
 
 #include <QCursor>
 #include <QDateTime>
@@ -47,6 +47,8 @@ namespace U2 {
 
 MSAEditorTreeViewer::MSAEditorTreeViewer(const QString& viewName, GObject* obj, GraphicsRectangularBranchItem* _root, qreal s)
     : TreeViewer(viewName, obj, _root, s),
+      refreshTreeAction(NULL),
+      sortSeqAction(NULL),
       msa(NULL),
       syncMode(WithoutSynchronization),
       slotsAreConnected(false)
@@ -112,13 +114,16 @@ bool MSAEditorTreeViewer::sync() {
     MSAEditorTreeViewerUI* treeViewerUI = qobject_cast<MSAEditorTreeViewerUI*>(ui);
     CHECK(treeViewerUI != NULL, false);
     if (treeViewerUI->canSynchronizeWithMSA(msa)) {
-        if (isSynchronized()) {
-            // already synchronized
-            return true;
-        }
         syncMode = FullSynchronization;
         treeViewerUI->setSynchronizeMode(syncMode);
 
+        CHECK(msa != NULL, false);
+        MSAEditorUI* msaUI = msa->getUI();
+        connect(msaUI->editor->getMSAObject(),  SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
+                this,                           SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
+        connect(msaUI,                          SIGNAL(si_stopMsaChanging(bool)),
+                this,                           SLOT(sl_startTracking(bool)));
+
         connectSignals();
         sortSeqAction->setEnabled(true);
         treeViewerUI->sl_sortAlignment();
@@ -155,8 +160,8 @@ void MSAEditorTreeViewer::connectSignals() {
     MSAEditorTreeViewerUI* treeViewerUI = qobject_cast<MSAEditorTreeViewerUI*>(ui);
     CHECK(treeViewerUI != NULL, );
 
-    connect(msaUI->getSequenceArea(), SIGNAL(si_alignmentUpdated()),
-            this,                      SLOT(sl_alignmentUpdated()));
+    connect(msaUI,                      SIGNAL(si_startMsaChanging()),
+            this,                       SLOT(sl_stopTracking()));
 
     connect(treeViewerUI,               SIGNAL(si_seqOrderChanged(const QStringList&)),
             msa,                        SLOT(sl_onSeqOrderChanged(const QStringList&)));
@@ -186,8 +191,8 @@ void MSAEditorTreeViewer::disconnectSignals() {
     MSAEditorTreeViewerUI* treeViewerUI = qobject_cast<MSAEditorTreeViewerUI*>(ui);
     CHECK(treeViewerUI != NULL, );
 
-    disconnect(msaUI->getSequenceArea(), SIGNAL(si_alignmentUpdated()),
-             this,                      SLOT(sl_alignmentUpdated()));
+    disconnect(msaUI,                       SIGNAL(si_startMsaChanging()),
+               this,                        SLOT(sl_stopTracking()));
 
     disconnect(treeViewerUI,                SIGNAL(si_seqOrderChanged(const QStringList&)),
             msa,                            SLOT(sl_onSeqOrderChanged(const QStringList&)));
@@ -208,31 +213,102 @@ void MSAEditorTreeViewer::disconnectSignals() {
     slotsAreConnected = false;
 }
 
-void MSAEditorTreeViewer::sl_alignmentUpdated() {
-    if (sync() == false) {
+void MSAEditorTreeViewer::sl_startTracking(bool changed) {
+    CHECK(msa != NULL, );
+    MSAEditorUI* msaUI = msa->getUI();
+    CHECK(msaUI != NULL, );
+    disconnect(msaUI,   SIGNAL(si_stopMsaChanging(bool)),
+               this,    SLOT(sl_startTracking(bool)));
+
+    if (changed) {
         QObjectScopedPointer<QMessageBox> desyncQuestion = new QMessageBox( QMessageBox::Question,
                                                                             tr("Alignment Modification Confirmation"),
-                                                                            tr("The list of sequences has been modified.\n\n"
+                                                                            tr("The alignment has been modified.\n\n"
                                                                                "All phylogenetic tree(s), opened in the same view, "
                                                                                "will be no more synchronized with the alignment."));
         desyncQuestion->setInformativeText(tr("Do you want to confirm the modification?"));
-
         desyncQuestion->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
         desyncQuestion->button(QMessageBox::No)->setText(tr("Cancel"));
         desyncQuestion->button(QMessageBox::Yes)->setText(tr("Confirm"));
         desyncQuestion->setDefaultButton(QMessageBox::No);
+        desyncQuestion->setModal(true);
 
         int res = desyncQuestion->exec();
         if (res == QMessageBox::No) {
-            CHECK(msa != NULL, );
-            MSAEditorUI* msaUI = msa->getUI();
-            msaUI->getUndoAction()->trigger();
+            // undo the change and synchronize
+            disconnect(msaUI->editor->getMSAObject(),   SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
+                       this,                            SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
+
+            if (cachedModification.type != MAlignmentModType_Undo) {
+                if (!msaUI->getUndoAction()->isEnabled()) {
+                    desync();
+                    FAIL("Processing the alignment change, but undo-redo stack is empty!", );
+                }
+                msaUI->getUndoAction()->trigger();
+            } else {
+                if (!msaUI->getRedoAction()->isEnabled()) {
+                    desync();
+                    FAIL("Processing the alignment change, but undo-redo stack is empty!", );
+                }
+                msaUI->getRedoAction()->trigger();
+            }
+            bool ok = sync();
+            if (!ok) {
+                desync();
+            }
+            SAFE_POINT(ok, "Cannot synchronize the tree with the alignment", );
         } else {
+            // break the connection completely
             desync();
         }
+
+    } else {
+        // alignment wasn't changed, the synchronization can remain
+        bool ok = sync();
+        if (!ok) {
+            desync();
+        }
+        SAFE_POINT(ok, "Cannot synchronize the tree with the alignment", );
+    }
+}
+
+void MSAEditorTreeViewer::sl_stopTracking() {
+    disconnectSignals();
+}
+
+void MSAEditorTreeViewer::sl_alignmentChanged(const MAlignment &/*ma*/, const MAlignmentModInfo &modInfo) {
+    cachedModification = modInfo;
+
+    bool connectionIsNotBrokenOnAlignmentChange = slotsAreConnected && (modInfo.sequenceContentChanged || modInfo.sequenceListChanged || modInfo.alignmentLengthChanged);
+    if (connectionIsNotBrokenOnAlignmentChange) {
+        // alignment was modified by undo-redo or outside of current msa editor
+        MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
+        SAFE_POINT(mdiManager != NULL, "MWMDIManager is NULL", );
+        GObjectViewWindow* win = qobject_cast<GObjectViewWindow*>(mdiManager->getActiveWindow());
+        if (win != NULL) {
+            if (win->getObjectView() == msa) {
+                // undo-redo at the same window
+                disconnectSignals();
+                sl_startTracking(true);
+                return;
+            }
+        }
+
+        // the change outside the current msa editor detected -- desync the tree
+        CHECK(msa != NULL, );
+        MSAEditorUI* msaUI = msa->getUI();
+        CHECK(msaUI != NULL, );
+        disconnect(msaUI->editor->getMSAObject(),   SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
+                   this,                            SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
+        disconnect(msaUI,                          SIGNAL(si_stopMsaChanging(bool)),
+                   this,                           SLOT(sl_startTracking(bool)));
+        desync();
     }
 }
 
+//---------------------------------------------
+// MSAEditorTreeViewerUI
+//---------------------------------------------
 MSAEditorTreeViewerUI::MSAEditorTreeViewerUI(MSAEditorTreeViewer* treeViewer)
     : TreeViewerUI(treeViewer), subgroupSelectorPos(0.0), groupColors(1, 0.86), curLayoutIsRectangular(true),
     curMSATreeViewer(treeViewer), syncMode(WithoutSynchronization), hasMinSize(false), hasMaxSize(false)
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
index adf80f8..9fe7ef4 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
@@ -87,7 +87,10 @@ protected:
 
 private slots:
     void sl_refreshTree();
-    void sl_alignmentUpdated();
+
+    void sl_stopTracking();
+    void sl_startTracking(bool changed);
+    void sl_alignmentChanged(const MAlignment& ma, const MAlignmentModInfo& modInfo);
 
 signals:
     void si_refreshTree(MSAEditorTreeViewer* treeViewer);
@@ -103,6 +106,7 @@ private:
     MSAEditor*            msa;
     SynchronizationMode   syncMode;
     bool                  slotsAreConnected;
+    MAlignmentModInfo     cachedModification;
 };
 
 class U2VIEW_EXPORT MSAEditorTreeViewerUI: public TreeViewerUI {
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp
new file mode 100644
index 0000000..6815088
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp
@@ -0,0 +1,161 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "MsaEditorTreeTabArea.h"
+#include "../MSAEditor.h"
+#include "MSAEditorTreeManager.h"
+
+#include <U2Core/DocumentModel.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/GObjectRelationRoles.h>
+#include <U2Core/PhyTreeObject.h>
+
+#include <QPainter>
+#include <QTabBar>
+#include <QVBoxLayout>
+
+
+namespace U2
+{
+MsaEditorTreeTab::MsaEditorTreeTab(MSAEditor* msa, QWidget* parent)
+    : QTabWidget(parent), msa(msa), addTabButton(NULL){
+    setObjectName("MsaEditorTreeTab");
+    addTabButton = new QPushButton(QIcon(":/core/images/add_tree.png"), "", this);
+    addTabButton->setToolTip(tr("Add existing tree"));
+    setCornerWidget(addTabButton);
+    connect(addTabButton, SIGNAL(clicked(bool)), this, SLOT(sl_addTabTriggered()));
+    connect(this, SIGNAL(si_tabsCountChanged(int)), SLOT(sl_onCountChanged(int)));
+
+    setTabsClosable(true);
+    connect(this, SIGNAL(tabCloseRequested(int)), SLOT(sl_onTabCloseRequested(int)));
+
+    tabBar()->setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(tabBar(), SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(sl_onContextMenuRequested(const QPoint&)));
+
+    closeOtherTabs = new QAction(tr("Close other tabs"), this);
+    closeOtherTabs->setObjectName("Close other tabs");
+    connect(closeOtherTabs, SIGNAL(triggered()), SLOT(sl_onCloseOtherTabs()));
+
+    closeAllTabs = new QAction(tr("Close all tabs"), this);
+    closeAllTabs->setObjectName("Close all tabs");
+    connect(closeAllTabs, SIGNAL(triggered()), SLOT(sl_onCloseAllTabs()));
+
+    closeTab = new QAction(tr("Close tab"), this);
+    closeTab->setObjectName("Close tab");
+    connect(closeTab, SIGNAL(triggered()), SLOT(sl_onCloseTab()));
+}
+void MsaEditorTreeTab::sl_onTabCloseRequested(int index) {
+    deleteTree(index);
+}
+
+void MsaEditorTreeTab::sl_onContextMenuRequested(const QPoint &pos) {
+    menuPos = pos;
+    QMenu tabsMenu;
+    tabsMenu.addAction(closeOtherTabs);
+    tabsMenu.addAction(closeAllTabs);
+    tabsMenu.addAction(closeTab);
+    tabsMenu.exec(mapToGlobal(pos));
+}
+
+void MsaEditorTreeTab::sl_onCountChanged(int count) {
+    if (count > 0) {
+        closeOtherTabs->setEnabled(count > 1);
+    }
+}
+
+void MsaEditorTreeTab::addTab(QWidget *page, const QString &label) {
+    QTabWidget::addTab(page, label);
+    emit si_tabsCountChanged(count());
+}
+
+void MsaEditorTreeTab::deleteTree(int index) {
+    SAFE_POINT(-1 != index && index < count(), "Incorrect index is detected.",);
+    GObjectViewWindow* win = qobject_cast<GObjectViewWindow*>(widget(index));
+    const GObject* obj = win->getObjectView()->getObjects().at(0);
+    Document* doc = obj->getDocument();
+    GObjectReference treeRef(doc->getURLString(), "", GObjectTypes::PHYLOGENETIC_TREE);
+    treeRef.objName = obj->getGObjectName();
+    msa->getMSAObject()->removeObjectRelation(GObjectRelation(treeRef, ObjectRole_PhylogeneticTree));
+
+    removeTab(index);
+    emit si_tabsCountChanged(count());
+}
+
+void MsaEditorTreeTab::sl_addTabTriggered() {
+    msa->getTreeManager()->openTreeFromFile();
+    emit si_tabsCountChanged(count());
+}
+
+void MsaEditorTreeTab::addExistingTree() {
+    msa->getTreeManager()->openTreeFromFile();
+    emit si_tabsCountChanged(count());
+}
+
+void MsaEditorTreeTab::sl_onCloseOtherTabs() {
+    int selectedTabIndex = tabBar()->tabAt(menuPos);
+    for (int i = count() - 1; i >= 0; i--) {
+        if (i != selectedTabIndex) {
+            deleteTree(i);
+        }
+    }
+}
+
+void MsaEditorTreeTab::sl_onCloseAllTabs() {
+    for (int tabsCount = count(); tabsCount > 0; tabsCount--) {
+        deleteTree(0);
+    }
+}
+
+void MsaEditorTreeTab::sl_onCloseTab() {
+    int index = tabBar()->tabAt(menuPos);
+    deleteTree(index);
+}
+
+MsaEditorTreeTabArea::MsaEditorTreeTabArea(MSAEditor* msa, QWidget* parent)
+    : QWidget(parent), addTabButton(NULL), msa(msa), treeTabWidget(NULL), currentLayout(NULL) {
+    initialize();
+}
+void MsaEditorTreeTabArea::initialize() {
+    treeTabWidget = createTabWidget();
+    currentLayout = new QVBoxLayout();
+    currentLayout->setMargin(0);
+    currentLayout->setSpacing(0);
+    currentLayout->addWidget(treeTabWidget);
+    setLayout(currentLayout);
+}
+MsaEditorTreeTab* MsaEditorTreeTabArea::createTabWidget() {
+    MsaEditorTreeTab* widget = new MsaEditorTreeTab(msa, this);
+    connect(widget, SIGNAL(si_tabsCountChanged(int)), SIGNAL(si_tabsCountChanged(int)));
+    return widget;
+}
+
+void MsaEditorTreeTabArea::addTab(QWidget *page, const QString &label) {
+    treeTabWidget->addTab(page, label);
+}
+void MsaEditorTreeTabArea::paintEvent(QPaintEvent *) {
+    QPainter p(this);
+    p.fillRect(rect(), Qt::white);
+}
+
+} //namespace
+
+
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h
new file mode 100644
index 0000000..1a6badc
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h
@@ -0,0 +1,94 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EDITOR_TREE_TAB_AREA_H_
+#define _U2_MSA_EDITOR_TREE_TAB_AREA_H_
+
+#include <QPushButton>
+#include <QTabWidget>
+
+#include "../MsaUpdatedWidgetInterface.h"
+
+namespace U2
+{
+
+class MAlignmentRow;
+class MSADistanceMatrix;
+class MSAEditor;
+
+class MsaEditorTreeTab : public QTabWidget {
+    Q_OBJECT
+public:
+    MsaEditorTreeTab(MSAEditor* msa, QWidget* parent);
+
+    void addTab(QWidget *page, const QString &label);
+    void deleteTree(int index);
+    QWidget* getCurrentWidget() const {return currentWidget();}
+    void addExistingTree();
+public slots:
+    void sl_addTabTriggered();
+private slots:
+    void sl_onTabCloseRequested(int index);
+    void sl_onCloseOtherTabs();
+    void sl_onCloseAllTabs();
+    void sl_onCloseTab();
+    void sl_onCountChanged(int count);
+    void sl_onContextMenuRequested(const QPoint &pos);
+signals:
+    void si_tabsCountChanged(int curTabsNumber);
+private:
+    void processMenuAction(QAction* triggeredAction);
+
+    MSAEditor*          msa;
+    QPushButton*        addTabButton;
+    QPoint              menuPos;
+    QAction*            closeOtherTabs;
+    QAction*            closeAllTabs;
+    QAction*            closeTab;
+};
+
+class MsaEditorTreeTabArea : public QWidget{
+    Q_OBJECT
+public:
+    MsaEditorTreeTabArea(MSAEditor* msa, QWidget* parent);
+
+    void addTab(QWidget *page, const QString &label);
+    void deleteTab(QWidget *page);
+
+    MsaEditorTreeTab* getCurrentTabWidget() const { return treeTabWidget; }
+    QWidget*          getCurrentWidget() const { return treeTabWidget->getCurrentWidget(); }
+protected:
+    void paintEvent(QPaintEvent *);
+    virtual MsaEditorTreeTab* createTabWidget();
+    void initialize();
+
+signals:
+    void si_tabsCountChanged(int curTabsNumber);
+private:
+    QPushButton*                        addTabButton;
+    MSAEditor*                          msa;
+    MsaEditorTreeTab*                   treeTabWidget;
+    QLayout*                            currentLayout;
+};
+} //namespace
+
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
index 7cd58ba..f106835 100644
--- a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
@@ -38,7 +38,7 @@ namespace U2 {
 
 SaveSelectedSequenceFromMSADialogController::SaveSelectedSequenceFromMSADialogController(QWidget* p): QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126708");
+    new HelpButton(this, buttonBox, "17466106");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
index 7ecf37d..c3e909f 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
@@ -32,7 +32,7 @@
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
-#include "U2View/MSAEditorDataList.h"
+#include "../MsaEditorSimilarityColumn.h"
 
 namespace U2 {
 
@@ -68,7 +68,7 @@ SeqStatisticsWidget::SeqStatisticsWidget(MSAEditor* m)
 }
 
 void SeqStatisticsWidget::copySettings() {
-    const MSAEditorAlignmentDependentWidget* similarityWidget= msa->getUI()->getSimilarityWidget();
+    const MsaEditorAlignmentDependentWidget* similarityWidget= msa->getUI()->getSimilarityWidget();
     statisticsIsShown = false;
     if(NULL != similarityWidget) {
         const SimilarityStatisticsSettings* s = static_cast<const SimilarityStatisticsSettings*>(similarityWidget->getSettings());
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
index f7b8e84..21d5705 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 = "16126719";
+const QString SeqStatisticsWidgetFactory::GROUP_DOC_PAGE = "17466117";
 
 
 SeqStatisticsWidgetFactory::SeqStatisticsWidgetFactory() {
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
index dcacb54..b53cd7a 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
@@ -39,9 +39,10 @@
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
-#include "ov_msa/MSAEditorDataList.h"
 #include "ov_phyltree/TreeViewer.h"
 #include "ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h"
+#include "ov_msa/PhyTrees/MSAEditorTreeViewer.h"
+#include "ov_msa/PhyTrees/MsaEditorTreeTabArea.h"
 #include "phyltree/TreeSettingsDialog.h"
 
 #include "TreeOptionsWidget.h"
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
index d378b6d..8afac6e 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 = "16126756";
+const QString MSATreeOptionsWidgetFactory::GROUP_DOC_PAGE = "17466154";
 
 
 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 = "16126756";
+const QString TreeOptionsWidgetFactory::GROUP_DOC_PAGE = "17466154";
 
 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 = "16126756";
+const QString AddTreeWidgetFactory::GROUP_DOC_PAGE = "17466154";
 
 AddTreeWidgetFactory::AddTreeWidgetFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
index 06526ca..7b4b64c 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
@@ -334,7 +334,7 @@ void GSequenceGraphDrawer::drawGraph(QPainter& p, const QSharedPointer<GSequence
             float fymin = comin;
             float fymax = comax;
             float fymid = (comin + comax)/2;
-            float fy, fy2;
+            float fy;
             int prevFY = -1;
             bool rp = false, lp = false;
             if(!points.useIntervals){
@@ -378,7 +378,7 @@ void GSequenceGraphDrawer::drawGraph(QPainter& p, const QSharedPointer<GSequence
                 for (int i=0, n = points.firstPoints.size(); i < n; i++) {
                     assert(points.firstPoints.size() == points.secondPoints.size());
                     fy = calculatePointValue(nPoints, points, i);
-                    fy2 = calculatePointValue(nPoints, points, i);;
+                    float fy2 = calculatePointValue(nPoints, points, i);;
                     rp = false;
                     lp = false;
                     if (isUnknownValue(fy)) {
@@ -435,7 +435,7 @@ void GSequenceGraphDrawer::drawGraph(QPainter& p, const QSharedPointer<GSequence
 
             }
         }
-    } else {
+    } else if(!calculationTaskRunner.isIdle()) {
         p.fillRect(rect, Qt::gray);
         p.drawText(rect, Qt::AlignCenter, tr("Graph is rendering..."));
     }
@@ -784,10 +784,7 @@ void GSequenceGraphDrawer::calculatePoints(const QSharedPointer<GSequenceGraphDa
     points.firstPoints.fill(UNKNOWN_VAL);
     points.secondPoints.resize(numPoints);
     points.secondPoints.fill(UNKNOWN_VAL);
-    /*
-    points.cutoffPoints.resize(seqLen - win);
-    points.cutoffPoints.fill(UNKNOWN_VAL);
-    */
+
     min = UNKNOWN_VAL;
     max = UNKNOWN_VAL;
     int alignedFirst = 0; //start point for the first window
@@ -798,17 +795,21 @@ void GSequenceGraphDrawer::calculatePoints(const QSharedPointer<GSequenceGraphDa
     bool winStepNotChanged = win == d->cachedW && step == d->cachedS ;
     bool numPointsNotChanged = numPoints == d->cachedData.firstPoints.size();
 
-    bool isCacheValid = vr.length == d->cachedLen && vr.startPos == d->cachedFrom && winStepNotChanged;
-    bool useCached = isCacheValid && numPointsNotChanged;
-
-    if (!calculationTaskRunner.isIdle() && isCacheValid && d->cachedData.firstPoints.size() == 0) { //first time calculation condition
+    if (!calculationTaskRunner.isIdle() && winStepNotChanged && d->cachedData.firstPoints.size() == 0) { //first time calculation condition
         return;
     }
     CalculatePointsTask *calculationTask = NULL;
-    if (useCached) {
+    bool useIntervals = nSteps > numPoints;
+    if (winStepNotChanged) {
+        bool isCacheValid = vr.length == d->cachedLen && vr.startPos == d->cachedFrom;
+        if (!isCacheValid || d->cachedData.firstPoints.size() != numPoints) {
+            U2OpStatusImpl os;
+            GraphPointsUpdater graphUpdater(d, numPoints, alignedFirst, alignedLast, !useIntervals, wdata, view->getSequenceObject(), vr, os);
+            graphUpdater.updateGraphData();
+        }
+
         points = d->cachedData;
-    } else if (nSteps > numPoints) {
-        points.useIntervals = true;
+    } else if (useIntervals) {
         int stepsPerPoint = nSteps / points.firstPoints.size();
         int basesPerPoint = stepsPerPoint * step;
 
@@ -817,27 +818,19 @@ void GSequenceGraphDrawer::calculatePoints(const QSharedPointer<GSequenceGraphDa
                         && (qAbs(alignedFirst - d->alignedFC) < basesPerPoint);
 
         if (offsetIsTooSmall && winStepNotChanged && numPointsNotChanged && vr.length == d->cachedLen ) {
-            useCached = true;
             points = d->cachedData;
         } else {
-            calculationTask = new CalculatePointsTask(d, this, points, alignedFirst, alignedLast, false, wdata, view->getSequenceObject(), vr);
+            calculationTask = new CalculatePointsTask(d, numPoints, alignedFirst, alignedLast, false, wdata, view->getSequenceObject(), vr);
         }
     } else {
-        points.useIntervals = false;
         if(vr.startPos + win2 <= seqLen){
-            calculationTask = new CalculatePointsTask(d, this, points, alignedFirst, alignedLast, true, wdata, view->getSequenceObject(), vr);
+            calculationTask = new CalculatePointsTask(d, numPoints, alignedFirst, alignedLast, true, wdata, view->getSequenceObject(), vr);
         }
     }
 
     if (calculationTask != NULL) {
         calculationTaskRunner.run(calculationTask);
         d->cachedData = PairVector();
-        d->cachedFrom = vr.startPos;
-        d->cachedLen = vr.length;
-        d->cachedW = win;
-        d->cachedS = step;
-        d->alignedFC = alignedFirst;
-        d->alignedLC = alignedLast;
         return;
     }
 
@@ -867,18 +860,6 @@ void GSequenceGraphDrawer::calculatePoints(const QSharedPointer<GSequenceGraphDa
 
         }
     }
-    if (useCached) {
-        return;
-    }
-
-    // cache this result
-    d->cachedData = points;
-    d->cachedFrom = vr.startPos;
-    d->cachedLen = vr.length;
-    d->cachedW = win;
-    d->cachedS = step;
-    d->alignedFC = alignedFirst;
-    d->alignedLC = alignedLast;
 }
 
 void GSequenceGraphDrawer::showSettingsDialog() {
@@ -905,50 +886,72 @@ bool PairVector::isEmpty()const {
     return firstPoints == emptyFp && secondPoints == emptySp && cutoffPoints == emptyCutoff;
 }
 
-CalculatePointsTask::CalculatePointsTask(const QSharedPointer<GSequenceGraphData>& d, GSequenceGraphDrawer *drawer, PairVector &points, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata, U2SequenceObject* o, const U2Region &visibleRange)
+CalculatePointsTask::CalculatePointsTask(const QSharedPointer<GSequenceGraphData>& d, int numPoints, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata, U2SequenceObject* o, const U2Region &visibleRange)
     : BackgroundTask<PairVector>(tr("Calculate graph points"), TaskFlag_None),
-      d(d),
-      drawer(drawer),
-      result(points),
-      alignedFirst(alignedFirst),
-      alignedLast(alignedLast),
-      expandMode(expandMode),
-      wdata(wdata),
-      o(o),
-      visibleRange(visibleRange) {}
+    graphUpdater(d, numPoints, alignedFirst, alignedLast, expandMode, wdata, o, visibleRange, stateInfo)
+{
+}
 
 void CalculatePointsTask::run() {
-    if(o.isNull()){
-        return;
+    graphUpdater.recalculateGraphData();
+}
+
+GraphPointsUpdater::GraphPointsUpdater(const QSharedPointer<GSequenceGraphData>& d, int numPoints, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata,
+    U2SequenceObject* o, const U2Region &visibleRange, U2OpStatus& os)
+    : d(d),
+    alignedFirst(alignedFirst),
+    alignedLast(alignedLast),
+    expandMode(expandMode),
+    wdata(wdata),
+    o(o),
+    visibleRange(visibleRange),
+    os(os)
+{
+    result.firstPoints.resize(numPoints);
+    result.firstPoints.fill(GSequenceGraphDrawer::UNKNOWN_VAL);
+    result.secondPoints.resize(numPoints);
+    result.secondPoints.fill(GSequenceGraphDrawer::UNKNOWN_VAL);
+}
+
+void GraphPointsUpdater::recalculateGraphData() {
+    CHECK(!o.isNull(),);
+
+    QVector<float> newCutoff;
+    int lastAligned = o->getSequenceLength() - o->getSequenceLength() % wdata.step;
+    U2Region r = U2Region(0, lastAligned);
+    d->ga->calculate(result.allCutoffPoints, o, r, &wdata, os);
+
+    updateGraphData();
+}
+
+void GraphPointsUpdater::updateGraphData() {
+    setChahedDataParametrs();
+
+    if (result.allCutoffPoints.isEmpty()) {
+        result.allCutoffPoints = d->cachedData.allCutoffPoints;
     }
-    calculateCutoffPoints(d, result, alignedFirst, alignedLast, stateInfo);
-    CHECK_OP(stateInfo, );
+    calculateCutoffPoints();
+    CHECK_OP(os, );
     if (expandMode) {
-        calculateWithExpand(d, result, alignedFirst, alignedLast, stateInfo);
+        calculateWithExpand();
     } else {
-        calculateWithFit(d, result, alignedFirst, alignedLast, stateInfo);
+        calculateWithFit();
     }
-    CHECK_OP(stateInfo, );
+    CHECK_OP(os, );
 
     d->cachedData = result;
+    d->cachedData.useIntervals = !expandMode;
 }
 
-void CalculatePointsTask::calculateCutoffPoints(const QSharedPointer<GSequenceGraphData>& d, PairVector& points, int alignedFirst, int alignedLast, U2OpStatus &os){
-    Q_UNUSED(alignedFirst);
-    Q_UNUSED(alignedLast);
-    points.cutoffPoints.clear();
+QVector<float> GraphPointsUpdater::getCutoffRegion(int regionStart, int regionEnd) {
+    int firstPointIndex = regionStart / wdata.step;
+    int lastPointIndex = qMin(regionEnd / wdata.step + 1, (qint64)result.allCutoffPoints.length());
 
-    int win = wdata.window;
-    U2Region r(alignedFirst, alignedLast - alignedFirst + win);
-    if (r.startPos + win > o->getSequenceLength()) {
-        return;
-    }
-
-    d->ga->calculate(points.cutoffPoints, o, r, &wdata, os);
+    return result.allCutoffPoints.mid(firstPointIndex, lastPointIndex - firstPointIndex);
 }
 
-void CalculatePointsTask::calculateWithFit(const QSharedPointer<GSequenceGraphData>&, PairVector& points, int alignedFirst, int alignedLast, U2OpStatus &os) {
-    int nPoints = points.firstPoints.size();
+void GraphPointsUpdater::calculateWithFit() {
+    int nPoints = result.firstPoints.size();
     float basesPerPoint = (alignedLast - alignedFirst) / float(nPoints);
     CHECK(int(basesPerPoint) >= wdata.step, ); //ensure that every point is associated with some step data
     QVector<float> pointData;
@@ -959,42 +962,39 @@ void CalculatePointsTask::calculateWithFit(const QSharedPointer<GSequenceGraphDa
     for (int i = 0; i < nPoints; i++) {
         pointData.clear();
         qint64 startPos = alignedFirst + qint64(i * basesPerPoint);
-        U2Region r(startPos, len);
+        qint64 endPos = startPos + len;
+        CHECK(endPos <= lastBase, );
 
-        CHECK(r.endPos() <= lastBase, );
+        pointData = GraphPointsUpdater::getCutoffRegion(startPos, endPos - wdata.window);
 
-        d->ga->calculate(pointData, o, r, &wdata, os);
         CHECK_OP(os, );
         float min, max;
         GSequenceGraphUtils::calculateMinMax(pointData, min, max, os);
         CHECK_OP(os, );
 
-        points.firstPoints[i] = max; //BUG:422: support interval based graph!!!
-        points.secondPoints[i] = min;
+        result.firstPoints[i] = max; //BUG:422: support interval based graph!!!
+        result.secondPoints[i] = min;
     }
 }
 
-void CalculatePointsTask::calculateWithExpand(const QSharedPointer<GSequenceGraphData>& d, PairVector& points, int alignedFirst, int alignedLast, U2OpStatus &os) {
+void GraphPointsUpdater::calculateWithExpand() {
     int win = wdata.window;
-    int win2 = (win+1)/2;
+    int win2 = (win + 1) / 2;
     int step = wdata.step;
-    assert((alignedLast - alignedFirst) % step == 0);
+    SAFE_POINT((alignedLast - alignedFirst) % step == 0, "Incorrect region for graph calculation is detected", );
 
-    U2Region r(alignedFirst, alignedLast - alignedFirst + win);
-    QVector<float> res;
-
-    if( r.startPos + win > o->getSequenceLength() ){
+    if (alignedFirst + win > o->getSequenceLength()){
         return;
     }
 
-    d->ga->calculate(res, o, r, &wdata, os);
-    CHECK_OP(os, );
+    QVector<float> res = getCutoffRegion(alignedFirst, alignedLast);
 
-    assert(alignedFirst + win2 + step >= visibleRange.startPos); //0 or 1 step is before the visible range
-    assert(alignedLast + win2 - step <= visibleRange.endPos()); //0 or 1 step is after the the visible range
+    //0 or 1 step is before the visible range
+    SAFE_POINT(alignedFirst + win2 + step >= visibleRange.startPos, "Incorrect region for graph calculation is detected", );
+    SAFE_POINT(alignedLast + win2 - step <= visibleRange.endPos(), "Incorrect region for graph calculation is detected", );
 
     bool hasBeforeStep = alignedFirst + win2 < visibleRange.startPos;
-    bool hasAfterStep  = alignedLast + win2 >= visibleRange.endPos();
+    bool hasAfterStep = alignedLast + win2 >= visibleRange.endPos();
 
     int firstBaseOffset = hasBeforeStep ?
         (step - (visibleRange.startPos - (alignedFirst + win2)))
@@ -1003,39 +1003,55 @@ void CalculatePointsTask::calculateWithExpand(const QSharedPointer<GSequenceGrap
         (step - (alignedLast + win2 - visibleRange.endPos()))  //extra step on the right is available
         : (visibleRange.endPos() - (alignedLast + win2)); // no extra step available -> end of the sequence
 
-    assert(firstBaseOffset >= 0 && lastBaseOffset >= 0);
-    assert(hasBeforeStep ? (firstBaseOffset < step && firstBaseOffset!=0): firstBaseOffset <= win2);
-    assert(hasAfterStep ? (lastBaseOffset <= step && lastBaseOffset !=0) : lastBaseOffset < win2 + step);
+    SAFE_POINT(firstBaseOffset >= 0 && lastBaseOffset >= 0, "Incorrect offset is detected",);
+    SAFE_POINT(hasBeforeStep ? (firstBaseOffset < step && firstBaseOffset != 0) : firstBaseOffset <= win2, "Incorrect offset is detected",);
+    SAFE_POINT(hasAfterStep ? (lastBaseOffset <= step && lastBaseOffset != 0) : lastBaseOffset < win2 + step, "Incorrect offset is detected",);
 
-    float base2point = points.firstPoints.size() / (float)visibleRange.length;
+    float base2point = result.firstPoints.size() / (float)visibleRange.length;
 
     int ri = hasBeforeStep ? 1 : 0;
-    int rn = hasAfterStep ? res.size()-1 : res.size();
-    for (int i=0;  ri < rn; ri++, i++) {
+    int rn = hasAfterStep ? res.size() - 1 : res.size();
+    for (int i = 0; ri < rn; ri++, i++) {
         int b = firstBaseOffset + i * step;
         int px = int(b * base2point);
-        assert(px < points.firstPoints.size());
-        points.firstPoints[px] = res[ri];
+        CHECK_BREAK(px < result.firstPoints.size());
+        result.firstPoints[px] = res[ri];
     }
 
     //restore boundary points if possible
-    if(res.size() < 2){
+    if (res.size() < 2){
         return;
     }
 
     if (hasBeforeStep && !GSequenceGraphDrawer::isUnknownValue(res[0]) && !GSequenceGraphDrawer::isUnknownValue(res[1])) {
         assert(firstBaseOffset > 0);
         float k = firstBaseOffset / (float)step;
-        float val = res[1] + (res[0]-res[1])*k;
-        points.firstPoints[0] = val;
+        float val = res[1] + (res[0] - res[1])*k;
+        result.firstPoints[0] = val;
     }
 
-    if (hasAfterStep && !GSequenceGraphDrawer::isUnknownValue(res[rn-1]) &&  !GSequenceGraphDrawer::isUnknownValue(res[rn])) {
+    if (hasAfterStep && !GSequenceGraphDrawer::isUnknownValue(res[rn - 1]) && !GSequenceGraphDrawer::isUnknownValue(res[rn])) {
         assert(lastBaseOffset > 0);
         float k = lastBaseOffset / (float)step;
-        float val = res[rn-1] + (res[rn]-res[rn-1])*k;
-        points.firstPoints[points.firstPoints.size()-1] = val;
+        float val = res[rn - 1] + (res[rn] - res[rn - 1])*k;
+        result.firstPoints[result.firstPoints.size() - 1] = val;
+    }
+}
+
+void GraphPointsUpdater::calculateCutoffPoints(){
+    if (alignedFirst + wdata.window > o->getSequenceLength()) {
+        return;
     }
+    result.cutoffPoints = GraphPointsUpdater::getCutoffRegion(alignedFirst, alignedLast);
+}
+
+void GraphPointsUpdater::setChahedDataParametrs() {
+    d->cachedFrom = visibleRange.startPos;
+    d->cachedLen = visibleRange.length;
+    d->cachedW = wdata.window;
+    d->cachedS = wdata.step;
+    d->alignedFC = alignedFirst;
+    d->alignedLC = alignedLast;
 }
 
 PairVector::PairVector():useIntervals(false) {}
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
index b03a0ce..1a8b169 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
@@ -87,6 +87,7 @@ struct PairVector {
     QVector<float>  firstPoints;  //max if use both
     QVector<float>  secondPoints;
     QVector<float>  cutoffPoints;
+    QVector<float>  allCutoffPoints;
     bool useIntervals;
 
     bool isEmpty() const;
@@ -185,22 +186,27 @@ public:
 
 };
 
-class CalculatePointsTask : public BackgroundTask<PairVector> {
-    Q_OBJECT
+class GraphPointsUpdater {
 public:
-    CalculatePointsTask(const QSharedPointer<GSequenceGraphData>& d, GSequenceGraphDrawer *drawer, PairVector &points, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata,  U2SequenceObject* o, const U2Region &visibleRange);
-    virtual void run();
-private:
-    // calculates points (> visual area size) and fits the result into visual size
-    void calculateWithFit(const QSharedPointer<GSequenceGraphData>& d, PairVector& points, int alignedStart, int alignedEnd, U2OpStatus &os);
+    GraphPointsUpdater(const QSharedPointer<GSequenceGraphData>& d, int numPoints, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata, U2SequenceObject* o, const U2Region &visibleRange, U2OpStatus& os);
+
+    void recalculateGraphData();
+
+    void updateGraphData();
+
+    void calculateWithFit();
 
     // calculates points (< visual area size) and expands points to fill all visual area size
-    void calculateWithExpand(const QSharedPointer<GSequenceGraphData>& d, PairVector& points, int alignedStart, int alignedEnd, U2OpStatus &os);
+    void calculateWithExpand();
 
-    void calculateCutoffPoints(const QSharedPointer<GSequenceGraphData>& d, PairVector& points, int alignedFirst, int alignedLast, U2OpStatus &os);
+    void calculateCutoffPoints();
+
+    QVector<float> getCutoffRegion(int regionStart, int regionEnd);
+
+private:
+    void setChahedDataParametrs();
 
     QSharedPointer<GSequenceGraphData> d;
-    GSequenceGraphDrawer *drawer;
     PairVector result;
     int alignedFirst;
     int alignedLast;
@@ -208,6 +214,16 @@ private:
     const GSequenceGraphWindowData wdata;
     QPointer<U2SequenceObject> o;
     const U2Region visibleRange;
+    U2OpStatus& os;
+};
+
+class CalculatePointsTask : public BackgroundTask<PairVector> {
+    Q_OBJECT
+public:
+    CalculatePointsTask(const QSharedPointer<GSequenceGraphData>& d, int numPoints, int alignedFirst, int alignedLast, bool expandMode, const GSequenceGraphWindowData &wdata, U2SequenceObject* o, const U2Region &visibleRange);
+    virtual void run();
+private:
+    GraphPointsUpdater graphUpdater;
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
index 1598966..a95548d 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
@@ -24,6 +24,7 @@
 #include "AnnotatedDNAView.h"
 
 #include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNASequenceSelection.h>
@@ -133,6 +134,7 @@ QList<GObject *> ADVSequenceObjectContext::getAnnotationGObjects() const {
 }
 
 void ADVSequenceObjectContext::sl_showDirectOnly(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowDirectTranslationsOnly" );
     bool needUpdate = false;
     QList<QAction*> actionList = visibleFrames->actions();
     translationRowsStatus.clear();
@@ -158,6 +160,7 @@ void ADVSequenceObjectContext::sl_showDirectOnly(){
 }
 
 void ADVSequenceObjectContext::sl_showComplOnly(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowComplementTranslationsOnly" );
     bool needUpdate = false;
     QList<QAction*> actionList = visibleFrames->actions();
     translationRowsStatus.clear();
@@ -183,6 +186,7 @@ void ADVSequenceObjectContext::sl_showComplOnly(){
 }
 
 void ADVSequenceObjectContext::sl_showShowAll(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowAllTranslations" );
     bool needUpdate = false;
     translationRowsStatus.clear();
     foreach(QAction* a, visibleFrames->actions()){
@@ -224,7 +228,7 @@ QMenu* ADVSequenceObjectContext::createTranslationsMenu() {
         connect(frames->addAction(QString("Show complementary only")), SIGNAL(triggered()), SLOT(sl_showComplOnly()));
         connect(frames->addAction(QString("Show all")), SIGNAL(triggered()), SLOT(sl_showShowAll()));
 
-        if(view != NULL){
+        if (view != NULL){
             m->addAction(view->getShowCodonTableAction());
         }
         m->addMenu(frames);
@@ -259,6 +263,7 @@ void ADVSequenceObjectContext::setAminoTranslation(const QString& tid) {
 }
 
 void ADVSequenceObjectContext::sl_setAminoTranslation() {
+    GCOUNTER( cvar, tvar, "DetView_SetAminoTranslation" );
     QAction* a = qobject_cast<QAction*>(sender());
     QString tid = a->data().toString();
     setAminoTranslation(tid);
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
index e5b3434..aba2c2c 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
@@ -280,6 +280,8 @@ private:
     ADVSequenceWidget*          replacedSeqWidget;     // not NULL when any sequence widget is dragging to the new place.
 
     int                         timerId;
+
+    QMap<Task*, ADVSequenceObjectContext*> pasteQueue;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
index 527a423..53a105f 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
@@ -103,21 +103,21 @@ Task* AnnotatedDNAViewFactory::createViewTask(const MultiGSelection& multiSelect
     }
 
     const DocumentSelection* ds = qobject_cast<const DocumentSelection*>(multiSelection.findSelectionByType(GSelectionTypes::DOCUMENTS));
-        if (ds != NULL) {
-            foreach(Document* doc, ds->getSelectedDocuments()) {
-                foreach(GObject* obj, doc->findGObjectByType(GObjectTypes::SEQUENCE, UOF_LoadedAndUnloaded)) {
-                    if(!objectsToOpen.contains(obj)) {
-                        objectsToOpen.append(obj);
-                    }
+    if (ds != NULL) {
+        foreach(Document* doc, ds->getSelectedDocuments()) {
+            foreach(GObject* obj, doc->findGObjectByType(GObjectTypes::SEQUENCE, UOF_LoadedAndUnloaded)) {
+                if(!objectsToOpen.contains(obj)) {
+                    objectsToOpen.append(obj);
                 }
-                foreach(GObject* obj, GObjectUtils::selectObjectsWithRelation(doc->getObjects(), GObjectTypes::SEQUENCE,
-                    ObjectRole_Sequence, UOF_LoadedAndUnloaded, true)) {
-                    if(!objectsToOpen.contains(obj)) {
-                        objectsToOpen.append(obj);
-                    }
+            }
+            foreach(GObject* obj, GObjectUtils::selectObjectsWithRelation(doc->getObjects(), GObjectTypes::SEQUENCE,
+                ObjectRole_Sequence, UOF_LoadedAndUnloaded, true)) {
+                if(!objectsToOpen.contains(obj)) {
+                    objectsToOpen.append(obj);
                 }
             }
         }
+    }
 
     OpenAnnotatedDNAViewTask* task = new OpenAnnotatedDNAViewTask(objectsToOpen);
     return task;
diff --git a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
index f0cce54..a81d83f 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, "16126600");
+    new HelpButton(this, buttonBox, "17465998");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.cpp b/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.cpp
deleted file mode 100644
index 9cd6b73..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
-* http://ugene.unipro.ru
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public 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 <QListWidget>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/RegionSelector.h>
-#include <U2Gui/U2WidgetStateStorage.h>
-
-#include "DasOptionsPanelWidget.h"
-
-#include "DasOptionsPanelSavableTab.h"
-
-static const QString CHANGE_MODE_LABEL_NAME = "lblShowMoreLess";
-
-struct ListWidgetItemData {
-    ListWidgetItemData()
-        : checkState(Qt::Unchecked)
-    {
-
-    }
-
-    ListWidgetItemData(const QString &text, const QString &userData, const QString &toolTip, Qt::CheckState checkState)
-        : text(text), userData(userData), toolTip(toolTip), checkState(checkState)
-    {
-
-    }
-
-    QString text;
-    QString userData;
-    QString toolTip;
-    Qt::CheckState checkState;
-};
-
-Q_DECLARE_METATYPE(QVector<ListWidgetItemData>)
-Q_DECLARE_METATYPE(QVector<QVector<QString> >)
-
-namespace U2 {
-
-DasOptionsPanelSavableTab::DasOptionsPanelSavableTab(QWidget *wrappedWidget, MWMDIWindow *contextWindow)
-    : U2SavableWidget(wrappedWidget, contextWindow)
-{
-    SAFE_POINT(NULL != qobject_cast<DasOptionsPanelWidget *>(wrappedWidget), "Invalid widget provided", );
-}
-
-DasOptionsPanelSavableTab::~DasOptionsPanelSavableTab() {
-    U2WidgetStateStorage::saveWidgetState(*this);
-    widgetStateSaved = true;
-}
-
-namespace {
-
-QVector<ListWidgetItemData> getListWidgetContent(QListWidget *listWidget) {
-    QVector<ListWidgetItemData> result;
-
-    const int rowCount = listWidget->count();
-    result.reserve(rowCount);
-
-    for (int i = 0; i < rowCount; ++i) {
-        QListWidgetItem *item = listWidget->item(i);
-        const QString text = item->data(Qt::DisplayRole).toString();
-        const QString userData = item->data(Qt::UserRole).toString();
-        const QString toolTip = item->toolTip();
-        const Qt::CheckState checked = item->checkState();
-        result.append(ListWidgetItemData(text, userData, toolTip, checked));
-    }
-    return result;
-}
-
-void setListWidgetContent(QListWidget *listWidget, const QVector<ListWidgetItemData> &content) {
-    listWidget->clear();
-    for (int i = 0, n = content.size(); i < n; ++i) {
-        QListWidgetItem *item = new QListWidgetItem(content[i].text);
-        item->setData(Qt::UserRole, content[i].userData);
-        item->setToolTip(content[i].toolTip);
-        item->setCheckState(content[i].checkState);
-        listWidget->addItem(item);
-    }
-}
-
-}
-
-QVariant DasOptionsPanelSavableTab::getChildValue(const QString &childId) const {
-    SAFE_POINT(childExists(childId), "Child widget expected", QVariant());
-
-    QWidget *child = getChildWidgetById(childId);
-    if (NULL != qobject_cast<QListWidget *>(child)) {
-        return QVariant::fromValue<QVector<ListWidgetItemData> >(getListWidgetContent(qobject_cast<QListWidget *>(child)));
-    } else if (CHANGE_MODE_LABEL_NAME == child->objectName()) {
-        return qobject_cast<DasOptionsPanelWidget *>(wrappedWidget)->isExtendedMode();
-    } else {
-        return U2SavableWidget::getChildValue(childId);
-    }
-}
-
-void DasOptionsPanelSavableTab::setChildValue(const QString &childId, const QVariant &value) {
-    SAFE_POINT(childExists(childId), "Child widget expected", );
-
-    QWidget *child = getChildWidgetById(childId);
-    if (NULL != qobject_cast<QListWidget *>(child)) {
-        setListWidgetContent(qobject_cast<QListWidget *>(child), value.value<QVector<ListWidgetItemData> >());
-    } else if (CHANGE_MODE_LABEL_NAME == child->objectName()) {
-        qobject_cast<DasOptionsPanelWidget *>(wrappedWidget)->setExtendedMode(value.toBool());
-    } else {
-        U2SavableWidget::setChildValue(childId, value);
-        if ("idList" == childId && !value.value<QVector<QVector<QString> > >().isEmpty()) {
-            QTableWidget *idList = qobject_cast<QTableWidget *>(child);
-            SAFE_POINT(NULL != idList, "Invalid DAS results table", );
-            idList->setCurrentCell(0, 0);
-        }
-    }
-}
-
-bool DasOptionsPanelSavableTab::childCanBeSaved(QWidget *child) const {
-    const QString childName = child->objectName();
-    if (childName == "start_edit_line" || childName == "end_edit_line") {
-        QComboBox *regionTypeCombo = wrappedWidget->findChild<QComboBox *>("region_type_combo");
-        SAFE_POINT(NULL != regionTypeCombo, "Cannot find region type selector", false);
-        return RegionSelector::SELECTED_REGION != regionTypeCombo->currentText();
-    } else {
-        return U2SavableWidget::childCanBeSaved(child) || NULL != qobject_cast<QListWidget *>(child)
-            || CHANGE_MODE_LABEL_NAME == childName;
-    }
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.h b/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.h
deleted file mode 100644
index cfa7961..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelSavableTab.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_DAS_OPTIONS_PANEL_SAVABLE_TAB_H_
-#define _U2_DAS_OPTIONS_PANEL_SAVABLE_TAB_H_
-
-#include <U2Gui/U2SavableWidget.h>
-
-namespace U2 {
-
-class DasOptionsPanelSavableTab : public U2SavableWidget {
-public:
-    DasOptionsPanelSavableTab(QWidget *wrappedWidget, MWMDIWindow *contextWindow);
-    ~DasOptionsPanelSavableTab();
-
-    QVariant getChildValue(const QString &childId) const;
-    void setChildValue(const QString &childId, const QVariant &value);
-
-protected:
-    bool childCanBeSaved(QWidget *child) const;
-};
-
-} // namespace U2
-
-#endif // _U2_DAS_OPTIONS_PANEL_SAVABLE_TAB_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.cpp b/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.cpp
deleted file mode 100644
index e98a539..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.cpp
+++ /dev/null
@@ -1,635 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 <QListWidget>
-#include <QMessageBox>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DNASequenceSelection.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/L10n.h>
-#include <U2Core/LoadDASDocumentTask.h>
-#include <U2Core/MultiTask.h>
-#include <U2Core/PicrApiTask.h>
-#include <U2Core/Settings.h>
-#include <U2Core/TaskSignalMapper.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/UniprotBlastTask.h>
-
-#include <U2Gui/CreateAnnotationWidgetController.h>
-#include <U2Gui/GUIUtils.h>
-#include <U2Gui/OpenViewTask.h>
-#include <U2Gui/RegionSelector.h>
-#include <U2Gui/ShowHideSubgroupWidget.h>
-#include <U2Gui/U2WidgetStateStorage.h>
-
-#include <U2View/ADVSequenceObjectContext.h>
-#include <U2View/AnnotatedDNAView.h>
-
-#include "DasOptionsPanelWidget.h"
-
-namespace U2 {
-
-#define SAVE_DIR QString("downloadremotefiledialog/savedir")    // taken from U2Core/DownloadRemoteFileDialog.cpp
-#define DAS_UNIPROT "dasuniprot"    // hardcoded, taken from U2Core/DASSource.cpp
-// TODO: add combobox with all available sources.
-
-const QString DasOptionsPanelWidget::BLAST_SEARCH = QApplication::translate("DasOptionsPanelWidget", "BLAST");
-const QString DasOptionsPanelWidget::ALGORITHM_SETTINGS = QApplication::translate("DasOptionsPanelWidget", "Algorithm settings");
-const QString DasOptionsPanelWidget::ANNOTATIONS_SETTINGS = QApplication::translate("DasOptionsPanelWidget", "Annotations settings");
-const QString DasOptionsPanelWidget::SOURCES = QApplication::translate("DasOptionsPanelWidget", "DAS features sources");
-const QString DasOptionsPanelWidget::WHOLE_SEQUENCE = QApplication::translate("DasOptionsPanelWidget", "Whole sequence");
-const QString DasOptionsPanelWidget::SELECTED_REGION = QApplication::translate("DasOptionsPanelWidget", "Selected region");
-const QString DasOptionsPanelWidget::CUSTOM_REGION = QApplication::translate("DasOptionsPanelWidget", "Custom region");
-
-const static QString SHOW_OPTIONS_LINK("show_options_link");
-
-DasBlastSettingsWidget::DasBlastSettingsWidget(QWidget* parent) : QWidget(parent) {
-    setupUi(this);
-
-    matrixComboBox->addItem("Auto", "");
-    matrixComboBox->addItem("BLOSUM-45", "blosum45");
-    matrixComboBox->addItem("BLOSUM-62", "blosum62");
-    matrixComboBox->addItem("BLOSUM-80", "blosum80");
-    matrixComboBox->addItem("PAM-70", "pam70");
-    matrixComboBox->addItem("PAM-30", "pam30");
-
-    filteringComboBox->addItem("None", "false");
-    filteringComboBox->addItem("Filter low complexity regions", "true");
-    filteringComboBox->addItem("Mask lookup table only", "mask");
-
-    thresholdComboBox->addItems(UniprotBlastSettings::ALLOWED_THRESHOLD);
-    gappedComboBox->addItems(UniprotBlastSettings::ALLOWED_GAPPED);
-    hitsComboBox->addItems(UniprotBlastSettings::ALLOWED_HITS);
-
-    thresholdComboBox->setCurrentIndex(thresholdComboBox->findText(UniprotBlastSettings::DEFAULT_THRESHOLD));
-    matrixComboBox->setCurrentIndex(matrixComboBox->findData(UniprotBlastSettings::DEFAULT_MATRIX));
-    filteringComboBox->setCurrentIndex(filteringComboBox->findData(UniprotBlastSettings::DEFAULT_FILTERING));
-    gappedComboBox->setCurrentIndex(gappedComboBox->findText(UniprotBlastSettings::DEFAULT_GAPPED));
-    hitsComboBox->setCurrentIndex(hitsComboBox->findText(UniprotBlastSettings::DEFAULT_HITS));
-}
-
-U2::UniprotBlastSettings DasBlastSettingsWidget::getSettings(const QString& db)
-{
-    UniprotBlastSettings settings;
-    settings.insert(UniprotBlastSettings::DATABASE, db);
-    settings.insert(UniprotBlastSettings::THRESHOLD, thresholdComboBox->currentText());
-    settings.insert(UniprotBlastSettings::MATRIX, matrixComboBox->itemData(matrixComboBox->currentIndex()).toString());
-    settings.insert(UniprotBlastSettings::FILTERING, filteringComboBox->itemData(filteringComboBox->currentIndex()).toString());
-    settings.insert(UniprotBlastSettings::GAPPED, gappedComboBox->currentText());
-    settings.insert(UniprotBlastSettings::HITS, hitsComboBox->currentText());
-    return settings;
-}
-
-DasOptionsPanelWidget::DasOptionsPanelWidget(AnnotatedDNAView* adv)
-    : annotatedDnaView(adv), ctx(adv->getSequenceInFocus()), selection(NULL), settingsShowHideWidget(NULL), blastSettingsWidget(NULL),
-    dasFeaturesListWidget(NULL), annotationsWidgetController(NULL), regionSelector(NULL), showMore(true), loadDasFeaturesTask(NULL),
-    fetchIdsAction(NULL), fetchAnnotationsAction(NULL), openInNewViewAction(NULL), getIdsTask(NULL),
-    savableWidget(this, GObjectViewUtils::findViewByName(adv->getName()))
-{
-    setupUi(this);
-
-    initialize();
-    connectSignals();
-    updateShowOptions();
-    setObjectName("DasOptionsPanelWidget");
-
-    U2WidgetStateStorage::restoreWidgetState(savableWidget);
-
-    checkState();
-}
-
-void DasOptionsPanelWidget::sl_searchTypeChanged(int type) {
-    Q_UNUSED(type);
-    checkState();
-}
-
-void DasOptionsPanelWidget::sl_searchIdsClicked() {
-    if (NULL == ctx) {
-        return;
-    }
-
-    SAFE_POINT (NULL != blastSettingsWidget, "BLAST settings widget is null",);
-
-    if (getIdsTask == NULL || getIdsTask->isCanceled() || getIdsTask->isFinished()){
-        QString db = databaseComboBox->itemData(databaseComboBox->currentIndex()).toString();
-        U2OpStatusImpl os;
-        QByteArray seqData = ctx->getSequenceData(getRegion(), os);
-        CHECK_OP_EXT(os, QMessageBox::critical(this, L10N::errorTitle(), os.getError()), );
-        getIdsTask = new UniprotBlastTask(seqData, blastSettingsWidget->getSettings(db));
-        connect(getIdsTask,
-            SIGNAL(si_stateChanged()),
-            SLOT(sl_blastSearchFinish()));
-        AppContext::getTaskScheduler()->registerTopLevelTask(getIdsTask);
-    }
-    checkState();
-}
-
-void DasOptionsPanelWidget::sl_loadAnnotations() {
-    QStringList accessionNumbers;
-    if (!idList->selectionModel()->hasSelection()) {
-        //if only one id in the list try accessing the current item
-        if (idList->rowCount() == 1){
-            accessionNumbers.append(idList->item(idList->currentRow(), 0)->text());
-        }
-    } else {
-        QSet<int> usedRows;
-        QModelIndexList indexList = idList->selectionModel()->selectedIndexes();
-        foreach (QModelIndex index, indexList) {
-            int row = index.row();
-            if (usedRows.contains(row)){
-                continue;
-            }else{
-                usedRows.insert(row);
-            }
-            accessionNumbers.append(idList->item(row, 0)->text());
-        }
-    }
-
-    annotationData.clear();
-    QList<DASSource> featureSources = getFeatureSources();
-
-    SAFE_POINT(!accessionNumbers.isEmpty(), "An accession numbers list is unexpectedly empty",);
-    loadDasFeaturesTask = new ConvertIdAndLoadDasFeaturesTask(accessionNumbers, featureSources, !isAccessionsUniprotLike(accessionNumbers.first()));
-    TaskSignalMapper *taskMapper = new TaskSignalMapper(loadDasFeaturesTask);
-    connect(taskMapper, SIGNAL(si_taskFinished(Task*)), this, SLOT(sl_onLoadAnnotationsFinish()));
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(loadDasFeaturesTask);
-}
-
-void DasOptionsPanelWidget::sl_blastSearchFinish() {
-    UniprotBlastTask* blastTask = qobject_cast<UniprotBlastTask*>(sender());
-    SAFE_POINT(blastTask, "Sender is not defined",);
-
-    if (blastTask != getIdsTask){
-        //context was switched while fetching IDs. I caused deleting of the widget
-        getIdsTask = blastTask;
-    }
-
-    checkState();
-
-    if (getIdsTask == NULL || getIdsTask->isCanceled() || getIdsTask->hasError()){
-        getIdsTask = NULL;
-        return;
-    }
-
-    if (getIdsTask->isFinished()) {
-        UniprotBlastTask* blastTask = qobject_cast<UniprotBlastTask*>(getIdsTask);
-        if (blastTask == NULL){
-            getIdsTask = NULL;
-            return;
-        }
-
-        clearTableContent();
-
-        QList<UniprotResult> results = blastTask->getResults();
-        for (int i = 0; i < results.count(); ++i) {
-            if (results[i].accession.isEmpty()) {
-                continue;
-            }
-
-            if (results[i].identity >= getMinIdentity()) {
-                int rowNumber = idList->rowCount();
-                idList->insertRow(rowNumber);
-                idList->setItem(rowNumber, 0, new QTableWidgetItem(results[i].accession));
-                QTableWidgetItem *identityItem = new QTableWidgetItem(QString::number(results[i].identity) + "%");
-                identityItem->setTextAlignment(Qt::AlignCenter);
-                idList->setItem(rowNumber, 1, identityItem);
-            }
-        }
-
-        idList->setCurrentCell(0, 0);
-
-        getIdsTask = NULL;
-        checkState();
-    }
-}
-
-void DasOptionsPanelWidget::sl_onLoadAnnotationsFinish() {
-    if (NULL != loadDasFeaturesTask) {
-        annotationData = loadDasFeaturesTask->getAnnotationData();
-        addAnnotations();
-        loadDasFeaturesTask = NULL;
-    }
-}
-
-void DasOptionsPanelWidget::sl_onSequenceFocusChanged(ADVSequenceWidget*, ADVSequenceWidget*) {
-    ctx = annotatedDnaView->getSequenceInFocus();
-    if (NULL == ctx) {
-        return;
-    }
-
-    // Update region selector widget
-    disconnect(this,
-               SLOT(sl_onSelectionChanged(LRegionsSelection*,QVector<U2Region>,QVector<U2Region>)));
-
-    selection = ctx->getSequenceSelection();
-    regionSelector->setSequenceSelection(selection);
-
-    connect(selection,
-            SIGNAL(si_selectionChanged(LRegionsSelection*, QVector<U2Region>, QVector<U2Region>)),
-            SLOT(sl_onSelectionChanged(LRegionsSelection*, QVector<U2Region>, QVector<U2Region>)));
-
-    // Update annotations settings widget
-    CreateAnnotationModel cm;
-    cm.hideLocation = true;
-    cm.sequenceObjectRef = ctx->getSequenceObject();
-    cm.sequenceLen = ctx->getSequenceLength();
-    cm.hideAnnotationParameters = true;
-    annotationsWidgetController->updateWidgetForAnnotationModel(cm);
-
-    //clear no sense results and tasks if the sequence is switched
-    clear();
-
-    checkState();
-}
-
-void DasOptionsPanelWidget::sl_openInNewView() {
-    QString dir = AppContext::getSettings()->getValue(SAVE_DIR, "").value<QString>();
-    if (dir.isEmpty()) {
-        dir = LoadRemoteDocumentTask::getDefaultDownloadDirectory();
-    }
-    SAFE_POINT(!dir.isEmpty(), "Default download dir is empty",);
-
-    U2OpStatus2Log os;
-    dir = GUrlUtils::prepareDirLocation(dir, os);
-    SAFE_POINT(!dir.isEmpty(), "Prepared default download dir is empty",);
-
-    QString accessionNumber = idList->item(idList->currentRow(), 0)->text();
-
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    SAFE_POINT(NULL != dasRegistry, "DAS registry is NULL",);
-
-    QList<DASSource> featureSources = getFeatureSources();
-    DASSource refSource = getSequenceSource();
-    SAFE_POINT(refSource.isValid(), "Reference source is invalid",);
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(new LoadDASDocumentsAndOpenViewTask(accessionNumber, dir, refSource, featureSources, !isAccessionsUniprotLike(accessionNumber)));
-}
-
-void DasOptionsPanelWidget::sl_showLessClicked(const QString& link) {
-    SAFE_POINT(SHOW_OPTIONS_LINK == link, "Incorrect link!",);
-    updateShowOptions();
-}
-
-void DasOptionsPanelWidget::initialize() {
-    SAFE_POINT(NULL != ctx, "Active sequence context is NULL.",);
-
-    selection = ctx->getSequenceSelection();
-
-    regionSelector = new RegionSelector(this, ctx->getSequenceLength(), true, ctx->getSequenceSelection());
-    regionLayout->addWidget(regionSelector);
-
-    blastSettingsWidget = new DasBlastSettingsWidget();
-    settingsShowHideWidget = new ShowHideSubgroupWidget(ALGORITHM_SETTINGS, ALGORITHM_SETTINGS, blastSettingsWidget, false);
-    settingsContainerLayout->addWidget(settingsShowHideWidget);
-
-    minimumIdentityDoubleSpinBox->setValue(90);
-
-    databaseComboBox->addItem("UniProtKB", "uniprotkb");
-    databaseComboBox->addItem("...Archaea", "uniprotkb_archaea");
-    databaseComboBox->addItem("...Bacteria", "uniprotkb_bacteria");
-    databaseComboBox->addItem("...Eucaryota", "uniprotkb_eukaryota");
-    databaseComboBox->addItem("...Arthropoda", "uniprotkb_arthropoda");
-    databaseComboBox->addItem("...Fungi", "uniprotkb_fungi");
-    databaseComboBox->addItem("...Human", "uniprotkb_human");
-    databaseComboBox->addItem("...Mammals", "uniprotkb_mammals");
-    databaseComboBox->addItem("...Nematoda", "uniprotkb_nematoda");
-    databaseComboBox->addItem("...Plants", "uniprotkb_plants");
-    databaseComboBox->addItem("...Rodents", "uniprotkb_rodents");
-    databaseComboBox->addItem("...Vertebrates", "uniprotkb_vertebrates");
-    databaseComboBox->addItem("...Viruses", "uniprotkb_viruses");
-    databaseComboBox->addItem("...PDB", "uniprotkb_pdb");
-    databaseComboBox->addItem("...Complete microbial proteoms", "uniprotkb_complete_microbial_proteomes");
-    databaseComboBox->addItem("UniProtKB/Swiss-Prot", "uniprotkb_swissprot");
-    databaseComboBox->addItem("UniRef100", "UniRef100");
-    databaseComboBox->addItem("UniRef90", "UniRef90");
-    databaseComboBox->addItem("UniRef50", "UniRef50");
-    databaseComboBox->addItem("UniParc", "uniparc");
-
-    databaseComboBox->setCurrentIndex(databaseComboBox->findData(UniprotBlastSettings::DEFAULT_DATABASE));
-
-    // DAS sources
-    dasFeaturesListWidget = new QListWidget();
-    dasFeaturesListWidget->setObjectName("dasFeaturesListWidget");
-    dasFeaturesListWidget->setMaximumHeight(100);
-    dasFeaturesListWidget->setMinimumHeight(100);
-    sourcesContainerLayout->addWidget(new ShowHideSubgroupWidget(SOURCES, SOURCES, dasFeaturesListWidget, false));
-
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    SAFE_POINT(dasRegistry, "DAS registry is NULL",);
-    const DASSource& dasSource = dasRegistry->findById(DAS_UNIPROT);
-    if (dasSource.isValid()){
-        dasFeaturesListWidget->clear();
-        const QList<DASSource>& featureSources = dasRegistry->getFeatureSourcesByType(dasSource.getReferenceType());
-        foreach(const DASSource& s, featureSources){
-            QListWidgetItem* item = new QListWidgetItem(s.getName());
-            item->setData(Qt::UserRole, s.getId());
-            item->setToolTip(s.getHint());
-            item->setCheckState(Qt::Checked);
-            dasFeaturesListWidget->addItem(item);
-        }
-    }
-
-    // Annotations widget
-    CreateAnnotationModel cm;
-    cm.hideLocation = true;
-    cm.sequenceObjectRef = ctx->getSequenceObject();
-    cm.sequenceLen = ctx->getSequenceLength();
-    cm.hideAnnotationParameters = true;
-    annotationsWidgetController = new CreateAnnotationWidgetController(cm, this, CreateAnnotationWidgetController::OptionsPanel);
-    annotationsSettingsContainerLayout->addWidget(annotationsWidgetController->getWidget());
-
-    // Setup context menu of the idList widget
-    idList->setContextMenuPolicy(Qt::ActionsContextMenu);
-    fetchIdsAction = new QAction("Fetch IDs", idList);
-    fetchIdsAction->setObjectName("Fetch IDs");
-    fetchAnnotationsAction = new QAction("Fetch Annotations", idList);
-    openInNewViewAction = new QAction("Open in a new view", idList);
-    idList->addAction(fetchAnnotationsAction);
-    idList->addAction(openInNewViewAction);
-    idList->addAction(fetchIdsAction);
-
-    idList->sortItems(1, Qt::DescendingOrder);
-
-    hintLabel->hide();
-    hintLabel->setStyleSheet(
-        "color: " + L10N::errorColorLabelStr() + ";"
-        "font: bold;");
-
-    sl_onRegionChanged(regionSelector->getRegion());
-}
-
-void DasOptionsPanelWidget::connectSignals() {
-    connect(searchIdsButton,
-            SIGNAL(clicked()),
-            SLOT(sl_searchIdsClicked()));
-    connect(annotateButton,
-            SIGNAL(clicked()),
-            SLOT(sl_loadAnnotations()));
-    connect(annotatedDnaView,
-            SIGNAL(si_focusChanged(ADVSequenceWidget*, ADVSequenceWidget*)),
-            SLOT(sl_onSequenceFocusChanged(ADVSequenceWidget*, ADVSequenceWidget*)));
-    connect(fetchIdsAction,
-            SIGNAL(triggered()),
-            SLOT(sl_searchIdsClicked()));
-    connect(fetchAnnotationsAction,
-            SIGNAL(triggered()),
-            SLOT(sl_loadAnnotations()));
-    connect(openInNewViewAction,
-            SIGNAL(triggered()),
-            SLOT(sl_openInNewView()));
-    connect(lblShowMoreLess,
-            SIGNAL(linkActivated(const QString&)),
-            SLOT(sl_showLessClicked(const QString&)));
-     connect(regionSelector ,
-            SIGNAL(si_regionChanged(const U2Region&)),
-            SLOT(sl_onRegionChanged(const U2Region&)));
-     connect(idList,
-            SIGNAL(doubleClicked (const QModelIndex & )),
-            SLOT(sl_idDoubleClicked (const QModelIndex &)));
-}
-
-void DasOptionsPanelWidget::checkState() {
-    SAFE_POINT(ctx, "Active sequence context is NULL.",);
-
-    const DNAAlphabet* alphabet = ctx->getAlphabet();
-    SAFE_POINT(alphabet != NULL, "DasOptionsPanelWidget::checkState",)
-
-    bool ok = regionIsOk() && alphabet->isAmino();
-    searchIdsButton->setEnabled(ok);
-    fetchIdsAction->setEnabled(ok);
-
-    bool annotationButtonIsEnabled = true;
-    annotationButtonIsEnabled &= annotationsWidgetController->validate().isEmpty();
-    annotationButtonIsEnabled &= !idList->selectedItems().isEmpty();
-    annotationButtonIsEnabled &= ctx->getAlphabet()->isAmino();
-    annotateButton->setEnabled(annotationButtonIsEnabled);
-    fetchAnnotationsAction->setEnabled(annotationButtonIsEnabled);
-
-    bool openActionIsEnabled = true;
-    openActionIsEnabled &= !idList->selectedItems().isEmpty();
-    openActionIsEnabled &= ctx->getAlphabet()->isAmino();
-    openInNewViewAction->setEnabled(openActionIsEnabled);
-
-    if (ctx->getAlphabet()->getType() == DNAAlphabet_AMINO) {
-        setEnabled(true);
-        lblInfoMessage->hide();
-    } else {
-        setEnabled(false);
-        lblInfoMessage->show();
-    }
-
-    if (getIdsTask == NULL || getIdsTask->isFinished() || getIdsTask->isCanceled()){
-        searchIdsButton->setEnabled(true);
-        fetchIdsAction->setEnabled(true);
-    }else{
-        searchIdsButton->setEnabled(false);
-        fetchIdsAction->setEnabled(false);
-    }
-
-}
-
-QList<DASSource> DasOptionsPanelWidget::getFeatureSources() {
-    QList<DASSource> featureSources;
-
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    SAFE_POINT(dasRegistry, "DAS registry pointer is NULL", featureSources);
-
-    for (int i = 0; i < dasFeaturesListWidget->count(); i++) {
-        QListWidgetItem* item = dasFeaturesListWidget->item(i);
-        if (item->checkState() == Qt::Checked) {
-            QString featureId = item->data(Qt::UserRole).toString();
-            DASSource fSource = dasRegistry->findById(featureId);
-            if (fSource.isValid()) {
-                featureSources.append(fSource);
-            }
-        }
-    }
-
-    return featureSources;
-}
-
-DASSource DasOptionsPanelWidget::getSequenceSource() {
-    DASSource refSource;
-
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    SAFE_POINT(dasRegistry, "DAS registry pointer is NULL", refSource);
-
-    refSource = dasRegistry->findById(DAS_UNIPROT);
-    SAFE_POINT(refSource.isValid(), "Reference source is innvalid: %1", DASSource());
-
-    return refSource;
-}
-
-void DasOptionsPanelWidget::addAnnotations() {
-    if (annotationData.isEmpty()) {
-        return;
-    }
-
-    SAFE_POINT(ctx, "Current sequence context is NULL",);
-    qint64 seqLength = ctx->getSequenceLength();
-
-    bool annObjectIsOk = annotationsWidgetController->prepareAnnotationObject();
-    SAFE_POINT(annObjectIsOk, "Cannot create an annotation object. Please check settings",);
-
-    const CreateAnnotationModel& cm = annotationsWidgetController->getModel();
-    AnnotationTableObject *annotationTableObject = cm.getAnnotationObject();
-
-    foreach (const QString &grname, annotationData.keys()) {
-        const QList<SharedAnnotationData> sdata = annotationData[grname];
-        if (!sdata.isEmpty()) {
-            QList<SharedAnnotationData> editedAnnData;
-            foreach (SharedAnnotationData d, sdata) {
-                if (d->location->isSingleRegion() && d->location->regions.first() == U2_REGION_MAX) {
-                    //setRegion for full region sequence
-                    U2Location newLoc = d->location;
-                    newLoc->regions.clear();
-                    newLoc->regions.append(U2Region(0, ctx->getSequenceLength()));
-                    d->location = newLoc;
-                } else {
-                    //cut annotations with the start position out of the current sequence
-                    if (!d->location->regions.isEmpty() && d->location->regions.first().startPos >= seqLength){
-                        continue;
-                    }
-                }
-                editedAnnData.append(d);
-            }
-            annotationTableObject->getRootGroup()->getSubgroup(grname, true)->addAnnotations(editedAnnData);
-        }
-    }
-
-    annotationsWidgetController->updateWidgetForAnnotationModel(cm);
-}
-
-
-U2Region DasOptionsPanelWidget::getRegion() {
-    if (regionIsOk()) {
-        U2Region region = regionSelector->getRegion();
-        return region;
-    }
-
-    return U2Region(0, ctx->getSequenceLength());
-}
-
-bool DasOptionsPanelWidget::regionIsOk() const {
-    bool result=false;
-    regionSelector->getRegion(&result);
-    return result;
-}
-
-bool DasOptionsPanelWidget::isAccessionsUniprotLike(const QString &accessionNumber) const {
-    // The pattern source: http://www.uniprot.org/help/accession_numbers
-    QRegExp pattern("[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}");
-    return 0 == pattern.indexIn(accessionNumber);
-}
-
-bool DasOptionsPanelWidget::isExtendedMode() const {
-    return !showMore;
-}
-
-void DasOptionsPanelWidget::setExtendedMode(bool extended) {
-    showMore = extended;
-    updateShowOptions();
-}
-
-void DasOptionsPanelWidget::updateShowOptions() {
-    // Change the label
-    QString linkText = showMore ? tr("Show more options") : tr("Show less options");
-    linkText = QString("<a href=\"%1\" style=\"color: %2\">").arg(SHOW_OPTIONS_LINK).arg(L10N::linkColorLabelStr())
-               + linkText
-               + QString("</a>");
-
-    lblShowMoreLess->setText(linkText);
-    lblShowMoreLess->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse);
-
-    // Show/hide the additional options
-    if (showMore) {
-        settingsContainerWidget->hide();
-        sourcesContainerWidget->hide();
-        annotationsSettingsContainerWidget->hide();
-    } else {
-        settingsContainerWidget->show();
-        sourcesContainerWidget->show();
-        annotationsSettingsContainerWidget->show();
-    }
-    // Change the mode
-    showMore = !showMore;
-}
-
-void DasOptionsPanelWidget::clearTableContent(){
-
-    idList->clearContents();
-    while(idList->rowCount() > 0){
-        idList->removeRow(0);
-    }
-
-}
-
-DasOptionsPanelWidget::~DasOptionsPanelWidget(){
-    cancelActiveTasks();
-    annotationData.clear();
-}
-
-void DasOptionsPanelWidget::cancelActiveTasks() {
-    if (NULL != loadDasFeaturesTask && !loadDasFeaturesTask->isFinished()) {
-        loadDasFeaturesTask->cancel();
-        loadDasFeaturesTask = NULL;
-    }
-
-    if (getIdsTask != NULL && !getIdsTask->isFinished()){
-        getIdsTask->cancel();
-        getIdsTask = NULL;
-    }
-}
-
-void DasOptionsPanelWidget::clear() {
-    clearTableContent();
-    cancelActiveTasks();
-    annotationData.clear();
-}
-
-void DasOptionsPanelWidget::sl_onRegionChanged(const U2Region& r){
-    clear();
-
-    if (r.length < MIN_SEQ_LENGTH){
-        hintLabel->setText(tr("Warning: Selected region is too short. It should be from 4 to 1900 amino acids."));
-        hintLabel->show();
-    }else if(r.length > MAX_SEQ_LENGTH){
-        hintLabel->setText(tr("Warning: Selected region is too long. It should be from 4 to 1900 amino acids."));
-        hintLabel->show();
-    }else{
-        hintLabel->hide();
-    }
-
-    checkState();
-}
-
-void DasOptionsPanelWidget::sl_idDoubleClicked(const QModelIndex &){
-    sl_loadAnnotations();
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.h b/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.h
deleted file mode 100644
index 181727a..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasOptionsPanelWidget.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_DAS_OPTIONS_PANEL_WIDGET_CONTROLLER_H_
-#define _U2_DAS_OPTIONS_PANEL_WIDGET_CONTROLLER_H_
-
-#include <U2Core/AnnotationData.h>
-
-#include "DasOptionsPanelSavableTab.h"
-
-#include "ui/ui_DasOptionsPanelWidget.h"
-#include "ui/ui_DasBlastSettingsWidget.h"
-
-class QListWidget;
-
-namespace U2 {
-
-class ADVSequenceObjectContext;
-class ADVSequenceWidget;
-class AnnotatedDNAView;
-class ConvertIdAndLoadDasFeaturesTask;
-class CreateAnnotationWidgetController;
-class DASSource;
-class DNASequenceSelection;
-class LRegionsSelection;
-class RegionSelector;
-class ShowHideSubgroupWidget;
-class Task;
-class UniprotBlastSettings;
-
-class DasBlastSettingsWidget : public QWidget, private Ui_DasBlastSettingsWidget {
-    Q_OBJECT
-public:
-    DasBlastSettingsWidget(QWidget* parent = NULL);
-    UniprotBlastSettings getSettings(const QString& db);
-};
-
-class DasOptionsPanelWidget : public QWidget, private Ui_DasOptionsPanelWidget {
-    Q_OBJECT
-    Q_DISABLE_COPY(DasOptionsPanelWidget)
-public:
-    DasOptionsPanelWidget(AnnotatedDNAView* adv);
-    ~DasOptionsPanelWidget();
-
-    void clear();
-
-    double getMinIdentity() { return minimumIdentityDoubleSpinBox->value(); }
-
-    bool isExtendedMode() const;
-    void setExtendedMode(bool extended);
-
-private slots:
-    void sl_searchTypeChanged(int type);
-    void sl_searchIdsClicked();
-
-    void clearTableContent();
-
-    void sl_loadAnnotations();
-    void sl_blastSearchFinish();
-    void sl_onLoadAnnotationsFinish();
-    void sl_onSequenceFocusChanged(ADVSequenceWidget*, ADVSequenceWidget*);
-    void sl_openInNewView();
-    void sl_showLessClicked(const QString&);
-    void sl_onRegionChanged(const U2Region& );
-    void sl_idDoubleClicked (const QModelIndex & );
-
-private:
-    void initialize();
-    void connectSignals();
-    void checkState();
-    void updateShowOptions();
-
-    QList<DASSource> getFeatureSources();
-    DASSource getSequenceSource();
-    void addAnnotations();
-    U2Region getRegion();
-    bool regionIsOk() const;
-    bool isAccessionsUniprotLike(const QString &accessionNumber) const;
-    void cancelActiveTasks();
-
-    AnnotatedDNAView* annotatedDnaView;
-    ADVSequenceObjectContext* ctx;
-    DNASequenceSelection* selection;
-    ShowHideSubgroupWidget* settingsShowHideWidget;
-    DasBlastSettingsWidget* blastSettingsWidget;
-    QListWidget* dasFeaturesListWidget;
-    CreateAnnotationWidgetController* annotationsWidgetController;
-    RegionSelector* regionSelector;
-    bool showMore;
-
-    ConvertIdAndLoadDasFeaturesTask* loadDasFeaturesTask;
-    QAction* fetchIdsAction;
-    QAction* fetchAnnotationsAction;
-    QAction* openInNewViewAction;
-
-    Task* getIdsTask;
-
-    QMap<QString, QList<SharedAnnotationData> > annotationData;
-
-    DasOptionsPanelSavableTab savableWidget;
-
-    const static QString BLAST_SEARCH;
-    const static QString ALGORITHM_SETTINGS;
-    const static QString ANNOTATIONS_SETTINGS;
-    const static QString SOURCES;
-    const static QString WHOLE_SEQUENCE;
-    const static QString SELECTED_REGION;
-    const static QString CUSTOM_REGION;
-};
-
-}   // namespace
-
-#endif // _U2_DAS_OPTIONS_PANEL_WIDGET_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.cpp b/src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.cpp
deleted file mode 100644
index 8402e2e..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QPixmap>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2View/AnnotatedDNAView.h>
-
-#include "DasOptionsPanelWidget.h"
-
-#include "DasWidgetFactory.h"
-
-namespace U2 {
-
-const QString DasWidgetFactory::GROUP_ID = "OP_DAS";
-const QString DasWidgetFactory::GROUP_ICON_STR = ":core/images/regions.png";
-const QString DasWidgetFactory::GROUP_TITLE = QString(QObject::tr("DAS Annotations"));
-const QString DasWidgetFactory::GROUP_DOC_PAGE = "16126865";
-
-
-DasWidgetFactory::DasWidgetFactory()
-{
-    objectViewOfWidget = ObjViewType_SequenceView;
-}
-
-
-QWidget* DasWidgetFactory::createWidget(GObjectView* objView)
-{
-    SAFE_POINT(NULL != objView,
-        QString("Internal error: unable to create widget for group '%1', object view is NULL.").arg(GROUP_ID),
-        NULL);
-
-    AnnotatedDNAView* annotatedDnaView = qobject_cast<AnnotatedDNAView*>(objView);
-    SAFE_POINT(NULL != annotatedDnaView,
-        QString("Internal error: unable to cast object view to AnnotatedDNAView for group '%1'.").arg(GROUP_ID),
-        NULL);
-
-    DasOptionsPanelWidget* widget = new DasOptionsPanelWidget(annotatedDnaView);
-    widget->setObjectName("DasOptionsPanelWidget");
-    return widget;
-}
-
-
-OPGroupParameters DasWidgetFactory::getOPGroupParameters()
-{
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
-}
-
-bool DasWidgetFactory::passFiltration( OPFactoryFilterVisitorInterface* filter ){
-    //by default checks type only
-    bool res = false;
-
-    SAFE_POINT(filter != NULL, "OPWidgetFactory::passFiltration. Filter is null", res);
-
-    res = filter->typePass(getObjectViewType()) && filter->atLeastOneAlphabetPass(DNAAlphabet_AMINO);
-
-    return res;
-}
-
-const QString & DasWidgetFactory::getGroupId() {
-    return GROUP_ID;
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/ui/DasBlastSettingsWidget.ui b/src/corelibs/U2View/src/ov_sequence/Das/ui/DasBlastSettingsWidget.ui
deleted file mode 100644
index 608a225..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/ui/DasBlastSettingsWidget.ui
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DasBlastSettingsWidget</class>
- <widget class="QWidget" name="DasBlastSettingsWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>124</width>
-    <height>347</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="spacing">
-    <number>3</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="QLabel" name="thresholdLabel">
-     <property name="text">
-      <string>Threshold:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="thresholdComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>1</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Number of expected matches in a random database. The lower the value, the more likely the match is to be significant</string>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="matrixLabel">
-     <property name="text">
-      <string>Matrix:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="matrixComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>1</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Assigns a probability score for each position in an alignment</string>
-     </property>
-     <property name="currentIndex">
-      <number>-1</number>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="filteringLabel">
-     <property name="text">
-      <string>Filtering:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="filteringComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>1</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Filtering low-complexity regions replaces the regions with X's during the search to filter biologically unrelated results</string>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="gappedLabel">
-     <property name="text">
-      <string>Gapped:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="gappedComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>1</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Allows gaps to be introduced in the sequences when the comparison is done</string>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="hitsLabel">
-     <property name="text">
-      <string>Maximum results:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="hitsComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>1</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Limits the number of returned results</string>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/ui/DasOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_sequence/Das/ui/DasOptionsPanelWidget.ui
deleted file mode 100644
index 00c1167..0000000
--- a/src/corelibs/U2View/src/ov_sequence/Das/ui/DasOptionsPanelWidget.ui
+++ /dev/null
@@ -1,395 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DasOptionsPanelWidget</class>
- <widget class="QWidget" name="DasOptionsPanelWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>248</width>
-    <height>501</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="mainLayout">
-   <property name="spacing">
-    <number>5</number>
-   </property>
-   <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
-   </property>
-   <property name="margin">
-    <number>0</number>
-   </property>
-   <item>
-    <layout class="QVBoxLayout" name="regionLayout">
-     <property name="spacing">
-      <number>6</number>
-     </property>
-    </layout>
-   </item>
-   <item>
-    <widget class="QLabel" name="hintLabel">
-     <property name="text">
-      <string/>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QWidget" name="regionSelectorContainerWidget" native="true">
-     <layout class="QVBoxLayout" name="regionSelectorContainerLayout">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetMinAndMaxSize</enum>
-      </property>
-      <property name="margin">
-       <number>0</number>
-      </property>
-      <item>
-       <widget class="QWidget" name="regionSelectorWidget" native="true">
-        <layout class="QVBoxLayout" name="regionSelectorLayout">
-         <property name="margin">
-          <number>0</number>
-         </property>
-        </layout>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="databaseLabel">
-     <property name="text">
-      <string>Database:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="databaseComboBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="toolTip">
-      <string>Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity</string>
-     </property>
-     <property name="sizeAdjustPolicy">
-      <enum>QComboBox::AdjustToMinimumContentsLength</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="dbBottomSpacer">
-     <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="QLabel" name="minimumIdentityLabel">
-     <property name="text">
-      <string>Minimum Identity:</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-     <property name="margin">
-      <number>0</number>
-     </property>
-     <property name="indent">
-      <number>0</number>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDoubleSpinBox" name="minimumIdentityDoubleSpinBox">
-     <property name="toolTip">
-      <string>Minimum percent identity between the input sequence region and BLAST results</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-     </property>
-     <property name="suffix">
-      <string>%</string>
-     </property>
-     <property name="decimals">
-      <number>1</number>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="lblShowMoreLess">
-     <property name="text">
-      <string>Show more option...</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QWidget" name="settingsContainerWidget" native="true">
-     <layout class="QVBoxLayout" name="settingsContainerLayout">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetMinAndMaxSize</enum>
-      </property>
-      <property name="margin">
-       <number>0</number>
-      </property>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QWidget" name="sourcesContainerWidget" native="true">
-     <layout class="QVBoxLayout" name="sourcesContainerLayout">
-      <property name="spacing">
-       <number>0</number>
-      </property>
-      <property name="margin">
-       <number>0</number>
-      </property>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QWidget" name="annotationsSettingsContainerWidget" native="true">
-     <layout class="QVBoxLayout" name="annotationsSettingsContainerLayout">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetDefaultConstraint</enum>
-      </property>
-      <property name="margin">
-       <number>0</number>
-      </property>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <spacer name="optionsBottomSpacer">
-     <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 alignment="Qt::AlignHCenter">
-    <widget class="QPushButton" name="searchIdsButton">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>198</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>198</width>
-       <height>16777215</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Send request to Uniprot BLAST to get IDs of similar sequences</string>
-     </property>
-     <property name="text">
-      <string>Fetch IDs</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="tableTopSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>7</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QLabel" name="idsLabel">
-     <property name="text">
-      <string>IDs of similar sequences:</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QTableWidget" name="idList">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>150</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>16777215</width>
-       <height>150</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Select ID(s) to fetch annotations from DAS</string>
-     </property>
-     <property name="editTriggers">
-      <set>QAbstractItemView::NoEditTriggers</set>
-     </property>
-     <property name="selectionBehavior">
-      <enum>QAbstractItemView::SelectRows</enum>
-     </property>
-     <property name="sortingEnabled">
-      <bool>true</bool>
-     </property>
-     <attribute name="horizontalHeaderDefaultSectionSize">
-      <number>80</number>
-     </attribute>
-     <attribute name="horizontalHeaderHighlightSections">
-      <bool>true</bool>
-     </attribute>
-     <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
-      <bool>true</bool>
-     </attribute>
-     <attribute name="horizontalHeaderStretchLastSection">
-      <bool>true</bool>
-     </attribute>
-     <column>
-      <property name="text">
-       <string>ID</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Identity</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <spacer name="tableBottomSpacer">
-     <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>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <property name="sizeConstraint">
-      <enum>QLayout::SetMinAndMaxSize</enum>
-     </property>
-    </layout>
-   </item>
-   <item alignment="Qt::AlignHCenter">
-    <widget class="QPushButton" name="annotateButton">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>198</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>198</width>
-       <height>16777215</height>
-      </size>
-     </property>
-     <property name="text">
-      <string>Fetch annotations</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="lblInfoMessage">
-     <property name="font">
-      <font>
-       <weight>75</weight>
-       <bold>true</bold>
-      </font>
-     </property>
-     <property name="styleSheet">
-      <string notr="true">color: green;
-</string>
-     </property>
-     <property name="text">
-      <string>Info: Searching for annotations with DAS is available for amino acid sequences only</string>
-     </property>
-     <property name="textFormat">
-      <enum>Qt::AutoText</enum>
-     </property>
-     <property name="scaledContents">
-      <bool>false</bool>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignJustify|Qt::AlignVCenter</set>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <spacer name="bottomSpacer">
-     <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/DetView.cpp b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
index 0b9bf1a..372e751 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
@@ -20,35 +20,42 @@
  */
 
 #include "DetView.h"
+
 #include "ADVSequenceObjectContext.h"
+#include "view_rendering/DetViewSingleLineRenderer.h"
+#include "view_rendering/DetViewMultiLineRenderer.h"
 
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNATranslation.h>
+#include <U2Core/AnnotationSettings.h>
 #include <U2Core/AppContext.h>
-
-#include <U2Core/DNATranslationImpl.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/AnnotationSettings.h>
-#include <U2Core/U1AnnotationUtils.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/DNASequenceSelection.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/DNATranslationImpl.h>
 #include <U2Core/TextUtils.h>
+#include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GraphUtils.h>
 #include <U2Gui/GScrollBar.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QFontMetrics>
-
 #include <QApplication>
-#include <QTextEdit>
-#include <QMenu>
+#include <QFontMetrics>
 #include <QLayout>
+#include <QMenu>
 #include <QMessageBox>
+#include <QPainter>
+#include <QTextEdit>
+
 
 namespace U2 {
 
+
+/************************************************************************/
+/* DetView */
+/************************************************************************/
 DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
     : GSequenceLineViewAnnotated(p, ctx)
 {
@@ -62,8 +69,14 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
     showTranslationAction->setObjectName("translation_action");
     connect(showTranslationAction, SIGNAL(triggered(bool)), SLOT(sl_showTranslationToggle(bool)));
 
+    wrapSequenceAction = new QAction(tr("Wrap sequence"), this);
+    wrapSequenceAction->setIcon(QIcon(":core/images/wrap_sequence.png"));
+    wrapSequenceAction->setObjectName("wrap_sequence_action");
+    connect(wrapSequenceAction, SIGNAL(triggered(bool)), SLOT(sl_wrapSequenceToggle(bool)));
+
     showComplementAction->setCheckable(true);
     showTranslationAction->setCheckable(true);
+    wrapSequenceAction->setCheckable(true);
 
     bool hasComplement = ctx->getComplementTT() != NULL;
     showComplementAction->setChecked(hasComplement);
@@ -79,6 +92,7 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
     connect(ctx, SIGNAL(si_aminoTranslationChanged()), SLOT(sl_onAminoTTChanged()));
     connect(ctx, SIGNAL(si_translationRowsChanged()), SLOT(sl_translationRowsChanged()));
 
+    addActionToLocalToolbar(wrapSequenceAction);
     if (hasComplement) {
         addActionToLocalToolbar(showComplementAction);
     }
@@ -86,6 +100,15 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
         addActionToLocalToolbar(showTranslationAction);
     }
 
+    verticalScrollBar = new GScrollBar(Qt::Vertical, this);
+    verticalScrollBar->setObjectName("multiline_scrollbar");
+    scrollBar->setObjectName("singleline_scrollbar");
+    currentShiftsCounter = 0;
+    numShiftsInOneLine = 1;
+
+    verticalScrollBar->setHidden(!wrapSequenceAction->isChecked());
+    scrollBar->setHidden(wrapSequenceAction->isChecked());
+
     pack();
 
     updateActions();
@@ -93,58 +116,48 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
 }
 
-void DetView::updateSize() {
-    addUpdateFlags(GSLV_UF_ViewResized);
-
-    DetViewRenderArea* detArea = (static_cast<DetViewRenderArea*>(renderArea));
-    detArea->updateSize();
-    setMinimumHeight(layout()->minimumSize().height());
+DetViewRenderArea* DetView::getDetViewRenderArea() const {
+    return static_cast<DetViewRenderArea*>(renderArea);
 }
 
-void DetView::resizeEvent(QResizeEvent *e) {
-    int w = contentWidget->width();
-    int charWidth = renderArea->getCharWidth();
-    int visibleSymbolsCount = w / charWidth;
-
-    if (visibleSymbolsCount > seqLen) {
-        visibleRange.startPos = 0;
-        visibleRange.length = seqLen;
-    } else {
-        visibleRange.length = visibleSymbolsCount;
-        if (visibleRange.endPos() > seqLen) {
-            visibleRange.startPos = seqLen - visibleSymbolsCount;
-        }
-    }
-
-    Q_ASSERT(visibleRange.startPos >= 0 && visibleRange.endPos()<=seqLen);
+bool DetView::hasTranslations() const {
+    return getAminoTT() != NULL;
+}
 
-    addUpdateFlags(GSLV_UF_ViewResized);
-    GSequenceLineView::resizeEvent(e);
+bool DetView::hasComplementaryStrand() const {
+    return getComplementTT() != NULL;
+}
 
-    onVisibleRangeChanged();
+bool DetView::isWrapMode() const {
+    return wrapSequenceAction->isChecked();
 }
 
-void DetView::updateActions() {
-    bool hasComplement = ctx->getComplementTT()!=NULL;
-    showComplementAction->setEnabled(hasComplement);
+void DetView::setStartPos(qint64 newPos) {
+    if (newPos + visibleRange.length > seqLen && !isWrapMode()) {
+        newPos = seqLen - visibleRange.length;
+    }
+    if (newPos < 0) {
+        newPos = 0;
+    }
 
-    bool hasAmino = ctx->getAminoTT()!=NULL;
-    showTranslationAction->setEnabled(hasAmino);
+    if (visibleRange.startPos != newPos) {
+        visibleRange.startPos = newPos;
+        updateVisibleRange();
+    }
 }
 
-void DetView::showEvent(QShowEvent * e) {
-    updateActions();
-    GSequenceLineViewAnnotated::showEvent(e);
-}
+void DetView::setCenterPos(qint64 pos) {
+    if (!isWrapMode()) {
+        GSequenceLineView::setCenterPos(pos);
+        return;
+    }
 
-void DetView::hideEvent(QHideEvent * e) {
-    updateActions();
-    GSequenceLineViewAnnotated::hideEvent(e);
-}
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    qint64 line = pos / detArea->getSymbolsPerLine();
 
-void DetView::sl_onAminoTTChanged() {
-    lastUpdateFlags|=GSLV_UF_NeedCompleteRedraw;
-    update();
+    qint64 newPos = (line - detArea->getLinesCount()/ 2) * detArea->getSymbolsPerLine();
+    currentShiftsCounter = 0;
+    setStartPos(newPos);
 }
 
 DNATranslation* DetView::getComplementTT() const {
@@ -155,6 +168,9 @@ DNATranslation* DetView::getAminoTT() const {
     return showTranslationAction->isChecked() ? ctx->getAminoTT() : NULL;
 }
 
+int DetView::getSymbolsPerLine() const {
+    return getDetViewRenderArea()->getSymbolsPerLine();
+}
 
 void DetView::setShowComplement(bool t) {
     showComplementAction->disconnect(this);
@@ -162,81 +178,55 @@ void DetView::setShowComplement(bool t) {
     connect(showComplementAction, SIGNAL(triggered(bool)), SLOT(sl_showComplementToggle(bool)));
 
     updateSize();
+    updateVisibleRange();
 }
 
 void DetView::setShowTranslation(bool t) {
     showTranslationAction->disconnect(this);
     showTranslationAction->setChecked(t);
-    if(!t){
-        getSequenceContext()->setTranslationsVisible(t);
-    }
+    getSequenceContext()->setTranslationsVisible(t);
     connect(showTranslationAction, SIGNAL(triggered(bool)), SLOT(sl_showTranslationToggle(bool)));
 
     updateSize();
+    updateVisibleRange();
 }
 
 void DetView::setDisabledDetViewActions(bool t){
     showTranslationAction->setDisabled(t);
     showComplementAction->setDisabled(t);
+    wrapSequenceAction->setDisabled(t);
 }
 
-void DetView::mouseReleaseEvent(QMouseEvent* me) {
-    //click with 'alt' shift selects single base in GSingleSeqWidget;
-    //here we adjust this behavior -> if click was done in translation line -> select 3 bases
-    Qt::KeyboardModifiers km = QApplication::keyboardModifiers();
-    bool singleBaseSelectionMode = km.testFlag(Qt::AltModifier);
-    if (me->button() == Qt::LeftButton && singleBaseSelectionMode) {
-        QPoint areaPoint = toRenderAreaPoint(me->pos());
-        if ((static_cast<DetViewRenderArea*>(renderArea))->isOnTranslationsLine(areaPoint.y())) {
-            qint64 pos = renderArea->coordToPos(areaPoint.x());
-            if (pos == lastPressPos) {
-                U2Region rgn(pos-1, 3);
-                if (rgn.startPos >=0 && rgn.endPos() <= seqLen) {
-                    setSelection(rgn);
-                    lastPressPos=-1;
-                }
-            }
-        }
-    }
-    GSequenceLineViewAnnotated::mouseReleaseEvent(me);
+int DetView::getShift() const {
+    return isWrapMode() ? currentShiftsCounter * getDetViewRenderArea()->getShiftHeight() : 0;
 }
 
-void DetView::sl_sequenceChanged(){
+void DetView::sl_sequenceChanged() {
     seqLen = ctx->getSequenceLength();
-    int w = contentWidget->width();
-    int charWidth = renderArea->getCharWidth();
-    int visibleSymbolsCount = w / charWidth;
-    if(seqLen > visibleSymbolsCount){
-        if((visibleRange.length != visibleSymbolsCount) || (visibleRange.endPos() > seqLen)){
-            visibleRange.length = visibleSymbolsCount;
-            if(visibleRange.endPos() > visibleSymbolsCount){
-                visibleRange.startPos = seqLen - visibleSymbolsCount;
-            }
-            onVisibleRangeChanged(true);
-        }
-    }else{
-        visibleRange.length = seqLen;
-        onVisibleRangeChanged(true);
-    }
+    updateVerticalScrollBar();
+    updateScrollBar();
+    updateVisibleRange();
     GSequenceLineView::sl_sequenceChanged();
 }
 
-void DetView::sl_translationRowsChanged(){
-    if(isHidden()){
-        setHidden(false);
-    }
+void DetView::sl_onAminoTTChanged() {
+    lastUpdateFlags |= GSLV_UF_NeedCompleteRedraw;
+    update();
+}
+
+void DetView::sl_translationRowsChanged() {
     QVector<bool> visibleRows = getSequenceContext()->getTranslationRowsVisibleStatus();
     bool anyFrame = false;
     foreach(bool b, visibleRows){
         anyFrame = anyFrame || b;
     }
-    if(!anyFrame){
-        if(showTranslationAction->isChecked()){
+    if (!anyFrame){
+        if(showTranslationAction->isChecked()) {
             sl_showTranslationToggle(false);
         }
         return;
     }
-    if(!showTranslationAction->isChecked()){
+    if (!showTranslationAction->isChecked()) {
         if(!getSequenceContext()->isRowChoosed()){
             sl_showTranslationToggle(true);
         }
@@ -246,629 +236,413 @@ void DetView::sl_translationRowsChanged(){
     }
 
     updateScrollBar();
+    updateVerticalScrollBar();
     updateSize();
     completeUpdate();
 }
 
-void DetView::sl_showTranslationToggle(bool v){
-    showTranslationAction->setChecked(v);
-    getSequenceContext()->setTranslationsVisible(v);
-    updateSize();
-    //setShowTranslation(v);
+void DetView::sl_showComplementToggle(bool v) {
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowComplement" );
+    setShowComplement(v);
 }
-//////////////////////////////////////////////////////////////////////////
-/// render
-DetViewRenderArea::DetViewRenderArea(DetView* v) : GSequenceLineViewAnnotatedRenderArea(v, true) {
+
+void DetView::sl_showTranslationToggle(bool v) {
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowTranslations" );
+    setShowTranslation(v);
+}
+
+void DetView::sl_wrapSequenceToggle(bool v) {
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::WrapSequence" );
+    // turn off/on multiline mode
+    scrollBar->setHidden(v);
+    verticalScrollBar->setHidden(!v);
+
+    currentShiftsCounter = 0;
+
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    detArea->setWrapSequence(v);
+    updateVerticalScrollBar();
+    updateScrollBar();
+
+    updateVisibleRange();
     updateSize();
+
+    addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
+    completeUpdate();
 }
 
-void DetViewRenderArea::updateLines() {
-    numLines = -1;
-    rulerLine = -1;
-    directLine = -1;
-    complementLine = -1;
-    firstDirectTransLine = -1;
-    firstComplTransLine = -1;
-
-    DetView* detView = getDetView();
-    if (detView->isOneLineMode()) {
-        directLine = 0;
-        rulerLine = 1;
-        numLines = 2;
-    } else if (detView->hasComplementaryStrand() && detView->hasTranslations()) {
-        //change
-        firstDirectTransLine = 0;
-        directLine = 3;
-        rulerLine = 4;
-        complementLine = 5;
-        firstComplTransLine = 6;
-        numLines = 9;
-        QVector<bool> v = detView->getSequenceContext()->getTranslationRowsVisibleStatus();
-
-        for(int i = 0; i<6; i++){
-            if(!v[i]){
-                if(i<3){
-                    directLine--;
-                    rulerLine--;
-                    complementLine--;
-                    firstComplTransLine--;
-                }
-                numLines--;
+void DetView::sl_verticalSrcollBarMoved(int pos) {
+    currentShiftsCounter = pos % numShiftsInOneLine;
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    if (pos / numShiftsInOneLine == visibleRange.startPos / detArea->getSymbolsPerLine()) {
+        updateVisibleRange();
+        completeUpdate();
+        return;
+    }
+    setStartPos((pos / numShiftsInOneLine) * detArea->getSymbolsPerLine());
+}
+
+void DetView::pack() {
+    QGridLayout* layout = new QGridLayout();
+    layout->setMargin(0);
+    layout->setSpacing(0);
+    layout->addWidget(renderArea, 0, 0);
+    layout->addWidget(scrollBar, 1, 0);
+    layout->addWidget(verticalScrollBar, 0, 1);
+
+    setContentLayout(layout);
+    setMinimumHeight(scrollBar->height() + renderArea->minimumHeight());
+}
+
+void DetView::showEvent(QShowEvent * e) {
+    updateVerticalScrollBar();
+    updateVisibleRange();
+    updateScrollBar();
+    updateActions();
+    GSequenceLineViewAnnotated::showEvent(e);
+}
+
+void DetView::hideEvent(QHideEvent * e) {
+    updateActions();
+    GSequenceLineViewAnnotated::hideEvent(e);
+}
+
+void DetView::mouseMoveEvent(QMouseEvent *me) {
+    if (lastPressPos == -1) {
+        QWidget::mouseMoveEvent(me);
+        return;
+    }
+    if (me->buttons() & Qt::LeftButton) {
+        QPoint areaPoint = toRenderAreaPoint(me->pos());
+
+        // manage scrollbar auto-scrolling
+        if (isWrapMode()) {
+            if (areaPoint.y() > height()) {
+                verticalScrollBar->setupRepeatAction(QAbstractSlider::SliderSingleStepAdd);
+            } else if (areaPoint.y() <= 0) {
+                verticalScrollBar->setupRepeatAction(QAbstractSlider::SliderSingleStepSub);
+            } else {
+                verticalScrollBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
             }
-        }
-    } else if (detView->hasComplementaryStrand()) {
-        assert(!detView->hasTranslations());
-        directLine = 0;
-        rulerLine = 1;
-        complementLine = 2;
-        numLines = 3;
-    } else {
-        assert(!detView->hasComplementaryStrand() && detView->hasTranslations());
-        firstDirectTransLine = 0;
-        directLine = 3;
-        rulerLine = 4;
-        numLines = 5;
-        QVector<bool> v = detView->getSequenceContext()->getTranslationRowsVisibleStatus();
-
-        for (int i = 0; i < 3; i++) {
-            if (!v[i]) {
-                directLine--;
-                rulerLine--;
-                numLines--;
+        } else {
+            if (areaPoint.x() > width()) {
+                scrollBar->setupRepeatAction(QAbstractSlider::SliderSingleStepAdd);
+            } else if (areaPoint.x() <= 0) {
+                scrollBar->setupRepeatAction(QAbstractSlider::SliderSingleStepSub);
+            } else {
+                scrollBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
             }
         }
+
+        // compute selection
+        qint64 pos = renderArea->coordToPos(areaPoint);
+        if (isWrapMode() && (areaPoint.x() > width() || areaPoint.x() <= 0)) {
+            QPoint boundaryPoint(areaPoint.x() > width() ? width() : 0, areaPoint.y());
+            pos = renderArea->coordToPos(boundaryPoint);
+        }
+        qint64 selStart = qMin(lastPressPos, pos);
+        qint64 selLen = qAbs(pos - lastPressPos);
+        if (selStart < 0) {
+            selLen += selStart;
+            selStart = 0;
+        } else if (selStart + selLen > seqLen) {
+            selLen = seqLen - selStart;
+        }
+        setSelection(U2Region(selStart, selLen));
     }
-    assert(numLines > 0);
+    QWidget::mouseMoveEvent(me);
 }
 
-int DetViewRenderArea::getVisibleDirectTransLine(int absoluteFrameNumber) const {
-    int lineNumber = firstDirectTransLine + absoluteFrameNumber;
-
-    const QVector<bool> rowsVisibility = getDetView()->getSequenceContext()->getTranslationRowsVisibleStatus();
-    const int halfRowsCount = rowsVisibility.size() / 2;
-    SAFE_POINT(absoluteFrameNumber < halfRowsCount, "Unexpected translation line number", -1);
-    if (!rowsVisibility[absoluteFrameNumber]) {
-        return -1;
-    } else {
-        for (int i = 0; i < absoluteFrameNumber; ++i) {
-            if (!rowsVisibility[i]) {
-                --lineNumber;
+void DetView::mouseReleaseEvent(QMouseEvent* me) {
+    //click with 'alt' shift selects single base in GSingleSeqWidget;
+    //here we adjust this behavior -> if click was done in translation line -> select 3 bases
+    Qt::KeyboardModifiers km = QApplication::keyboardModifiers();
+    bool singleBaseSelectionMode = km.testFlag(Qt::AltModifier);
+    if (me->button() == Qt::LeftButton && singleBaseSelectionMode) {
+        QPoint areaPoint = toRenderAreaPoint(me->pos());
+        DetViewRenderArea* detArea = getDetViewRenderArea();
+        if (detArea->isOnTranslationsLine(areaPoint)) {
+            qint64 pos = detArea->coordToPos(areaPoint);
+            if (pos == lastPressPos) {
+                U2Region rgn(pos - 1, 3);
+                if (rgn.startPos >= 0 && rgn.endPos() <= seqLen) {
+                    setSelection(rgn);
+                    lastPressPos = -1;
+                }
             }
         }
-        return lineNumber;
     }
+    verticalScrollBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
+    GSequenceLineViewAnnotated::mouseReleaseEvent(me);
 }
 
-int DetViewRenderArea::getVisibleComplTransLine(int absoluteFrameNumber) const {
-    int lineNumber = firstComplTransLine + absoluteFrameNumber;
+void DetView::wheelEvent(QWheelEvent *we) {
+    bool renderAreaWheel = QRect(renderArea->x(), renderArea->y(), renderArea->width(), renderArea->height()).contains(we->pos());
+    if (!renderAreaWheel) {
+        QWidget::wheelEvent(we);
+        return;
+    }
+    setFocus();
 
-    const QVector<bool> rowsVisibility = getDetView()->getSequenceContext()->getTranslationRowsVisibleStatus();
-    const int halfRowsCount = rowsVisibility.size() / 2;
-    SAFE_POINT(absoluteFrameNumber < halfRowsCount, "Unexpected translation line number", -1);
-    if (!rowsVisibility[halfRowsCount + absoluteFrameNumber]) {
-        return -1;
-    } else {
-        for (int i = halfRowsCount; i < halfRowsCount + absoluteFrameNumber; ++i) {
-            if (!rowsVisibility[i]) {
-                --lineNumber;
-            }
-        }
-        return lineNumber;
+    bool toMin = we->delta() > 0;
+    if (we->modifiers() == 0) {
+        // clear wheel event
+        GScrollBar* sBar = wrapSequenceAction->isChecked() ? verticalScrollBar : scrollBar;
+        sBar->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
     }
 }
 
-U2Region DetViewRenderArea::getAnnotationYRange(Annotation *a, int region, const AnnotationSettings *as) const {
-    const SharedAnnotationData &aData = a->getData();
-    const U2Strand strand = aData->getStrand();
-    const bool complement = strand.isCompementary() && getDetView()->hasComplementaryStrand();
-    const TriState aminoState = as->amino ? TriState_Yes : TriState_No;
+void DetView::resizeEvent(QResizeEvent *e) {
+    updateVerticalScrollBar();
+    updateVisibleRange();
 
-    DetView *detView = getDetView();
-    const bool transl = detView->hasTranslations() && (aminoState == TriState_Yes);
-    const int frame = U1AnnotationUtils::getRegionFrame(view->getSequenceLength(), strand, aData->isOrder(), region, aData->getRegions());
+    addUpdateFlags(GSLV_UF_ViewResized);
+    GSequenceLineView::resizeEvent(e);
+}
 
-    int line = -1;
-    if (complement) {
-        if (transl) {
-            line = getVisibleComplTransLine(frame);
-            line = (-1 == line) ? complementLine : line;
+void DetView::keyPressEvent(QKeyEvent *e) {
+    int key = e->key();
+    bool accepted = false;
+    GScrollBar* sBar = isWrapMode() ? verticalScrollBar : scrollBar;
+    switch(key) {
+    case Qt::Key_Left:
+    case Qt::Key_Up:
+        if (isWrapMode()) {
+            verticalScrollBar->triggerAction(QAbstractSlider::SliderSingleStepSub);
         } else {
-            line = complementLine;
+            setStartPos(qMax(qint64(0), visibleRange.startPos - 1));
         }
-    } else {
-        if (transl) {
-            line = getVisibleDirectTransLine(frame);
-            line = (-1 == line) ? directLine : line;
+        accepted = true;
+        break;
+    case Qt::Key_Right:
+    case Qt::Key_Down:
+        if (isWrapMode()) {
+            verticalScrollBar->triggerAction(QAbstractSlider::SliderSingleStepAdd);
         } else {
-            line = directLine;
+            setStartPos(qMin(seqLen - 1, visibleRange.startPos + 1));
         }
+        accepted = true;
+        break;
+    case Qt::Key_Home:
+        setStartPos(0);
+        currentShiftsCounter = 0;
+        accepted = true;
+        break;
+    case Qt::Key_End:
+        setStartPos(seqLen - 1);
+        accepted = true;
+        break;
+    case Qt::Key_PageUp:
+        sBar->triggerAction(QAbstractSlider::SliderPageStepSub);
+        accepted = true;
+        break;
+    case Qt::Key_PageDown:
+        sBar->triggerAction(QAbstractSlider::SliderPageStepAdd);
+        accepted = true;
+        break;
+    }
+    if (accepted) {
+        e->accept();
+    } else {
+        QWidget::keyPressEvent(e);
     }
-    SAFE_POINT(-1 != line, "Unable to calculate annotation vertical position!", U2Region());
-    int y = getLineY(line);
-    return U2Region(y + getHalfOfUnusedHeight(), lineHeight);
-}
-
-U2Region DetViewRenderArea::getMirroredYRange(const U2Strand &mirroredStrand) const {
-    int line = mirroredStrand.isDirect() ? directLine : complementLine;
-    int y = getLineY(line);
-    return U2Region(y + getHalfOfUnusedHeight(), lineHeight);
 }
 
-bool DetViewRenderArea::isOnTranslationsLine(int y) const {
-    if (firstDirectTransLine != -1) {
-        U2Region dtr(getLineY(firstDirectTransLine), 3*lineHeight);
-        if (dtr.contains(y)) {
-            return true;
+void DetView::updateVisibleRange() {
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    if (isWrapMode()) {
+        if (visibleRange.startPos % detArea->getSymbolsPerLine() != 0) {
+            // shift to the nearest line break
+            visibleRange.startPos = detArea->getSymbolsPerLine() * (int)(visibleRange.startPos / detArea->getSymbolsPerLine());
         }
-    }
-    if (firstComplTransLine !=-1) {
-        U2Region ctr(getLineY(firstComplTransLine), 3*lineHeight);
-        if (ctr.contains(y)) {
-            return true;
+
+        int visibleLinesCount = detArea->getLinesCount() + (getShift() != 0 ? 1 : 0);
+        if (detArea->height() + getShift() - detArea->getShiftsCount() * detArea->getShiftHeight() * visibleLinesCount > 0) {
+            visibleLinesCount ++;
         }
-    }
-    return false;
-}
 
-void DetViewRenderArea::drawAll(QPainter &p, const U2Region& visibleRange) {
-    SAFE_POINT(getDetView() != NULL, "DetView is NULL", );
-    U2Region currentRange = getDetView()->getVisibleRange();
-    getDetView()->setVisibleRange(visibleRange, false);
+        int visibleRangeLen = visibleLinesCount * detArea->getSymbolsPerLine();
 
-    cutsiteDataList.clear();
-    p.fillRect(0, 0, charWidth * visibleRange.length, height(), Qt::white);
-    p.setPen(Qt::black);
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
+        int lastLine = seqLen / detArea->getSymbolsPerLine() + (seqLen % detArea->getSymbolsPerLine() == 0 ? 0 : 1) - detArea->getLinesCount();
+        if (detArea->height() - detArea->getLinesCount() * detArea->getShiftsCount() * detArea->getShiftHeight() > 0 && lastLine > 0) {
+            lastLine --;
+        }
+        int lastStartPos = lastLine * detArea->getSymbolsPerLine();
 
-    QPen pen1(Qt::SolidLine);
-    pen1.setWidth(1);
+        bool posAtTheEnd = visibleRange.startPos > lastStartPos;
+        visibleRange.length = qMin((int)(seqLen - visibleRange.startPos), qMin(visibleRangeLen, (int)seqLen));
+        bool emptyLineDetected = (visibleRangeLen - visibleRange.length) > detArea->getSymbolsPerLine();
 
-    foreach (const AnnotationTableObject *ao, ctx->getAnnotationObjects(true)) {
-        foreach (Annotation *a, ao->getAnnotationsByRegion(visibleRange)) {
-            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-            AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
-            drawAnnotation(p, DrawAnnotationPass_DrawFill, a, pen1, false, as, U2Region(), true);
-            drawAnnotation(p, DrawAnnotationPass_DrawBorder, a, pen1, false, as, U2Region(), true);
+        if (posAtTheEnd || (emptyLineDetected && visibleRange.startPos + visibleRangeLen >= seqLen)) {
+            // scroll to the end
+            visibleRange.startPos = qMax(0, (verticalScrollBar->maximum() / numShiftsInOneLine) * detArea->getSymbolsPerLine());
+            visibleRange.length = qMin((int)(seqLen - visibleRange.startPos), qMin(visibleRangeLen, (int)seqLen));
+            currentShiftsCounter = qMax(0, verticalScrollBar->maximum() % numShiftsInOneLine);
         }
+    } else {
+        visibleRange.length = qMin((qint64)detArea->getVisibleSymbolsCount(), seqLen);
+        visibleRange.startPos = qMin(visibleRange.startPos, seqLen - visibleRange.length);
     }
 
-    int hCenter = getHalfOfUnusedHeight();
-    p.translate(0, hCenter);
-
-    drawDirect(p, visibleRange);
-    drawComplement(p, visibleRange);
-    drawTranslations(p, visibleRange);
-    drawCutSites(p);
+    SAFE_POINT(visibleRange.startPos >= 0 && visibleRange.endPos() <= seqLen, "Visible range is out of sequence range", );
 
-    int y = getLineY(rulerLine) + 2;
-    int firstCharStart = posToCoord(visibleRange.startPos, true);
-    int lastCharStart = posToCoord(visibleRange.endPos() - 1, true);
-    int firstCharCenter = firstCharStart + charWidth / 2;
-    int firstLastLen = lastCharStart - firstCharStart;
-    GraphUtils::RulerConfig c;
-    GraphUtils::drawRuler(p, QPoint(firstCharCenter, y), firstLastLen, visibleRange.startPos + 1, visibleRange.endPos(), rulerFont, c);
-
-    getDetView()->setVisibleRange(currentRange);
-    view->addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
+    updateVerticalScrollBarPosition();
+    onVisibleRangeChanged();
 }
 
-void DetViewRenderArea::drawAll(QPaintDevice* pd) {
-    GSLV_UpdateFlags uf = view->getUpdateFlags();
-    bool completeRedraw = uf.testFlag(GSLV_UF_NeedCompleteRedraw)  || uf.testFlag(GSLV_UF_ViewResized)  ||
-                          uf.testFlag(GSLV_UF_VisibleRangeChanged) || uf.testFlag(GSLV_UF_AnnotationsChanged);
-
-    bool hasSelectedAnnotationInRange = isAnnotationSelectionInVisibleRange();
-    int hCenter = getHalfOfUnusedHeight();
+void DetView::updateActions() {
+    bool hasComplement = ctx->getComplementTT() != NULL;
+    showComplementAction->setEnabled(hasComplement);
 
-    if (completeRedraw) {
-        cutsiteDataList.clear();
-        QPainter pCached(cachedView);
-        pCached.fillRect(0, 0, pd->width(), pd->height(), Qt::white);
-        pCached.setPen(Qt::black);
-        drawAnnotations(pCached);
+    bool hasAmino = ctx->getAminoTT() != NULL;
+    showTranslationAction->setEnabled(hasAmino);
+}
 
-        pCached.translate(0, hCenter);
+void DetView::updateSize() {
+    addUpdateFlags(GSLV_UF_ViewResized);
 
-        drawDirect(pCached, view->getVisibleRange());
-        drawComplement(pCached, view->getVisibleRange());
-        drawTranslations(pCached, view->getVisibleRange());
-        drawCutSites(pCached);
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    detArea->updateSize();
 
-        drawRuler(pCached);
+    updateVerticalScrollBar();
+}
 
-        pCached.end();
+void DetView::updateVerticalScrollBar() {
+    verticalScrollBar->disconnect(this);
+    if (!isWrapMode()) {
+        return;
     }
 
-    QPainter p(pd);
-    p.drawPixmap(0, 0, *cachedView);
-
-    drawAnnotationsSelection(p);
-
-    if (hasSelectedAnnotationInRange) {
-        p.translate(0, hCenter);
-
-        drawDirect(p, view->getVisibleRange());
-        drawComplement(p, view->getVisibleRange());
-        drawTranslations(p, view->getVisibleRange());
-
-        p.translate(0, -hCenter);
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    int linesCount = seqLen / detArea->getSymbolsPerLine();
+    if (seqLen % detArea->getSymbolsPerLine() != 0) {
+        linesCount++;
     }
 
-    p.translate(0, hCenter);
-    drawSequenceSelection(p);
+    verticalScrollBar->setMinimum(0);
 
-    if (view->hasFocus()) {
-        p.translate(0, -hCenter);
-        drawFocus(p);
-    }
-}
-
-void DetViewRenderArea::drawDirect(QPainter& p, const U2Region& visibleRange) {
-    p.setFont(sequenceFont);
-    p.setPen(Qt::black);
+    numShiftsInOneLine = getDetViewRenderArea()->getShiftsCount();
+    int shiftsOnWidget = renderArea->height() / getDetViewRenderArea()->getShiftHeight();
 
-    U2OpStatusImpl os;
-    QByteArray sequence = view->getSequenceContext()->getSequenceData(visibleRange, os);
-    SAFE_POINT_OP(os, );
-    const char* seq = sequence.constData();
+    verticalScrollBar->setMaximum(numShiftsInOneLine * linesCount - shiftsOnWidget);
+    verticalScrollBar->setPageStep(numShiftsInOneLine);
+    updateVerticalScrollBarPosition();
 
-    /// draw base line;
-    int y = getTextY(directLine);
-    for(int i = 0; i < visibleRange.length; i++) {
-        char nucl = seq[i];
-        p.drawText(i*charWidth + xCharOffset, y, QString(nucl));
-    }
+    connect(verticalScrollBar, SIGNAL(valueChanged(int)), SLOT(sl_verticalSrcollBarMoved(int)));
 }
 
-void DetViewRenderArea::drawComplement(QPainter& p, const U2Region& visibleRange) {
-    p.setFont(sequenceFont);
-    p.setPen(Qt::black);
-
-    DetView* detView = getDetView();
-    if (complementLine > 0) {
-        U2OpStatusImpl os;
-        QByteArray visibleSequence = detView->getSequenceContext()->getSequenceData(visibleRange, os);
-        SAFE_POINT_OP(os, );
-        const char* seq = visibleSequence.constData();
-
-        DNATranslation* complTrans = detView->getComplementTT();
-        CHECK(complTrans != NULL, );
-        QByteArray map = complTrans->getOne2OneMapper();
-        int y = getTextY(complementLine);
-        for(int i=0;i< visibleRange.length; i++) {
-            char nucl = seq[i];
-            char complNucl = map.at(nucl);
-            p.drawText(i*charWidth + xCharOffset, y, QString(complNucl));
-        }
-    }
+void DetView::updateVerticalScrollBarPosition() {
+    DetViewRenderArea* detArea = getDetViewRenderArea();
+    verticalScrollBar->disconnect(this);
+    verticalScrollBar->setSliderPosition(qMin( verticalScrollBar->maximum(),
+                                               currentShiftsCounter + numShiftsInOneLine* int(visibleRange.startPos / detArea->getSymbolsPerLine())));
+    connect(verticalScrollBar, SIGNAL(valueChanged(int)), SLOT(sl_verticalSrcollBarMoved(int)));
 }
 
-static QByteArray translate(DNATranslation* t, const char* seq, qint64 seqLen) {
-    QByteArray res(seqLen / 3, 0);
-    t->translate(seq, seqLen, res.data(), seqLen/3);
-    return res;
+/************************************************************************/
+/* DetViewRenderArea */
+/************************************************************************/
+DetViewRenderArea::DetViewRenderArea(DetView* v)
+    : GSequenceLineViewAnnotatedRenderArea(v, true) {
+    renderer = DetViewRendererFactory::createRenderer(getDetView(), view->getSequenceContext(), v->isWrapMode());
+    updateSize();
 }
 
-static int correctLine(QVector<bool> visibleRows, int line){
-    int retLine = line;
-    assert(visibleRows.size() == 6);
-    for(int i = 0; i < line; i++){
-        if(!visibleRows[i+3]){
-            retLine--;
-        }
-    }
-    return retLine;
+DetViewRenderArea::~DetViewRenderArea() {
+    delete renderer;
 }
 
-void DetViewRenderArea::drawTranslations(QPainter& p, const U2Region& visibleRange) {
-    p.setFont(sequenceFont);
-    DetView* detView = getDetView();
-    QVector<bool> visibleRows = detView->getSequenceContext()->getTranslationRowsVisibleStatus();
+void DetViewRenderArea::setWrapSequence(bool v) {
+    delete renderer;
+    renderer = DetViewRendererFactory::createRenderer(getDetView(), view->getSequenceContext(), v);
 
-    if (firstDirectTransLine < 0 && firstComplTransLine < 0) {
-        return;
-    }
-    DNATranslation3to1Impl* aminoTable = (DNATranslation3to1Impl*)detView->getAminoTT();
-    CHECK(aminoTable != NULL && aminoTable->isThree2One(), );
-
-    qint64 wholeSeqLen = detView->getSequenceLength();
-    qint64 minUsedPos = qMax(visibleRange.startPos - 1, qint64(0));
-    qint64 maxUsedPos = qMin(visibleRange.endPos() + 1, wholeSeqLen);
-    U2Region seqBlockRegion(minUsedPos, maxUsedPos - minUsedPos);
-    U2OpStatusImpl os;
-    QByteArray seqBlockData = detView->getSequenceContext()->getSequenceData(seqBlockRegion, os);
-    SAFE_POINT_OP(os, );
-    const char* seqBlock = seqBlockData.constData();
-
-    QColor startC(0,0x99,0);
-    QColor stopC(0x99,0,0);
-
-    QFont fontB = sequenceFont;
-    fontB.setBold(true);
-    QFont fontI = sequenceFont;
-    fontI.setItalic(true);
-
-    QFont sequenceFontSmall = sequenceFont;
-    sequenceFontSmall.setPointSize(sequenceFont.pointSize()-1);
-    QFont fontBS = sequenceFontSmall;
-    fontBS.setBold(true);
-    QFont fontIS = sequenceFontSmall;
-    fontIS.setItalic(true);
-
-    QList<SharedAnnotationData> annotationsInRange;
-    foreach (Annotation *a, detView->findAnnotationsInRange(visibleRange)) {
-        annotationsInRange << a->getData();
-    }
+    updateSize();
+}
 
-    {//direct translations
-        for(int i = 0; i < 3; i++) {
-            int indent = (visibleRange.startPos + i) % 3;
-            qint64 seqStartPos = visibleRange.startPos + indent - 3;
-            if (seqStartPos < minUsedPos) {
-                seqStartPos += 3;
-            }
-            int line = seqStartPos % 3;//0,1,2
-            if(visibleRows[line] == true){
-                const char* seq  = seqBlock + (seqStartPos - minUsedPos);
-                QByteArray amino = translate(aminoTable, seq, maxUsedPos - seqStartPos);
-
-                int yOffset=0;
-                for (int k=0; k < line; k++){
-                    yOffset += (visibleRows[k]== true ? 0 : 1);
-                }
-                int y = getTextY(firstDirectTransLine + line - yOffset);
-                int dx = seqStartPos - visibleRange.startPos;//-1,0,1,2(if startPos==0)
-                for(int j = 0, n = amino.length(); j < n ; j++, seq += 3) {
-                    char amin = amino[j];
-                    int xpos = 3 * j + 1 + dx;
-                    assert(xpos >= 0 && xpos < visibleRange.length);
-                    int x =  xpos * charWidth + xCharOffset;
-
-                    QColor charColor;
-                    bool inAnnotation = deriveTranslationCharColor(seq - seqBlock  + seqBlockRegion.startPos,
-                                U2Strand::Direct, annotationsInRange, charColor);
-
-                    if (aminoTable->isStartCodon(seq)) {
-                        p.setPen(inAnnotation ? charColor : startC);
-                        p.setFont(inAnnotation ? fontB : fontBS);
-                    } else if (aminoTable->isCodon(DNATranslationRole_Start_Alternative, seq)) {
-                        p.setPen(inAnnotation ? charColor : startC);
-                        p.setFont(inAnnotation ? fontI: fontIS);
-                    } else if (aminoTable->isStopCodon(seq)) {
-                        p.setPen(inAnnotation ? charColor : stopC);
-                        p.setFont(inAnnotation ? fontB : fontBS);
-                    } else {
-                        p.setPen(charColor);
-                        p.setFont(inAnnotation ? sequenceFont : sequenceFontSmall);
-                    }
-                    p.drawText(x, y, QString(amin));
-                }
-            }
-        }
-    }
-    if (detView->hasComplementaryStrand()) {//reverse translations
-        DNATranslation* complTable = detView->getComplementTT();
-        assert(complTable!=NULL);
-        QByteArray revComplDna(seqBlockRegion.length, 0);
-        complTable->translate(seqBlock, seqBlockRegion.length, revComplDna.data(), seqBlockRegion.length);
-        TextUtils::reverse(revComplDna.data(), revComplDna.size());
-        int complLine = 0;
-        for(int i = 0; i < 3; i++) {
-            int indent = (wholeSeqLen - visibleRange.endPos() + i) % 3;
-            qint64 revComplStartPos = visibleRange.endPos() - indent + 3; //start of the reverse complement sequence in direct coords
-            if (revComplStartPos > maxUsedPos) {
-                revComplStartPos -= 3;
-            }
-            qint64 revComplDnaOffset = maxUsedPos - revComplStartPos;
-            assert(revComplDnaOffset >= 0);
-            const char* revComplData = revComplDna.constData();
-            const char* seq = revComplData + revComplDnaOffset;
-            qint64 seqLen = revComplStartPos - minUsedPos;
-            QByteArray amino = translate(aminoTable, seq, seqLen);
-            complLine = (wholeSeqLen - revComplStartPos) % 3;
-            if(visibleRows[complLine+3] == true){
-                complLine = correctLine(visibleRows, complLine);
-                //int line = (seqLen - revComplStartPos) % 3;
-                int y = getTextY(firstComplTransLine + complLine);
-                int dx = visibleRange.endPos() - revComplStartPos;
-                for(int j = 0, n = amino.length(); j < n ; j++, seq +=3) {
-                    char amin = amino[j];
-                    int xpos = visibleRange.length - (3 * j + 2 + dx);
-                    assert(xpos >= 0 && xpos < visibleRange.length);
-                    int x =  xpos * charWidth + xCharOffset;
-
-                    QColor charColor;
-                    bool inAnnotation = deriveTranslationCharColor(maxUsedPos - (seq - revComplDna.constData()),
-                        U2Strand::Complementary, annotationsInRange, charColor);
-
-                    if (aminoTable->isStartCodon(seq)) {
-                        p.setPen(inAnnotation ? charColor : startC);
-                        p.setFont(inAnnotation ? fontB : fontBS);
-                    } else if (aminoTable->isCodon(DNATranslationRole_Start_Alternative, seq)) {
-                        p.setPen(inAnnotation ? charColor : startC);
-                        p.setFont(inAnnotation ? fontI : fontIS);
-                    } else if (aminoTable->isStopCodon(seq)) {
-                        p.setPen(inAnnotation ? charColor : stopC);
-                        p.setFont(inAnnotation ? fontB : fontBS);
-                    } else {
-                        p.setPen(charColor);
-                        p.setFont(inAnnotation ? sequenceFont : sequenceFontSmall);
-                    }
-                    p.drawText(x, y, QString(amin));
-                }
-            }
-        }
-    }
-    p.setPen(Qt::black);
-    p.setFont(sequenceFont);
+U2Region DetViewRenderArea::getAnnotationYRange(Annotation* a, int r, const AnnotationSettings* as) const {
+    U2Region absoluteRegion = renderer->getAnnotationYRange(a, r, as, size(), view->getVisibleRange());
+    absoluteRegion.startPos += renderer->getContentIndentY(size(), view->getVisibleRange());
+    return  absoluteRegion;
 }
 
-bool DetViewRenderArea::deriveTranslationCharColor(qint64 pos, const U2Strand &strand,
-    const QList<SharedAnnotationData> &annotationsInRange, QColor &result)
-{
-    // logic:
-    // no annotations found -> grey
-    // found annotation that is on translation -> black
-    // 1 annotation found on nucleic -> darker(annotation color)
-    // 2+ annotations found on nucleic -> black
-
-    int nAnnotations = 0;
-    const U2Region tripletRange = strand.isCompementary() ? U2Region(pos - 2, 2) : U2Region(pos, 2);
-    AnnotationSettings *as = NULL;
-    AnnotationSettingsRegistry *registry = AppContext::getAnnotationsSettingsRegistry();
-    const int sequenceLen = view->getSequenceLength();
-    foreach (const SharedAnnotationData &aData, annotationsInRange) {
-        if (aData->getStrand() != strand) {
-            continue;
-        }
-        bool annotationOk = false;
-        AnnotationSettings *tas = NULL;
-        const bool order = aData->isOrder();
-        const QVector<U2Region> &location = aData->getRegions();
-        for (int i = 0, n = location.size(); i < n; i++) {
-            const U2Region &r = location.at(i);
-            if (!r.contains(tripletRange)) {
-                continue;
-            }
-            const int regionFrame = U1AnnotationUtils::getRegionFrame(sequenceLen, strand, order, i, location);
-            const int posFrame = strand.isCompementary() ? (sequenceLen - pos) % 3 : pos % 3;
-            if (regionFrame ==  posFrame) {
-                tas = registry->getAnnotationSettings(aData);
-                if (tas->visible) {
-                    annotationOk = true;
-                    break;
-                }
-            }
-        }
-        if (annotationOk) {
-            nAnnotations++;
-            as = tas;
-            if (nAnnotations > 1) {
-                break;
-            }
-        }
-    }
-    if (0 == nAnnotations) {
-        result = Qt::gray;
-        return false;
-    }
+bool DetViewRenderArea::isOnTranslationsLine(const QPoint& p) const {
+    return renderer->isOnTranslationsLine(p, size(), view->getVisibleRange());
+}
 
-    if (nAnnotations > 1) {
-        result = Qt::black;
-        return true;
-    }
-    const TriState aminoState = as->amino ? TriState_Yes : TriState_No;
-    const bool aminoOverlap = (aminoState == TriState_Yes); // annotation is drawn on amino strand -> use black color for letters
-    result = aminoOverlap ? Qt::black : as->color.darker(300);
+bool DetViewRenderArea::isPosOnAnnotationYRange(const QPoint &p, Annotation *a, int region, const AnnotationSettings *as) const {
+    int scrollShift = getDetView()->getShift();
+    QPoint pShifted(p.x(), p.y() + scrollShift);
 
-    return true;
+    QSize expandedSize = size();
+    expandedSize.setHeight(expandedSize.height() + scrollShift);
+    return renderer->isOnAnnotationLine(pShifted, a, region, as, expandedSize, view->getVisibleRange());
 }
 
-void DetViewRenderArea::drawSequenceSelection(QPainter& p) {
-    DetView* detView = getDetView();
-    DNASequenceSelection* sel = detView->getSequenceContext()->getSequenceSelection();
-    if (sel->isEmpty()) {
-        return;
+void DetViewRenderArea::drawAll(QPaintDevice* pd) {
+    GSLV_UpdateFlags uf = view->getUpdateFlags();
+    bool completeRedraw = uf.testFlag(GSLV_UF_NeedCompleteRedraw)  || uf.testFlag(GSLV_UF_ViewResized)  ||
+                          uf.testFlag(GSLV_UF_VisibleRangeChanged) || uf.testFlag(GSLV_UF_AnnotationsChanged);
+
+    int scrollShift = getDetView()->getShift();
+    QSize canvasSize(pd->width(), pd->height() + scrollShift);
+
+    if (completeRedraw) {
+        QPainter pCached(cachedView);
+        pCached.translate(0, - scrollShift);
+        renderer->drawAll(pCached, canvasSize,
+                            view->getVisibleRange());
+        pCached.end();
     }
 
-    QPen pen1(Qt::black, 1, Qt::DashLine);
-    p.setPen(pen1);
+    QPainter p(pd);
 
-    foreach(const U2Region& r, sel->getSelectedRegions()) {
-        highlight(p, r, directLine);
-        if (detView->hasComplementaryStrand()) {
-            highlight(p, r, complementLine);
-        }
-        if (detView->hasTranslations()) {
-            int translLine = posToDirectTransLine(r.startPos);
-            if (translLine >= 0 && r.length >= 3) {
-                highlight(p, U2Region(r.startPos,r.length / 3 * 3), translLine);
-            }
-            if (detView->hasComplementaryStrand()) {
-                int complTransLine = posToComplTransLine(r.endPos());
-                if (complTransLine >= 0 && r.length >= 3) {
-                    const qint64 translLen = r.length / 3 * 3;
-                    highlight(p, U2Region(r.endPos() - translLen, translLen), complTransLine);
-                }
-            }
-        }
+    p.drawPixmap(0, 0, *cachedView);
+    p.translate(0, - scrollShift);
+    renderer->drawSelection(p, canvasSize, view->getVisibleRange());
+    p.translate(0, scrollShift);
+
+    if (view->hasFocus()) {
+        drawFocus(p);
     }
 }
 
-void DetViewRenderArea::drawRuler(QPainter& p) {
-    int y = getLineY(rulerLine) + 2;
-    const U2Region& visibleRange = view->getVisibleRange();
-    int firstCharStart = posToCoord(visibleRange.startPos);
-    int lastCharStart = posToCoord(visibleRange.endPos() - 1);
-    int firstCharCenter = firstCharStart + charWidth / 2;
-    int firstLastLen = lastCharStart - firstCharStart;
-    GraphUtils::RulerConfig c;
-    GraphUtils::drawRuler(p, QPoint(firstCharCenter, y), firstLastLen, visibleRange.startPos + 1, visibleRange.endPos(), rulerFont, c);
+qint64 DetViewRenderArea::coordToPos(const QPoint& p) const {
+    QPoint pShifted(p.x(), p.y() + getDetView()->getShift());
+    return renderer->coordToPos(pShifted, QSize(width(), height()), view->getVisibleRange());
 }
 
-int DetViewRenderArea::posToDirectTransLine(int p) const {
-    SAFE_POINT(firstDirectTransLine >= 0, "Invalid direct translation line number", -1);
-    const int absoluteLineNumber = p % 3;
-    return getVisibleDirectTransLine(absoluteLineNumber);
+double DetViewRenderArea::getCurrentScale() const {
+    return renderer->getCurrentScale();
 }
 
-int DetViewRenderArea::posToComplTransLine(int p) const {
-    SAFE_POINT(firstComplTransLine >= 0, "Invalid complementary translation line number", -1);
-    const int absoluteLineNumber = (view->getSequenceLength() - p) % 3;
-    return getVisibleComplTransLine(absoluteLineNumber);
+void DetViewRenderArea::updateSize()  {
+    renderer->update();
+    setMinimumHeight(renderer->getMinimumHeight());
+    repaint();
 }
 
-void DetViewRenderArea::highlight(QPainter& p, const U2Region& r, int line) {
-    SAFE_POINT(line >= 0, "Unexpected sequence view line number", );
-
-    const U2Region& visibleRange = view->getVisibleRange();
-    if (!visibleRange.intersects(r)) {
-        return;
-    }
-    U2Region visibleRegion = visibleRange.intersect(r);
-    int x = posToCoord(visibleRegion.startPos);
-    int width = posToCoord(visibleRegion.endPos()) - x;
-
-    int ymargin = yCharOffset / 2;
-    int y = getLineY(line) + ymargin;
-    int height = lineHeight - 2 * ymargin;
-    p.drawRect(x, y, width, height);
+DetView* DetViewRenderArea::getDetView() const {
+    return static_cast<DetView*>(view);
 }
 
-qint64 DetViewRenderArea::coordToPos(int x) const {
-    U2Region visibleRange = view->getVisibleRange();
-    qint64 pos = visibleRange.startPos + x / charWidth;
-    if (pos > visibleRange.endPos()) {
-        pos = visibleRange.endPos();
-    }
-    return pos;
+int DetViewRenderArea::getSymbolsPerLine() const {
+    return width() / charWidth;
 }
 
-float DetViewRenderArea::posToCoordF(qint64 x, bool useVirtualSpace) const {
-    const U2Region& visible = view->getVisibleRange();
-    if (!useVirtualSpace && !visible.contains(x) && visible.endPos()!=x) {
-        return -1;
-    }
-    float res = (float)(x - visible.startPos) * charWidth;
-    SAFE_POINT(useVirtualSpace || (res >= 0 && res <= width()), "Position is outside the visible rect", res);
-    return res;
+int DetViewRenderArea::getLinesCount() const {
+    return renderer->getLinesCount(size());
 }
 
-double DetViewRenderArea::getCurrentScale() const {
-    assert(0); //TODO: must never be called. Not tested if called
-    return (double)charWidth;
+int DetViewRenderArea::getVisibleSymbolsCount() const {
+    return getLinesCount() * getSymbolsPerLine();
 }
 
-void DetViewRenderArea::updateSize()  {
-    updateLines();
-    int h = numLines * lineHeight + 5;
-    setMinimumHeight(h);
-    repaint();
+int DetViewRenderArea::getShiftsCount() const {
+    return renderer->getRowsInLineCount();
 }
 
-int DetViewRenderArea::getHalfOfUnusedHeight() const {
-    int minH = numLines * lineHeight + 5;
-    return (height() - minH) / 2;
+int DetViewRenderArea::getShiftHeight() const {
+    return renderer->getRowLineHeight();
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/DetView.h b/src/corelibs/U2View/src/ov_sequence/DetView.h
index 84df7da..0d33fa0 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.h
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.h
@@ -22,114 +22,119 @@
 #ifndef _U2_DET_VIEW_H_
 #define _U2_DET_VIEW_H_
 
-#include <QtGui/QFont>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
+#include <QFont>
 
 #include <U2Core/U2Location.h>
 
 #include "GSequenceLineViewAnnotated.h"
 
+
 class QActionGroup;
 
 namespace U2 {
 
 class Annotation;
 class DNATranslation;
+class DetViewRenderArea;
+class DetViewRenderer;
 
 class U2VIEW_EXPORT DetView : public GSequenceLineViewAnnotated {
     Q_OBJECT
 public:
     DetView(QWidget* p, ADVSequenceObjectContext* ctx);
 
-    bool isOneLineMode()  {return getComplementTT() == NULL && getAminoTT() == NULL;}
-    bool hasTranslations()  {return getAminoTT() != NULL;}
-    bool hasComplementaryStrand()  {return getComplementTT() != NULL;}
+    DetViewRenderArea* getDetViewRenderArea() const;
+
+    bool hasTranslations() const;
+    bool hasComplementaryStrand() const;
+    bool isWrapMode() const;
+
+    virtual void setStartPos(qint64 pos);
+    virtual void setCenterPos(qint64 pos);
 
     DNATranslation* getComplementTT() const;
     DNATranslation* getAminoTT() const;
+    // for GUI tests
+    int getSymbolsPerLine() const;
 
     void setShowComplement(bool t);
     void setShowTranslation(bool t);
 
     void setDisabledDetViewActions(bool t);
 
-    QAction* getShowComplementAction() const {return showComplementAction;}
-    QAction* getShowTranslationAction() const {return showTranslationAction;}
+    int getShift() const;
 
 protected slots:
     virtual void sl_sequenceChanged();
     void sl_onAminoTTChanged();
-    void sl_showComplementToggle(bool v) {setShowComplement(v);}
-    void sl_showTranslationToggle(bool v);
     void sl_translationRowsChanged();
+    void sl_showComplementToggle(bool v);
+    void sl_showTranslationToggle(bool v);
+    void sl_wrapSequenceToggle(bool v);
+    void sl_verticalSrcollBarMoved(int position);
 
 protected:
+    virtual void pack();
+
     void showEvent(QShowEvent * e);
     void hideEvent(QHideEvent * e);
 
+    void mouseMoveEvent(QMouseEvent* me);
     void mouseReleaseEvent(QMouseEvent* me);
+    void wheelEvent(QWheelEvent* we);
+    void resizeEvent(QResizeEvent *e);
+    void keyPressEvent(QKeyEvent *e);
 
+    void updateVisibleRange();
     void updateActions();
-
-    void resizeEvent(QResizeEvent *e);
     void updateSize();
+    void updateVerticalScrollBar();
+    void updateVerticalScrollBarPosition();
 
     QAction*        showComplementAction;
     QAction*        showTranslationAction;
-};
+    QAction*        wrapSequenceAction;
+
+    GScrollBar*     verticalScrollBar;
 
+    int numShiftsInOneLine;
+    int currentShiftsCounter;
+};
 
 class DetViewRenderArea : public GSequenceLineViewAnnotatedRenderArea {
 public:
     DetViewRenderArea(DetView* d);
+    ~DetViewRenderArea();
 
-    virtual qint64 coordToPos(int x) const;
-    virtual float posToCoordF(qint64 x, bool useVirtualSpace = false) const;
+    DetViewRenderer* getRenderer() { return renderer; }
+
+    virtual U2Region getAnnotationYRange(Annotation *a, int region, const AnnotationSettings *as) const;
     virtual double getCurrentScale() const;
 
-    DetView* getDetView() const {return static_cast<DetView*>(view);}
+    void setWrapSequence(bool v);
 
-    virtual U2Region getAnnotationYRange(Annotation *a, int region, const AnnotationSettings *as) const;
-    virtual U2Region getMirroredYRange(const U2Strand &mirroredStrand) const;
-    virtual int getHalfOfUnusedHeight() const;
+    qint64 coordToPos(const QPoint& p) const;
 
-    void updateSize();
+    DetView* getDetView() const;
+
+    int getSymbolsPerLine() const;
+    int getLinesCount() const;
+    int getVisibleSymbolsCount() const;
 
-    bool isOnTranslationsLine(int y) const;
+    int getShiftsCount() const;
+    int getShiftHeight() const;
+
+    void updateSize();
 
-    void drawAll(QPainter& p, const U2Region &visibleRange);
+    bool isOnTranslationsLine(const QPoint& p) const;
+    bool isPosOnAnnotationYRange(const QPoint &p, Annotation *a, int region, const AnnotationSettings *as) const;
 
 protected:
     virtual void drawAll(QPaintDevice* pd);
 
 private:
-    int getLineY(int line) const {return 2 + line * lineHeight;}
-    int getTextY(int line) const {return getLineY(line) + lineHeight - yCharOffset;}
-
-    void updateLines();
-    void drawDirect(QPainter& p, const U2Region& visibleRange);
-    void drawComplement(QPainter& p, const U2Region& visibleRange);
-    void drawTranslations(QPainter& p, const U2Region& visibleRange);
-    void drawSequenceSelection(QPainter& p);
-    void drawRuler(QPainter& p);
-    void highlight(QPainter& p, const U2Region& r, int line);
-
-    int posToComplTransLine(int p) const;
-    int posToDirectTransLine(int p) const;
-    int getVisibleDirectTransLine(int absoluteFrameNumber) const;
-    int getVisibleComplTransLine(int absoluteFrameNumber) const;
-    bool deriveTranslationCharColor(qint64 pos, const U2Strand &strand, const QList<SharedAnnotationData> &annotationsInRange, QColor &result);
-
-    int numLines;
-    int rulerLine;
-    int directLine;
-    int complementLine;
-    int firstDirectTransLine;
-    int firstComplTransLine;
+    DetViewRenderer* renderer;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp
index a21325c..61eac8e 100644
--- a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp
@@ -42,7 +42,7 @@ EditAnnotationDialogController::EditAnnotationDialogController(const SharedAnnot
     : QDialog(p), seqRange(seqRange)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126622");
+    new HelpButton(this, buttonBox, "17466020");
 
     nameEdit->setText(a->name);
     locationEdit->setText(U1AnnotationUtils::buildLocationString(a));
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
index 9d8dbcc..bf55a02 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
@@ -165,7 +165,7 @@ void GSequenceLineView::mousePressEvent(QMouseEvent* me) {
         return;
     }
 
-    lastPressPos = renderArea->coordToPos(renderAreaPos.x());
+    lastPressPos = renderArea->coordToPos(renderAreaPos);
 
     SAFE_POINT(lastPressPos >= visibleRange.startPos && lastPressPos <= visibleRange.endPos(), "Last mouse press position is out of visible range!",);
 
@@ -191,7 +191,7 @@ void GSequenceLineView::mouseReleaseEvent(QMouseEvent* me) {
         bool singleBaseSelectionMode = km.testFlag(Qt::AltModifier);
         if (me->button() == Qt::LeftButton && singleBaseSelectionMode) {
             QPoint areaPoint = toRenderAreaPoint(me->pos());
-            qint64 pos = renderArea->coordToPos(areaPoint.x());
+            qint64 pos = renderArea->coordToPos(areaPoint);
             if (pos == lastPressPos) {
                 U2Region rgn(pos, 1);
                 if (rgn.startPos >=0 && rgn.endPos() <= seqLen) {
@@ -224,7 +224,7 @@ void GSequenceLineView::mouseMoveEvent(QMouseEvent* me) {
         }
 
         // compute selection
-        qint64 pos = renderArea->coordToPos(areaPoint.x());
+        qint64 pos = renderArea->coordToPos(areaPoint);
         qint64 selStart = qMin(lastPressPos, pos);
         qint64 selLen = qAbs(pos - lastPressPos);
         if (selStart<0) {
@@ -243,7 +243,7 @@ void GSequenceLineView::mouseMoveEvent(QMouseEvent* me) {
 void GSequenceLineView::mouseDoubleClickEvent(QMouseEvent* me) {
     QPoint areaPoint = toRenderAreaPoint(me->pos());
     if (renderArea->rect().contains(areaPoint)) {
-        qint64 pos = renderArea->coordToPos(areaPoint.x());
+        qint64 pos = renderArea->coordToPos(areaPoint);
         emit si_centerPosition(pos);
     }
     QWidget::mouseDoubleClickEvent(me);
@@ -295,7 +295,6 @@ void GSequenceLineView::setCenterPos(qint64 centerPos) {
     setStartPos(newPos);
 }
 
-
 void GSequenceLineView::setStartPos(qint64 newPos) {
     if (newPos + visibleRange.length > seqLen) {
         newPos = seqLen - visibleRange.length;
@@ -460,7 +459,6 @@ U2SequenceObject* GSequenceLineView::getSequenceObject() const {
     return ctx->getSequenceObject();
 }
 
-
 void GSequenceLineView::completeUpdate(){
     addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
     update();
@@ -541,7 +539,7 @@ void GSequenceLineViewRenderArea::paintEvent(QPaintEvent *e) {
     QSize cachedViewSize = cachedView->size();
     QSize currentSize = size();
     if (cachedViewSize != currentSize) {
-        assert(view->getUpdateFlags().testFlag(GSLV_UF_ViewResized)==true);
+        view->addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
         delete cachedView;
         cachedView = new QPixmap(currentSize);
     }
@@ -568,6 +566,10 @@ qint64 GSequenceLineViewRenderArea::coordToPos(int _x) const {
     return pos;
 }
 
+qint64 GSequenceLineViewRenderArea::coordToPos(const QPoint &p) const {
+    return coordToPos(p.x());
+}
+
 float GSequenceLineViewRenderArea::posToCoordF(qint64 p, bool useVirtualSpace) const {
     const U2Region& visibleRange = view->getVisibleRange();
     if (!useVirtualSpace && !visibleRange.contains(p) && p!=visibleRange.endPos()) {
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
index f496e48..c229a94 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
@@ -180,6 +180,8 @@ public:
     ~GSequenceLineViewRenderArea();
 
     virtual qint64 coordToPos(int x) const;
+    virtual qint64 coordToPos(const QPoint& p) const;
+
     virtual int posToCoord(qint64 p, bool useVirtualSpace = false) const;
     virtual float posToCoordF(qint64 p, bool useVirtualSpace = false) const;
     //number of pixels per base
@@ -198,8 +200,9 @@ protected:
 
     GSequenceLineView* view;
     QPixmap* cachedView;
-    QPixmap* tmpView;
 
+    //! VIEW_RENDERER_REFACTORING: the following parameters should be stored only in renderer (until they cannot be modifyed in view).
+    //! Currenlty they are doubled in SequenceViewRenderer class.
     //per char and per line metrics
     QFont   sequenceFont;
     QFont   smallSequenceFont;
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
index c67592c..ed47463 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
@@ -44,27 +44,8 @@
 #include "GSequenceLineViewAnnotated.h"
 
 
-static const int MIN_ANNOTATION_WIDTH = 3;
-static const int MIN_ANNOTATION_TEXT_WIDTH = 5;
-static const int MIN_SELECTED_ANNOTATION_WIDTH = 4;
-static const int MIN_WIDTH_TO_DRAW_EXTRA_FEATURES = 10;
-
-static const int FEATURE_ARROW_HLEN = 3;
-static const int FEATURE_ARROW_VLEN = 3;
-
-static const int CUT_SITE_HALF_WIDTH = 4;
-static const int CUT_SITE_HALF_HEIGHT = 2;
-
-static const int MAX_VIRTUAL_RANGE = 10000;
-
 namespace U2 {
 
-GSequenceLineViewAnnotated::DrawSettings::DrawSettings()
-    : drawAnnotationNames(false), drawAnnotationArrows(false), drawCutSites(true)
-{
-
-}
-
 GSequenceLineViewAnnotated::GSequenceLineViewAnnotated(QWidget* p, ADVSequenceObjectContext* ctx)
     : GSequenceLineView(p, ctx)
 {
@@ -194,15 +175,12 @@ bool GSequenceLineViewAnnotated::isAnnotationVisible(Annotation *a) const  {
     return false;
 }
 
-const GSequenceLineViewAnnotated::DrawSettings & GSequenceLineViewAnnotated::getDrawSettings() const {
-    return drawSettings;
-}
-
 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);
     AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-    const qint64 pos = ra->coordToPos(p.x());
+    const qint64 pos = ra->coordToPos(p);
     qint64 dPos = 0;
     if (visibleRange.length > renderArea->width()) {
         float scale = renderArea->getCurrentScale();
@@ -227,8 +205,7 @@ QList<AnnotationSelectionData> GSequenceLineViewAnnotated::selectAnnotationByCoo
                     if (ok) {
                         AnnotationSettings *as = asr->getAnnotationSettings(aData);
                         if (as->visible) {
-                            U2Region ry = ra->getAnnotationYRange(a, i, as);
-                            if (ry.contains(p.y())) {
+                            if (ra->isPosOnAnnotationYRange(p, a, i, as)) {
                                 res.append(AnnotationSelectionData(a, i));
                             }
                         }
@@ -315,6 +292,8 @@ void GSequenceLineViewAnnotated::mousePressEvent(QMouseEvent *me) {
     ignoreMouseSelectionEvents = false;
 }
 
+//! VIEW_RENDERER_REFACTORING: used only in CV, doubled in SequenceViewAnnotetedRenderer.
+//! Apply renederer logic to CV and remove this method.
 QString GSequenceLineViewAnnotated::prepareAnnotationText(const SharedAnnotationData &a, const AnnotationSettings *as) {
     if (!as->showNameQuals || as->nameQuals.isEmpty()) {
         return a->name;
@@ -346,7 +325,6 @@ QList<Annotation *> GSequenceLineViewAnnotated::findAnnotationsInRange(const U2R
 GSequenceLineViewAnnotatedRenderArea::GSequenceLineViewAnnotatedRenderArea(GSequenceLineViewAnnotated* d, bool overlap)
     : GSequenceLineViewRenderArea(d)
 {
-    annotationsCanOverlap = overlap;
     afNormal = new QFont("Courier", 10);
     afSmall = new QFont("Arial", 8);
 
@@ -372,295 +350,14 @@ GSequenceLineViewAnnotatedRenderArea::~GSequenceLineViewAnnotatedRenderArea() {
     delete afSmall;
 }
 
-void GSequenceLineViewAnnotatedRenderArea::drawAnnotations(QPainter& p) {
-    GTIMER(c2, t2, "GSequenceLineViewAnnotatedRenderArea::drawAnnotations");
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
-
-    QPen pen1(Qt::SolidLine);
-    pen1.setWidth(1);
-
-    foreach (const AnnotationTableObject *ao, ctx->getAnnotationObjects(true)) {
-        foreach (Annotation *a, ao->getAnnotationsByRegion(view->getVisibleRange())) {
-            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-            AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
-            drawAnnotation(p, DrawAnnotationPass_DrawFill, a, pen1, false, as);
-            drawAnnotation(p, DrawAnnotationPass_DrawBorder, a, pen1, false, as);
-        }
-    }
-}
-
-void static addArrowPath(QPainterPath& path, const QRect& rect, bool leftArrow) {
-    if (rect.width() <= FEATURE_ARROW_HLEN || rect.height() <= 0) {
-        return;
-    }
-    int x = leftArrow ? rect.left() : rect.right();
-    int dx = leftArrow ? -FEATURE_ARROW_HLEN : FEATURE_ARROW_HLEN;
-
-    QPolygon arr;
-    arr << QPoint(x - dx, rect.top()    - FEATURE_ARROW_VLEN);
-    arr << QPoint(x + dx, rect.top()    + rect.height() / 2);
-    arr << QPoint(x - dx, rect.bottom() + FEATURE_ARROW_VLEN);
-    arr << QPoint(x - dx, rect.top()    - FEATURE_ARROW_VLEN);
-    QPainterPath arrowPath;
-    arrowPath.addPolygon(arr);
-
-    QPainterPath dRectPath;
-    dRectPath.addRect(leftArrow ? x : x - (FEATURE_ARROW_HLEN - 1), rect.top(), FEATURE_ARROW_HLEN, rect.height());
-
-    path = path.subtracted(dRectPath);
-    path = path.united(arrowPath);
+bool GSequenceLineViewAnnotatedRenderArea::isPosOnAnnotationYRange(const QPoint &p, Annotation *a, int region, const AnnotationSettings *as) const {
+    return getAnnotationYRange(a, region, as).contains(p.y());
 }
 
 GSequenceLineViewAnnotated * GSequenceLineViewAnnotatedRenderArea::getGSequenceLineViewAnnotated() const {
     return static_cast<GSequenceLineViewAnnotated *>(view);
 }
 
-void GSequenceLineViewAnnotatedRenderArea::drawAnnotation(QPainter &p, DrawAnnotationPass pass, Annotation *a, const QPen &borderPen,
-    bool selected, const AnnotationSettings *as, U2Region predefinedy, bool ignoreVisibleRange)
-{
-    const SharedAnnotationData &aData = a->getData();
-    if (NULL == as) {
-        AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-        as = asr->getAnnotationSettings(aData);
-    }
-    if (!as->visible && (DrawAnnotationPass_DrawFill == pass || !selected)) {
-        return;
-    }
-    const GSequenceLineViewAnnotated::DrawSettings &drawSettings = getGSequenceLineViewAnnotated()->getDrawSettings();
-    const U2Region &vr = view->getVisibleRange();
-
-    QVector<U2Region> location = aData->getRegions();
-    bool simple = location.size() == 1;
-    for (int ri = 0, ln = location.size(); ri < ln; ri++) {
-        const U2Region &r = location.at(ri);
-        if (( !r.intersects(vr) || predefinedy.startPos < 0) && !ignoreVisibleRange) {
-            continue;
-        }
-        const U2Region visibleLocation = ignoreVisibleRange ? r : r.intersect(vr);
-        const U2Region y = predefinedy.isEmpty() ? getAnnotationYRange(a, ri, as) : predefinedy;
-        if (y.startPos < 0) {
-            continue;
-        }
-        const float x1f = posToCoordF(visibleLocation.startPos, ignoreVisibleRange);
-        const float x2f = posToCoordF(visibleLocation.endPos(), ignoreVisibleRange);
-        assert(x2f >= x1f);
-
-        const int rw = qMax(selected ? MIN_SELECTED_ANNOTATION_WIDTH : MIN_ANNOTATION_WIDTH,
-            qRound(x2f - x1f));
-        const int x1 = qRound(x1f);
-
-        const QRect annotationRect(x1, y.startPos, rw, y.length);
-        QPainterPath rectPath;
-        rectPath.addRect(x1, y.startPos, rw, y.length);
-        const bool leftTrim  = visibleLocation.startPos != r.startPos;
-        const bool rightTrim = visibleLocation.endPos() != r.endPos();
-        const bool drawArrow = aData->getStrand().isCompementary() ? !leftTrim : !rightTrim;
-        if (drawSettings.drawAnnotationArrows && drawArrow) {
-            bool isLeft = false;
-            if (1 == ri && aData->findFirstQualifierValue("rpt_type") == "inverted") { //temporary solution for drawing inverted repeats correct
-                isLeft = true;
-            } else {
-                isLeft = aData->getStrand().isCompementary();
-            }
-            addArrowPath(rectPath, annotationRect, isLeft);
-        }
-
-        if (DrawAnnotationPass_DrawFill == pass) {
-            rectPath.setFillRule(Qt::WindingFill);
-            p.fillPath(rectPath, as->color);
-            p.fillPath(rectPath, gradientMaskBrush);
-        } else {
-            SAFE_POINT(pass == DrawAnnotationPass_DrawBorder, "Invalid annotation painter!",);
-            p.setPen(borderPen);
-            if (rw > MIN_ANNOTATION_WIDTH) {
-                p.drawPath(rectPath);
-                if (drawSettings.drawAnnotationNames
-                    && annotationRect.width() >= MIN_ANNOTATION_TEXT_WIDTH)
-                {
-                    const QString aText = GSequenceLineViewAnnotated::prepareAnnotationText(aData, as);
-                    drawBoundedText(p, annotationRect, aText);
-                }
-                if (simple && annotationRect.width() > MIN_WIDTH_TO_DRAW_EXTRA_FEATURES) {
-                    if (drawSettings.drawCutSites) {
-                        const QString cutStr = aData->findFirstQualifierValue(GBFeatureUtils::QUALIFIER_CUT);
-                        bool hasD = false;
-                        bool hasC = false;
-                        int cutD = 0;
-                        int cutC = 0;
-                        if (!cutStr.isEmpty()) {
-                            int complSplit = cutStr.indexOf('/');
-                            if (-1 != complSplit) {
-                                cutD = cutStr.left(complSplit).toInt(&hasD);
-                                cutC = cutStr.mid(qMin(cutStr.length(), complSplit + 1))
-                                    .toInt(&hasC);
-                            } else {
-                                cutD = cutStr.toInt(&hasD);
-                                cutC = cutD;
-                                hasC = hasD;
-                            }
-                        }
-
-                        U2Region cutSiteY = aData->getStrand().isDirect() ? getMirroredYRange(U2Strand(U2Strand::Complementary))
-                            : getMirroredYRange(U2Strand(U2Strand::Direct));
-                        QRect mirroredAnnotationRect = annotationRect;
-                        mirroredAnnotationRect.setY(cutSiteY.startPos);
-                        mirroredAnnotationRect.setHeight(cutSiteY.length);
-                        CutSiteDrawData toInsert;
-                        toInsert.color = as->color;
-                        if (hasD) {
-                            toInsert.direct = true;
-                            toInsert.pos = aData->getStrand().isDirect() ? r.startPos + cutD
-                                : r.startPos + cutC;
-                            aData->getStrand().isDirect() ? toInsert.r = annotationRect : toInsert.r = mirroredAnnotationRect;
-                            cutsiteDataList.append(toInsert);
-                        }
-                        if (hasC) {
-                            toInsert.direct = false;
-                            toInsert.pos = aData->getStrand().isDirect() ? r.endPos() - cutC : r.endPos() - cutD;
-                            aData->getStrand().isCompementary() ? toInsert.r = annotationRect : toInsert.r = mirroredAnnotationRect;
-                            cutsiteDataList.append(toInsert);
-                        }
-                    }
-                }
-            }
-            drawAnnotationConnections(p, a, as, predefinedy.isEmpty() ? U2Region() : predefinedy);
-        }
-    }
-}
-
-void GSequenceLineViewAnnotatedRenderArea::drawCutSites(QPainter &p) {
-    foreach (const CutSiteDrawData &data, cutsiteDataList) {
-        drawCutSite(p, data.r, data.color, data.pos, data.direct);
-    }
-    cutsiteDataList.clear();
-}
-
-void GSequenceLineViewAnnotatedRenderArea::drawAnnotationsSelection(QPainter &p) {
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
-
-    QPen pen1(Qt::SolidLine);
-    pen1.setWidth(1);
-
-    QPen pen2(Qt::SolidLine);
-    pen2.setWidth(2);
-
-    const AnnotationSelection *annSelection = ctx->getAnnotationsSelection();
-    foreach (const AnnotationSelectionData &asd, annSelection->getSelection()) {
-        AnnotationTableObject *o = asd.annotation->getGObject();
-        if (ctx->getAnnotationObjects(true).contains(o)) {
-            if (annotationsCanOverlap) {
-                drawAnnotation(p, DrawAnnotationPass_DrawFill, asd.annotation, pen1, true);
-            }
-            drawAnnotation(p, DrawAnnotationPass_DrawBorder, asd.annotation, pen2, true);
-        }
-    }
-}
-
-void GSequenceLineViewAnnotatedRenderArea::drawBoundedText(QPainter &p, const QRect &r, const QString &text) const {
-    if (afSmallCharWidth > r.width()) {
-        return;
-    }
-    const QFont *font = afNormal;
-    const QFontMetrics* fm = afmNormal;
-    if (fm->width(text) > r.width()) {
-        font = afSmall;
-        fm = afmSmall;
-    }
-    p.setFont(*font);
-
-    const int len = text.length();
-    int textWidth = 0;
-    int prefixLen = 0;
-    do {
-        int cw = fm->width(text[prefixLen]);
-        if (textWidth + cw > r.width()) {
-            break;
-        }
-        textWidth += cw;
-    } while (++prefixLen < len);
-
-    if (0 == prefixLen) {
-        return;
-    }
-    p.drawText(r, Qt::TextSingleLine | Qt::AlignCenter, text.left(prefixLen));
-}
-
-void GSequenceLineViewAnnotatedRenderArea::drawCutSite(QPainter& p, const QRect& rect, const QColor& color, int pos, bool direct) {
-    int xCenter = posToCoord(pos, true);
-
-    int xLeft = xCenter - CUT_SITE_HALF_WIDTH;
-    int xRight= xCenter + CUT_SITE_HALF_WIDTH;
-    int yFlat = (direct ? rect.top() - CUT_SITE_HALF_HEIGHT : rect.bottom() + CUT_SITE_HALF_HEIGHT) - getHalfOfUnusedHeight();
-    int yPeak = (direct ? rect.top() + CUT_SITE_HALF_HEIGHT : rect.bottom() - CUT_SITE_HALF_HEIGHT) - getHalfOfUnusedHeight();
-
-    QPolygon triangle;
-    triangle << QPoint(xLeft, yFlat) << QPoint(xCenter, yPeak) << QPoint(xRight,yFlat) << QPoint(xLeft,yFlat);
-
-    QPainterPath path;
-    path.addPolygon(triangle);
-
-    p.fillPath(path,color);
-    p.drawPath(path);
-
-}
-
-void GSequenceLineViewAnnotatedRenderArea::drawAnnotationConnections(QPainter &p, Annotation *a, const AnnotationSettings *as, U2Region yRange) {
-    const SharedAnnotationData &aData = a->getData();
-    if (aData->location->isSingleRegion()) {
-        return;
-    }
-
-    const GSequenceLineViewAnnotated *sequenceLineView = getGSequenceLineViewAnnotated();
-    const U2SequenceObject *seqObject = sequenceLineView->getSequenceObject();
-    SAFE_POINT(NULL != seqObject, "Invalid sequence object occured!",);
-    const qint64 seqLength = seqObject->getSequenceLength();
-    U2Region sRange(0, seqLength);
-    if (U1AnnotationUtils::isSplitted(aData->location, sRange)) {
-        return;
-    }
-
-    const GSequenceLineViewAnnotated::DrawSettings &drawSettings = sequenceLineView->getDrawSettings();
-    const U2Region &visibleRange = view->getVisibleRange();
-    int dx1 = 0;
-    int dx2 = 0;
-    if (drawSettings.drawAnnotationArrows) {
-        if (aData->getStrand().isCompementary()) {
-            dx2 = - FEATURE_ARROW_HLEN;
-        } else {
-            dx1 = FEATURE_ARROW_HLEN;
-        }
-    }
-    QVector<U2Region> location = aData->getRegions();
-    for (int ri = 0, ln = location.size(); ri < ln; ri++) {
-        const U2Region &r = location.at(ri);
-        if (ri > 0) {
-            U2Region prev = location.at(ri - 1);
-            const int prevPos = prev.endPos();
-            const int pos = r.startPos;
-            const int min = qMin(prevPos, pos);
-            const int max = qMax(prevPos, pos);
-            if (visibleRange.intersects(U2Region(min, max - min))) {
-                int x1 = posToCoord(prevPos, true) + dx1;
-                int x2 = posToCoord(pos, true) + dx2;
-                if (qAbs(x2 - x1) > 1) {
-                    x1 = qBound(-MAX_VIRTUAL_RANGE, x1, MAX_VIRTUAL_RANGE); //qt4.4 crashes in line clipping alg for extremely large X values
-                    x2 = qBound(-MAX_VIRTUAL_RANGE, x2, MAX_VIRTUAL_RANGE);
-                    const int midX = (x1 + x2) / 2;
-                    const U2Region pyr = yRange.isEmpty() ? getAnnotationYRange(a, ri - 1, as) : yRange;
-                    const U2Region yr = yRange.isEmpty() ? getAnnotationYRange(a, ri, as) : yRange;
-                    const int y1 = pyr.startPos;
-                    const int dy1 = pyr.length / 2;
-                    const int y2 = yr.startPos;
-                    const int dy2 = yr.length / 2;
-                    const int midY = qMin(y1, y2);
-                    p.drawLine(x1, y1 + dy1, midX, midY);
-                    p.drawLine(midX, midY, x2, y2 + dy2);
-                }
-            }
-        }
-    }
-}
-
 void GSequenceLineViewAnnotated::registerAnnotations(const QList<Annotation *> &) {
 
 }
@@ -751,14 +448,14 @@ void GSequenceLineViewAnnotated::sl_onAnnotationsModified(const AnnotationModifi
         update();
     }
 }
-bool GSequenceLineViewAnnotatedRenderArea::isAnnotationSelectionInVisibleRange() const {
-    const QSet<AnnotationTableObject*> aos = view->getSequenceContext()->getAnnotationObjects(true);
-    AnnotationSelection* as = view->getSequenceContext()->getAnnotationsSelection();
+bool GSequenceLineViewAnnotated::isAnnotationSelectionInVisibleRange() const {
+    const QSet<AnnotationTableObject*> aos = ctx->getAnnotationObjects(true);
+    AnnotationSelection* as = ctx->getAnnotationsSelection();
     foreach(const AnnotationSelectionData& asd, as->getSelection()) {
         if (!aos.contains(asd.annotation->getGObject())) {
             continue;
         }
-        if (getGSequenceLineViewAnnotated()->isAnnotationVisible(asd.annotation)) {
+        if (isAnnotationVisible(asd.annotation)) {
             return true;
         }
     }
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
index 5192785..3432e4d 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
@@ -39,25 +39,19 @@ class ClearAnnotationsTask;
 class U2VIEW_EXPORT GSequenceLineViewAnnotated : public GSequenceLineView {
     Q_OBJECT
 public:
-    class DrawSettings {
-    public:
-                DrawSettings();
-
-        bool    drawAnnotationNames;
-        bool    drawAnnotationArrows;
-        bool    drawCutSites;
-    };
 
                                             GSequenceLineViewAnnotated(QWidget *p, ADVSequenceObjectContext *ctx);
 
     bool                                    isAnnotationVisible(Annotation *a) const;
-    const DrawSettings &                    getDrawSettings() const;
 
     virtual QList<AnnotationSelectionData>  selectAnnotationByCoord(const QPoint &coord) const;
 
     static QString                          prepareAnnotationText(const SharedAnnotationData &a, const AnnotationSettings *as);
 
-    QList<Annotation *>                       findAnnotationsInRange(const U2Region &range) const;
+    QList<Annotation *>                     findAnnotationsInRange(const U2Region &range) const;
+
+    bool                                    isAnnotationSelectionInVisibleRange() const;
+
 
 protected:
     void                                    mousePressEvent(QMouseEvent *e);
@@ -85,51 +79,30 @@ private:
     void                                    connectAnnotationObject(const AnnotationTableObject *ao);
 
 protected:
-    DrawSettings    drawSettings;
-
     friend class ClearAnnotationsTask;
 };
 
-
 class U2VIEW_EXPORT GSequenceLineViewAnnotatedRenderArea : public GSequenceLineViewRenderArea {
 public:
                                     GSequenceLineViewAnnotatedRenderArea(GSequenceLineViewAnnotated *d, bool annotationsCanOverlap);
                                     ~GSequenceLineViewAnnotatedRenderArea();
 
+    //! VIEW_RENDERER_REFACTORING: only the second method should be available, because it is more common
     virtual U2Region                getAnnotationYRange(Annotation *a, int region, const AnnotationSettings *as) const = 0;
-    virtual U2Region                getMirroredYRange(const U2Strand &mirroredStrand) const = 0;
-    virtual int                     getHalfOfUnusedHeight() const {return 0;}
+    virtual bool                    isPosOnAnnotationYRange(const QPoint& p, Annotation *a, int region, const AnnotationSettings* as) const;
+
     GSequenceLineViewAnnotated *    getGSequenceLineViewAnnotated() const;
 
 protected:
-    struct CutSiteDrawData {
-        CutSiteDrawData():direct(true), pos(0){}
-        QRect r;
-        QColor color;
-        bool direct;
-        int pos;
-    };
-
-    virtual void                    drawAnnotations(QPainter &p);
-    virtual void                    drawBoundedText(QPainter &p, const QRect &r, const QString &text) const;
-    virtual void                    drawAnnotationConnections(QPainter &p, Annotation *a, const AnnotationSettings *as, U2Region yRange);
-    virtual void                    drawAnnotationsSelection(QPainter &p);
-    void                            drawCutSites(QPainter &p);
-    virtual void                    drawCutSite(QPainter &p, const QRect &r, const QColor &color, int pos, bool direct);
-
-    bool                            isAnnotationSelectionInVisibleRange() const;
+    virtual void drawAll(QPaintDevice* pd) = 0;
 
+    //! VIEW_RENDERER_REFACTORING: should be removed, currenlty is used in CircularView
     enum DrawAnnotationPass {
         DrawAnnotationPass_DrawFill,
         DrawAnnotationPass_DrawBorder
     };
 
-    void                            drawAnnotation(QPainter &p, DrawAnnotationPass pass, Annotation *a, const QPen &borderPen,
-                                        bool selected = false, const AnnotationSettings *as = NULL, U2Region y = U2Region(),
-                                                   bool ignoreVisibleRange = false);
-
-    bool annotationsCanOverlap;
-
+    //! VIEW_RENDERER_REFACTORING: this parameters are also doubled in SequenceViewAnnotaterRenderer
     //af* == annotation font
     QFont *afNormal;
     QFont *afSmall;
@@ -141,7 +114,6 @@ protected:
     int afSmallCharWidth;
 
     QBrush gradientMaskBrush;
-    QList<CutSiteDrawData>  cutsiteDataList;
 };
 
 class ClearAnnotationsTask : public Task {
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
index 110b25e..ed8ea85 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, "16126657");
+    new HelpButton(this, buttonBox, "17466055");
 
     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 c615ab5..0dd5102 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, "16126659");
+    new HelpButton(this, buttonBox, "17466057");
 
     connect(cancelButton, SIGNAL(clicked()), SLOT(sl_onCancelClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_onOkClicked()));
@@ -106,6 +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->exec();
     CHECK(!CD.isNull(), );
 
diff --git a/src/corelibs/U2View/src/ov_sequence/Overview.cpp b/src/corelibs/U2View/src/ov_sequence/Overview.cpp
index a2feca9..98a6215 100644
--- a/src/corelibs/U2View/src/ov_sequence/Overview.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/Overview.cpp
@@ -228,15 +228,14 @@ void Overview::mouseMoveEvent(QMouseEvent *me) {
 
     if (me->buttons() & Qt::LeftButton) {
         qint64 pos = renderArea->coordToPos(renderAreaPos.x() - mousePosToSlider.x());
-        if(lastPressPos!=-1) {//make selection
+        if (lastPressPos != -1) {//make selection
             U2Region selection;
             qint64 mousePos = renderArea->coordToPos(renderAreaPos.x());
             qint64 selLen = mousePos-lastPressPos;
-            if(selLen>0) {
+            if (selLen > 0) {
                 selection.startPos=lastPressPos;
                 selection.length=selLen;
-            }
-            else {
+            } else {
                 selection.startPos=mousePos;
                 selection.length=-selLen;
             }
@@ -247,7 +246,7 @@ void Overview::mouseMoveEvent(QMouseEvent *me) {
 
         if (panView->isVisible()) {
             qint64 seqLen = ctx->getSequenceLength();
-            if(panSliderMovedRight) {
+            if (panSliderMovedRight) {
                 OverviewRenderArea* ra = static_cast<OverviewRenderArea*>(renderArea);
 
                 QRectF panSlider(ra->getPanSlider());
@@ -262,7 +261,7 @@ void Overview::mouseMoveEvent(QMouseEvent *me) {
                 if(panVisLen > 0 && seqLen >= (panVisLen + pos)) {
                     panView->setVisibleRange(U2Region(pos, panVisLen));
                 }
-            } else if(panSliderMovedLeft) {
+            } else if (panSliderMovedLeft) {
                 OverviewRenderArea* ra = static_cast<OverviewRenderArea*>(renderArea);
 
                 QRectF panSlider(ra->getPanSlider());
@@ -277,16 +276,14 @@ void Overview::mouseMoveEvent(QMouseEvent *me) {
                 if(panVisLen > 0 && pos > 0 && (panVisLen + pos) <= seqLen) {
                     panView->setVisibleRange(U2Region(pos, panVisLen));
                 }
-            } else if(panSliderClicked) {
+            } else if (panSliderClicked) {
                 qint64 panVisLen = panView->getVisibleRange().length;
                 pos = qBound(qint64(0), qint64(pos), seqLen - panVisLen);
                 panView->setVisibleRange(U2Region(pos, panVisLen));
             }
         }
         if (detSliderClicked) {
-            qint64 detVisLen = detView->getVisibleRange().length;
-            pos = qBound(qint64(0), qint64(pos), seqLen - detVisLen);
-            detView->setVisibleRange(U2Region(pos, detVisLen));
+            detView->setStartPos(pos);
         }
     }
     QWidget::mouseMoveEvent(me);
@@ -306,14 +303,12 @@ void Overview::mouseDoubleClickEvent(QMouseEvent* me) {
 
         //don't process detSlider when details view is collapsed
         if(!seqWidget->isDetViewCollapsed()) {
-            qint64 detVisLen = detView->getVisibleRange().length;
             qint64 detPos = ra->coordToPos(renderAreaPos.x());
-            detPos = qBound(qint64(0), qint64(detPos), seqLen - detVisLen);
-            detView->setVisibleRange(U2Region(detPos, detVisLen));
+            detView->setStartPos(detPos);
         }
 
-        panSliderClicked=false;
-        detSliderClicked=false;
+        panSliderClicked = false;
+        detSliderClicked = false;
         panSliderMovedRight = false;
         panSliderMovedLeft = false;
     }
diff --git a/src/corelibs/U2View/src/ov_sequence/PanView.cpp b/src/corelibs/U2View/src/ov_sequence/PanView.cpp
index 5813106..f56ba38 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/PanView.cpp
@@ -24,6 +24,7 @@
 #include "ADVSequenceObjectContext.h"
 #include "ADVSingleSequenceWidget.h"
 #include "PanViewRows.h"
+#include "view_rendering/PanViewRenderer.h"
 
 #include <U2Core/AnnotationModification.h>
 #include <U2Core/AnnotationSettings.h>
@@ -41,24 +42,61 @@
 #include <U2Gui/GraphUtils.h>
 #include <U2Gui/GScrollBar.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QFontMetrics>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QTextEdit>
-#include <QtGui/QGridLayout>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QGridLayout>
-#endif
+#include <QDialog>
+#include <QFontMetrics>
+#include <QGridLayout>
+#include <QPainter>
+#include <QTextEdit>
 
 
 namespace U2 {
 
-#define RULER_NOTCH_SIZE 2
-#define MAX_VISIBLE_ROWS 20
-#define MAX_VISIBLE_ROWS_ON_START 10
+PanViewLinesSettings::PanViewLinesSettings()
+    : numLines(0),
+      rowLinesOffset(0),
+      showMainRuler(true),
+      showCustomRulers(true) {
+}
+
+int PanViewLinesSettings::getRowLine(int i) const {
+    int line = getFirstRowLine() - i + rowLinesOffset;
+    if (line < 0 || line > getFirstRowLine()) {
+        return -1;
+    }
+    return line;
+}
+
+int PanViewLinesSettings::getSelectionLine() const {
+    return numLines - 1;
+}
+
+int PanViewLinesSettings::getRulerLine() const {
+    SAFE_POINT(showMainRuler, "Trying to get ruler line, but it's not visible", -1);
+    return numLines - 2;
+}
+
+int PanViewLinesSettings::getCustomRulerLine(int n) const {
+    SAFE_POINT(showCustomRulers, "Trying to get custom ruler line, but it's not visible", -1);
+    SAFE_POINT(n >= 0 && n < customRulers.count(), "Invalid number of custom ruler", -1);
+
+    return numLines - (showMainRuler ? 3 : 2) - n;
+}
+
+int PanViewLinesSettings::getFirstRowLine() const {
+    return numLines - 2 - (showMainRuler ? 1 : 0) - (showCustomRulers ? customRulers.count() : 0 );
+}
+
+int PanViewLinesSettings::getAdditionalLines() const {
+    return 1 + (showMainRuler ? 1 : 0) + (showCustomRulers ? customRulers.size() : 0);
+}
+
+int PanViewLinesSettings::getNumVisibleRows() const {
+    return getFirstRowLine() + 1;
+}
+
+bool PanViewLinesSettings::isRowVisible(int row) const {
+    return getRowLine(row) >= 0;
+}
 
 PanView::ZoomUseObject::ZoomUseObject()
 : usingZoom(false), panView(NULL) {}
@@ -102,16 +140,19 @@ void PanView::ZoomUseObject::releaseZoom() {
     panView->releaseZoom();
 }
 
-
+#define MAX_VISIBLE_ROWS_ON_START 10
 PanView::PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx)
     : GSequenceLineViewAnnotated(p, ctx),
     seqWidget(p)
 {
     rowBar = new QScrollBar(this);
 
+    settings = new PanViewLinesSettings();
     rowsManager = new PVRowsManager();
     renderArea = new PanViewRenderArea(this);
 
+    updateNumVisibleRows();
+
     visibleRange.length = seqLen;
     minNuclsPerScreen = qMin(seqLen, qint64(0));
 
@@ -136,14 +177,14 @@ PanView::PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx)
     toggleMainRulerAction = new QAction(tr("Show Main Ruler"), this);
     toggleMainRulerAction->setObjectName("Show Main Ruler");
     toggleMainRulerAction->setCheckable(true);
-    toggleMainRulerAction->setChecked(getRenderArea()->showMainRuler);
+    toggleMainRulerAction->setChecked(settings->showMainRuler);
     connect(toggleMainRulerAction, SIGNAL(triggered(bool)), SLOT(sl_toggleMainRulerVisibility(bool)));
 
     toggleCustomRulersAction = new QAction(tr("Show Custom Rulers"), this);
     toggleCustomRulersAction->setObjectName("Show Custom Rulers");
     toggleCustomRulersAction->setCheckable(true);
-    toggleCustomRulersAction->setChecked(getRenderArea()->showCustomRulers);
-    toggleCustomRulersAction->setEnabled(!getRenderArea()->customRulers.isEmpty());
+    toggleCustomRulersAction->setChecked(settings->showCustomRulers);
+    toggleCustomRulersAction->setEnabled(!settings->customRulers.isEmpty());
     connect(toggleCustomRulersAction, SIGNAL(triggered(bool)), SLOT(sl_toggleCustomRulersVisibility(bool)));
 
     addActionToLocalToolbar(zoomInAction);
@@ -151,9 +192,6 @@ PanView::PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx)
     addActionToLocalToolbar(zoomToSelectionAction);
     addActionToLocalToolbar(zoomToSequenceAction);
 
-    drawSettings.drawAnnotationArrows = true;
-    drawSettings.drawAnnotationNames = true;
-    drawSettings.drawCutSites = false;
     syncOffset = 0;
 
     //can't move to the GSequenceLineViewAnnotated -> virtual calls does not work in  constructor
@@ -166,7 +204,9 @@ PanView::PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx)
     updateActions();
     updateRowBar();
 
-    resize(width(), getRenderArea()->setNumVisibleRows(MAX_VISIBLE_ROWS_ON_START));
+    settings->numLines = qMin(MAX_VISIBLE_ROWS_ON_START, rowsManager->getNumRows() + settings->getAdditionalLines());
+
+    resize(width(), getRenderArea()->getRowLineHeight() * settings->numLines );
 
     pack();
 }
@@ -211,7 +251,7 @@ void PanView::unregisterAnnotations(const QList<Annotation *> &l) {
 void PanView::updateRows() {
     PanViewRenderArea* ra = getRenderArea();
     SAFE_POINT(ra != NULL, "PanViewRenderArea is NULL", );
-    ra->updateNumVisibleRows();
+    /*ra->*/updateNumVisibleRows();
     int maxSteps = calculateNumRowBarSteps();
     if (qAbs(rowBar->maximum() - rowBar->minimum())!=maxSteps) {
         updateRowBar();
@@ -220,35 +260,43 @@ void PanView::updateRows() {
 }
 
 int  PanView::calculateNumRowBarSteps() const {
-    PanViewRenderArea* ra = getRenderArea();
-    int visibleRows = ra->getNumVisibleRows();
+    int visibleRows = settings->getNumVisibleRows();
     int numRows = rowsManager->getNumRows();
     int res = qMax(0, numRows - visibleRows);
     return res;
 }
 
+void PanView::setNumVisibleRows(int rowNum) {
+    settings->numLines = qMin( rowNum, rowsManager->getNumRows() + settings->getAdditionalLines());
+
+    addUpdateFlags(GSLV_UF_ViewResized);
+    update();
+}
+
+void PanView::updateNumVisibleRows() {
+    setNumVisibleRows( renderArea->height() / getRenderArea()->getRowLineHeight() );
+}
+
 void PanView::updateRowBar() {
     rowBar->disconnect(this);
 
-    PanViewRenderArea* ra = getRenderArea();
-    int visibleRows = ra->getNumVisibleRows();
+    int visibleRows = settings->getNumVisibleRows();
     int maxSteps = calculateNumRowBarSteps();
 
     rowBar->setMinimum(-maxSteps); //inverted appearance
     rowBar->setMaximum(0);
     rowBar->setSingleStep(1);
     rowBar->setPageStep(visibleRows - 1);
-    int rowsOffset = qMin(maxSteps, ra->getRowLinesOffset());
-    ra->setRowLinesOffset(rowsOffset);
-    rowBar->setSliderPosition(-rowsOffset);
+    int rowsOffset = qMin(maxSteps, settings->rowLinesOffset);
+    settings->rowLinesOffset = rowsOffset;
+    rowBar->setSliderPosition( - rowsOffset);
     rowBar->setEnabled(maxSteps > 0);
 
     connect(rowBar, SIGNAL(valueChanged(int)), SLOT(sl_onRowBarMoved(int)));
 }
 
 void PanView::sl_onRowBarMoved(int v) {
-    PanViewRenderArea* ra = getRenderArea();
-    ra->setRowLinesOffset(-v); // '-' because of inverted appearance
+    settings->rowLinesOffset = - v; // '-' because of inverted appearance
     addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
     update();
 }
@@ -414,8 +462,7 @@ void PanView::ensureVisible(Annotation *a, int locationIdx) {
     const AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
     if (as->visible) {
         const int row = rowsManager->getAnnotationRowIdx(a);
-        const PanViewRenderArea *pr = getRenderArea();
-        if (!pr->isRowVisible(row)) {
+        if (!settings->isRowVisible(row)) {
             centerRow(row);
         }
     }
@@ -423,9 +470,8 @@ void PanView::ensureVisible(Annotation *a, int locationIdx) {
 }
 
 void PanView::centerRow(int row) {
-    PanViewRenderArea* pr = getRenderArea();
-    int targetFirstRowLine = qMax(0, row - pr->getNumVisibleRows() / 2);
-    int rowOnTheFirstLine = pr->getRowLinesOffset();
+    int targetFirstRowLine = qMax(0, row - settings->getNumVisibleRows() / 2);
+    int rowOnTheFirstLine = settings->rowLinesOffset;
     if (targetFirstRowLine == rowOnTheFirstLine) {
         return;
     }
@@ -453,13 +499,12 @@ PanViewRenderArea* PanView::getRenderArea() const {
 }
 
 QList<RulerInfo> PanView::getCustomRulers() const {
-    return getRenderArea()->customRulers;
+    return settings->customRulers;
 }
 
 void PanView::addCustomRuler(const RulerInfo& r) {
-    PanViewRenderArea* ra = getRenderArea();
-    ra->customRulers.append(r);
-    if (ra->showCustomRulers) {
+    settings->customRulers.append(r);
+    if (settings->showCustomRulers) {
         addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
         update();
     }
@@ -467,15 +512,14 @@ void PanView::addCustomRuler(const RulerInfo& r) {
 }
 
 void PanView::removeCustomRuler(const QString& name) {
-    PanViewRenderArea* ra = getRenderArea();
-    for (int i=0, n = ra->customRulers.count(); i < n; i++) {
-        if (ra->customRulers[i].name == name) {
-            ra->customRulers.removeAt(i);
+    for (int i=0, n = settings->customRulers.count(); i < n; i++) {
+        if (settings->customRulers[i].name == name) {
+            settings->customRulers.removeAt(i);
             break;
         }
     }
-    toggleCustomRulersAction->setEnabled(!ra->customRulers.isEmpty());
-    if (ra->showCustomRulers) {
+    toggleCustomRulersAction->setEnabled(!settings->customRulers.isEmpty());
+    if (settings->showCustomRulers) {
         addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
         update();
     }
@@ -483,8 +527,8 @@ void PanView::removeCustomRuler(const QString& name) {
 
 void PanView::removeAllCustomRulers() {
     toggleCustomRulersAction->setEnabled(false);
-    if (!getRenderArea()->customRulers.isEmpty()) {
-        getRenderArea()->customRulers.clear();
+    if (!settings->customRulers.isEmpty()) {
+        settings->customRulers.clear();
 
         addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
         update();
@@ -492,14 +536,14 @@ void PanView::removeAllCustomRulers() {
 }
 
 void PanView::sl_toggleMainRulerVisibility(bool visible) {
-    getRenderArea()->showMainRuler = visible;
+    settings->showMainRuler = visible;
 
     addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
     update();
 }
 
 void PanView::sl_toggleCustomRulersVisibility(bool visible) {
-    getRenderArea()->showCustomRulers = visible;
+    settings->showCustomRulers = visible;
 
     addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
     update();
@@ -518,11 +562,11 @@ void PanView::setSyncOffset(int o) {
 void PanView::sl_sequenceChanged(){
     seqLen = ctx->getSequenceLength();
     U2Region curSource(0, ctx->getSequenceLength()), newRange(0,0);
-    if(!curSource.contains(visibleRange)){
+    if (!curSource.contains(visibleRange)) {
         if (curSource.length > visibleRange.length){
             newRange.startPos = visibleRange.startPos - (visibleRange.endPos() - curSource.endPos());
             newRange.length = visibleRange.length;
-        }else{
+        } else {
             newRange = curSource;
         }
         setVisibleRange(newRange);
@@ -551,155 +595,11 @@ void PanView::sl_updateRows(){
 //////////////////////////////////////////////////////////////////////////
 /// render
 PanViewRenderArea::PanViewRenderArea(PanView* d) : GSequenceLineViewAnnotatedRenderArea(d, false), panView(d) {
-    showMainRuler = true;
-    showCustomRulers = true;
-    fromActions = false;
-    numLines = 0;
-
-    rowLinesOffset = 0;
-    updateNumVisibleRows();
-}
-
-#define LINE_TEXT_OFFSET 10
-void PanViewRenderArea::drawAll(QPainter &p, const U2Region &visibleRange) {
-//    This awful method is used for ZoomView image export.
-//    Some code is doubled because of the PanView dependence on the visible region.
-//    TODO: refactor it!
-    GraphUtils::RulerConfig c;
-
-    float halfChar = getCurrentScale() / 2;
-    int firstCharCenter = qRound(posToCoordF(visibleRange.startPos, true) + halfChar);
-    int lastCharCenter = qRound(posToCoordF(visibleRange.endPos() - 1, true) + halfChar);
-
-    int firstLastWidth = lastCharCenter - firstCharCenter;
-    if (qRound(halfChar) == 0) {
-        firstLastWidth--; // make the end of the ruler visible
-    }
-    int w = lastCharCenter - firstCharCenter + 2 * halfChar + 5;
-
-    PVRowsManager *rm = getPanView()->getRowsManager();
-    SAFE_POINT(rm != NULL, "PVRowsManager is NULL", );
-    int annotationRowsNum = rm->getNumRows();
-    int rulerRowsNum = customRulers.size() + 1; // 1 - main ruler
-
-    int h = lineHeight * (rm->getNumRows() + showCustomRulers * customRulers.size() + showMainRuler + isSequenceCharsVisible()) + 6; // "6" leaves empty space at the top and the bottom
-
-    c.notchSize = RULER_NOTCH_SIZE;
-    SAFE_POINT(getPanView() != NULL, "PanView is NULL", );
-    U2Region currentVisibleRange = getPanView()->getVisibleRange();
-    int chunk = GraphUtils::calculateChunk(currentVisibleRange.startPos + 1, currentVisibleRange.endPos(), panView->width(), p);
-    foreach(const RulerInfo& ri, customRulers) {
-        chunk = qMax(chunk, GraphUtils::calculateChunk(currentVisibleRange.startPos + 1 - ri.offset,
-                                                       currentVisibleRange.endPos() - ri.offset,
-                                                       panView->width(), p));
-    }
-    c.predefinedChunk = chunk;
-
-    p.fillRect(0, 0, w, h, Qt::white);
-    p.translate(0, 3); // a little empty space at the top
-    p.setPen(Qt::black);
-
-    getPanView()->setVisibleRange(visibleRange, false);
-
-    p.translate( - firstCharCenter + halfChar, 0); // 10 is just an indent
-
-    if (showMainRuler) {
-        GraphUtils::drawRuler(p, QPoint(firstCharCenter, (annotationRowsNum + rulerRowsNum - 1) * lineHeight),
-                              firstLastWidth, visibleRange.startPos + 1, visibleRange.endPos(), rulerFont, c);
-    }
-
-    getPanView()->setVisibleRange(currentVisibleRange, false);
-    if (showCustomRulers) {
-        drawCustomRulers(c, p, visibleRange, firstCharCenter, lastCharCenter, w, (annotationRowsNum + rulerRowsNum - 2) * lineHeight, true);
-    }
-
-    // draw annotations START
-    const QPen dotty(Qt::lightGray, 1, Qt::DotLine);
-    p.setPen(dotty);
-    p.setFont(*afSmall);
-
-    //draw row names
-    for (int row = 0; row < annotationRowsNum; row++) {
-        const int lineY = (annotationRowsNum - row - 1) * lineHeight;
-        p.drawLine( firstCharCenter - halfChar, lineY, w, lineY);
-
-        const PVRowData *rData = rm->getRow(row);
-        const QString text = (NULL == rData)
-                ? U2::PanView::tr("empty")
-                : rData->key + " (" + QString::number(rData->annotations.size()) + ")";
-
-        const QRect textRect( firstCharCenter - halfChar + LINE_TEXT_OFFSET, lineY + 1, width(), lineHeight - 2);
-        p.drawText(textRect, text);
-
-        if (NULL != rData) {
-            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-            AnnotationSettings *as = asr->getAnnotationSettings(rData->key);
-            if (as->visible) {
-                QPen pen1(Qt::SolidLine);
-                pen1.setWidth(1);
-                U2Region yr(lineY + 2, lineHeight - 4); //!! recalculate
-                foreach (Annotation *a, rData->annotations) {
-                    QVector<U2Region> regions = a->getRegions();
-                    bool isInRange = false;
-                    foreach (const U2Region& r, regions) {
-                        if (r.intersects(visibleRange)) {
-                            isInRange = true;
-                            break;
-                        }
-                    }
-                    if (isInRange) {
-                        drawAnnotation(p, DrawAnnotationPass_DrawFill, a, pen1, false, as, yr, true);
-                        drawAnnotation(p, DrawAnnotationPass_DrawBorder, a, pen1, false, as, yr, true);
-                    }
-                }
-                //restore pen
-                p.setPen(dotty);
-                p.setFont(*afSmall);
-            }
-        }
-    }
-    const int lineY = annotationRowsNum * lineHeight;
-    p.drawLine( firstCharCenter - halfChar, lineY, w, lineY);
-    // draw annotations END
-
-    // draw sequence
-    if (isSequenceCharsVisible()) {
-        p.setPen(Qt::black);
-        float halfCharByScale = getCurrentScale() / 2;
-        float halfCharByFont = 0.0f;
-        if (getCurrentScale() >= charWidth) {
-            p.setFont(sequenceFont);
-            halfCharByFont = charWidth / 2.0f;
-        } else {
-            p.setFont(smallSequenceFont);
-            halfCharByFont = smallCharWidth / 2.0f;
-        }
-        U2OpStatusImpl os;
-        QByteArray seq = view->getSequenceContext()->getSequenceData(visibleRange, os);
-        SAFE_POINT_OP(os, );
-        int y = (annotationRowsNum + rulerRowsNum + 1) * lineHeight;
-        for (int i = 0; i < visibleRange.length; i++) {
-            char c = seq[i];
-            int x = qRound(posToCoordF(visibleRange.startPos + i, true) + halfCharByScale - halfCharByFont);
-            p.drawText(x, y, QString(c));
-        }
-    }
-
-    view->addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
+    renderer = new PanViewRenderer(d, d->getSequenceContext());
 }
 
-QSize PanViewRenderArea::getImageSize(const U2Region &regionToDraw) const {
-    float halfChar = getCurrentScale() / 2;
-    int firstCharCenter = qRound(posToCoordF(regionToDraw.startPos, true) + halfChar);
-    int lastCharCenter = qRound(posToCoordF(regionToDraw.endPos() - 1, true) + halfChar);
-
-    int firstLastWidth = lastCharCenter - firstCharCenter;
-    if (qRound(halfChar) == 0) {
-        firstLastWidth--; // make the end of the ruler visible
-    }
-
-    PVRowsManager *rm = getPanView()->getRowsManager();
-    return QSize(firstLastWidth + 2 * halfChar + 5, lineHeight * (rm->getNumRows() + showCustomRulers * customRulers.size() + showMainRuler + isSequenceCharsVisible()) + 6 );
+PanViewRenderArea::~PanViewRenderArea() {
+    delete renderer;
 }
 
 void PanViewRenderArea::drawAll(QPaintDevice* pd) {
@@ -709,395 +609,51 @@ void PanViewRenderArea::drawAll(QPaintDevice* pd) {
                           uf.testFlag(GSLV_UF_VisibleRangeChanged) || uf.testFlag(GSLV_UF_AnnotationsChanged);
 
     QPainter p(pd);
-    int hCenter = (pd->height() - numLines * lineHeight) / 2;
     if (completeRedraw) {
         QPainter pCached(cachedView);
-        pCached.fillRect(0, 0, pd->width(), pd->height(), Qt::white);
-        pCached.setPen(Qt::black);
-
-        GraphUtils::RulerConfig c;
-
-        const U2Region& visibleRange = view->getVisibleRange();
-        float halfChar = getCurrentScale() / 2;
-        int firstCharCenter = qRound(posToCoordF(visibleRange.startPos) + halfChar);
-        int lastCharCenter = qRound(posToCoordF(visibleRange.endPos()-1) + halfChar);
-        int firstLastWidth = lastCharCenter - firstCharCenter;
-        if (qRound(halfChar) == 0) {
-            int w = width();
-            assert(firstLastWidth == w); Q_UNUSED(w);
-            firstLastWidth--; // make the end of the ruler visible
-        }
-        c.notchSize = RULER_NOTCH_SIZE;
-        int chunk = GraphUtils::calculateChunk(visibleRange.startPos+1, visibleRange.endPos(), panView->width(), p);
-        foreach(const RulerInfo& ri, customRulers) {
-            chunk = qMax(chunk, GraphUtils::calculateChunk(visibleRange.startPos+1-ri.offset, visibleRange.endPos()-ri.offset, panView->width(), p));
-        }
-        c.predefinedChunk = chunk;
-
-        pCached.translate(0, -hCenter);
-        drawRuler(c, pCached, visibleRange, firstCharCenter, firstLastWidth);
-        drawCustomRulers(c, pCached, visibleRange, firstCharCenter, lastCharCenter, width());
-
-        drawAnnotations(pCached);
-
+        renderer->drawAll(pCached, QSize(pd->width(), pd->height()), view->getVisibleRange());
         pCached.end();
     }
 
     p.drawPixmap(0, 0, *cachedView);
 
-
     ADVSingleSequenceWidget* ssw = panView->seqWidget;
-    assert(ssw);
-    if(!ssw->isOverviewCollapsed()) {
+    SAFE_POINT(ssw != NULL, "ADVSingleSequenceWidget is NULL", );
+    if (!ssw->isOverviewCollapsed()) {
+        //! VIEW_RENDERER_REFACTORING: consider to move frame drawing to renderer
         drawFrame(p);
     }
 
-    p.translate(0, -hCenter);
-    drawSequence(p);
-    drawSequenceSelection(p);
-    p.translate(0, hCenter);
-
-    drawAnnotationsSelection(p);
+    renderer->drawSelection(p, QSize(pd->width(), pd->height()), view->getVisibleRange());
 
     if (view->hasFocus()) {
         drawFocus(p);
     }
 }
-void PanViewRenderArea::drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth){
-    if (!showMainRuler) {
-        return;
-    }
-    int y = getLineY(getRulerLine()) + c.notchSize;
-    GraphUtils::drawRuler(p, QPoint(firstCharCenter, y), firstLastWidth, visibleRange.startPos+1, visibleRange.endPos(), rulerFont, c);
-}
-
 
-void PanViewRenderArea::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
-                                         int firstCharCenter, int lastCharCenter,
-                                         int w, int predefinedY, bool ignoreVisbileRange) {
-    if (!showCustomRulers || customRulers.isEmpty()) {
-        return;
-    }
-    float pixelsPerChar = getCurrentScale();
-    float halfChar =  pixelsPerChar / 2;
-    QFont crf = rulerFont;
-    crf.setBold(true);
-    QFontMetrics fm(crf, this);
-
-    int maxRulerTextWidth = 0;
-    foreach(const RulerInfo& ri, customRulers) {
-        int _w = fm.width(ri.name);
-        maxRulerTextWidth = qMax(maxRulerTextWidth, _w);
-    }
-    for (int i = 0, n = customRulers.count();  i < n; i++) {
-        const RulerInfo& ri = customRulers[i];
-        p.setPen(ri.color);
-        p.setFont(crf);
-        int y = (predefinedY == -1) ? getLineY(getCustomRulerLine(i)) + c.notchSize : predefinedY - i * lineHeight;
-        p.drawText(QRect(ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET, y, maxRulerTextWidth, lineHeight),
-                   ri.name);
-        int rulerStartOffset = maxRulerTextWidth + (ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET);
-        if (rulerStartOffset >= w)  {
-            continue;
-        }
-        qint64 startPos = visibleRange.startPos + 1 - ri.offset;
-        qint64 endPos = visibleRange.endPos() - ri.offset;
-        int x = firstCharCenter;
-
-        if (firstCharCenter <= rulerStartOffset) {
-            int deltaPixels = rulerStartOffset - firstCharCenter;
-            int nChars = qMax(1, qRound(deltaPixels / pixelsPerChar));
-            int deltaPixels2 = nChars * pixelsPerChar;
-            startPos += nChars;
-            x += deltaPixels2;
-        }
-
-        int rulerWidth = lastCharCenter - x;
-        if (qRound(halfChar) == 0) {
-            rulerWidth--; // make the end of the ruler visible
-        }
-
-        int offsetToFirstNotch = c.predefinedChunk - visibleRange.startPos % c.predefinedChunk;
-        qint64 mainRuler = visibleRange.startPos + offsetToFirstNotch;
-        qint64 newStartPos = visibleRange.startPos - ri.offset + offsetToFirstNotch;
-        qint64 lim = startPos + ri.offset;
-        for(; mainRuler < lim; mainRuler += c.predefinedChunk, newStartPos += c.predefinedChunk) ;
-        c.correction = newStartPos;
-
-        GraphUtils::drawRuler(p, QPoint(x, y), rulerWidth, startPos, endPos, rulerFont, c);
-    }
+U2Region PanViewRenderArea::getAnnotationYRange(Annotation *a, int r, const AnnotationSettings *as) const {
+    U2Region region = renderer->getAnnotationYRange(a, r, as, size(), view->getVisibleRange());
+    region.startPos += renderer->getContentIndentY(size(), view->getVisibleRange());
+    return region;
 }
 
-U2Region PanViewRenderArea::getAnnotationYRange(Annotation *a, int, const AnnotationSettings *as) const {
-    if (!as->visible) {
-        return U2Region(-1, 0);
-    }
-    const int row = getPanView()->getRowsManager()->getAnnotationRowIdx(a);
-    const int line = getRowLine(row);
-
-    return U2Region(getLineY(line) + 2 - (height() - numLines * lineHeight) / 2, lineHeight - 4);
-}
-
-void PanViewRenderArea::drawAnnotations(QPainter &p) {
-    GTIMER(c2, t2, "PanViewRenderArea::drawAnnotations");
-    const QPen dotty(Qt::lightGray, 1, Qt::DotLine);
-    p.setPen(dotty);
-    p.setFont(*afSmall);
-    const int cachedViewWidth = cachedView->width();
-
-
-    //draw row names
-    PVRowsManager *rm = getPanView()->getRowsManager();
-    const int maxVisibleRows = getNumVisibleRows();
-    for (int i = 0; i < maxVisibleRows; i++) {
-        const int row = i + rowLinesOffset;
-        const int rowLine = getRowLine(row);
-        const int lineY = getLineY(rowLine);
-        p.drawLine(0, lineY, cachedViewWidth, lineY);
-
-        const PVRowData *rData = rm->getRow(row);
-        const QString text = (NULL == rData)
-            ? U2::PanView::tr("empty")
-            : rData->key + " (" + QString::number(rData->annotations.size()) + ")";
-
-        const QRect textRect(LINE_TEXT_OFFSET, lineY + 1, width(), lineHeight - 2);
-        p.drawText(textRect, text);
-
-        if (NULL != rData) {
-            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-            AnnotationSettings *as = asr->getAnnotationSettings(rData->key);
-            if (as->visible) {
-                QPen pen1(Qt::SolidLine);
-                pen1.setWidth(1);
-                U2Region yr(lineY + 2, lineHeight - 4);
-                foreach (Annotation *a, rData->annotations) {
-                    drawAnnotation(p, DrawAnnotationPass_DrawFill, a, pen1, false, as, yr);
-                    drawAnnotation(p, DrawAnnotationPass_DrawBorder, a, pen1, false, as, yr);
-                }
-                //restore pen
-                p.setPen(dotty);
-                p.setFont(*afSmall);
-            }
-        }
-    }
-
-    const int firstRowLine = getRowLine(0);
-    const int lineY = getLineY(firstRowLine) + lineHeight;
-    p.drawLine(0, lineY, cachedViewWidth, lineY);
+int PanViewRenderArea::getRowLineHeight() const {
+    return renderer->getRowLineHeight();
 }
 
 bool PanViewRenderArea::isSequenceCharsVisible() const {
     return getCurrentScale() >= smallCharWidth;
 }
 
-
-void PanViewRenderArea::drawSequence(QPainter& p) {
-    if (!isSequenceCharsVisible()) {
-        return;
-    }
-    p.setPen(Qt::black);
-    float halfCharByScale = getCurrentScale() / 2;
-    float halfCharByFont = 0.0f;
-    if (getCurrentScale() >= charWidth) {
-        p.setFont(sequenceFont);
-        halfCharByFont = charWidth / 2.0f;
-    } else {
-        p.setFont(smallSequenceFont);
-        halfCharByFont = smallCharWidth / 2.0f;
-    }
-    const U2Region& visibleRange = view->getVisibleRange();
-    U2OpStatusImpl os;
-    QByteArray seq = view->getSequenceContext()->getSequenceData(visibleRange, os);
-    SAFE_POINT_OP(os, );
-    int y = getLineY(getSelectionLine()) + lineHeight - yCharOffset;
-    for (int i = 0; i < visibleRange.length; i++) {
-        char c = seq[i];
-        int x = qRound(posToCoordF(visibleRange.startPos + i, true) + halfCharByScale - halfCharByFont);
-        p.drawText(x, y, QString(c));
-    }
-}
-
 void PanViewRenderArea::resizeEvent(QResizeEvent *e) {
     view->addUpdateFlags(GSLV_UF_ViewResized);
 
-    updateNumVisibleRows();
-
-    SAFE_POINT(getPanView() != NULL, "Panview is NULL", );
-    getPanView()->updateRowBar();
+    PanView* pv = getPanView();
+    SAFE_POINT(pv != NULL, "Panview is NULL", );
+    pv->updateNumVisibleRows();
+    pv->updateRowBar();
 
     QWidget::resizeEvent(e);
 }
 
-#define ARROW_DY 5
-#define ARROW_DX 5
-void PanViewRenderArea::drawSequenceSelection(QPainter& p) {
-    const QVector<U2Region>& selection = panView->getSequenceContext()->getSequenceSelection()->getSelectedRegions();
-    bool showSequenceMode = isSequenceCharsVisible();
-    if (selection.isEmpty()) {
-        return;
-    }
-    const U2Region& visibleRange = view->getVisibleRange();
-    QPen pen1(Qt::darkGray, 1, Qt::SolidLine);
-    QPen pen2(QColor("#007DE3"), 2, Qt::SolidLine);
-    p.setFont(rulerFont);
-    QFontMetrics rfm(rulerFont, this);
-
-    int lineY = getLineY(getSelectionLine());
-    int ly = lineY + lineHeight/2; //ruler line
-
-    bool drawRect = showSequenceMode;
-    bool drawGraphics = true;
-    if (showSequenceMode) {
-        ly = lineY - lineHeight + RULER_NOTCH_SIZE;
-        drawGraphics = ly > 0;
-    }
-    int halfNum = rfm.boundingRect('1').height() / 2;
-    int rty = ly + halfNum;
-
-    const DNAAlphabet* alphabet = panView->getSequenceContext()->getSequenceObject()->getAlphabet();
-    QString unitType;
-    if (alphabet->isAmino()) {
-        unitType = "aa";
-    } else {
-        unitType = "bp";
-    }
-
-    QString rangePattern = " "+tr("[%1 %2]")+" ";
-    foreach(const U2Region& r, selection) {
-        if (!visibleRange.intersects(r)) {
-            continue;
-        }
-        int x1 = qMax(0, posToCoord(r.startPos, true));
-        int x2 = qMin(cachedView->width(), posToCoord(r.endPos(), true));
-
-        p.setPen(pen1);
-        if (visibleRange.contains(r.startPos)) {
-            p.drawLine(x1, 0, x1, ly);
-        }
-        if (visibleRange.contains(r.endPos()-1)) {
-            p.drawLine(x2, 0, x2, ly);
-        }
-
-        if (drawRect) {
-            p.setPen(Qt::black);
-            p.drawRect(x1, lineY+1, x2 - x1, lineHeight-2);
-        }
-
-        if (drawGraphics) {
-            //draw line
-            p.setPen(pen2);
-            p.drawLine(x1, ly, x2, ly);
-            int dArrow = 2 * ARROW_DX;
-
-            QString t1 = QString::number(r.startPos+1);
-            QString t2 = QString::number(r.endPos());
-            int tOffs = ARROW_DX-1;
-            QRect t1Rect = rfm.boundingRect(t1); t1Rect.translate(x1 - t1Rect.width() - tOffs, rty);
-            QRect t2Rect = rfm.boundingRect(t2).translated(x2 + tOffs, rty);
-
-            // define range text coords
-            QString rangeText = rangePattern.arg(r.length).arg(unitType);
-            QRect rtRect = rfm.boundingRect(rangeText);
-            int rulerWidth = x2 - x1;
-            bool rangeTextInTheMiddle = rulerWidth - dArrow > rtRect.width();
-            if (rangeTextInTheMiddle) {
-                int rtx = x1 + (rulerWidth - rtRect.width())/2 + 1;
-                assert(rtx - x1 >= ARROW_DX);
-                rtRect.translate(rtx, rty);
-                p.fillRect(rtRect, Qt::white);
-                p.drawText(rtRect, Qt::AlignCenter, rangeText);
-            }  else if (!rangeTextInTheMiddle) { //if range text is not in the middle glue it to one of the boundary texts
-                QString newT2 = t2 + rangeText;
-                QRect newT2Rect = rfm.boundingRect(newT2).translated(x2 + tOffs, rty);
-                if (newT2Rect.right() < width()) {
-                    t2Rect = newT2Rect;
-                    t2 = newT2;
-                } else {
-                    QString newT1 = rangeText + t1;
-                    QRect newT1Rect = rfm.boundingRect(newT1); newT1Rect.translate(x1 - newT1Rect.width() - tOffs, rty);
-                    if (newT1Rect.left() >=0) {
-                        t1 = newT1;
-                        t1Rect = newT1Rect;
-                    }
-                }
-            }
-
-            //check if regions overlap
-            int interWidth = t2Rect.left() - t1Rect.right();
-            if (interWidth < dArrow) {
-                int deltaW = interWidth > 0 ? dArrow : qAbs(interWidth) + dArrow;
-                if (t1Rect.x() - deltaW > 0) {
-                    t1Rect.translate(-deltaW, 0);
-                } else if (t2Rect.right() + deltaW < width()) {
-                    t2Rect.translate(deltaW, 0);
-                }
-            }
-
-            //draw regions
-            p.fillRect(t1Rect, Qt::white);
-            p.fillRect(t2Rect, Qt::white);
-            p.drawText(t1Rect, Qt::AlignCenter, t1);
-            p.drawText(t2Rect, Qt::AlignCenter, t2);
-
-            //draw arrows (after the text -> can overlap with text rect boundaries)
-            if (visibleRange.contains(r.startPos)) {
-                p.drawLine(x1, ly, x1 + ARROW_DX, ly + ARROW_DY);
-                p.drawLine(x1, ly, x1 + ARROW_DX, ly - ARROW_DY);
-            }
-            if (visibleRange.contains(r.endPos()-1)) {
-                p.drawLine(x2, ly, x2 - ARROW_DX, ly + ARROW_DY);
-                p.drawLine(x2, ly, x2 - ARROW_DX, ly - ARROW_DY);
-            }
-        }
-    }
-}
-
-
-
-int PanViewRenderArea::getRowLine(int i) const {
-    int line = getFirstRowLine() - i + rowLinesOffset;
-    if (line < 0 || line > getFirstRowLine()) {
-        return -1;
-    }
-    return line;
-}
-
-#define MIN_VISIBLE_ROWS  1
-#define EXTRA_EMPTY_ROWS  0
-
-
-void PanViewRenderArea::setRowLinesOffset(int r) {
-    int maxRows = getPanView()->getRowsManager()->getNumRows();
-    int visibleRows = getNumVisibleRows();
-    assert(r <= maxRows - (visibleRows - MIN_VISIBLE_ROWS)) ;
-    Q_UNUSED(maxRows);
-    Q_UNUSED(visibleRows);
-    if (r!=rowLinesOffset) {
-        rowLinesOffset = r;
-        update();
-    }
-}
-
-int PanViewRenderArea::setNumVisibleRows(int rowNum) {
-    numLines = qMin( rowNum, getPanView()->getRowsManager()->getNumRows() + getAdditionalLines());
-
-    view->addUpdateFlags(GSLV_UF_ViewResized);
-    view->update();
-
-    return numLines * lineHeight;
-}
-
-bool PanViewRenderArea::updateNumVisibleRows() {
-    numLines = qMin( height() / lineHeight, getPanView()->getRowsManager()->getNumRows() + getAdditionalLines() );
-
-    view->addUpdateFlags(GSLV_UF_ViewResized);
-    view->update();
-    return true;
-}
-
-bool PanViewRenderArea::isAllLinesShown() {
-    return numLines == (getPanView()->getRowsManager()->getNumRows() + getAdditionalLines());
-}
-
 } //namespace
-
diff --git a/src/corelibs/U2View/src/ov_sequence/PanView.h b/src/corelibs/U2View/src/ov_sequence/PanView.h
index c711e6e..909ab2e 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanView.h
+++ b/src/corelibs/U2View/src/ov_sequence/PanView.h
@@ -22,16 +22,10 @@
 #ifndef _U2_PAN_VIEW_H_
 #define _U2_PAN_VIEW_H_
 
-#include <QtGui/QFont>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QScrollBar>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QAction>
+#include <QFont>
+#include <QScrollBar>
+#include <QToolButton>
 
 #include <U2Core/Annotation.h>
 
@@ -46,6 +40,8 @@ class GScrollBar;
 class GObjectView;
 class PVRowsManager;
 class ADVSingleSequenceWidget;
+class PVRowData;
+class PanViewRenderer;
 
 
 class RulerInfo {
@@ -58,6 +54,31 @@ public:
     QColor  color;
 };
 
+class PanViewLinesSettings {
+public:
+    PanViewLinesSettings();
+
+    int getRowLine(int i) const;
+    int getSelectionLine() const;
+
+    int getRulerLine() const;
+    int getCustomRulerLine(int n) const;
+
+    int getFirstRowLine() const;
+    int getAdditionalLines() const;
+
+    int getNumVisibleRows() const;
+
+    bool isRowVisible(int row) const;
+
+    int                 numLines;       // number of visible lines
+    int                 rowLinesOffset; // row number on the first row line
+
+    bool                showMainRuler;
+    bool                showCustomRulers;
+    QList<RulerInfo>    customRulers;
+};
+
 class U2VIEW_EXPORT PanView : public GSequenceLineViewAnnotated {
     Q_OBJECT
 
@@ -117,6 +138,8 @@ public:
 
     void showEvent(QShowEvent *ev);
 
+    PanViewLinesSettings* getLinesSettings() const {return settings; }
+
 protected:
     virtual int getSingleStep() const {return qMax(1, int(visibleRange.length) / 10);}
     virtual int getPageStep() const {return qMax(1, int(visibleRange.length) / 5);}
@@ -155,6 +178,9 @@ public:
     void centerRow(int row);
     int  calculateNumRowBarSteps() const;
 
+    void setNumVisibleRows(int numRows);
+    void updateNumVisibleRows();
+
     void updateActions();
     void updateRows();
     void updateRowBar();
@@ -178,6 +204,8 @@ public:
     QScrollBar*         rowBar;
     int                 syncOffset; //used by ADVSyncViewManager only
 
+    PanViewLinesSettings*     settings;
+
     int zoomUsing;
 
     ADVSingleSequenceWidget*    seqWidget;
@@ -189,70 +217,26 @@ class PanViewRenderArea : public GSequenceLineViewAnnotatedRenderArea {
     Q_OBJECT
 public:
     PanViewRenderArea(PanView* d);
+    ~PanViewRenderArea();
 
-    bool isRowVisible(int row) const { return getRowLine(row) >= 0; }
-    int getRowLine(int i) const;
-    int getNumVisibleRows() const {return getFirstRowLine() + 1;}
-    int getRowLinesOffset() const {return rowLinesOffset;}
-    void setRowLinesOffset(int r);
+    PanViewRenderer* getRenderer() { return renderer; }
 
     virtual U2Region getAnnotationYRange(Annotation *a, int region, const AnnotationSettings *as) const;
-    virtual U2Region getMirroredYRange( const U2Strand &mirroredStrand) const {Q_UNUSED(mirroredStrand); return U2Region(-1,0);}
-
-    // returns the height
-    int setNumVisibleRows(int rowNum);
-    bool updateNumVisibleRows();
-    bool isAllLinesShown();
 
-    void drawAll(QPainter& p, const U2Region& visibleRange);
-    QSize getImageSize(const U2Region& regionToDraw) const;
+    int getRowLineHeight() const;
 
 protected:
     virtual void drawAll(QPaintDevice* pd);
-    virtual void drawAnnotations(QPainter& p);
-    virtual void drawSequence(QPainter& p);
 
     void resizeEvent(QResizeEvent *e);
 
 private:
-    int getSelectionLine() const {return numLines - 1;}
-
-    int getRulerLine() const {
-        assert(showMainRuler);
-        return numLines - 2;
-    }
-
-    int getCustomRulerLine(int n) const {
-       assert(showCustomRulers);
-       assert(n >= 0 && n < customRulers.count());
-        return numLines - (showMainRuler ? 3 : 2) - n;
-    }
-
-    int getFirstRowLine()const {return numLines - 2 - (showMainRuler ? 1 : 0) - (showCustomRulers ? customRulers.count() : 0 );}
-    int getAdditionalLines() const { return 1 + (showMainRuler ? 1 : 0) + (showCustomRulers ? customRulers.size() : 0); }
-
     bool isSequenceCharsVisible() const;
 
     PanView* getPanView() const {return static_cast<PanView*>(view);}
 
-    int getLineY(int line) const {
-        return cachedView->height() - ((numLines - line) * lineHeight);
-    }
-
-    void drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth);
-    void drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
-                          int firstCharCenter, int lastCharCenter,
-                          int width, int predefinedY = -1, bool ignoreVisbileRange = false);
-    void drawSequenceSelection(QPainter& p);
-
     PanView*            panView;
-    int                 numLines;       // number of visible lines
-    int                 rowLinesOffset; // row number on the first row line
-
-    bool                showMainRuler;
-    bool                showCustomRulers;
-    bool                fromActions;
-    QList<RulerInfo>    customRulers;
+    PanViewRenderer*    renderer;
 };
 
 }//namespace;
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
index 8af6a78..db46294 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, "16126660");
+    new HelpButton(this, buttonBox, "17466058");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
index 390d438..d1b550c 100644
--- a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
@@ -44,7 +44,7 @@ SearchQualifierDialog::SearchQualifierDialog(QWidget* p, AnnotationsTreeView *tr
     indexOfPrevResult(-1)
 {
      ui->setupUi(this);
-     new HelpButton(this, ui->buttonBox, "16126634");
+     new HelpButton(this, ui->buttonBox, "17466032");
      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/annot_highlight/AnnotHighlightTree.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
index 08bd16a..93299fc 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
@@ -163,7 +163,11 @@ void AnnotHighlightTree::sl_onItemClicked(QTreeWidgetItem* item, int column)
 
     AnnotHighlightTreeItem* annotHighlightItem = static_cast<AnnotHighlightTreeItem*>(item);
 
-    QColor annotColor = QColorDialog::getColor(annotHighlightItem->getColor(), this);
+    QColorDialog::ColorDialogOption options = static_cast<QColorDialog::ColorDialogOption>(0);
+    if (qgetenv("UGENE_GUI_TEST") == "1") {
+        options = QColorDialog::DontUseNativeDialog;
+    }
+    QColor annotColor = QColorDialog::getColor(annotHighlightItem->getColor(), this, "", options);
     if (annotColor.isValid()) {
         annotHighlightItem->setColor(annotColor);
         emit si_colorChanged(annotHighlightItem->getName(), annotColor);
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 461badd..f05de64 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 = "16126623";
+const QString AnnotHighlightWidgetFactory::GROUP_DOC_PAGE = "17466021";
 
 AnnotHighlightWidgetFactory::AnnotHighlightWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
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 4729c9c..4ec7cc7 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 = "16126605";
+const QString FindPatternWidgetFactory::GROUP_DOC_PAGE = "17466003";
 
 FindPatternWidgetFactory::FindPatternWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui b/src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui
index 61342b5..6ae6d8f 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui
@@ -268,7 +268,16 @@
       </size>
      </property>
      <layout class="QGridLayout" name="gridLayout_2">
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item row="2" column="0" colspan="2">
@@ -339,15 +348,24 @@
       </size>
      </property>
      <layout class="QGridLayout" name="gridLayout_3">
+      <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>4</number>
       </property>
       <property name="verticalSpacing">
        <number>8</number>
       </property>
-      <property name="margin">
-       <number>0</number>
-      </property>
       <item row="0" column="0">
        <layout class="QGridLayout" name="gridLayout">
         <property name="spacing">
@@ -472,25 +490,9 @@
       <item row="1" column="0">
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <property name="sizeConstraint">
-         <enum>QLayout::SetMinAndMaxSize</enum>
+         <enum>QLayout::SetDefaultConstraint</enum>
         </property>
         <item>
-         <spacer name="horizontalSpacer_5">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::MinimumExpanding</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>0</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
          <widget class="QLineEdit" name="editStart">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -500,7 +502,7 @@
           </property>
           <property name="minimumSize">
            <size>
-            <width>95</width>
+            <width>60</width>
             <height>0</height>
            </size>
           </property>
@@ -535,7 +537,7 @@
           </property>
           <property name="minimumSize">
            <size>
-            <width>95</width>
+            <width>60</width>
             <height>0</height>
            </size>
           </property>
@@ -564,7 +566,16 @@
       <property name="spacing">
        <number>8</number>
       </property>
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item>
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 0c2ac40..1d41d51 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
@@ -21,6 +21,8 @@
 
 
 #include "SequencePainter.h"
+#include "../view_rendering/DetViewRenderer.h"
+#include "../view_rendering/PanViewRenderer.h"
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/U2SafePoints.h>
@@ -81,22 +83,25 @@ bool CurrentViewPainter::canPaintSvg(CustomExportSettings* /*settings*/, U2OpSta
 /************************************************************************/
 /* ZoomedViewPainter */
 /************************************************************************/
+ZoomedViewPainter::ZoomedViewPainter(PanView* panView)
+    : ExportImagePainter(),
+      panView(panView) {
+    PanViewRenderArea* ra = qobject_cast<PanViewRenderArea*>(panView->getRenderArea());
+    panViewRenderer = ra->getRenderer();
+}
+
 void ZoomedViewPainter::paint(QPainter &p, CustomExportSettings* settings) const {
     SequenceExportSettings* s = qobject_cast<SequenceExportSettings*>(settings);
     SAFE_POINT(s != NULL, "Cannot cast CustomExportSettings to SequenceExportSettings", );
 
-    PanViewRenderArea* renderArea = panView->getRenderArea();
-    SAFE_POINT(renderArea != NULL, "RenderArea is NULL", );
-    renderArea->drawAll(p, s->getRegion());
+    panViewRenderer->drawAll(p, s->getRegion());
 }
 
 QSize ZoomedViewPainter::getImageSize(CustomExportSettings* settings) const {
     SequenceExportSettings* s = qobject_cast<SequenceExportSettings*>(settings);
     SAFE_POINT(s != NULL, "Cannot cast CustomExportSettings to SequenceExportSettings", QSize());
 
-    PanViewRenderArea* renderArea = panView->getRenderArea();
-    SAFE_POINT(renderArea != NULL, "RenderArea is NULL", QSize());
-    return renderArea->getImageSize(s->getRegion());
+    return panViewRenderer->getBaseCanvasSize(s->getRegion());
 }
 
 bool ZoomedViewPainter::canPaintSvg(CustomExportSettings *settings, U2OpStatus & /*os*/) const {
@@ -107,23 +112,23 @@ bool ZoomedViewPainter::canPaintSvg(CustomExportSettings *settings, U2OpStatus &
 /************************************************************************/
 /* DetailsViewPainter */
 /************************************************************************/
+DetailsViewPainter::DetailsViewPainter(DetView* detView)
+    : ExportImagePainter() {
+    detViewRenderer = detView->getDetViewRenderArea()->getRenderer();
+
+}
 void DetailsViewPainter::paint(QPainter &p, CustomExportSettings* settings) const {
     SequenceExportSettings* s = qobject_cast<SequenceExportSettings*>(settings);
     SAFE_POINT(s != NULL, "Cannot cast CustomExportSettings to SequenceExportSettings", );
 
-    DetViewRenderArea* renderArea = dynamic_cast<DetViewRenderArea*>(detView->getRenderArea());
-    SAFE_POINT(renderArea != NULL, "RenderArea is NULL", );
-    renderArea->drawAll(p, s->getRegion());
+    detViewRenderer->drawAll(p, detViewRenderer->getBaseCanvasSize(s->getRegion()), s->getRegion());
 }
 
 QSize DetailsViewPainter::getImageSize(CustomExportSettings* settings) const {
     SequenceExportSettings* s = qobject_cast<SequenceExportSettings*>(settings);
     SAFE_POINT(s != NULL, "Cannot cast CustomExportSettings to SequenceExportSettings", QSize());
 
-    DetViewRenderArea* renderArea = dynamic_cast<DetViewRenderArea*>(detView->getRenderArea());
-    SAFE_POINT(renderArea != NULL, "RenderArea is NULL", QSize());
-
-    return QSize(renderArea->getCharWidth() * s->getRegion().length, renderArea->height());
+    return detViewRenderer->getBaseCanvasSize(s->getRegion());
 }
 
 /************************************************************************/
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
index 672e299..53844f1 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
@@ -32,7 +32,9 @@ namespace U2 {
 
 class ADVSingleSequenceWidget;
 class DetView;
+class DetViewRenderer;
 class PanView;
+class PanViewRenderer;
 
 enum SequenceExportType {
     ExportCurrentView,
@@ -82,9 +84,7 @@ private:
 /************************************************************************/
 class ZoomedViewPainter : public ExportImagePainter {
 public:
-    ZoomedViewPainter(PanView* panView)
-        : ExportImagePainter(),
-          panView(panView) {}
+    ZoomedViewPainter(PanView* panView);
 
     void    paint(QPainter &p, CustomExportSettings* settings) const;
     QSize   getImageSize(CustomExportSettings* settings) const;
@@ -92,6 +92,7 @@ public:
 
 private:
     PanView*    panView;
+    PanViewRenderer*    panViewRenderer;
 };
 
 /************************************************************************/
@@ -99,16 +100,14 @@ private:
 /************************************************************************/
 class DetailsViewPainter : public ExportImagePainter {
 public:
-    DetailsViewPainter(DetView* detView)
-        : ExportImagePainter(),
-          detView(detView) {}
+    DetailsViewPainter(DetView* detView);
 
     void    paint(QPainter &p, CustomExportSettings* settings) const;
     QSize   getImageSize(CustomExportSettings* settings) const;
-    bool    canPaintSvg(CustomExportSettings* /*settings*/, U2OpStatus &os) const { return true; }
+    bool    canPaintSvg(CustomExportSettings* /*settings*/, U2OpStatus &/*os*/) const { return true; }
 
 private:
-    DetView*    detView;
+    DetViewRenderer*    detViewRenderer;
 };
 
 /************************************************************************/
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 538fd8d..9116df9 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 = "16126594";
+const QString SequenceInfoFactory::GROUP_DOC_PAGE = "17465992";
 
 SequenceInfoFactory::SequenceInfoFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
new file mode 100644
index 0000000..4d81fb2
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
@@ -0,0 +1,199 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "DetViewMultiLineRenderer.h"
+
+#include "DetViewSingleLineRenderer.h"
+
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/DetView.h>
+
+
+namespace U2 {
+
+/************************************************************************/
+/* DetViewMultiLineRenderer */
+/************************************************************************/
+const int DetViewMultiLineRenderer::INDENT_BETWEEN_LINES = 30;
+DetViewMultiLineRenderer::DetViewMultiLineRenderer(DetView *detView, ADVSequenceObjectContext *ctx)
+    : DetViewRenderer(detView, ctx),
+      extraIndent(0) {
+    singleLinePainter = new DetViewSingleLineRenderer(detView, ctx);
+}
+
+DetViewMultiLineRenderer::~DetViewMultiLineRenderer() {
+    delete singleLinePainter;
+}
+
+qint64 DetViewMultiLineRenderer::coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const {
+    qint64 symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    U2Region firstLineVisibleRange(visibleRange.startPos, symbolsPerLine);
+    qint64 posOnFirstLine = singleLinePainter->coordToPos(p, canvasSize, firstLineVisibleRange);
+    int line = p.y() / getOneLineHeight();
+    return qMin( ctx->getSequenceLength(), posOnFirstLine + line * symbolsPerLine);
+}
+
+float DetViewMultiLineRenderer::posToXCoordF(qint64 p, const QSize &canvasSize, const U2Region &visibleRange) const {
+    CHECK(visibleRange.contains(p), -1);
+
+    qint64 symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    return commonMetrics.charWidth * (p % symbolsPerLine);
+}
+
+U2Region DetViewMultiLineRenderer::getAnnotationYRange(Annotation *a, int r, const AnnotationSettings *as, const QSize& canvasSize, const U2Region& visibleRange) const {
+    if (qgetenv("UGENE_GUI_TEST").toInt() == 1) {
+        U2Region res = singleLinePainter->getAnnotationYRange(a, r, as, QSize(canvasSize.width(), getOneLineHeight()), visibleRange);
+        res.startPos += INDENT_BETWEEN_LINES / 2;
+        return res;
+    }
+    FAIL("The method must never be called", U2Region());
+}
+
+U2Region DetViewMultiLineRenderer::getMirroredYRange(const U2Strand &) const {
+    FAIL("The method must never be called", U2Region());
+}
+
+bool DetViewMultiLineRenderer::isOnTranslationsLine(const QPoint &p, const QSize& canvasSize, const U2Region& visibleRange) const {
+    qint64 symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    U2Region range(visibleRange.startPos, qMin(symbolsPerLine, visibleRange.length));
+    do {
+        if (singleLinePainter->isOnTranslationsLine(p, canvasSize, range)) {
+            return true;
+        }
+        range.startPos += symbolsPerLine;
+    } while (visibleRange.endPos() > range.endPos());
+
+    return false;
+}
+
+bool DetViewMultiLineRenderer::isOnAnnotationLine(const QPoint &p, Annotation *a, int region, const AnnotationSettings *as, const QSize &canvasSize, const U2Region& visibleRange) const {
+    qint64 symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    QSize oneLineMinSize(canvasSize.width(), getMinimumHeight());
+    U2Region yRange = singleLinePainter->getAnnotationYRange(a, region, as, oneLineMinSize,
+                                                            U2Region(visibleRange.startPos, qMin(visibleRange.length, symbolsPerLine)));
+    yRange.startPos += (INDENT_BETWEEN_LINES + extraIndent) / 2;
+    do {
+        if (yRange.contains(p.y())) {
+            return true;
+        }
+        yRange.startPos += getOneLineHeight();
+    } while (canvasSize.height() > yRange.endPos());
+
+    return false;
+}
+
+qint64 DetViewMultiLineRenderer::getMinimumHeight() const {
+    return singleLinePainter->getMinimumHeight();
+}
+
+qint64 DetViewMultiLineRenderer::getOneLineHeight() const {
+    return singleLinePainter->getOneLineHeight() + INDENT_BETWEEN_LINES + extraIndent;
+}
+
+qint64 DetViewMultiLineRenderer::getLinesCount(const QSize& canvasSize) const {
+    return canvasSize.height() / getOneLineHeight();
+}
+
+qint64 DetViewMultiLineRenderer::getContentIndentY(const QSize& , const U2Region& ) const {
+    return 0;
+}
+
+int DetViewMultiLineRenderer::getRowsInLineCount() const {
+    return singleLinePainter->getRowsInLineCount() + 2;
+}
+
+QSize DetViewMultiLineRenderer::getBaseCanvasSize(const U2Region &visibleRange) const {
+    int defaultW = detView->getRenderArea()->width();
+    int lineCount = visibleRange.length / getSymbolsPerLine(defaultW);
+    if (visibleRange.length % getSymbolsPerLine(defaultW)) {
+        lineCount++;
+    }
+    defaultW = qMin(defaultW, (int)(getCurrentScale() * visibleRange.length));
+    return QSize(defaultW, (getOneLineHeight() - extraIndent) * lineCount);
+}
+
+void DetViewMultiLineRenderer::drawAll(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+
+    int symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    U2Region oneLineRegion(visibleRange.startPos, symbolsPerLine);
+    p.fillRect(QRect(QPoint(0, 0), canvasSize), Qt::white);
+
+    // wide the indent between lines if neccessary
+    extraIndent = 0;
+    int sequenceLinesCount = visibleRange.length / symbolsPerLine + 1;
+    if (ctx->getSequenceLength() == visibleRange.length) {
+        int fullContentH = getOneLineHeight() * sequenceLinesCount;
+        if (canvasSize.height() > fullContentH && detView->getShift() == 0) {
+            extraIndent = (canvasSize.height() - fullContentH) / sequenceLinesCount;
+        }
+    }
+
+    int indentCounter = 0;
+    do {
+        // cut the extra space at the end of the sequence
+        oneLineRegion.length = qMin(visibleRange.endPos() - oneLineRegion.startPos, oneLineRegion.length);
+
+        singleLinePainter->drawAll(p,
+                                   QSize(canvasSize.width(), getOneLineHeight()),
+                                   oneLineRegion);
+
+        p.translate(0, getOneLineHeight());
+        indentCounter += getOneLineHeight();
+
+        oneLineRegion.startPos += symbolsPerLine;
+
+    } while (oneLineRegion.startPos < visibleRange.endPos());
+
+    // move painter back to [0, 0] position
+    p.translate(0, - indentCounter);
+}
+
+void DetViewMultiLineRenderer::drawSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    int symbolsPerLine = getSymbolsPerLine(canvasSize.width());
+    U2Region oneLineRegion(visibleRange.startPos, symbolsPerLine);
+
+    int indentCounter = 0;
+    do {
+        // cut the extra space at the end of the sequence
+        oneLineRegion.length = qMin(visibleRange.endPos() - oneLineRegion.startPos, oneLineRegion.length);
+
+        singleLinePainter->drawSelection(p,
+                                   QSize(canvasSize.width(), getOneLineHeight()),
+                                   oneLineRegion);
+
+        p.translate(0, getOneLineHeight());
+        indentCounter += getOneLineHeight();
+
+        oneLineRegion.startPos += symbolsPerLine;
+
+    } while (oneLineRegion.startPos < visibleRange.endPos());
+
+    // move painter back to [0, 0] position
+    p.translate(0, - indentCounter);
+}
+
+void DetViewMultiLineRenderer::update() {
+    singleLinePainter->update();
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h
new file mode 100644
index 0000000..faf57cb
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h
@@ -0,0 +1,72 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_DET_VIEW_MULTI_LINE_RENDERER_H_
+#define _U2_DET_VIEW_MULTI_LINE_RENDERER_H_
+
+#include "DetViewRenderer.h"
+
+namespace U2 {
+
+class DetViewSingleLineRenderer;
+
+/************************************************************************/
+/* DetViewMultiLineRenderer */
+/************************************************************************/
+class DetViewMultiLineRenderer: public DetViewRenderer {
+public:
+    DetViewMultiLineRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+    ~DetViewMultiLineRenderer();
+
+    qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
+    float posToXCoordF(qint64 p, const QSize& canvasSize, const U2Region& visibleRange) const;
+
+    U2Region getAnnotationYRange(Annotation *a, int r, const AnnotationSettings* as, const QSize& canvasSize, const U2Region& visibleRange) const;
+    U2Region getMirroredYRange(const U2Strand &mStrand) const;
+
+    qint64 getMinimumHeight() const;
+    qint64 getOneLineHeight() const;
+    qint64 getLinesCount(const QSize& canvasSize) const;
+    qint64 getContentIndentY(const QSize& canvasSize, const U2Region& visibleRange) const;
+
+    int getRowsInLineCount() const;
+
+    QSize getBaseCanvasSize(const U2Region &visibleRange) const;
+
+    bool isOnTranslationsLine(const QPoint &p, const QSize& canvasSize, const U2Region& visibleRange) const;
+    bool isOnAnnotationLine(const QPoint& p, Annotation*a, int region, const AnnotationSettings *as, const QSize &canvasSize, const U2Region& visibleRange) const;
+
+    void drawAll(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange);
+    void drawSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange);
+
+    void update();
+
+private:
+    DetViewSingleLineRenderer*    singleLinePainter;
+
+    int extraIndent;
+
+    static const int INDENT_BETWEEN_LINES;
+};
+
+} // namespace
+
+#endif // _U2_DET_VIEW_MULTI_LINE_RENDERER_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
similarity index 52%
copy from src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
copy to src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
index 9e706b9..89a8f83 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
@@ -19,31 +19,36 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
+#include "DetViewRenderer.h"
+#include "DetViewSingleLineRenderer.h"
+#include "DetViewMultiLineRenderer.h"
+
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/DetView.h>
 
-#include "GTUtilsEscClicker.h"
 
 namespace U2 {
 
-GTUtilsEscClicker::GTUtilsEscClicker( U2OpStatus &_os, const QString &menuObjectName, bool _mouse )
-    : Filler( _os, GUIDialogWaiter::WaitSettings( menuObjectName, GUIDialogWaiter::Popup ) ),
-    mouse( _mouse )
-{
+DetViewRenderer::DetViewRenderer(DetView* detView, ADVSequenceObjectContext* ctx)
+    : SequenceViewAnnotatedRenderer(ctx),
+      detView(detView)   {
+
+}
+
+double DetViewRenderer::getCurrentScale() const {
+    return commonMetrics.charWidth;
+}
 
+qint64 DetViewRenderer::getSymbolsPerLine(const qint64 width) const {
+    return width / commonMetrics.charWidth;
 }
 
-void GTUtilsEscClicker::run( )
-{
-    GTGlobals::sleep( 1000 );
-    if ( mouse ) {
-        QPoint p = GTMouseDriver::getMousePosition( );
-        p.setX( p.x( ) - 50 );
-        GTMouseDriver::moveTo( os, p );
-        GTMouseDriver::click( os );
+DetViewRenderer* DetViewRendererFactory::createRenderer(DetView *detView, ADVSequenceObjectContext *ctx, bool multiLine) {
+    if (multiLine) {
+        return new DetViewMultiLineRenderer(detView, ctx);
     } else {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+        return new DetViewSingleLineRenderer(detView, ctx);
     }
 }
 
-} // namespace U2
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h
new file mode 100644
index 0000000..50e97be
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h
@@ -0,0 +1,68 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_DET_VIEW_RENDERER_H_
+#define _U2_DET_VIEW_RENDERER_H_
+
+#include "SequenceViewAnnotatedRenderer.h"
+
+
+namespace U2 {
+
+class ADVSequenceObjectContext;
+class DetView;
+
+/************************************************************************/
+/* DetViewRenderer */
+/************************************************************************/
+class DetViewRenderer : public SequenceViewAnnotatedRenderer {
+public:
+    DetViewRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+    virtual ~DetViewRenderer() {}
+
+    double getCurrentScale() const;
+    qint64 getSymbolsPerLine(const qint64 width) const;
+
+    virtual int getRowsInLineCount() const = 0;
+
+    virtual bool isOnTranslationsLine(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+    virtual bool isOnAnnotationLine(const QPoint& p, Annotation*a, int region, const AnnotationSettings *as, const QSize &canvasSize, const U2Region& visibleRange) const = 0;
+
+    virtual qint64 getOneLineHeight() const = 0;
+    virtual qint64 getLinesCount(const QSize& canvasSize) const = 0;
+
+    virtual void update() = 0;
+
+protected:
+    DetView*                    detView;
+};
+
+/************************************************************************/
+/* DetViewRendererFactory */
+/************************************************************************/
+class DetViewRendererFactory {
+public:
+    static DetViewRenderer* createRenderer(DetView* detView, ADVSequenceObjectContext* ctx, bool multiLine = false);
+};
+
+} // namespace
+
+#endif // _U2_DET_VIEW_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp
new file mode 100644
index 0000000..81ff735
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp
@@ -0,0 +1,636 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "DetViewSingleLineRenderer.h"
+
+#include <U2Core/AnnotationSettings.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/DNATranslationImpl.h>
+#include <U2Core/TextUtils.h>
+#include <U2Core/U1AnnotationUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Gui/GraphUtils.h>
+
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/DetView.h>
+
+namespace U2 {
+
+/************************************************************************/
+/* DetViewSingleLineRenderer */
+/************************************************************************/
+DetViewSingleLineRenderer::TranslationMetrics::TranslationMetrics() {
+    minUsedPos = -1;
+    maxUsedPos = -1;
+}
+
+DetViewSingleLineRenderer::TranslationMetrics::TranslationMetrics(DetView* detView,
+                                       const U2Region& visibleRange,
+                                       const QFont& commonSequenceFont) {
+    visibleRows = detView->getSequenceContext()->getTranslationRowsVisibleStatus();
+
+    minUsedPos = qMax(visibleRange.startPos - 1, qint64(0));
+    maxUsedPos = qMin(visibleRange.endPos() + 1, detView->getSequenceLength());
+
+    seqBlockRegion = U2Region(minUsedPos, maxUsedPos - minUsedPos);
+
+    startC = QColor(0,0x99,0);
+    stopC = QColor(0x99,0,0);
+
+    fontB = commonSequenceFont;
+    fontB.setBold(true);
+    fontI = commonSequenceFont;
+    fontI.setItalic(true);
+
+    sequenceFontSmall = commonSequenceFont;
+    sequenceFontSmall.setPointSize(commonSequenceFont.pointSize()-1);
+    fontBS = sequenceFontSmall;
+    fontBS.setBold(true);
+    fontIS = sequenceFontSmall;
+    fontIS.setItalic(true);
+}
+
+DetViewSingleLineRenderer::DetViewSingleLineRenderer(DetView *detView, ADVSequenceObjectContext *ctx)
+    : DetViewRenderer(detView, ctx) {
+
+}
+
+qint64 DetViewSingleLineRenderer::coordToPos(const QPoint &p, const QSize &/*canvasSize*/, const U2Region &visibleRange) const {
+    return qMin(visibleRange.startPos + p.x() / commonMetrics.charWidth, visibleRange.endPos());
+}
+
+U2Region DetViewSingleLineRenderer::getAnnotationYRange(Annotation *a, int region, const AnnotationSettings* as, const QSize& /*canvasSize*/, const U2Region& /*visibleRange*/) const {
+    const SharedAnnotationData &aData = a->getData();
+    const U2Strand strand = aData->getStrand();
+    const bool complement = strand.isCompementary() && detView->hasComplementaryStrand();
+    const TriState aminoState = as->amino ? TriState_Yes : TriState_No;
+
+    const bool transl = detView->hasTranslations() && (aminoState == TriState_Yes);
+    const int frame = U1AnnotationUtils::getRegionFrame(detView->getSequenceLength(), strand, aData->isOrder(), region, aData->getRegions());
+
+    int line = -1;
+    if (complement) {
+        if (transl) {
+            line = getVisibleComplTransLine(frame);
+            line = (-1 == line) ? complementLine : line;
+        } else {
+            line = complementLine;
+        }
+    } else {
+        if (transl) {
+            line = getVisibleDirectTransLine(frame);
+            line = (-1 == line) ? directLine : line;
+        } else {
+            line = directLine;
+        }
+    }
+    SAFE_POINT(-1 != line, "Unable to calculate annotation vertical position!", U2Region());
+    int y = getLineY(line);
+
+    return U2Region(y, commonMetrics.lineHeight);
+}
+
+U2Region DetViewSingleLineRenderer::getMirroredYRange(const U2Strand &mirroredStrand) const {
+    int line = mirroredStrand.isDirect() ? directLine : complementLine;
+    line = (line == -1) ? directLine : line;
+    int y = getLineY(line);
+    return U2Region(y, commonMetrics.lineHeight);
+}
+
+qint64 DetViewSingleLineRenderer::getMinimumHeight() const {
+    // 9: translations x6 + direct + complement + ruler
+    // 5: indent??
+    return 9 * commonMetrics.lineHeight + 5;
+}
+
+qint64 DetViewSingleLineRenderer::getOneLineHeight() const {
+    return numLines * commonMetrics.lineHeight + 5;
+}
+
+qint64 DetViewSingleLineRenderer::getLinesCount(const QSize& /*canvasSize*/) const {
+    return 1;
+}
+
+qint64 DetViewSingleLineRenderer::getContentIndentY(const QSize& canvasSize, const U2Region& /*visibleRange*/) const {
+   return (canvasSize.height() - getOneLineHeight()) / 2;
+}
+
+int DetViewSingleLineRenderer::getRowsInLineCount() const {
+    return numLines;
+}
+
+QSize DetViewSingleLineRenderer::getBaseCanvasSize(const U2Region &visibleRange) const {
+    return QSize(visibleRange.length * commonMetrics.charWidth, getMinimumHeight());
+}
+
+bool DetViewSingleLineRenderer::isOnTranslationsLine(const QPoint &p, const QSize& /*canvasSize*/, const U2Region& /*visibleRange*/) const {
+    int y = p.y();
+    if (firstDirectTransLine != -1) {
+        U2Region dtr(getLineY(firstDirectTransLine), 3 * commonMetrics.lineHeight);
+        if (dtr.contains(y)) {
+            return true;
+        }
+    }
+    if (firstComplTransLine != -1) {
+        U2Region ctr(getLineY(firstComplTransLine), 3 * commonMetrics.lineHeight);
+        if (ctr.contains(y)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+bool DetViewSingleLineRenderer::isOnAnnotationLine(const QPoint &p, Annotation *a, int region, const AnnotationSettings *as, const QSize &canvasSize, const U2Region& visibleRange) const {
+    U2Region r = getAnnotationYRange(a, region, as, canvasSize, visibleRange);
+    r.startPos += getContentIndentY(canvasSize, visibleRange);
+    return r.contains(p.y());
+}
+
+void DetViewSingleLineRenderer::drawAll(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    p.fillRect(QRect(QPoint(0, 0), canvasSize), Qt::white);
+    p.setPen(Qt::black);
+
+    qint64 hCenter = getContentIndentY(canvasSize, visibleRange);
+    p.translate(0, hCenter);
+
+    updateLines();
+
+    AnnotationDisplaySettings displaySettins;
+    displaySettins.displayAnnotationArrows = false;
+    displaySettins.displayAnnotationNames = false;
+    drawAnnotations(p, canvasSize, visibleRange, displaySettins);
+    drawDirect(p, visibleRange);
+    drawComplement(p, visibleRange);
+    drawTranslations(p, visibleRange);
+    drawRuler(p, canvasSize, visibleRange);
+
+    p.translate(0, - hCenter);
+}
+
+void DetViewSingleLineRenderer::drawSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    p.setPen(Qt::black);
+
+    qint64 hCenter = (canvasSize.height() - getOneLineHeight()) / 2;
+    p.translate(0, hCenter);
+
+    updateLines();
+
+    AnnotationDisplaySettings displaySettins;
+    displaySettins.displayAnnotationArrows = false;
+    displaySettins.displayAnnotationNames = false;
+    drawAnnotationSelection(p, canvasSize, visibleRange, displaySettins);
+
+    bool hasAnnotationesSelectedInVisibleRange = detView->isAnnotationSelectionInVisibleRange();
+    if (hasAnnotationesSelectedInVisibleRange) {
+        drawDirect(p, visibleRange);
+        drawComplement(p, visibleRange);
+        drawTranslations(p, visibleRange);
+    }
+
+    drawSequenceSelection(p, canvasSize, visibleRange);
+
+    p.translate(0, -hCenter);
+}
+
+void DetViewSingleLineRenderer::update() {
+    updateLines();
+}
+
+void DetViewSingleLineRenderer::drawDirect(QPainter &p, const U2Region &visibleRange) {
+    p.setFont(commonMetrics.sequenceFont);
+    p.setPen(Qt::black);
+
+    U2OpStatusImpl os;
+    QByteArray sequence = ctx->getSequenceData(visibleRange, os);
+    SAFE_POINT_OP(os, );
+    const char* seq = sequence.constData();
+
+    // draw base line;
+    int y = getTextY(directLine);
+    for(int i = 0; i < visibleRange.length; i++) {
+        char nucl = seq[i];
+        p.drawText(i * commonMetrics.charWidth + commonMetrics.xCharOffset, y, QString(nucl));
+    }
+}
+
+void DetViewSingleLineRenderer::drawComplement(QPainter &p, const U2Region &visibleRange) {
+    p.setFont(commonMetrics.sequenceFont);
+    p.setPen(Qt::black);
+
+    if (complementLine > 0) {
+        U2OpStatusImpl os;
+        QByteArray visibleSequence = ctx->getSequenceData(visibleRange, os);
+        SAFE_POINT_OP(os, );
+        const char* seq = visibleSequence.constData();
+
+        DNATranslation* complTrans = ctx->getComplementTT();
+        CHECK(complTrans != NULL, );
+        QByteArray map = complTrans->getOne2OneMapper();
+        int y = getTextY(complementLine);
+        for(int i = 0; i < visibleRange.length; i++) {
+            char nucl = seq[i];
+            char complNucl = map.at(nucl);
+            p.drawText(i * commonMetrics.charWidth + commonMetrics.xCharOffset, y, QString(complNucl));
+        }
+    }
+}
+
+static QByteArray translate(DNATranslation* t, const char* seq, qint64 seqLen) {
+    QByteArray res(seqLen / 3, 0);
+    t->translate(seq, seqLen, res.data(), seqLen / 3);
+    return res;
+}
+
+static int correctLine(QVector<bool> visibleRows, int line) {
+    int retLine = line;
+    SAFE_POINT(visibleRows.size() == 6, "Count of translation rows is not equel to 6", -1);
+    for(int i = 0; i < line; i++){
+        if (!visibleRows[i + 3]){
+            retLine--;
+        }
+    }
+    return retLine;
+}
+
+void DetViewSingleLineRenderer::drawTranslations(QPainter &p, const U2Region &visibleRange) {
+    CHECK(!(firstDirectTransLine < 0 && firstComplTransLine < 0), );
+    p.setFont(commonMetrics.sequenceFont);
+    // update translations metrics
+    trMetrics = TranslationMetrics(detView, visibleRange, commonMetrics.sequenceFont);
+
+    U2OpStatusImpl os;
+    QByteArray seqBlockData = ctx->getSequenceData(trMetrics.seqBlockRegion, os);
+    SAFE_POINT_OP(os, );
+    const char* seqBlock = seqBlockData.constData();
+
+    QList<SharedAnnotationData> annotationsInRange;
+    foreach (Annotation *a, detView->findAnnotationsInRange(visibleRange)) {
+        annotationsInRange << a->getData();
+    }
+
+    drawDirectTranslations(p, visibleRange, seqBlock, annotationsInRange);
+
+    if (detView->hasComplementaryStrand()) {//reverse translations
+        drawComplementTransltations(p, visibleRange, seqBlock, annotationsInRange);
+    }
+
+    p.setPen(Qt::black);
+    p.setFont(commonMetrics.sequenceFont);
+}
+
+void DetViewSingleLineRenderer::drawDirectTranslations(QPainter& p,
+                                                      const U2Region &visibleRange,
+                                                      const char* seqBlock,
+                                                      const QList<SharedAnnotationData>& annotationsInRange) {
+    for(int i = 0; i < 3; i++) {
+        int indent = (visibleRange.startPos + i) % 3;
+        qint64 seqStartPos = visibleRange.startPos + indent - 3;
+        if (seqStartPos < trMetrics.minUsedPos) {
+            seqStartPos += 3;
+        }
+        int line = seqStartPos % 3; // 0,1,2
+        if (trMetrics.visibleRows[line] == true){
+            const char* seq  = seqBlock + (seqStartPos - trMetrics.minUsedPos);
+            QByteArray amino = translate(detView->getAminoTT(), seq, trMetrics.maxUsedPos - seqStartPos);
+
+            int yOffset = 0;
+            for (int k = 0; k < line; k++){
+                yOffset += (trMetrics.visibleRows[k]== true ? 0 : 1);
+            }
+            int y = getTextY(firstDirectTransLine + line - yOffset);
+            int dx = seqStartPos - visibleRange.startPos; // -1, 0, 1, 2 (if startPos == 0)
+            for (int j = 0, n = amino.length(); j < n ; j++, seq += 3) {
+                char amin = amino[j];
+                int xpos = 3 * j + 1 + dx;
+                SAFE_POINT(xpos >= 0 && xpos < visibleRange.length, "X-Position is out of visible range", );
+                int x =  xpos * commonMetrics.charWidth + commonMetrics.xCharOffset;
+
+                QColor charColor;
+                bool inAnnotation = deriveTranslationCharColor(seq - seqBlock  + trMetrics.seqBlockRegion.startPos,
+                                                               U2Strand::Direct,
+                                                               annotationsInRange,
+                                                               charColor);
+
+                setFontAndPenForTranslation(seq, charColor, inAnnotation, p);
+                p.drawText(x, y, QString(amin));
+            }
+        }
+    }
+}
+
+void DetViewSingleLineRenderer::drawComplementTransltations(QPainter& p,
+                                                           const U2Region &visibleRange,
+                                                           const char* seqBlock,
+                                                           const QList<SharedAnnotationData>& annotationsInRange) {
+    DNATranslation* complTable = ctx->getComplementTT();
+    SAFE_POINT(complTable != NULL, "Complement translation table is NULL", );
+
+    QByteArray revComplDna(trMetrics.seqBlockRegion.length, 0);
+    complTable->translate(seqBlock, trMetrics.seqBlockRegion.length, revComplDna.data(), trMetrics.seqBlockRegion.length);
+    TextUtils::reverse(revComplDna.data(), revComplDna.size());
+    int complLine = 0;
+    for (int i = 0; i < 3; i++) {
+        int indent = (detView->getSequenceLength() - visibleRange.endPos() + i) % 3;
+        qint64 revComplStartPos = visibleRange.endPos() - indent + 3; // start of the reverse complement sequence in direct coords
+        if (revComplStartPos > trMetrics.maxUsedPos) {
+            revComplStartPos -= 3;
+        }
+        qint64 revComplDnaOffset = trMetrics.maxUsedPos - revComplStartPos;
+        SAFE_POINT(revComplDnaOffset >= 0, "Complement translations offset is negative", );
+        const char* revComplData = revComplDna.constData();
+        const char* seq = revComplData + revComplDnaOffset;
+        qint64 seqLen = revComplStartPos - trMetrics.minUsedPos;
+        QByteArray amino = translate(detView->getAminoTT(), seq, seqLen);
+        complLine = (detView->getSequenceLength() - revComplStartPos) % 3;
+        if (trMetrics.visibleRows[complLine + 3] == true){
+            complLine = correctLine(trMetrics.visibleRows, complLine);
+            int y = getTextY(firstComplTransLine + complLine);
+            int dx = visibleRange.endPos() - revComplStartPos;
+            for(int j = 0, n = amino.length(); j < n ; j++, seq += 3) {
+                char amin = amino[j];
+                int xpos = visibleRange.length - (3 * j + 2 + dx);
+                SAFE_POINT(xpos >= 0 && xpos < visibleRange.length, "Position is out of visible range", );
+                int x =  xpos * commonMetrics.charWidth + commonMetrics.xCharOffset;
+
+                QColor charColor;
+                bool inAnnotation = deriveTranslationCharColor(trMetrics.maxUsedPos - (seq - revComplDna.constData()),
+                    U2Strand::Complementary, annotationsInRange, charColor);
+
+                setFontAndPenForTranslation(seq, charColor, inAnnotation, p);
+
+                p.drawText(x, y, QString(amin));
+            }
+        }
+    }
+
+}
+
+void DetViewSingleLineRenderer::drawRuler(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    int y = getLineY(rulerLine) + 2;
+    int firstCharStart = posToXCoord(visibleRange.startPos, canvasSize, visibleRange);
+    int lastCharStart = posToXCoord(visibleRange.endPos() - 1, canvasSize, visibleRange);
+    int firstCharCenter = firstCharStart + commonMetrics.charWidth / 2;
+    int firstLastLen = lastCharStart - firstCharStart;
+    GraphUtils::RulerConfig c;
+    GraphUtils::drawRuler(p, QPoint(firstCharCenter, y), firstLastLen, visibleRange.startPos + 1, visibleRange.endPos(), commonMetrics.rulerFont, c);
+}
+
+void DetViewSingleLineRenderer::drawSequenceSelection(QPainter &p, const QSize &canvasSize, const U2Region& visibleRange) {
+    DNASequenceSelection* sel = ctx->getSequenceSelection();
+    CHECK(!sel->isEmpty(), );
+
+    QPen pen1(Qt::black, 1, Qt::DashLine);
+    p.setPen(pen1);
+
+    foreach(const U2Region& reg, sel->getSelectedRegions()) {
+        U2Region r = reg.intersect(visibleRange);
+        highlight(p, r, directLine, canvasSize, visibleRange);
+        if (detView->hasComplementaryStrand()) {
+            highlight(p, r, complementLine, canvasSize, visibleRange);
+        }
+        if (detView->hasTranslations()) {
+            int translLine = posToDirectTransLine(reg.startPos);
+            if (translLine >= 0 && r.length >= 3) {
+                int translLen = reg.endPos() > r.endPos() ? r.length : r.length / 3 * 3;
+                highlight(p, U2Region(r.startPos, translLen), translLine, canvasSize, visibleRange);
+            }
+            if (detView->hasComplementaryStrand()) {
+                int complTransLine = posToComplTransLine(reg.endPos());
+                if (complTransLine >= 0 && r.length >= 3) {
+                    const qint64 translLen = reg.startPos < r.startPos ? r.length : r.length / 3 * 3;
+                    highlight(p, U2Region(r.endPos() - translLen, translLen), complTransLine, canvasSize, visibleRange);
+                }
+            }
+        }
+    }
+}
+
+int DetViewSingleLineRenderer::getLineY(int line) const {
+    return 2 + line * commonMetrics.lineHeight;
+}
+
+int DetViewSingleLineRenderer::getTextY(int line) const {
+    return getLineY(line) + commonMetrics.lineHeight - commonMetrics.yCharOffset;
+}
+
+int DetViewSingleLineRenderer::getVisibleDirectTransLine(int absoluteFrameNumber) const {
+    int lineNumber = firstDirectTransLine + absoluteFrameNumber;
+
+    const QVector<bool> rowsVisibility = ctx->getTranslationRowsVisibleStatus();
+    const int halfRowsCount = rowsVisibility.size() / 2;
+    SAFE_POINT(absoluteFrameNumber < halfRowsCount, "Unexpected translation line number", -1);
+    if (!rowsVisibility[absoluteFrameNumber]) {
+        return -1;
+    } else {
+        for (int i = 0; i < absoluteFrameNumber; ++i) {
+            if (!rowsVisibility[i]) {
+                --lineNumber;
+            }
+        }
+        return lineNumber;
+    }
+}
+
+int DetViewSingleLineRenderer::getVisibleComplTransLine(int absoluteFrameNumber) const {
+    int lineNumber = firstComplTransLine + absoluteFrameNumber;
+
+    const QVector<bool> rowsVisibility = ctx->getTranslationRowsVisibleStatus();
+    const int halfRowsCount = rowsVisibility.size() / 2;
+    SAFE_POINT(absoluteFrameNumber < halfRowsCount, "Unexpected translation line number", -1);
+    if (!rowsVisibility[halfRowsCount + absoluteFrameNumber]) {
+        return -1;
+    } else {
+        for (int i = halfRowsCount; i < halfRowsCount + absoluteFrameNumber; ++i) {
+            if (!rowsVisibility[i]) {
+                --lineNumber;
+            }
+        }
+        return lineNumber;
+    }
+}
+
+void DetViewSingleLineRenderer::updateLines() {
+    numLines = -1;
+    rulerLine = -1;
+    directLine = -1;
+    complementLine = -1;
+    firstDirectTransLine = -1;
+    firstComplTransLine = -1;
+
+    if (!detView->hasComplementaryStrand() && !detView->hasTranslations()) {
+        directLine = 0;
+        rulerLine = 1;
+        numLines = 2;
+    } else if (detView->hasComplementaryStrand() && detView->hasTranslations()) {
+        //change
+        firstDirectTransLine = 0;
+        directLine = 3;
+        rulerLine = 4;
+        complementLine = 5;
+        firstComplTransLine = 6;
+        numLines = 9;
+        QVector<bool> v = ctx->getTranslationRowsVisibleStatus();
+
+        for(int i = 0; i < 6; i++) {
+            if (!v[i]) {
+                if (i < 3) {
+                    directLine--;
+                    rulerLine--;
+                    complementLine--;
+                    firstComplTransLine--;
+                }
+                numLines--;
+            }
+        }
+    } else if (detView->hasComplementaryStrand()) {
+        directLine = 0;
+        rulerLine = 1;
+        complementLine = 2;
+        numLines = 3;
+    } else {
+        firstDirectTransLine = 0;
+        directLine = 3;
+        rulerLine = 4;
+        numLines = 5;
+        QVector<bool> v = ctx->getTranslationRowsVisibleStatus();
+
+        for (int i = 0; i < 3; i++) {
+            if (!v[i]) {
+                directLine--;
+                rulerLine--;
+                numLines--;
+            }
+        }
+    }
+    SAFE_POINT(numLines > 0, "Nothing to render. Lines count is less then 1", );
+}
+
+bool DetViewSingleLineRenderer::deriveTranslationCharColor(qint64 pos,
+                                                          const U2Strand &strand,
+                                                          const QList<SharedAnnotationData> &annotationsInRange,
+                                                          QColor &result)
+{
+    // logic:
+    // no annotations found -> grey
+    // found annotation that is on translation -> black
+    // 1 annotation found on nucleic -> darker(annotation color)
+    // 2+ annotations found on nucleic -> black
+
+    int nAnnotations = 0;
+    const U2Region tripletRange = strand.isCompementary() ? U2Region(pos - 2, 2) : U2Region(pos, 2);
+    AnnotationSettings* as = NULL;
+    AnnotationSettingsRegistry* registry = AppContext::getAnnotationsSettingsRegistry();
+    const int sequenceLen = detView->getSequenceLength();
+    foreach (const SharedAnnotationData& aData, annotationsInRange) {
+        if (aData->getStrand() != strand) {
+            continue;
+        }
+        bool annotationOk = false;
+        AnnotationSettings* tas = NULL;
+        const bool order = aData->isOrder();
+        const QVector<U2Region>& location = aData->getRegions();
+        for (int i = 0, n = location.size(); i < n; i++) {
+            const U2Region& r = location.at(i);
+            if (!r.contains(tripletRange)) {
+                continue;
+            }
+            const int regionFrame = U1AnnotationUtils::getRegionFrame(sequenceLen, strand, order, i, location);
+            const int posFrame = strand.isCompementary() ? (sequenceLen - pos) % 3 : pos % 3;
+            if (regionFrame ==  posFrame) {
+                tas = registry->getAnnotationSettings(aData);
+                if (tas->visible) {
+                    annotationOk = true;
+                    break;
+                }
+            }
+        }
+        if (annotationOk) {
+            nAnnotations++;
+            as = tas;
+            if (nAnnotations > 1) {
+                break;
+            }
+        }
+    }
+    if (0 == nAnnotations) {
+        result = Qt::gray;
+        return false;
+    }
+
+    if (nAnnotations > 1) {
+        result = Qt::black;
+        return true;
+    }
+
+    const TriState aminoState = as->amino ? TriState_Yes : TriState_No;
+    const bool aminoOverlap = (aminoState == TriState_Yes); // annotation is drawn on amino strand -> use black color for letters
+    result = aminoOverlap ? Qt::black : as->color.darker(300);
+
+    return true;
+}
+
+void DetViewSingleLineRenderer::setFontAndPenForTranslation(const char *seq, const QColor& charColor,
+                                                           bool inAnnotation, QPainter &p) {
+    DNATranslation3to1Impl* aminoTable = (DNATranslation3to1Impl*)ctx->getAminoTT();
+    SAFE_POINT(aminoTable != NULL, "Amino translation table is NULL", );
+    if (aminoTable->isStartCodon(seq)) {
+        p.setPen(inAnnotation ? charColor : trMetrics.startC);
+        p.setFont(inAnnotation ? trMetrics.fontB : trMetrics.fontBS);
+    } else if (aminoTable->isCodon(DNATranslationRole_Start_Alternative, seq)) {
+        p.setPen(inAnnotation ? charColor : trMetrics.startC);
+        p.setFont(inAnnotation ? trMetrics.fontI : trMetrics.fontIS);
+    } else if (aminoTable->isStopCodon(seq)) {
+        p.setPen(inAnnotation ? charColor : trMetrics.stopC);
+        p.setFont(inAnnotation ? trMetrics.fontB : trMetrics.fontBS);
+    } else {
+        p.setPen(charColor);
+        p.setFont(inAnnotation ? commonMetrics.sequenceFont : trMetrics.sequenceFontSmall);
+    }
+}
+
+void DetViewSingleLineRenderer::highlight(QPainter &p, const U2Region &regionToHighlight, int line, const QSize& canvasSize, const U2Region& visibleRange) {
+    SAFE_POINT(line >= 0, "Unexpected sequence view line number", );
+
+    int x = posToXCoord(regionToHighlight.startPos, canvasSize, visibleRange);
+    int width = posToXCoord(regionToHighlight.endPos(), canvasSize, visibleRange) - x;
+
+    int ymargin = commonMetrics.yCharOffset / 2;
+    int y = getLineY(line) + ymargin;
+    int height = commonMetrics.lineHeight - 2 * ymargin;
+    p.drawRect(x, y, width, height);
+}
+
+int DetViewSingleLineRenderer::posToDirectTransLine(int p) const {
+    SAFE_POINT(firstDirectTransLine >= 0, "Invalid direct translation line number", -1);
+    const int absoluteLineNumber = p % 3;
+    return getVisibleDirectTransLine(absoluteLineNumber);
+}
+
+int DetViewSingleLineRenderer::posToComplTransLine(int p) const {
+    SAFE_POINT(firstComplTransLine >= 0, "Invalid complementary translation line number", -1);
+    const int absoluteLineNumber = (detView->getSequenceLength() - p) % 3;
+    return getVisibleComplTransLine(absoluteLineNumber);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h
new file mode 100644
index 0000000..2953d2b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h
@@ -0,0 +1,135 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_DET_VIEW_SINGLE_LINE_RENDERER_H_
+#define _U2_DET_VIEW_SINGLE_LINE_RENDERER_H_
+
+#include "DetViewRenderer.h"
+
+namespace U2 {
+
+
+/************************************************************************/
+/* DetViewSingleLineRenderer */
+/************************************************************************/
+class DetViewSingleLineRenderer : public DetViewRenderer {
+private:
+    struct TranslationMetrics {
+        TranslationMetrics();
+        TranslationMetrics(DetView* detView,
+                           const U2Region& visibleRange,
+                           const QFont& commonSequenceFont);
+
+        QVector<bool> visibleRows;
+
+        qint64 minUsedPos;
+        qint64 maxUsedPos;
+        U2Region seqBlockRegion;
+
+        QColor startC;
+        QColor stopC;
+
+        QFont fontB;
+        QFont fontI;
+
+        QFont sequenceFontSmall;
+        QFont fontBS;
+        QFont fontIS;
+    };
+public:
+    DetViewSingleLineRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+
+    virtual qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
+
+    virtual U2Region getAnnotationYRange(Annotation *a, int r, const AnnotationSettings* as, const QSize& canvasSize, const U2Region& visibleRange) const;
+    virtual U2Region getMirroredYRange(const U2Strand &mStrand) const;
+
+    qint64 getMinimumHeight() const;
+    qint64 getOneLineHeight() const;
+    qint64 getLinesCount(const QSize& canvasSize) const;
+    qint64 getContentIndentY(const QSize& canvasSize, const U2Region& visibleRange) const;
+
+    int getRowsInLineCount() const;
+
+    QSize getBaseCanvasSize(const U2Region &visibleRange) const;
+
+    bool isOnTranslationsLine(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const;
+    bool isOnAnnotationLine(const QPoint& p, Annotation*a, int region, const AnnotationSettings *as, const QSize &canvasSize, const U2Region& visibleRange) const;
+
+    virtual void drawAll(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+    virtual void drawSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+
+    void update();
+
+private:
+    void drawDirect(QPainter& p, const U2Region& visibleRange);
+    void drawComplement(QPainter& p, const U2Region& visibleRange);
+
+    void drawTranslations(QPainter& p, const U2Region& visibleRange);
+    void drawDirectTranslations(QPainter& p,
+                                const U2Region& visibleRange,
+                                const char* seqBlock,
+                                const QList<SharedAnnotationData>& annotationsInRange);
+    void drawComplementTransltations(QPainter& p,
+                                     const U2Region& visibleRange,
+                                     const char* seqBlock,
+                                     const QList<SharedAnnotationData>& annotationsInRange);
+
+    void drawRuler(QPainter& p, const QSize &canvasSize, const U2Region& visibleRange);
+    void drawSequenceSelection(QPainter& p, const QSize &canvasSize, const U2Region& visibleRange);
+
+private:
+    int getLineY(int line) const;
+    int getTextY(int line) const;
+
+    int getVisibleDirectTransLine(int absoluteFrameNumber) const;
+    int getVisibleComplTransLine(int absoluteFrameNumber) const;
+
+    void updateLines();
+
+    bool deriveTranslationCharColor(qint64 pos,
+                                    const U2Strand &strand,
+                                    const QList<SharedAnnotationData> &annotationsInRange,
+                                    QColor &result);
+    void setFontAndPenForTranslation(const char* seq,
+                                     const QColor& charColor,
+                                     bool inAnnotation,
+                                     QPainter& p);
+
+    void highlight(QPainter& p, const U2Region& regionToHighlight, int line, const QSize& canvasSize, const U2Region& visibleRange);
+
+    int posToDirectTransLine(int p) const;
+    int posToComplTransLine(int p) const;
+
+private:
+    TranslationMetrics  trMetrics;
+
+    int numLines;
+    int rulerLine;
+    int directLine;
+    int complementLine;
+    int firstDirectTransLine;
+    int firstComplTransLine;
+};
+
+} // namespace
+
+#endif // _U2_DET_VIEW_SINGLE_LINE_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp
new file mode 100644
index 0000000..178e8cb
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp
@@ -0,0 +1,426 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "PanViewRenderer.h"
+
+#include <U2Core/AnnotationSettings.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/Timer.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/PanView.h>
+#include <U2View/PanViewRows.h>
+
+#include <QFontMetrics>
+
+
+namespace U2 {
+
+
+const int PanViewRenderer::RULER_NOTCH_SIZE = 2;
+const int PanViewRenderer::MAX_VISIBLE_ROWS  = 20;
+const int PanViewRenderer::MAX_VISIBLE_ROWS_ON_START = 10;
+const int PanViewRenderer::LINE_TEXT_OFFSET = 10;
+
+PanViewRenderer::PanViewRenderer(PanView *panView, ADVSequenceObjectContext *ctx)
+    : SequenceViewAnnotatedRenderer(ctx),
+      panView(panView) {
+    s = panView->getLinesSettings();
+}
+
+qint64 PanViewRenderer::coordToPos(const QPoint &/*p*/, const QSize &/*canvasSize*/, const U2Region &/*visibleRange*/) const {
+    FAIL("The method must never be called", -1);
+}
+
+double PanViewRenderer::getCurrentScale() const {
+    return double(panView->getRenderArea()->width()) / panView->getVisibleRange().length;
+}
+
+U2Region PanViewRenderer::getAnnotationYRange(Annotation *a, int r, const AnnotationSettings *as, const QSize& canvasSize, const U2Region& visibleRange) const {
+    Q_UNUSED(r);
+    Q_UNUSED(canvasSize);
+    Q_UNUSED(visibleRange);
+
+    CHECK(as->visible, U2Region(-1, 0));
+
+    const int row = panView->getRowsManager()->getAnnotationRowIdx(a);
+    const int line = s->getRowLine(row);
+
+    return U2Region(getLineY(line) + 2, commonMetrics.lineHeight - 4);
+}
+
+U2Region PanViewRenderer::getMirroredYRange(const U2Strand &) const {
+    FAIL("Must not be called!", U2Region(-1, 0));
+}
+
+qint64 PanViewRenderer::getContentIndentY(const QSize& canvasSize, const U2Region& /*visibleRange*/) const {
+   return (canvasSize.height() - s->numLines * commonMetrics.lineHeight) / 2;
+}
+
+qint64 PanViewRenderer::getMinimumHeight() const {
+    return commonMetrics.lineHeight * (s->getAdditionalLines() + 1);
+}
+
+QSize PanViewRenderer::getBaseCanvasSize(const U2Region &visibleRange) const {
+    float halfChar = getCurrentScale() / 2;
+    int firstCharCenter = qRound(halfChar);
+    int lastCharCenter = qRound(visibleRange.length * getCurrentScale() + halfChar);
+
+    int firstLastWidth = lastCharCenter - firstCharCenter;
+    if (qRound(halfChar) == 0) {
+        firstLastWidth--; // make the end of the ruler visible
+    }
+
+    PVRowsManager *rm = panView->getRowsManager();
+    return QSize(firstLastWidth + 2 * halfChar + 5,
+                 commonMetrics.lineHeight * (rm->getNumRows() + s->showCustomRulers * s->customRulers.size() + s->showMainRuler + isSequenceCharsVisible() + 1) + 6 );
+}
+
+void PanViewRenderer::drawAll(QPainter &p, const U2Region &visibleRange) {
+    int rowsOffsetOnScreen = s->rowLinesOffset;
+    int numVisibleRows = s->numLines;
+    s->rowLinesOffset = 0;
+    s->numLines = panView->getRowsManager()->getNumRows() + s->getAdditionalLines();
+    QSize canvasSize = getBaseCanvasSize(visibleRange);
+    drawAll(p, canvasSize, visibleRange);
+    s->rowLinesOffset = rowsOffsetOnScreen;
+    s->numLines = numVisibleRows;
+}
+
+void PanViewRenderer::drawAll(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    p.fillRect(0, 0, canvasSize.width(), canvasSize.height(), Qt::white);
+    p.setPen(Qt::black);
+
+    GraphUtils::RulerConfig c;
+
+    int hCenter = getContentIndentY(canvasSize, visibleRange);
+    float halfChar = getCurrentScale() / 2;
+    int firstCharCenter = qRound(posToXCoordF(visibleRange.startPos, canvasSize, visibleRange) + halfChar);
+    int lastCharCenter = qRound(posToXCoordF(visibleRange.endPos() - 1, canvasSize, visibleRange) + halfChar);
+    int firstLastWidth = lastCharCenter - firstCharCenter;
+    if (qRound(halfChar) == 0) {
+        firstLastWidth--; // make the end of the ruler visible
+    }
+    c.notchSize = RULER_NOTCH_SIZE;
+    int chunk = GraphUtils::calculateChunk(visibleRange.startPos + 1, visibleRange.endPos(), panView->width(), p);
+    foreach(const RulerInfo& ri, s->customRulers) {
+        chunk = qMax(chunk, GraphUtils::calculateChunk(visibleRange.startPos + 1 - ri.offset, visibleRange.endPos() - ri.offset, panView->width(), p));
+    }
+    c.predefinedChunk = chunk;
+
+    p.translate(0, hCenter);
+
+    drawRuler(c, p, visibleRange, firstCharCenter, firstLastWidth);
+    drawCustomRulers(c, p, visibleRange, firstCharCenter, lastCharCenter, canvasSize.width());
+    drawSequence(p, canvasSize, visibleRange);
+
+    AnnotationDisplaySettings displaySettings;
+    displaySettings.displayCutSites = false;
+    drawAnnotations(p, canvasSize, visibleRange, displaySettings);
+
+    p.translate(0, -hCenter);
+}
+
+void PanViewRenderer::drawSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    int hCenter = getContentIndentY(canvasSize, visibleRange);
+    p.translate(0, hCenter);
+
+    drawSequence(p, canvasSize, visibleRange);
+
+    AnnotationDisplaySettings displaySettings;
+    displaySettings.displayCutSites = false;
+    drawAnnotationSelection(p, canvasSize, visibleRange, displaySettings);
+    drawSequenceSelection(p, canvasSize, visibleRange);
+
+    p.translate(0, -hCenter);
+}
+
+void PanViewRenderer::drawAnnotations(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange, const AnnotationDisplaySettings &displaySettings) {
+    GTIMER(c2, t2, "PanViewRenderArea::drawAnnotations");
+    const QPen dotty(Qt::lightGray, 1, Qt::DotLine);
+    p.setPen(dotty);
+    p.setFont(annMetrics.afSmall);
+    const int cachedViewWidth = canvasSize.width(); // rename the variable
+
+    //draw row names
+    PVRowsManager *rm = panView->getRowsManager();
+    const int maxVisibleRows = s->getNumVisibleRows();
+    for (int i = 0; i < maxVisibleRows; i++) {
+        const int row = i + s->rowLinesOffset;
+        const int rowLine = s->getRowLine(row);
+        const int lineY = getLineY(rowLine);
+        p.drawLine(0, lineY, cachedViewWidth, lineY);
+
+        const PVRowData *rData = rm->getRow(row);
+        const QRect textRect(LINE_TEXT_OFFSET, lineY + 1, canvasSize.width(), commonMetrics.lineHeight - 2);
+        p.drawText(textRect, getText(rData));
+
+        if (NULL != rData) {
+            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
+            AnnotationSettings *as = asr->getAnnotationSettings(rData->key);
+            if (as->visible) {
+                QPen pen1(Qt::SolidLine);
+                pen1.setWidth(1);
+                foreach (Annotation *a, rData->annotations) {
+                    drawAnnotation(p, canvasSize, visibleRange, a, displaySettings);
+                }
+                //restore pen
+                p.setPen(dotty);
+                p.setFont(annMetrics.afSmall);
+            }
+        }
+    }
+
+    const int firstRowLine = s->getRowLine(0);
+    const int lineY = getLineY(firstRowLine) + commonMetrics.lineHeight;
+    p.drawLine(0, lineY, cachedViewWidth, lineY);
+}
+
+int PanViewRenderer::getLineY(int line) const {
+    return line * commonMetrics.lineHeight;
+}
+
+bool PanViewRenderer::isSequenceCharsVisible() const {
+    return getCurrentScale() >= commonMetrics.smallCharWidth;
+}
+
+void PanViewRenderer::drawSequence(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
+    CHECK(isSequenceCharsVisible(), );
+
+    p.setPen(Qt::black);
+    float halfCharByScale = getCurrentScale() / 2;
+    float halfCharByFont = 0.0f;
+    if (getCurrentScale() >= commonMetrics.charWidth) {
+        p.setFont(commonMetrics.sequenceFont);
+        halfCharByFont = commonMetrics.charWidth / 2.0f;
+    } else {
+        p.setFont(commonMetrics.smallSequenceFont);
+        halfCharByFont = commonMetrics.smallCharWidth / 2.0f;
+    }
+    U2OpStatusImpl os;
+    QByteArray seq = ctx->getSequenceData(visibleRange, os);
+    SAFE_POINT_OP(os, );
+    int y = getLineY(s->getSelectionLine()) + commonMetrics.lineHeight - commonMetrics.yCharOffset;
+    for (int i = 0; i < visibleRange.length; i++) {
+        char c = seq[i];
+        int x = qRound(posToXCoordF(visibleRange.startPos + i, canvasSize, visibleRange) + halfCharByScale - halfCharByFont);
+        p.drawText(x, y, QString(c));
+    }
+}
+
+#define ARROW_DY 5
+#define ARROW_DX 5
+void PanViewRenderer::drawSequenceSelection(QPainter& p, const QSize &canvasSize, const U2Region &visibleRange) {
+    const QVector<U2Region>& selection = ctx->getSequenceSelection()->getSelectedRegions();
+    bool showSequenceMode = isSequenceCharsVisible();
+    CHECK(!selection.isEmpty(), );
+
+    QPen pen1(Qt::darkGray, 1, Qt::SolidLine);
+    QPen pen2(QColor("#007DE3"), 2, Qt::SolidLine);
+    p.setFont(commonMetrics.rulerFont);
+    QFontMetrics rfm(commonMetrics.rulerFont);
+
+    int lineY = getLineY(s->getSelectionLine());
+    int ly = lineY + commonMetrics.lineHeight / 2; //ruler line
+
+    bool drawRect = showSequenceMode;
+    bool drawGraphics = true;
+    if (showSequenceMode) {
+        ly = lineY - commonMetrics.lineHeight + RULER_NOTCH_SIZE;
+        drawGraphics = ly > 0;
+    }
+    int halfNum = rfm.boundingRect('1').height() / 2;
+    int rty = ly + halfNum;
+
+    const DNAAlphabet* alphabet = ctx->getSequenceObject()->getAlphabet();
+    QString unitType;
+    if (alphabet->isAmino()) {
+        unitType = "aa";
+    } else {
+        unitType = "bp";
+    }
+
+    QString rangePattern = " " + panView->tr("[%1 %2]")+" ";
+    foreach(const U2Region& r, selection) {
+        if (!visibleRange.intersects(r)) {
+            continue;
+        }
+        int x1 = qMax(0, posToXCoord(r.startPos, canvasSize, visibleRange));
+        int x2 = qMin(canvasSize.width(), posToXCoord(r.endPos(), canvasSize, visibleRange));
+
+        p.setPen(pen1);
+        if (visibleRange.contains(r.startPos)) {
+            p.drawLine(x1, - getContentIndentY(canvasSize, visibleRange), x1, ly);
+        }
+        if (visibleRange.contains(r.endPos()-1)) {
+            p.drawLine(x2, - getContentIndentY(canvasSize, visibleRange), x2, ly);
+        }
+
+        if (drawRect) {
+            p.setPen(Qt::black);
+            p.drawRect(x1, lineY + 1, x2 - x1, commonMetrics.lineHeight - 2);
+        }
+
+        if (drawGraphics) {
+            //draw line
+            p.setPen(pen2);
+            p.drawLine(x1, ly, x2, ly);
+            int dArrow = 2 * ARROW_DX;
+
+            QString t1 = QString::number(r.startPos + 1);
+            QString t2 = QString::number(r.endPos());
+            int tOffs = ARROW_DX - 1;
+            QRect t1Rect = rfm.boundingRect(t1);
+            t1Rect.translate(x1 - t1Rect.width() - tOffs, rty);
+            QRect t2Rect = rfm.boundingRect(t2).translated(x2 + tOffs, rty);
+
+            // define range text coords
+            QString rangeText = rangePattern.arg(r.length).arg(unitType);
+            QRect rtRect = rfm.boundingRect(rangeText);
+            int rulerWidth = x2 - x1;
+            bool rangeTextInTheMiddle = rulerWidth - dArrow > rtRect.width();
+            if (rangeTextInTheMiddle) {
+                int rtx = x1 + (rulerWidth - rtRect.width())/2 + 1;
+                assert(rtx - x1 >= ARROW_DX);
+                rtRect.translate(rtx, rty);
+                p.fillRect(rtRect, Qt::white);
+                p.drawText(rtRect, Qt::AlignCenter, rangeText);
+            }  else if (!rangeTextInTheMiddle) { //if range text is not in the middle glue it to one of the boundary texts
+                QString newT2 = t2 + rangeText;
+                QRect newT2Rect = rfm.boundingRect(newT2).translated(x2 + tOffs, rty);
+                if (newT2Rect.right() < canvasSize.width()) {
+                    t2Rect = newT2Rect;
+                    t2 = newT2;
+                } else {
+                    QString newT1 = rangeText + t1;
+                    QRect newT1Rect = rfm.boundingRect(newT1); newT1Rect.translate(x1 - newT1Rect.width() - tOffs, rty);
+                    if (newT1Rect.left() >=0) {
+                        t1 = newT1;
+                        t1Rect = newT1Rect;
+                    }
+                }
+            }
+
+            //check if regions overlap
+            int interWidth = t2Rect.left() - t1Rect.right();
+            if (interWidth < dArrow) {
+                int deltaW = interWidth > 0 ? dArrow : qAbs(interWidth) + dArrow;
+                if (t1Rect.x() - deltaW > 0) {
+                    t1Rect.translate(-deltaW, 0);
+                } else if (t2Rect.right() + deltaW < canvasSize.width()) {
+                    t2Rect.translate(deltaW, 0);
+                }
+            }
+
+            //draw regions
+            p.fillRect(t1Rect, Qt::white);
+            p.fillRect(t2Rect, Qt::white);
+            p.drawText(t1Rect, Qt::AlignCenter, t1);
+            p.drawText(t2Rect, Qt::AlignCenter, t2);
+
+            //draw arrows (after the text -> can overlap with text rect boundaries)
+            if (visibleRange.contains(r.startPos)) {
+                p.drawLine(x1, ly, x1 + ARROW_DX, ly + ARROW_DY);
+                p.drawLine(x1, ly, x1 + ARROW_DX, ly - ARROW_DY);
+            }
+            if (visibleRange.contains(r.endPos()-1)) {
+                p.drawLine(x2, ly, x2 - ARROW_DX, ly + ARROW_DY);
+                p.drawLine(x2, ly, x2 - ARROW_DX, ly - ARROW_DY);
+            }
+        }
+    }
+}
+
+void PanViewRenderer::drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth) {
+    CHECK(s->showMainRuler, );
+
+    int y = getLineY(s->getRulerLine()) + c.notchSize;
+    GraphUtils::drawRuler(p, QPoint(firstCharCenter, y), firstLastWidth, visibleRange.startPos + 1, visibleRange.endPos(), commonMetrics.rulerFont, c);
+}
+
+void PanViewRenderer::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
+                                       int firstCharCenter, int lastCharCenter,
+                                       int w, int predefinedY, bool ignoreVisbileRange) {
+    CHECK(s->showCustomRulers && !s->customRulers.isEmpty(), );
+
+    float pixelsPerChar = getCurrentScale();
+    float halfChar =  pixelsPerChar / 2;
+    QFont crf = commonMetrics.rulerFont;
+    crf.setBold(true);
+    QFontMetrics fm(crf);
+
+    int maxRulerTextWidth = 0;
+    foreach(const RulerInfo& ri, s->customRulers) {
+        int _w = fm.width(ri.name);
+        maxRulerTextWidth = qMax(maxRulerTextWidth, _w);
+    }
+    for (int i = 0, n = s->customRulers.count();  i < n; i++) {
+        const RulerInfo& ri = s->customRulers[i];
+        p.setPen(ri.color);
+        p.setFont(crf);
+        int y = (predefinedY == -1) ? getLineY(s->getCustomRulerLine(i)) + c.notchSize : predefinedY - i * commonMetrics.lineHeight;
+        p.drawText(QRect(ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET, y, maxRulerTextWidth, commonMetrics.lineHeight),
+                   ri.name);
+        int rulerStartOffset = maxRulerTextWidth + (ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET);
+        if (rulerStartOffset >= w)  {
+            continue;
+        }
+        qint64 startPos = visibleRange.startPos + 1 - ri.offset;
+        qint64 endPos = visibleRange.endPos() - ri.offset;
+        int x = firstCharCenter;
+
+        if (firstCharCenter <= rulerStartOffset) {
+            int deltaPixels = rulerStartOffset - firstCharCenter;
+            int nChars = qMax(1, qRound(deltaPixels / pixelsPerChar));
+            int deltaPixels2 = nChars * pixelsPerChar;
+            startPos += nChars;
+            x += deltaPixels2;
+        }
+
+        int rulerWidth = lastCharCenter - x;
+        if (qRound(halfChar) == 0) {
+            rulerWidth--; // make the end of the ruler visible
+        }
+
+        int offsetToFirstNotch = c.predefinedChunk - visibleRange.startPos % c.predefinedChunk;
+        qint64 mainRuler = visibleRange.startPos + offsetToFirstNotch;
+        qint64 newStartPos = visibleRange.startPos - ri.offset + offsetToFirstNotch;
+        qint64 lim = startPos + ri.offset;
+        for(; mainRuler < lim; mainRuler += c.predefinedChunk, newStartPos += c.predefinedChunk) ;
+        c.correction = newStartPos;
+
+        GraphUtils::drawRuler(p, QPoint(x, y), rulerWidth, startPos, endPos, commonMetrics.rulerFont, c);
+    }
+}
+
+const QString PanViewRenderer::getText(const PVRowData * rData) const {
+    const QString text = (NULL == rData)
+        ? U2::PanView::tr("empty")
+        : rData->key + " (" + QString::number(rData->annotations.size()) + ")";
+    return text;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h
new file mode 100644
index 0000000..483db8e
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h
@@ -0,0 +1,88 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_PAN_VIEW_PAINTER_H_
+#define _U2_PAN_VIEW_PAINTER_H_
+
+#include "SequenceViewAnnotatedRenderer.h"
+
+#include <U2View/PanView.h>
+
+
+namespace U2 {
+
+class ADVSequenceObjectContext;
+
+/************************************************************************/
+/* DetViewAnnotationPainter */
+/************************************************************************/
+class PanViewRenderer : public SequenceViewAnnotatedRenderer {
+public:
+    PanViewRenderer(PanView* panView, ADVSequenceObjectContext* ctx);
+    virtual ~PanViewRenderer() {}
+
+    qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
+
+    double getCurrentScale() const;
+
+    U2Region getAnnotationYRange(Annotation *a, int r, const AnnotationSettings* as, const QSize& canvasSize, const U2Region& visibleRange) const;
+    U2Region getMirroredYRange(const U2Strand &mStrand) const;
+
+    qint64 getContentIndentY(const QSize& canvasSize, const U2Region& visibleRange) const;
+    qint64 getMinimumHeight() const;
+
+    QSize getBaseCanvasSize(const U2Region &visibleRange) const;
+    void drawAll(QPainter& p, const U2Region& visibleRange);
+
+    void drawAll(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+    void drawSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+
+    void drawAnnotations(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange, const AnnotationDisplaySettings& displaySettings);
+
+private:
+    int getLineY(int line) const;
+
+    bool isSequenceCharsVisible() const;
+
+    void drawSequence(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+    void drawSequenceSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+
+    void drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth);
+    void drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
+                          int firstCharCenter, int lastCharCenter,
+                          int width, int predefinedY = -1, bool ignoreVisbileRange = false);
+
+    const QString getText(const PVRowData * rData) const;
+
+private:
+    PanView*            panView;
+
+    PanViewLinesSettings*   s;
+
+    static const int RULER_NOTCH_SIZE;
+    static const int MAX_VISIBLE_ROWS;
+    static const int MAX_VISIBLE_ROWS_ON_START;
+    static const int LINE_TEXT_OFFSET;
+};
+
+} // namespace
+
+#endif // _U2_PAN_VIEW_PAINTER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp
new file mode 100644
index 0000000..5e4fde8
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp
@@ -0,0 +1,366 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "SequenceViewAnnotatedRenderer.h"
+
+#include <U2Core/AnnotationTableObject.h>
+#include <U2Core/AnnotationSettings.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/GenbankFeatures.h>
+#include <U2Core/U1AnnotationUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/ADVSequenceObjectContext.h>
+
+
+namespace U2 {
+
+SequenceViewAnnotatedRenderer::CutSiteDrawData::CutSiteDrawData()
+    : direct(true),
+      pos(0) {
+
+}
+
+SequenceViewAnnotatedRenderer::AnnotationViewMetrics::AnnotationViewMetrics()
+    : afNormal(QFont("Courier", 10)),
+      afSmall(QFont("Arial", 8)),
+      afmNormal(QFontMetrics(afNormal)),
+      afmSmall(QFontMetrics(afSmall)) {
+    afNormalCharWidth  = afmNormal.width('w');
+    afSmallCharWidth   = afmSmall.width('w');
+
+    QLinearGradient gradient(0, 0, 0, 1); //vertical
+    gradient.setCoordinateMode(QGradient::ObjectBoundingMode);
+    gradient.setColorAt(0.00, QColor(255, 255, 255, 120));
+    gradient.setColorAt(0.50, QColor( 0,   0,   0,   0));
+    gradient.setColorAt(0.70, QColor( 0,   0,   0,   0));
+    gradient.setColorAt(1.00, QColor( 0,   0,   0,  70));
+    gradientMaskBrush = QBrush(gradient);
+
+}
+
+SequenceViewAnnotatedRenderer::AnnotationDisplaySettings::AnnotationDisplaySettings()
+    : displayAnnotationNames(true),
+      displayAnnotationArrows(true),
+      displayCutSites(true) {
+}
+
+/************************************************************************/
+/* SequenceViewAnnotatedRenderer */
+/************************************************************************/
+const int SequenceViewAnnotatedRenderer::MIN_ANNOTATION_WIDTH = 3;
+const int SequenceViewAnnotatedRenderer::MIN_ANNOTATION_TEXT_WIDTH = 5;
+const int SequenceViewAnnotatedRenderer::MIN_SELECTED_ANNOTATION_WIDTH = 4;
+const int SequenceViewAnnotatedRenderer::MIN_WIDTH_TO_DRAW_EXTRA_FEATURES = 10;
+
+const int SequenceViewAnnotatedRenderer::FEATURE_ARROW_HLEN = 3;
+const int SequenceViewAnnotatedRenderer::FEATURE_ARROW_VLEN = 3;
+
+const int SequenceViewAnnotatedRenderer::CUT_SITE_HALF_WIDTH = 4;
+const int SequenceViewAnnotatedRenderer::CUT_SITE_HALF_HEIGHT = 2;
+
+const int SequenceViewAnnotatedRenderer::MAX_VIRTUAL_RANGE = 10000;
+
+SequenceViewAnnotatedRenderer::SequenceViewAnnotatedRenderer(ADVSequenceObjectContext* ctx)
+    : SequenceViewRenderer(ctx) {
+
+}
+
+void SequenceViewAnnotatedRenderer::drawAnnotations(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange, const AnnotationDisplaySettings& displaySettings) {
+    foreach (const AnnotationTableObject *ao, ctx->getAnnotationObjects(true)) {
+        foreach (Annotation *a, ao->getAnnotationsByRegion(visibleRange)) {
+            AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
+            AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
+
+            drawAnnotation(p, canvasSize, visibleRange, a, displaySettings);
+        }
+    }
+}
+
+void SequenceViewAnnotatedRenderer::drawAnnotationSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange, const AnnotationDisplaySettings& displaySettings) {
+    const AnnotationSelection *annSelection = ctx->getAnnotationsSelection();
+    foreach (const AnnotationSelectionData &asd, annSelection->getSelection()) {
+        AnnotationTableObject *o = asd.annotation->getGObject();
+        if (ctx->getAnnotationObjects(true).contains(o)) {
+
+            drawAnnotation(p, canvasSize, visibleRange, asd.annotation, displaySettings, U2Region(), true);
+        }
+    }
+}
+
+void SequenceViewAnnotatedRenderer::drawAnnotation(QPainter &p, const QSize& canvasSize, const U2Region &visibleRange,
+                                                   Annotation *a, const AnnotationDisplaySettings& displaySettings,
+                                                   const U2Region& predefinedY,
+                                                   bool selected, const AnnotationSettings *as) {
+    const SharedAnnotationData &aData = a->getData();
+    if (as == NULL) {
+        AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
+        as = asr->getAnnotationSettings(aData);
+    }
+    CHECK(as->visible, );
+
+    QPen borderPen(Qt::SolidLine);
+    borderPen.setWidth(selected ? 2 : 1);
+
+    QVector<U2Region> location = aData->getRegions();
+    bool simple = location.size() == 1;
+    for (int ri = 0, ln = location.size(); ri < ln; ri++) {
+        const U2Region &r = location.at(ri);
+        if (!r.intersects(visibleRange)) {
+            continue;
+        }
+        const U2Region visibleLocation = r.intersect(visibleRange);
+        const U2Region y = predefinedY.isEmpty() ? getAnnotationYRange(a, ri, as, canvasSize, visibleRange) : predefinedY;
+        if (y.startPos < 0) {
+            continue;
+        }
+
+        const int x1 = posToXCoord(visibleLocation.startPos, canvasSize, visibleRange);
+        const int x2 = posToXCoord(visibleLocation.endPos(), canvasSize, visibleRange);
+
+        const int rw = qMax(selected ? MIN_SELECTED_ANNOTATION_WIDTH : MIN_ANNOTATION_WIDTH, x2 - x1);
+        SAFE_POINT(rw > 0, "Negative length of annotationYRange", );
+
+        // annotation rect setting
+        const QRect annotationRect(x1, y.startPos, rw, y.length);
+        QPainterPath rectPath;
+        rectPath.addRect(x1, y.startPos, rw, y.length);
+        // find out if the arrow is needed
+        const bool leftTrim  = visibleLocation.startPos != r.startPos;
+        const bool rightTrim = visibleLocation.endPos() != r.endPos();
+        const bool drawArrow = aData->getStrand().isCompementary() ? !leftTrim : !rightTrim;
+        if (displaySettings.displayAnnotationArrows && drawArrow) {
+            bool isLeft = false;
+            if (1 == ri && aData->findFirstQualifierValue("rpt_type") == "inverted") { //temporary solution for drawing inverted repeats correct
+                isLeft = true;
+            } else {
+                isLeft = aData->getStrand().isCompementary();
+            }
+            addArrowPath(rectPath, annotationRect, isLeft);
+        }
+
+        rectPath.setFillRule(Qt::WindingFill);
+        p.fillPath(rectPath, as->color);
+        p.fillPath(rectPath, annMetrics.gradientMaskBrush);
+
+        p.setPen(borderPen);
+        if (rw > MIN_ANNOTATION_WIDTH) {
+            p.drawPath(rectPath);
+            if (displaySettings.displayAnnotationNames && annotationRect.width() >= MIN_ANNOTATION_TEXT_WIDTH) {
+                const QString aText = prepareAnnotationText(aData, as);
+                drawBoundedText(p, annotationRect, aText);
+            }
+            if (simple && annotationRect.width() > MIN_WIDTH_TO_DRAW_EXTRA_FEATURES && displaySettings.displayCutSites) {
+                drawCutSite(p, aData, r, annotationRect, as->color, canvasSize, visibleRange);
+            }
+        }
+        drawAnnotationConnections(p, a, as, displaySettings, canvasSize, visibleRange);
+    }
+}
+
+void SequenceViewAnnotatedRenderer::drawBoundedText(QPainter &p, const QRect &r, const QString &text) {
+    if (annMetrics.afSmallCharWidth > r.width()) {
+        return;
+    }
+    QFont font = annMetrics.afNormal;
+    QFontMetrics fm = annMetrics.afmNormal;
+    if (fm.width(text) > r.width()) {
+        font = annMetrics.afSmall;
+        fm = annMetrics.afmSmall;
+    }
+    p.setFont(font);
+
+    const int len = text.length();
+    int textWidth = 0;
+    int prefixLen = 0;
+    do {
+        int cw = fm.width(text[prefixLen]);
+        if (textWidth + cw > r.width()) {
+            break;
+        }
+        textWidth += cw;
+    } while (++prefixLen < len);
+
+    if (0 == prefixLen) {
+        return;
+    }
+    p.drawText(r, Qt::TextSingleLine | Qt::AlignCenter, text.left(prefixLen));
+}
+
+void SequenceViewAnnotatedRenderer::drawAnnotationConnections(QPainter &p, Annotation *a, const AnnotationSettings *as, const AnnotationDisplaySettings& displaySettings,
+                                                              const QSize& canvasSize, const U2Region& visibleRange) {
+    const SharedAnnotationData &aData = a->getData();
+    CHECK(!aData->location->isSingleRegion(), );
+
+    const qint64 seqLength = ctx->getSequenceLength();
+    U2Region sRange(0, seqLength);
+    if (U1AnnotationUtils::isSplitted(aData->location, sRange)) {
+        return;
+    }
+
+    int dx1 = 0;
+    int dx2 = 0;
+    if (displaySettings.displayAnnotationArrows) {
+        if (aData->getStrand().isCompementary()) {
+            dx2 = - FEATURE_ARROW_HLEN;
+        } else {
+            dx1 = FEATURE_ARROW_HLEN;
+        }
+    }
+    QVector<U2Region> location = aData->getRegions();
+    for (int ri = 0, ln = location.size(); ri < ln; ri++) {
+        const U2Region &r = location.at(ri);
+        if (ri > 0) {
+            U2Region prev = location.at(ri - 1);
+            const int prevPos = prev.endPos();
+            const int pos = r.startPos;
+            const int min = qMin(prevPos, pos);
+            const int max = qMax(prevPos, pos);
+            if (visibleRange.intersects(U2Region(min, max - min))) {
+                int x1 = posToXCoord(prevPos, canvasSize, visibleRange) + dx1;
+                if (x1 == -1 && prevPos > visibleRange.endPos()) {
+                    x1 = posToXCoord(visibleRange.endPos() - 1, canvasSize, visibleRange) + dx1;
+                }
+                int x2 = posToXCoord(pos, canvasSize, visibleRange) + dx2;
+                if (x2 == -1 && pos > visibleRange.endPos()) {
+                    x2 = posToXCoord(visibleRange.endPos() - 1, canvasSize, visibleRange) + dx2;
+                }
+                if (qAbs(x2 - x1) > 1) {
+                    x1 = qBound( - MAX_VIRTUAL_RANGE, x1, MAX_VIRTUAL_RANGE); //qt4.4 crashes in line clipping alg for extremely large X values
+                    x2 = qBound( - MAX_VIRTUAL_RANGE, x2, MAX_VIRTUAL_RANGE);
+                    const int midX = (x1 + x2) / 2;
+                    const U2Region pyr = getAnnotationYRange(a, ri - 1, as, canvasSize, visibleRange);
+                    const U2Region yr = getAnnotationYRange(a, ri, as, canvasSize, visibleRange);
+                    const int y1 = pyr.startPos;
+                    const int dy1 = pyr.length / 2;
+                    const int y2 = yr.startPos;
+                    const int dy2 = yr.length / 2;
+                    const int midY = qMin(y1, y2);
+                    p.drawLine(x1, y1 + dy1, midX, midY);
+                    p.drawLine(midX, midY, x2, y2 + dy2);
+                }
+            }
+        }
+    }
+}
+
+void SequenceViewAnnotatedRenderer::drawCutSite(QPainter &p, const SharedAnnotationData &aData, const U2Region& r,
+                                                const QRect& annotationRect, const QColor& color,
+                                                const QSize& canvasSize, const U2Region& visibleRange) {
+    const QString cutStr = aData->findFirstQualifierValue(GBFeatureUtils::QUALIFIER_CUT);
+    bool hasD = false;
+    bool hasC = false;
+    int cutD = 0;
+    int cutC = 0;
+    if (!cutStr.isEmpty()) {
+        int complSplit = cutStr.indexOf('/');
+        if (-1 != complSplit) {
+            cutD = cutStr.left(complSplit).toInt(&hasD);
+            cutC = cutStr.mid(qMin(cutStr.length(), complSplit + 1))
+                    .toInt(&hasC);
+        } else {
+            cutD = cutStr.toInt(&hasD);
+            cutC = cutD;
+            hasC = hasD;
+        }
+    }
+
+    U2Region cutSiteY = aData->getStrand().isDirect() ? getMirroredYRange(U2Strand(U2Strand::Complementary))
+                                                      : getMirroredYRange(U2Strand(U2Strand::Direct));
+    QRect mirroredAnnotationRect = annotationRect;
+    mirroredAnnotationRect.setY(cutSiteY.startPos);
+    mirroredAnnotationRect.setHeight(cutSiteY.length);
+
+    CutSiteDrawData toInsert;
+    toInsert.color = color;
+    if (hasD) {
+        toInsert.direct = true;
+        toInsert.pos = aData->getStrand().isDirect() ? r.startPos + cutD
+                                                     : r.startPos + cutC;
+        aData->getStrand().isDirect() ? toInsert.r = annotationRect : toInsert.r = mirroredAnnotationRect;
+        drawCutSite(p, toInsert, canvasSize, visibleRange);
+    }
+    if (hasC) {
+        toInsert.direct = false;
+        toInsert.pos = aData->getStrand().isDirect() ? r.endPos() - cutC : r.endPos() - cutD;
+        aData->getStrand().isCompementary() ? toInsert.r = annotationRect : toInsert.r = mirroredAnnotationRect;
+        drawCutSite(p, toInsert, canvasSize, visibleRange);
+    }
+
+}
+
+void SequenceViewAnnotatedRenderer::drawCutSite(QPainter& p, const CutSiteDrawData& cData, const QSize& canvasSize, const U2Region& visibleRange) {
+    int xCenter = posToXCoord(cData.pos, canvasSize, visibleRange);
+
+    int xLeft = xCenter - CUT_SITE_HALF_WIDTH;
+    int xRight= xCenter + CUT_SITE_HALF_WIDTH;
+    int yFlat = (cData.direct ? cData.r.top() - CUT_SITE_HALF_HEIGHT : cData.r.bottom() + CUT_SITE_HALF_HEIGHT);
+    int yPeak = (cData.direct ? cData.r.top() + CUT_SITE_HALF_HEIGHT : cData.r.bottom() - CUT_SITE_HALF_HEIGHT);
+
+    QPolygon triangle;
+    triangle << QPoint(xLeft, yFlat) << QPoint(xCenter, yPeak) << QPoint(xRight, yFlat) << QPoint(xLeft, yFlat);
+
+    QPainterPath path;
+    path.addPolygon(triangle);
+
+    p.fillPath(path, cData.color);
+    p.drawPath(path);
+}
+
+QString SequenceViewAnnotatedRenderer::prepareAnnotationText(const SharedAnnotationData &a, const AnnotationSettings *as) const {
+    if (!as->showNameQuals || as->nameQuals.isEmpty()) {
+        return a->name;
+    }
+    QVector<U2Qualifier> qs;
+    foreach (const QString &qn, as->nameQuals) {
+        qs.clear();
+        a->findQualifiers(qn, qs);
+        if (!qs.isEmpty()) {
+            QString res = qs[0].value;
+            return res;
+        }
+    }
+    return a->name;
+}
+
+void SequenceViewAnnotatedRenderer::addArrowPath(QPainterPath& path, const QRect& rect, bool leftArrow) const {
+    if (rect.width() <= FEATURE_ARROW_HLEN || rect.height() <= 0) {
+        return;
+    }
+    int x = leftArrow ? rect.left() : rect.right();
+    int dx = leftArrow ? -FEATURE_ARROW_HLEN : FEATURE_ARROW_HLEN;
+
+    QPolygon arr;
+    arr << QPoint(x - dx, rect.top()    - FEATURE_ARROW_VLEN);
+    arr << QPoint(x + dx, rect.top()    + rect.height() / 2);
+    arr << QPoint(x - dx, rect.bottom() + FEATURE_ARROW_VLEN);
+    arr << QPoint(x - dx, rect.top()    - FEATURE_ARROW_VLEN);
+    QPainterPath arrowPath;
+    arrowPath.addPolygon(arr);
+
+    QPainterPath dRectPath;
+    dRectPath.addRect(leftArrow ? x : x - (FEATURE_ARROW_HLEN - 1), rect.top(), FEATURE_ARROW_HLEN, rect.height());
+
+    path = path.subtracted(dRectPath);
+    path = path.united(arrowPath);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h
new file mode 100644
index 0000000..f0f68ae
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h
@@ -0,0 +1,132 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_VIEW_ANNOTATED_RENDERER_H_
+#define _U2_SEQUENCE_VIEW_ANNOTATED_RENDERER_H_
+
+#include "SequenceViewRenderer.h"
+
+#include <U2Core/AnnotationData.h>
+#include <U2Core/AnnotationSelection.h>
+
+#include <QPainter>
+
+
+namespace U2 {
+
+class AnnotationSettings;
+
+/************************************************************************/
+/* SequenceViewAnnotatedRenderer */
+/************************************************************************/
+class SequenceViewAnnotatedRenderer : public SequenceViewRenderer {
+protected:
+    struct CutSiteDrawData {
+        CutSiteDrawData();
+
+        QRect r;
+        QColor color;
+        bool direct;
+        int pos;
+    };
+
+    struct AnnotationViewMetrics {
+        AnnotationViewMetrics();
+
+        QFont afNormal;
+        QFont afSmall;
+
+        QFontMetrics afmNormal;
+        QFontMetrics afmSmall;
+
+        int afNormalCharWidth;
+        int afSmallCharWidth;
+
+        QBrush gradientMaskBrush;
+    };
+
+    struct AnnotationDisplaySettings {
+        AnnotationDisplaySettings();
+
+        bool    displayAnnotationNames;
+        bool    displayAnnotationArrows;
+        bool    displayCutSites;
+    };
+
+public:
+    SequenceViewAnnotatedRenderer(ADVSequenceObjectContext* ctx);
+
+    virtual qint64 coordToPos(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+
+    virtual double getCurrentScale() const = 0;
+
+    virtual U2Region getAnnotationYRange(Annotation *a, int r, const AnnotationSettings* as, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+    virtual U2Region getMirroredYRange(const U2Strand &mStrand) const = 0;
+
+    virtual qint64 getContentIndentY(const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+    virtual qint64 getMinimumHeight() const = 0;
+
+    virtual void drawAll(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange) = 0;
+    virtual void drawSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange) = 0;
+
+    virtual void drawAnnotations(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange, const AnnotationDisplaySettings& displaySettings);
+    virtual void drawAnnotationSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange, const AnnotationDisplaySettings& displaySettings);
+
+protected:
+    virtual void drawAnnotation(QPainter &p, const QSize& canvasSize, const U2Region &visibleRange,
+                                Annotation *a, const AnnotationDisplaySettings& displaySettings,
+                                const U2Region &predefinedY = U2Region(),
+                                bool selected = false, const AnnotationSettings *as = NULL);
+
+    void drawBoundedText(QPainter &p, const QRect &r, const QString &text);
+
+    void drawAnnotationConnections(QPainter &p, Annotation *a, const AnnotationSettings *as, const AnnotationDisplaySettings& drawSettings,
+                                   const QSize& canvasSize, const U2Region& visibleRange);
+
+    void drawCutSite(QPainter& p, const SharedAnnotationData& aData, const U2Region& r,
+                     const QRect& annotationRect, const QColor& color,
+                     const QSize& canvasSize, const U2Region& visibleRange);
+    void drawCutSite(QPainter &p, const CutSiteDrawData& cData,
+                     const QSize& canvasSize, const U2Region& visibleRange);
+
+    QString prepareAnnotationText(const SharedAnnotationData &a, const AnnotationSettings *as) const;
+
+    void addArrowPath(QPainterPath& path, const QRect& rect, bool leftArrow) const;
+
+    AnnotationViewMetrics annMetrics;
+
+    static const int MIN_ANNOTATION_WIDTH;
+    static const int MIN_ANNOTATION_TEXT_WIDTH;
+    static const int MIN_SELECTED_ANNOTATION_WIDTH;
+    static const int MIN_WIDTH_TO_DRAW_EXTRA_FEATURES;
+
+    static const int FEATURE_ARROW_HLEN;
+    static const int FEATURE_ARROW_VLEN;
+
+    static const int CUT_SITE_HALF_WIDTH;
+    static const int CUT_SITE_HALF_HEIGHT;
+
+    static const int MAX_VIRTUAL_RANGE;
+};
+
+} // namespace
+
+#endif // _U2_SEQUENCE_VIEW_ANNOTATED_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp
new file mode 100644
index 0000000..4e437f6
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp
@@ -0,0 +1,76 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "SequenceViewRenderer.h"
+
+#include <U2Core/U2Region.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <QFontMetrics>
+
+
+namespace U2 {
+
+CommonSequenceViewMetrics::CommonSequenceViewMetrics() {
+    sequenceFont.setFamily("Courier New");
+    sequenceFont.setPointSize(12);
+
+    smallSequenceFont.setFamily("Courier New");
+    smallSequenceFont.setPointSize(8);
+
+    rulerFont.setFamily("Arial");
+    rulerFont.setPointSize(8);
+
+    QFontMetrics fm(sequenceFont);
+    yCharOffset = 4;
+    lineHeight = fm.boundingRect('W').height() + 2 * yCharOffset;
+    xCharOffset = 1;
+    charWidth = fm.boundingRect('W').width() + 2 * xCharOffset;
+
+    QFontMetrics fms(smallSequenceFont);
+    smallCharWidth = fms.boundingRect('W').width();
+}
+
+/************************************************************************/
+/* SequenceViewRenderer */
+/************************************************************************/
+SequenceViewRenderer::SequenceViewRenderer(ADVSequenceObjectContext *ctx)
+    : ctx(ctx) {
+
+}
+
+int SequenceViewRenderer::posToXCoord(const qint64 p, const QSize &canvasSize, const U2Region &visibleRange) const {
+    return qRound(posToXCoordF(p, canvasSize, visibleRange));
+}
+
+float SequenceViewRenderer::posToXCoordF(qint64 p, const QSize &canvasSize, const U2Region &visibleRange) const {
+    Q_UNUSED(canvasSize);
+    CHECK(visibleRange.contains(p) || p == visibleRange.endPos(), -1);
+
+    float res = ((p - visibleRange.startPos) * getCurrentScale());
+    return res;
+}
+
+qint64 SequenceViewRenderer::getRowLineHeight() const {
+    return commonMetrics.lineHeight;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h
new file mode 100644
index 0000000..8115b0d
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h
@@ -0,0 +1,80 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_VIEW_RENDERER_H_
+#define _U2_SEQUENCE_VIEW_RENDERER_H_
+
+#include <QFont>
+
+
+namespace U2 {
+
+class ADVSequenceObjectContext;
+class U2Region;
+
+struct CommonSequenceViewMetrics {
+    CommonSequenceViewMetrics();
+
+    QFont   sequenceFont;
+    QFont   smallSequenceFont;
+    QFont   rulerFont;
+
+    int     charWidth;
+    int     smallCharWidth;
+
+    int     lineHeight;
+    int     yCharOffset;
+    int     xCharOffset;
+};
+
+/************************************************************************/
+/* SequenceViewRenderer */
+/************************************************************************/
+class SequenceViewRenderer {
+public:
+    SequenceViewRenderer(ADVSequenceObjectContext* ctx);
+
+    virtual qint64 coordToPos(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+
+    int posToXCoord(const qint64 p, const QSize& canvasSize, const U2Region& visibleRange) const;
+    virtual float posToXCoordF(const qint64 p, const QSize& canvasSize, const U2Region& visibleRange) const;
+
+    virtual qint64 getRowLineHeight() const;
+
+    virtual double getCurrentScale() const = 0;
+
+    virtual qint64 getContentIndentY(const QSize& canvasSize, const U2Region& visibleRange) const = 0;
+    virtual qint64 getMinimumHeight() const = 0;
+
+    virtual void drawAll(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange) = 0;
+    virtual void drawSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange) = 0;
+
+    virtual QSize getBaseCanvasSize(const U2Region& visibleRange) const = 0;
+
+protected:
+    ADVSequenceObjectContext*   ctx;
+    CommonSequenceViewMetrics   commonMetrics;
+
+};
+
+} // namespace
+
+#endif // _U2_SEQUENCE_VIEW_RENDERER_H_
diff --git a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
index 8f74ac9..a0f57b0 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, "16126757");
+    new HelpButton(this, buttonBox, "17466155");
 
     thicknessSpinBox->setValue(changedSettings[BRANCH_THICKNESS].toInt());
 
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
index 222bd27..8e81bc2 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
@@ -61,9 +61,9 @@ CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, co
     ui->setupUi(this);
 
     QMap<QString, QString> helpPagesMap;
-    helpPagesMap.insert("PHYLIP Neighbor Joining","16126716");
-    helpPagesMap.insert("MrBayes","16126717");
-    helpPagesMap.insert("PhyML Maximum Likelihood","16126715");
+    helpPagesMap.insert("PHYLIP Neighbor Joining","17466114");
+    helpPagesMap.insert("MrBayes","17466115");
+    helpPagesMap.insert("PhyML Maximum Likelihood","17466113");
     new ComboboxDependentHelpButton(this, ui->buttonBox, ui->algorithmBox, helpPagesMap);
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
diff --git a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
index 5989645..fabeea7 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, "16126762");
+    new HelpButton(this, buttonBox, "17466160");
 
     curColor = qvariant_cast<QColor>(settings[LABEL_COLOR]);
 
diff --git a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
index 30e0cba..a578ffd 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, "16126756");
+    new HelpButton(this, buttonBox, "17466154");
 
     heightSlider->setValue(settings[HEIGHT_COEF].toUInt());
     widthlSlider->setValue(settings[WIDTH_COEF].toUInt());
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
index bbd78fe..5149202 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","16126833");
-    helpPagesMap.insert("BWA-MEM","16126875");
-    helpPagesMap.insert("BWA-SW","16126861");
-    helpPagesMap.insert("Bowtie","16126830");
-    helpPagesMap.insert("Bowtie2","16126858");
-    helpPagesMap.insert("UGENE Genome Aligner","16126836");
+    helpPagesMap.insert("BWA","17466231");
+    helpPagesMap.insert("BWA-MEM","17466273");
+    helpPagesMap.insert("BWA-SW","17466259");
+    helpPagesMap.insert("Bowtie","17466228");
+    helpPagesMap.insert("Bowtie2","17466256");
+    helpPagesMap.insert("UGENE Genome Aligner","17466234");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
index c32f7c9..bae2992 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
@@ -47,7 +47,7 @@ ConvertAssemblyToSamDialog::ConvertAssemblyToSamDialog(QWidget* parent, QString
 {
     ui = new Ui_AssemblyToSamDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "16126837");
+    new HelpButton(this, ui->buttonBox, "17466235");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Convert"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
index 89b32a3..2d97381 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
@@ -65,12 +65,12 @@ DnaAssemblyDialog::DnaAssemblyDialog(QWidget* p, const QStringList& shortReadsUr
 {
     setupUi(this);
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("BWA","16126832");
-    helpPagesMap.insert("BWA-MEM","16126874");
-    helpPagesMap.insert("BWA-SW","16126860");
-    helpPagesMap.insert("Bowtie","16126829");
-    helpPagesMap.insert("Bowtie2","16126857");
-    helpPagesMap.insert("UGENE Genome Aligner","16126835");
+    helpPagesMap.insert("BWA","17466230");
+    helpPagesMap.insert("BWA-MEM","17466272");
+    helpPagesMap.insert("BWA-SW","17466258");
+    helpPagesMap.insert("Bowtie","17466227");
+    helpPagesMap.insert("Bowtie2","17466255");
+    helpPagesMap.insert("UGENE Genome Aligner","17466233");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
index 55ab693..0022d57 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, "16126808");
+    new HelpButton(this, buttonBox, "17466206");
 
     sspr = AppContext::getSecStructPredictAlgRegistry();
     algorithmComboBox->addItems(sspr->getAlgNameList());
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
index 591d36b..9dea225 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
@@ -74,7 +74,7 @@ SmithWatermanDialog::SmithWatermanDialog(QWidget* w, ADVSequenceObjectContext* c
     dialogConfig = _dialogConfig;
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126815");
+    new HelpButton(this, buttonBox, "17466213");
     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/transl/english.ts b/src/corelibs/U2View/transl/english.ts
index b9a1114..4c5a302 100644
--- a/src/corelibs/U2View/transl/english.ts
+++ b/src/corelibs/U2View/transl/english.ts
@@ -1172,37 +1172,37 @@ Probably the data is too big.</translation>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="22"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="40"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="36"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="54"/>
         <source>Whole alignment</source>
         <translation>Whole alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="41"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="59"/>
         <source>Custom region</source>
         <translation>Custom region</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="55"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="73"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="64"/>
+        <location filename="../src/ov_msa/ui/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="71"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="89"/>
         <source>Include consensus</source>
         <translation>Include consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="78"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="96"/>
         <source>Include ruler</source>
         <translation>Include ruler</translation>
     </message>
@@ -1215,57 +1215,57 @@ Probably the data is too big.</translation>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="112"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
         <source>Similarity:</source>
         <translation>Similarity:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="125"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
         <source>Not defined</source>
         <translation>Not defined</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="160"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
         <source>Algorithm:</source>
         <translation>Algorithm:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="197"/>
+        <location filename="../src/ov_msa/ui/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="200"/>
+        <location filename="../src/ov_msa/ui/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="229"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
         <source>Output file:</source>
         <translation>Output file:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="247"/>
+        <location filename="../src/ov_msa/ui/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="250"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
         <source>Default</source>
         <translation>Default</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="257"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="289"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="298"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -1564,17 +1564,17 @@ Double-click to collapse the branch</translation>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="55"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="39"/>
         <source>Data is outdated</source>
         <translation>Data is outdated</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="56"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="40"/>
         <source>Data is valid</source>
         <translation>Data is valid</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="57"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
         <source>Data is being updated</source>
         <translation>Data is being updated</translation>
     </message>
@@ -1827,22 +1827,22 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SequenceExportSettingsWidget</name>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="43"/>
         <source>Area</source>
         <translation>Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="29"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="52"/>
         <source>Currently viewed</source>
         <translation>Currently viewed</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="42"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="65"/>
         <source>Zoomed annotations</source>
         <translation>Zoomed annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="52"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="75"/>
         <source>Sequence details</source>
         <translation>Sequence details</translation>
     </message>
@@ -2591,17 +2591,17 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AddTreeWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="376"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
         <source>There are no displayed trees so settings are hidden.</source>
         <translation>There are no displayed trees so settings are hidden.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="384"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="385"/>
         <source>Open tree</source>
         <translation>Open tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="393"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="394"/>
         <source>Build tree</source>
         <translation>Build tree</translation>
     </message>
@@ -2614,12 +2614,12 @@ Double-click to collapse the branch</translation>
         <translation>Align sequences to alignment task</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="238"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="240"/>
         <source>Object is empty.</source>
         <translation>Object is empty.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="243"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="245"/>
         <source>Object is locked for modifications.</source>
         <translation>Object is locked for modifications.</translation>
     </message>
@@ -2786,159 +2786,159 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AnnotationsTreeView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="247"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="266"/>
         <source>Value</source>
         <translation>Value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="146"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="164"/>
         <source>Objects with annotations...</source>
         <translation>Objects with annotations...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="149"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="167"/>
         <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="156"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="174"/>
         <source>Selected annotations and qualifiers</source>
         <translation>Selected annotations and qualifiers</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="162"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1057"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="180"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1076"/>
         <source>Copy qualifier text</source>
         <translation>Copy qualifier text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="165"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1061"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1080"/>
         <source>Copy qualifier URL</source>
         <translation>Copy qualifier URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="168"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1066"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="186"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1085"/>
         <source>Toggle column</source>
         <translation>Toggle column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="172"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="190"/>
         <source>Hide column</source>
         <translation>Hide column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="194"/>
         <source>Find qualifier...</source>
         <translation>Find qualifier...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="181"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="199"/>
         <source>Invert annotation selection</source>
         <translation>Invert annotation selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="184"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="760"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="203"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="779"/>
         <source>Copy column text</source>
         <translation>Copy column text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="187"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="774"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="206"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="793"/>
         <source>copy column URL</source>
         <translation>copy column URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="190"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="209"/>
         <source>Rename item</source>
         <translation>Rename item</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="531"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="550"/>
         <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="1757"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1805"/>
         <source>Rename Group</source>
         <translation>Rename Group</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1798"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1846"/>
         <source>Rename Qualifier</source>
         <translation>Rename Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1857"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1905"/>
         <source>Create Permanent Annotation</source>
         <translation>Create Permanent Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="197"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="216"/>
         <source>Edit qualifier</source>
         <translation>Edit qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="204"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="223"/>
         <source>View qualifier</source>
         <translation>View qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="210"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="229"/>
         <source>Qualifier...</source>
         <translation>Qualifier...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="217"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="236"/>
         <source>Make auto-annotations persistent</source>
         <translation>Make auto-annotations persistent</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="766"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="785"/>
         <source>Copy column '%1' text</source>
         <translation>Copy column '%1' text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="769"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="788"/>
         <source>Copy '%1' annotation location</source>
         <translation>Copy '%1' annotation location</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="778"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="797"/>
         <source>Copy column '%1' URL</source>
         <translation>Copy column '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="800"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="819"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1086"/>
         <source>Hide '%1' column</source>
         <translation>Hide '%1' column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1057"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1076"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Copy qualifier '%1' value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1061"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1080"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Copy qualifier '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1086"/>
         <source>Add '%1' column</source>
         <translation>Add '%1' column</translation>
     </message>
@@ -2946,132 +2946,183 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="198"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="206"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="150"/>
         <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="132"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="140"/>
         <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="209"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="217"/>
         <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="213"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="214"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="222"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>- Reference sequence is %1 than assembly</source>
-        <translation>- Reference sequence is %1 than assembly</translation>
+        <translation type="vanished">- Reference sequence is %1 than assembly</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>lesser</source>
-        <translation>lesser</translation>
+        <translation type="vanished">lesser</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>bigger</source>
-        <translation>bigger</translation>
+        <translation type="vanished">bigger</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>- Reference and assembly names not match</source>
-        <translation>- Reference and assembly names not match</translation>
+        <translation type="vanished">- Reference and assembly names not match</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="241"/>
         <source>
   Continue?</source>
-        <translation>
+        <translation type="vanished">
   Continue?</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="243"/>
         <source>Errors</source>
-        <translation>Errors</translation>
+        <translation type="vanished">Errors</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="229"/>
+        <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"/>
+        <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"/>
+        <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="280"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="288"/>
         <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="286"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="294"/>
         <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="295"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="303"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="296"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="304"/>
         <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="634"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="643"/>
         <source>Zoom in</source>
         <translation>Zoom in</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="637"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="646"/>
         <source>Zoom out</source>
         <translation>Zoom out</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="640"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="649"/>
         <source>Linear</source>
         <translation>Linear</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="642"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="651"/>
         <source>Logarithmic</source>
         <translation>Logarithmic</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="648"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
         <source>Show coordinates on ruler</source>
         <translation>Show coordinates on ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="652"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Show coverage under ruler cursor</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="656"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <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="661"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="670"/>
         <source>Export as image</source>
         <translation>Export as image</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="664"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="673"/>
         <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"/>
+        <source>Set reference</source>
+        <translation>Set reference</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="993"/>
+        <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"/>
+        <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"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1067"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1066"/>
+        <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>
@@ -3089,7 +3140,7 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1020"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1169"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Assembly has no mapped reads. Nothing to visualize.</translation>
     </message>
@@ -3257,8 +3308,8 @@ Double-click to collapse the branch</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/AssemblyModel.cpp" line="320"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="644"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="650"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="657"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
@@ -3292,7 +3343,7 @@ Do you want to remove the association?</translation>
         <translation>Reference document is not ready!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="645"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
         <source>This action requires changing file:
 %1
 You don't have enough rights to change file</source>
@@ -3301,7 +3352,7 @@ You don't have enough rights to change file</source>
 You don't have enough rights to change file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="652"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="658"/>
         <source>Database is opened in read-only mode. It might happen because file 
 %1
  is read only. If not try to reload file</source>
@@ -3409,12 +3460,12 @@ You don't have enough rights to change file</translation>
         <translation>Reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="175"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="176"/>
         <source>Unassociate</source>
         <translation>Unassociate</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="195"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="199"/>
         <source>Reference is loading...</source>
         <translation>Reference is loading...</translation>
     </message>
@@ -3636,37 +3687,37 @@ You don't have enough rights to change file</translation>
         <translation>Calculate coverage per base for assembly %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="155"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="154"/>
         <source>Invalid database reference</source>
         <translation>Invalid database reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="156"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="155"/>
         <source>Invalid assembly ID</source>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="161"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="160"/>
         <source>Assembly DBI is NULL</source>
         <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="180"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="175"/>
         <source>Attribute DBI is NULL</source>
         <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="184"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="179"/>
         <source>Can't get the assembly length: attribute is missing</source>
         <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="187"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="182"/>
         <source>Assembly has zero length</source>
         <translation>Assembly has zero length</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="201"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="196"/>
         <source>An unexpected subtask</source>
         <translation>An unexpected subtask</translation>
     </message>
@@ -3674,7 +3725,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CalculatePointsTask</name>
     <message>
-        <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="909"/>
+        <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="890"/>
         <source>Calculate graph points</source>
         <translation>Calculate graph points</translation>
     </message>
@@ -3821,7 +3872,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateDistanceMatrixTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="175"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="159"/>
         <source>Generate distance matrix</source>
         <translation>Generate distance matrix</translation>
     </message>
@@ -4455,17 +4506,17 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportCoverageHistogramTask</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="131"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="155"/>
         <source>Attribute DBI is NULL</source>
         <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="159"/>
         <source>Can't get the assembly length: attribute is missing</source>
         <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="138"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="162"/>
         <source>Assembly has zero length</source>
         <translation>Assembly has zero length</translation>
     </message>
@@ -4473,42 +4524,42 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportCoverageTask</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="50"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="51"/>
         <source>Export coverage per base for %1</source>
         <translation>Export coverage per base for %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="57"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="58"/>
         <source>Invalid database reference</source>
         <translation>Invalid database reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="58"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="59"/>
         <source>Invalid assembly ID</source>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="59"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="60"/>
         <source>Invalid destination url</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="65"/>
         <source>Assembly DBI is NULL</source>
         <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="76"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="78"/>
         <source>Can't write the compressed file: IOAdapterFactory is NULL</source>
         <translation>Can't write the compressed file: IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="82"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="84"/>
         <source>Can't write the file: IOAdapterFactory is NULL</source>
         <translation>Can't write the file: IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="96"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="98"/>
         <source>Not all regions were processed</source>
         <translation>Not all regions were processed</translation>
     </message>
@@ -4544,17 +4595,17 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2816"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3029"/>
         <source>Export highlighting</source>
         <translation>Export highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3057"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3057"/>
         <source>Result file:</source>
         <translation>Result file:</translation>
     </message>
@@ -4814,7 +4865,7 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2222"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2266"/>
         <source>Searching for a qualifier</source>
         <translation>Searching for a qualifier</translation>
     </message>
@@ -5015,7 +5066,7 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::LoadSequencesAndAlignToAlignmentTask</name>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="305"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="310"/>
         <source>Load sequences and add to alignment task</source>
         <translation>Load sequences and add to alignment task</translation>
     </message>
@@ -5051,166 +5102,173 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAClustalOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="180"/>
         <source>MAlignmentObject is NULL</source>
-        <translation>MAlignmentObject is NULL</translation>
+        <translation type="vanished">MAlignmentObject is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="181"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="184"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="172"/>
         <source>Clustal algorithm factory is NULL</source>
         <translation>Clustal algorithm factory is NULL</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
+        <source>MSA is NULL</source>
+        <translation type="unfinished">MSA is NULL</translation>
+    </message>
 </context>
 <context>
     <name>U2::MSAConsensusOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="129"/>
         <source>MAlignmentObject is NULL</source>
-        <translation>MAlignmentObject is NULL</translation>
+        <translation type="vanished">MAlignmentObject is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="130"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="133"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="135"/>
         <source>Strict consensus algorithm factory is NULL</source>
         <translation>Strict consensus algorithm factory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="136"/>
+        <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>No sequences in MSA</translation>
+        <translation type="vanished">No sequences in MSA</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="131"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="132"/>
         <source>Zoom In</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="135"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="136"/>
         <source>Zoom Out</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="139"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="140"/>
         <source>Zoom To Selection</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="143"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="144"/>
         <source>Reset Zoom</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="147"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="148"/>
         <source>Change Font</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="151"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="152"/>
         <source>Build Tree</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="503"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="504"/>
         <source>Export as image</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="365"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="366"/>
         <source>Select font for alignment</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="123"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="219"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="124"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="220"/>
         <source>Save alignment</source>
         <translation>Save alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="127"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
         <source>Save alignment as</source>
         <translation>Save alignment as</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="179"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="180"/>
         <source>Export highlighted</source>
         <translation>Export highlighted</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="428"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="429"/>
         <source>Copy</source>
         <translation>Copy</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="434"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="438"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="439"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="451"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="452"/>
         <source>View</source>
         <translation>View</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="459"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="507"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="460"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="508"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="465"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="466"/>
         <source>Tree</source>
         <translation>Tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="472"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="473"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="478"/>
         <source>Statistics</source>
         <translation>Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="483"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="484"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="511"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
         <source>Align sequence to this alignment</source>
         <translation>Align sequence to this alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="515"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
         <source>Set this sequence as reference</source>
         <translation>Set this sequence as reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="519"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
         <source>Unset reference sequence</source>
         <translation>Unset reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="791"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="794"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="792"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="795"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
@@ -5282,34 +5340,34 @@ Please, check external tools in the settings.</translation>
         <translation>Copy current sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="110"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="139"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="116"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="145"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="112"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="141"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="118"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="147"/>
         <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="127"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="133"/>
         <source>MSA Object is NULL</source>
         <translation>MSA Object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="132"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="138"/>
         <source>Invalid sequence index</source>
         <translation>Invalid sequence index</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="866"/>
         <source>Rename</source>
         <translation>Rename</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="861"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="867"/>
         <source>New sequence name:</source>
         <translation>New sequence name:</translation>
     </message>
@@ -5325,273 +5383,296 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="109"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="117"/>
         <source>Remove selection</source>
         <translation>Remove selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="120"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="128"/>
         <source>Remove columns of gaps...</source>
         <translation>Remove columns of gaps...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="126"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="134"/>
         <source>Fill selection with gaps</source>
         <translation>Fill selection with gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="133"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="141"/>
         <source>Save subalignment</source>
         <translation>Save subalignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="138"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="146"/>
         <source>Save sequence</source>
         <translation>Save sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="143"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="151"/>
         <source>Go to position...</source>
         <translation>Go to position...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="150"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="158"/>
         <source>Remove all gaps</source>
         <translation>Remove all gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="154"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="162"/>
         <source>Sequence from file...</source>
         <translation>Sequence from file...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="158"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="166"/>
         <source>Sequence from current project...</source>
         <translation>Sequence from current project...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="162"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="170"/>
         <source>Sort sequences by name</source>
         <translation>Sort sequences by name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="166"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="174"/>
         <source>Switch on/off collapsing</source>
         <translation>Switch on/off collapsing</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="171"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="179"/>
         <source>Update collapsed groups</source>
         <translation>Update collapsed groups</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="184"/>
         <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="180"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="188"/>
+        <source>Replace selected character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="194"/>
         <source>Replace selected rows with reverse</source>
         <translation>Replace selected rows with reverse</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="184"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="198"/>
         <source>Replace selected rows with complement</source>
         <translation>Replace selected rows with complement</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="289"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="230"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="348"/>
         <source>Use dots</source>
-        <translation type="unfinished">Use dots</translation>
+        <translation>Use dots</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="342"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="294"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="565"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="621"/>
+        <source>Unknown alphabet</source>
+        <translation>Unknown alphabet</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="440"/>
         <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="344"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="442"/>
         <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="490"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="603"/>
         <source>No reference sequence selected</source>
         <translation>No reference sequence selected</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="491"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="604"/>
         <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="589"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="726"/>
         <source>Alignment object is NULL</source>
         <translation>Alignment object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="740"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="835"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="865"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="960"/>
         <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="766"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="891"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="969"/>
         <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="803"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="928"/>
         <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="804"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="929"/>
         <source>startPos is too big</source>
         <translation>startPos is too big</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="825"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="950"/>
         <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="826"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="951"/>
         <source>startSeq is too big</source>
         <translation>startSeq is too big</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="858"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="983"/>
         <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="883"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1008"/>
         <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="929"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1055"/>
         <source>Alignment object is not available</source>
         <translation>Alignment object is not available</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="960"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1086"/>
         <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="961"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1087"/>
         <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="994"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1120"/>
         <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="995"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1121"/>
         <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="1018"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1144"/>
         <source>Invalid collapsible item model!</source>
         <translation>Invalid collapsible item model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1647"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1781"/>
         <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="1860"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1994"/>
         <source>Colors</source>
         <translation>Colors</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1867"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2001"/>
         <source>Custom schemes</source>
         <translation>Custom schemes</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1878"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2012"/>
         <source>Create new color scheme</source>
         <translation>Create new color scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1886"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2020"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1911"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2010"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2071"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2470"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2043"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2062"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2222"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2677"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1965"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2116"/>
         <source>Go To</source>
         <translation>Go To</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2006"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2157"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2119"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2270"/>
         <source>Warning!</source>
         <translation>Warning!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2119"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2270"/>
         <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="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2312"/>
         <source>warning</source>
         <translation>warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2312"/>
         <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="2388"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2391"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2539"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2595"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2598"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2487"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2492"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2699"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2515"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2722"/>
         <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="2517"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2724"/>
         <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="2676"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2883"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
@@ -5599,16 +5680,12 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="76"/>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="82"/>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="90"/>
         <source>-</source>
-        <translation>-</translation>
+        <translation type="vanished">-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="133"/>
         <source>score</source>
-        <translation>score</translation>
+        <translation type="vanished">score</translation>
     </message>
 </context>
 <context>
@@ -5707,61 +5784,81 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAEditorTreeViewer</name>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="63"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="65"/>
         <source>MSAEditor tree toolbar</source>
         <translation>MSAEditor tree toolbar</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="66"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="68"/>
         <source>Sort alignment by tree</source>
         <translation>Sort alignment by tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="70"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="72"/>
         <source>Refresh tree</source>
         <translation>Refresh tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="214"/>
-        <source>The alignment has been modified</source>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="225"/>
+        <source>Alignment Modification Confirmation</source>
+        <translation type="unfinished"></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>
+    </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>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="215"/>
+        <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="unfinished"></translation>
+        <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>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="218"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="231"/>
         <source>Cancel</source>
-        <translation type="unfinished">Cancel</translation>
+        <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="219"/>
         <source>Confirm the modification</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Confirm the modification</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="908"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="909"/>
         <source>Copy selection</source>
         <translation>Copy selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="917"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="918"/>
         <source>Copy formatted</source>
         <translation>Copy formatted</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="976"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="977"/>
         <source>Consensus</source>
         <translation>Consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1051"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="1052"/>
         <source>Tree view</source>
         <translation>Tree view</translation>
     </message>
@@ -5769,9 +5866,8 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAEditorUpdatedTabWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="472"/>
         <source>Add existing tree</source>
-        <translation>Add existing tree</translation>
+        <translation type="vanished">Add existing tree</translation>
     </message>
 </context>
 <context>
@@ -5785,14 +5881,12 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGapOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="154"/>
         <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
+        <translation type="vanished">MSA is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="156"/>
         <source>No sequences in MSA</source>
-        <translation>No sequences in MSA</translation>
+        <translation type="vanished">No sequences in MSA</translation>
     </message>
 </context>
 <context>
@@ -5816,7 +5910,12 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGraphCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="65"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
+        <source>MSA is NULL</source>
+        <translation type="unfinished">MSA is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
         <source>Overview width is zero</source>
         <translation>Overview width is zero</translation>
     </message>
@@ -5829,17 +5928,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="100"/>
         <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
         <translation>Multiple sequence alignment is too big. Overview is unavailable.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="107"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="105"/>
         <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="114"/>
         <source>Overview is rendering...</source>
         <translation>Overview is rendering...</translation>
     </message>
@@ -5847,27 +5946,27 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAHighlightingOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="215"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="201"/>
         <source>MSA highlighting scheme registry is NULL</source>
         <translation>MSA highlighting scheme registry is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="217"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="203"/>
         <source>MSA highlighting scheme factory with '%1' id is NULL</source>
         <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="234"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="220"/>
         <source>Color scheme is NULL</source>
         <translation>Color scheme is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="235"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="221"/>
         <source>Highlighting scheme is NULL</source>
         <translation>Highlighting scheme is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="236"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="222"/>
         <source>Highlighting scheme factory is NULL</source>
         <translation>Highlighting scheme factory is NULL</translation>
     </message>
@@ -5920,22 +6019,22 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="189"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="186"/>
         <source>Alignment</source>
         <translation>Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="237"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
         <source>MSA sequence area is NULL</source>
         <translation>MSA sequence area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="271"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="268"/>
         <source>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</source>
         <translation>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="274"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="271"/>
         <source>Warning: selected region is too big to be exported. You can try to select another region.</source>
         <translation>Warning: selected region is too big to be exported. You can try to select another region.</translation>
     </message>
@@ -5943,7 +6042,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="44"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="41"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
@@ -5962,18 +6061,18 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="69"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="66"/>
         <source>Nothing to export</source>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="78"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="87"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="75"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="84"/>
         <source>Alignment is too big. </source>
         <translation>Alignment is too big. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="89"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="86"/>
         <source>Cannot save the file. </source>
         <translation>Cannot save the file. </translation>
     </message>
@@ -5981,22 +6080,22 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportToSvgTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="139"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="136"/>
         <source>Nothing to export</source>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="158"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
         <source>The image size is too big.</source>
         <translation>The image size is too big.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="162"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="159"/>
         <source>SVG %1</source>
         <translation>SVG %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="163"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="160"/>
         <source>SVG image of multiple alignment created by Unipro UGENE</source>
         <translation>SVG image of multiple alignment created by Unipro UGENE</translation>
     </message>
@@ -6128,14 +6227,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="110"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="101"/>
         <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="153"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="149"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
@@ -6164,6 +6263,44 @@ Simple overview is unavailable.</translation>
     </message>
 </context>
 <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"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="117"/>
+        <source>score</source>
+        <translation type="unfinished">score</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaEditorTreeTab</name>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
+        <source>Add existing tree</source>
+        <translation type="unfinished">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>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="58"/>
+        <source>Close all tabs</source>
+        <translation type="unfinished">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>
+    </message>
+</context>
+<context>
     <name>U2::ObjectViewTask</name>
     <message>
         <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="275"/>
@@ -6351,37 +6488,41 @@ Simple overview is unavailable.</translation>
         <translation>Output settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="147"/>
         <source>Warning: Current alphabet does not correspond the requirements.</source>
-        <translation>Warning: Current alphabet does not correspond the requirements.</translation>
+        <translation type="vanished">Warning: Current alphabet does not correspond the requirements.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="155"/>
+        <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="193"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="199"/>
         <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="229"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="235"/>
         <source>Not defined</source>
         <translation>Not defined</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="307"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Save file</source>
         <translation>Save file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="307"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Clustal format (*.aln)</source>
         <translation>Clustal format (*.aln)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="346"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="346"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
         <source>Please, change the output file.</source>
         <translation>Please, change the output file.</translation>
     </message>
@@ -6424,8 +6565,7 @@ Simple overview is unavailable.</translation>
         <translation>range change request: [%1, %2]</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="628"/>
-        <location filename="../src/ov_sequence/PanView.cpp" line="860"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="916"/>
         <source>empty</source>
         <translation>empty</translation>
     </message>
@@ -6433,7 +6573,7 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::PanViewRenderArea</name>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="965"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="966"/>
         <source>[%1 %2]</source>
         <translation>[%1 %2]</translation>
     </message>
@@ -6904,37 +7044,37 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::TreeOptionsWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="123"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="124"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="125"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="126"/>
         <source>Labels</source>
         <translation>Labels</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="127"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="128"/>
         <source>Scale Bar</source>
         <translation>Scale Bar</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="129"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="130"/>
         <source>Branches</source>
         <translation>Branches</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Rectangular</source>
         <translation>Rectangular</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Circular</source>
         <translation>Circular</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Unrooted</source>
         <translation>Unrooted</translation>
     </message>
@@ -7097,39 +7237,32 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::UpdatedTabWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="309"/>
         <source>Refresh tab</source>
-        <translation>Refresh tab</translation>
+        <translation type="vanished">Refresh tab</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="311"/>
         <source>Refresh all tabs</source>
-        <translation>Refresh all tabs</translation>
+        <translation type="vanished">Refresh all tabs</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="316"/>
         <source>Close other tabs</source>
-        <translation>Close other tabs</translation>
+        <translation type="vanished">Close other tabs</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="318"/>
         <source>Close all tabs</source>
-        <translation>Close all tabs</translation>
+        <translation type="vanished">Close all tabs</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="320"/>
         <source>Close tab</source>
-        <translation>Close tab</translation>
+        <translation type="vanished">Close tab</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="325"/>
         <source>Add horizontal splitter</source>
-        <translation>Add horizontal splitter</translation>
+        <translation type="vanished">Add horizontal splitter</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="327"/>
         <source>Add vertical splitter</source>
-        <translation>Add vertical splitter</translation>
+        <translation type="vanished">Add vertical splitter</translation>
     </message>
 </context>
 <context>
diff --git a/src/corelibs/U2View/transl/russian.ts b/src/corelibs/U2View/transl/russian.ts
index 5b9a5b9..d55efb5 100644
--- a/src/corelibs/U2View/transl/russian.ts
+++ b/src/corelibs/U2View/transl/russian.ts
@@ -1172,37 +1172,37 @@ Probably the data is too big.</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="22"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="40"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="36"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="54"/>
         <source>Whole alignment</source>
         <translation>Все выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="41"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="59"/>
         <source>Custom region</source>
         <translation>Указанный регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="55"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="73"/>
         <source>Select</source>
         <translation>Выделить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="64"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="82"/>
         <source>Include sequences' names</source>
         <translation>Включить имена последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="71"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="89"/>
         <source>Include consensus</source>
         <translation>Включить консенсус</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="78"/>
+        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="96"/>
         <source>Include ruler</source>
         <translation>Включить шкалу</translation>
     </message>
@@ -1215,57 +1215,57 @@ Probably the data is too big.</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="112"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
         <source>Similarity:</source>
         <translation>Схожесть:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="125"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
         <source>Not defined</source>
         <translation>Не найдено</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="160"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
         <source>Algorithm:</source>
         <translation>Алгоритм:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="197"/>
+        <location filename="../src/ov_msa/ui/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="200"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="254"/>
         <source>In new window</source>
         <translation>В новом окне</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="229"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
         <source>Output file:</source>
         <translation>Выходной файл:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="247"/>
+        <location filename="../src/ov_msa/ui/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="250"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
         <source>Default</source>
         <translation>Значение по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="257"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="289"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="298"/>
+        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1562,17 +1562,17 @@ Double-click to collapse the branch</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="55"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="39"/>
         <source>Data is outdated</source>
         <translation>Данные устарели</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="56"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="40"/>
         <source>Data is valid</source>
         <translation>Данные корректны</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="57"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
         <source>Data is being updated</source>
         <translation>Данные обновляются</translation>
     </message>
@@ -1825,22 +1825,22 @@ Double-click to collapse the branch</source>
 <context>
     <name>SequenceExportSettingsWidget</name>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="43"/>
         <source>Area</source>
         <translation>Область</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="29"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="52"/>
         <source>Currently viewed</source>
         <translation>Текущая область</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="42"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="65"/>
         <source>Zoomed annotations</source>
         <translation>Увеличенные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="52"/>
+        <location filename="../src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui" line="75"/>
         <source>Sequence details</source>
         <translation>Детали последовательности</translation>
     </message>
@@ -2589,17 +2589,17 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AddTreeWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="376"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
         <source>There are no displayed trees so settings are hidden.</source>
         <translation>Настройки скрыты потому, что нет открытого дерева.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="384"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="385"/>
         <source>Open tree</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="393"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="394"/>
         <source>Build tree</source>
         <translation>Построить</translation>
     </message>
@@ -2612,12 +2612,12 @@ Double-click to collapse the branch</source>
         <translation>Align sequences to alignment task</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="238"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="240"/>
         <source>Object is empty.</source>
         <translation>Object is empty.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="243"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="245"/>
         <source>Object is locked for modifications.</source>
         <translation>Object is locked for modifications.</translation>
     </message>
@@ -2784,159 +2784,159 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AnnotationsTreeView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="247"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="266"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="149"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="167"/>
         <source>Selected objects with annotations from view</source>
         <translation>Удалить выбранные объекты с аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="162"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1057"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="180"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1076"/>
         <source>Copy qualifier text</source>
         <translation>Копировать значение квалификатора</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="165"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1061"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1080"/>
         <source>Copy qualifier URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="168"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1066"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="186"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1085"/>
         <source>Toggle column</source>
         <translation>Переключить столбец</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="172"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="190"/>
         <source>Hide column</source>
         <translation>Убрать столбец</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="194"/>
         <source>Find qualifier...</source>
         <translation>Поиск квалификатора...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="181"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="199"/>
         <source>Invert annotation selection</source>
         <translation>Инвертировать выделенную аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="184"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="760"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="203"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="779"/>
         <source>Copy column text</source>
         <translation>Копировать значение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="187"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="774"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="206"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="793"/>
         <source>copy column URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="146"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="164"/>
         <source>Objects with annotations...</source>
         <translation>Добавить объекты с аннотациями...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="103"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="121"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="156"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="174"/>
         <source>Selected annotations and qualifiers</source>
         <translation>Удалить выбранные аннотации и квалификаторы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="190"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="209"/>
         <source>Rename item</source>
         <translation>Переименовать элемент</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="197"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="216"/>
         <source>Edit qualifier</source>
         <translation>Редактировать квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="204"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="223"/>
         <source>View qualifier</source>
         <translation>Просмотреть квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="210"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="229"/>
         <source>Qualifier...</source>
         <translation>Добавить квалификатор...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="217"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="236"/>
         <source>Make auto-annotations persistent</source>
         <translation>Сделать автоаннотации постоянными</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="531"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="550"/>
         <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="766"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="785"/>
         <source>Copy column '%1' text</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="769"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="788"/>
         <source>Copy '%1' annotation location</source>
         <translation>Копировать позицию аннотации "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="778"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="797"/>
         <source>Copy column '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="800"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="819"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1086"/>
         <source>Hide '%1' column</source>
         <translation>Скрыть столбец "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1057"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1076"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1061"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1080"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1086"/>
         <source>Add '%1' column</source>
         <translation>Добавить столбец "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1757"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1805"/>
         <source>Rename Group</source>
         <translation>Переименовать группу</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1798"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1846"/>
         <source>Rename Qualifier</source>
         <translation>Переименовать квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1857"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1905"/>
         <source>Create Permanent Annotation</source>
         <translation>Создать постоянную аннотацию</translation>
     </message>
@@ -2944,132 +2944,181 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="198"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="206"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="150"/>
         <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="132"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="140"/>
         <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="209"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="217"/>
         <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="213"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="214"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="222"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>- Reference sequence is %1 than assembly</source>
-        <translation>- Reference sequence is %1 than assembly</translation>
+        <translation type="vanished">- Reference sequence is %1 than assembly</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>lesser</source>
-        <translation>lesser</translation>
+        <translation type="vanished">lesser</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="221"/>
         <source>bigger</source>
-        <translation>bigger</translation>
+        <translation type="vanished">bigger</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>- Reference and assembly names not match</source>
-        <translation>- Reference and assembly names not match</translation>
+        <translation type="vanished">- Reference and assembly names not match</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="241"/>
         <source>
   Continue?</source>
-        <translation>
+        <translation type="vanished">
   Продолжить?</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="243"/>
         <source>Errors</source>
-        <translation>Ошибки</translation>
+        <translation type="vanished">Ошибки</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="229"/>
+        <source>The lengths of the sequence and assembly are different.</source>
+        <translation>Длины последовательноси и сборки не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="280"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="232"/>
+        <source>The sequence and assembly names are different.</source>
+        <translation>Имена последовательности и сборки не совпадают.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="250"/>
+        <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"/>
         <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="286"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="294"/>
         <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="295"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="303"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="296"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="304"/>
         <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="634"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="643"/>
         <source>Zoom in</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="637"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="646"/>
         <source>Zoom out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="640"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="649"/>
         <source>Linear</source>
         <translation>Линейная</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="642"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="651"/>
         <source>Logarithmic</source>
         <translation>Логарифмическая</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="648"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
         <source>Show coordinates on ruler</source>
         <translation>Показывать координаты на шкале</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="652"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Показывать покрытие под шкалой курсора</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="656"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <source>Show information about read under cursor in pop-up hint</source>
         <translation>Показывать информацию о риде в сплывающей подсказке под курсором</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="670"/>
         <source>Export as image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="664"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="673"/>
         <source>Export assembly to SAM format</source>
         <translation>Экспортировать сборку в формат SAM</translation>
     </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="676"/>
+        <source>Set reference</source>
+        <translation>Выбрать референсную последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="993"/>
+        <source>Open file with a sequence</source>
+        <translation>Открыть файл с последовательностью</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1004"/>
+        <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"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1067"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1066"/>
+        <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>
@@ -3087,7 +3136,7 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1020"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1169"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Сборка не имеет ридов.</translation>
     </message>
@@ -3255,8 +3304,8 @@ Double-click to collapse the branch</source>
     </message>
     <message>
         <location filename="../src/ov_assembly/AssemblyModel.cpp" line="320"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="644"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="650"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="657"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
@@ -3290,7 +3339,7 @@ Do you want to remove the association?</source>
         <translation>Reference document is not ready!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="645"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
         <source>This action requires changing file:
 %1
 You don't have enough rights to change file</source>
@@ -3299,7 +3348,7 @@ You don't have enough rights to change file</source>
 У вас недостаточно прав для его изменения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="652"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="658"/>
         <source>Database is opened in read-only mode. It might happen because file 
 %1
  is read only. If not try to reload file</source>
@@ -3407,12 +3456,12 @@ You don't have enough rights to change file</source>
         <translation>Референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="175"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="176"/>
         <source>Unassociate</source>
         <translation>Убрать ассоциацию</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="195"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="199"/>
         <source>Reference is loading...</source>
         <translation>Загрузка референсной последовательности...</translation>
     </message>
@@ -3634,37 +3683,37 @@ You don't have enough rights to change file</source>
         <translation>Calculate coverage per base for assembly %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="155"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="154"/>
         <source>Invalid database reference</source>
         <translation>Invalid database reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="156"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="155"/>
         <source>Invalid assembly ID</source>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="161"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="160"/>
         <source>Assembly DBI is NULL</source>
         <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="180"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="175"/>
         <source>Attribute DBI is NULL</source>
         <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="184"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="179"/>
         <source>Can't get the assembly length: attribute is missing</source>
         <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="187"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="182"/>
         <source>Assembly has zero length</source>
         <translation>Assembly has zero length</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="201"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="196"/>
         <source>An unexpected subtask</source>
         <translation>An unexpected subtask</translation>
     </message>
@@ -3672,7 +3721,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CalculatePointsTask</name>
     <message>
-        <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="909"/>
+        <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="890"/>
         <source>Calculate graph points</source>
         <translation>Calculate graph points</translation>
     </message>
@@ -3819,7 +3868,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateDistanceMatrixTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="175"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="159"/>
         <source>Generate distance matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
@@ -4187,7 +4236,7 @@ Do you want to convert the files and run the aligner?</source>
     <message>
         <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="60"/>
         <source>Convert UGENE assembly database to SAM...</source>
-        <translation>Конвертация данных UGENE в формат SAM...</translation>
+        <translation>Преобразование данных UGENE в формат SAM...</translation>
     </message>
     <message>
         <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="66"/>
@@ -4197,7 +4246,7 @@ Do you want to convert the files and run the aligner?</source>
     <message>
         <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="72"/>
         <source>Map reads to reference...</source>
-        <translation>Выравнивание коротких прочтений на референс...</translation>
+        <translation>Выравнивание прочтений на референс...</translation>
     </message>
     <message>
         <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="78"/>
@@ -4451,17 +4500,17 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportCoverageHistogramTask</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="131"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="155"/>
         <source>Attribute DBI is NULL</source>
         <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="159"/>
         <source>Can't get the assembly length: attribute is missing</source>
         <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="138"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="162"/>
         <source>Assembly has zero length</source>
         <translation>Assembly has zero length</translation>
     </message>
@@ -4469,42 +4518,42 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportCoverageTask</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="50"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="51"/>
         <source>Export coverage per base for %1</source>
         <translation>Экспорт покрытия по основанию для %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="57"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="58"/>
         <source>Invalid database reference</source>
         <translation>Invalid database reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="58"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="59"/>
         <source>Invalid assembly ID</source>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="59"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="60"/>
         <source>Invalid destination url</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="65"/>
         <source>Assembly DBI is NULL</source>
         <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="76"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="78"/>
         <source>Can't write the compressed file: IOAdapterFactory is NULL</source>
         <translation>Can't write the compressed file: IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="82"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="84"/>
         <source>Can't write the file: IOAdapterFactory is NULL</source>
         <translation>Can't write the file: IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="96"/>
+        <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="98"/>
         <source>Not all regions were processed</source>
         <translation>Not all regions were processed</translation>
     </message>
@@ -4540,17 +4589,17 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2816"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3029"/>
         <source>Export highlighting</source>
         <translation>Экспорт подсвеченного</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3057"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3057"/>
         <source>Result file:</source>
         <translation>Выходной файл:</translation>
     </message>
@@ -4811,7 +4860,7 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2222"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2266"/>
         <source>Searching for a qualifier</source>
         <translation>Поиск квалификатора</translation>
     </message>
@@ -5012,7 +5061,7 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::LoadSequencesAndAlignToAlignmentTask</name>
     <message>
-        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="305"/>
+        <location filename="../src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp" line="310"/>
         <source>Load sequences and add to alignment task</source>
         <translation>Load sequences and add to alignment task</translation>
     </message>
@@ -5048,166 +5097,173 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAClustalOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="180"/>
         <source>MAlignmentObject is NULL</source>
-        <translation>MAlignmentObject is NULL</translation>
+        <translation type="vanished">MAlignmentObject is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="181"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="184"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="172"/>
         <source>Clustal algorithm factory is NULL</source>
         <translation>Clustal algorithm factory is NULL</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
+        <source>MSA is NULL</source>
+        <translation type="unfinished">MSA is NULL</translation>
+    </message>
 </context>
 <context>
     <name>U2::MSAConsensusOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="129"/>
         <source>MAlignmentObject is NULL</source>
-        <translation>MAlignmentObject is NULL</translation>
+        <translation type="vanished">MAlignmentObject is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="130"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="133"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="135"/>
         <source>Strict consensus algorithm factory is NULL</source>
         <translation>Strict consensus algorithm factory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="136"/>
+        <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>No sequences in MSA</translation>
+        <translation type="vanished">No sequences in MSA</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="131"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="132"/>
         <source>Zoom In</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="135"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="136"/>
         <source>Zoom Out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="139"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="140"/>
         <source>Zoom To Selection</source>
         <translation>Приблизить выбранный регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="143"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="144"/>
         <source>Reset Zoom</source>
         <translation>Вернуться к приближению "по умолчанию"</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="503"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="504"/>
         <source>Export as image</source>
         <translation>Экспортировать выравнивание в изображение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="428"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="429"/>
         <source>Copy</source>
         <translation>Копирование</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="123"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="219"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="124"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="220"/>
         <source>Save alignment</source>
         <translation>Сохранить выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="127"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
         <source>Save alignment as</source>
         <translation>Сохранить выравнивание как</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="179"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="180"/>
         <source>Export highlighted</source>
         <translation>Экспортировать выравнивание с выделенными нуклеотидами</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="434"/>
         <source>Edit</source>
         <translation>Редактирование</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="438"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="439"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="459"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="507"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="460"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="508"/>
         <source>Align</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="465"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="466"/>
         <source>Tree</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="472"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="473"/>
         <source>Advanced</source>
         <translation>Дополнительные операции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="483"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="484"/>
         <source>Add</source>
         <translation>Добавление</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="511"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
         <source>Align sequence to this alignment</source>
         <translation>Выровнять последовательность на это выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="515"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
         <source>Set this sequence as reference</source>
         <translation>Сделать референсной</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="519"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
         <source>Unset reference sequence</source>
         <translation>Отменить референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="791"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="794"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="792"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="795"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="451"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="452"/>
         <source>View</source>
         <translation>Вид</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="147"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="148"/>
         <source>Change Font</source>
         <translation>Изменить шрифт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="151"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="152"/>
         <source>Build Tree</source>
         <translation>Построить дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="365"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="366"/>
         <source>Select font for alignment</source>
         <translation>Выбрать шрифт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="478"/>
         <source>Statistics</source>
         <translation>Статистика</translation>
     </message>
@@ -5279,34 +5335,34 @@ Please, check external tools in the settings.</source>
         <translation>Копировать текущую последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="110"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="139"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="116"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="145"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="112"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="141"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="118"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="147"/>
         <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="127"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="133"/>
         <source>MSA Object is NULL</source>
         <translation>MSA Object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="132"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="138"/>
         <source>Invalid sequence index</source>
         <translation>Invalid sequence index</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="866"/>
         <source>Rename</source>
         <translation>Переименовать</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="861"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="867"/>
         <source>New sequence name:</source>
         <translation>Новое имя:</translation>
     </message>
@@ -5322,273 +5378,296 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="109"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="117"/>
         <source>Remove selection</source>
         <translation>Удалить выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="120"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="128"/>
         <source>Remove columns of gaps...</source>
         <translation>Удалить столбцы пробелов...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="143"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="151"/>
         <source>Go to position...</source>
         <translation>Перейти...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="150"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="158"/>
         <source>Remove all gaps</source>
         <translation>Удалить все пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="154"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="162"/>
         <source>Sequence from file...</source>
         <translation>Добавить последовательность из файла...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="158"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="166"/>
         <source>Sequence from current project...</source>
         <translation>Добавить последовательность из проекта...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="162"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="170"/>
         <source>Sort sequences by name</source>
         <translation>Отсортировать последовательности по имени</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="184"/>
         <source>Replace selected rows with reverse-complement</source>
         <translation>Заменить выделенные строки обратно-комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="180"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="188"/>
+        <source>Replace selected character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="194"/>
         <source>Replace selected rows with reverse</source>
         <translation>Заменить выделенные строки обратными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="184"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="198"/>
         <source>Replace selected rows with complement</source>
         <translation>Заменить выделенные строки комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="289"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="230"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="348"/>
         <source>Use dots</source>
-        <translation type="unfinished">Использовать точки</translation>
+        <translation>Использовать точки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="342"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="294"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="565"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="621"/>
+        <source>Unknown alphabet</source>
+        <translation>Неизвестный алфавит</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="440"/>
         <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="344"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="442"/>
         <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="490"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="603"/>
         <source>No reference sequence selected</source>
         <translation>Не выбрана референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="589"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="726"/>
         <source>Alignment object is NULL</source>
         <translation>Alignment object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="740"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="835"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="865"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="960"/>
         <source>Position is out of range: %1</source>
         <translation>Позиция выходит за рамки региона: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="766"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="844"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="891"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="969"/>
         <source>Sequence is out of range: %1</source>
         <translation>Последовательность выходит за рамки региона: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="803"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="928"/>
         <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="804"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="929"/>
         <source>startPos is too big</source>
         <translation>startPos is too big</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="825"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="950"/>
         <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="826"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="951"/>
         <source>startSeq is too big</source>
         <translation>startSeq is too big</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="858"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="983"/>
         <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="883"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1008"/>
         <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="929"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1055"/>
         <source>Alignment object is not available</source>
         <translation>Alignment object is not available</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="960"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1086"/>
         <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="961"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1087"/>
         <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="994"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1120"/>
         <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="995"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1121"/>
         <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="1018"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1144"/>
         <source>Invalid collapsible item model!</source>
         <translation>Invalid collapsible item model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1647"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1781"/>
         <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="1867"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2001"/>
         <source>Custom schemes</source>
         <translation>Пользовательские схемы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1878"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2012"/>
         <source>Create new color scheme</source>
         <translation>Создать новую цветовую схему</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1886"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2020"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1911"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2010"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2071"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2470"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2043"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2062"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2222"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2677"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2006"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2157"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2119"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2270"/>
         <source>Warning!</source>
         <translation>Внимание!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2119"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2270"/>
         <source>You must select only one sequence for export.</source>
         <translation>Необходимо выбрать только одну последовательность для экспорта.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2312"/>
         <source>warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2312"/>
         <source>The document already in the project</source>
         <translation>Документ уже содержится в проекте</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2388"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2391"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2539"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2595"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2598"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2487"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2492"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2699"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2515"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2722"/>
         <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="2517"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2724"/>
         <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="2676"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2883"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1965"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2116"/>
         <source>Go To</source>
         <translation>Выбор позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="126"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="134"/>
         <source>Fill selection with gaps</source>
         <translation>Заполнить пробелами</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="133"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="141"/>
         <source>Save subalignment</source>
         <translation>Сохранить область выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="138"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="146"/>
         <source>Save sequence</source>
         <translation>Сохранить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="166"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="174"/>
         <source>Switch on/off collapsing</source>
         <translation>Включить/выключить режим схлопывания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="171"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="179"/>
         <source>Update collapsed groups</source>
         <translation>Обновить схлопнутые группы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="491"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="604"/>
         <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="1860"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1994"/>
         <source>Colors</source>
         <translation>Раскраска</translation>
     </message>
@@ -5596,16 +5675,12 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="76"/>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="82"/>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="90"/>
         <source>-</source>
-        <translation>-</translation>
+        <translation type="vanished">-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="133"/>
         <source>score</source>
-        <translation>счет</translation>
+        <translation type="vanished">счет</translation>
     </message>
 </context>
 <context>
@@ -5704,62 +5779,81 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAEditorTreeViewer</name>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="63"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="65"/>
         <source>MSAEditor tree toolbar</source>
         <translation>Панель опций редактора деревьев</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="66"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="68"/>
         <source>Sort alignment by tree</source>
         <translation>Сортировать выравнивание по дереву</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="70"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="72"/>
         <source>Refresh tree</source>
         <translation>Обновить дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="214"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="225"/>
+        <source>Alignment Modification Confirmation</source>
+        <translation type="unfinished"></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>
+    </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>
+    </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>Список последовательностей был изменен</translation>
+        <translation type="vanished">Список последовательностей был изменен</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="215"/>
         <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>Список последовательностей в множественном выравнивании был изменен.
+        <translation type="vanished">Список последовательностей в множественном выравнивании был изменен.
 Если вы подтвердите изменения, синхронизация между данным выравниванием и соответствующими филогенетическими деревьями будет потеряна.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="218"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="231"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="219"/>
         <source>Confirm the modification</source>
-        <translation>Применить изменения</translation>
+        <translation type="vanished">Применить изменения</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="908"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="909"/>
         <source>Copy selection</source>
         <translation>Копировать выделенное</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="917"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="918"/>
         <source>Copy formatted</source>
         <translation>Копировать выделенное с учетом формата</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1051"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="1052"/>
         <source>Tree view</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="976"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="977"/>
         <source>Consensus</source>
         <translation>Консенсус</translation>
     </message>
@@ -5767,9 +5861,8 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAEditorUpdatedTabWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="472"/>
         <source>Add existing tree</source>
-        <translation>Добавить существующее дерево</translation>
+        <translation type="vanished">Добавить существующее дерево</translation>
     </message>
 </context>
 <context>
@@ -5783,14 +5876,12 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGapOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="154"/>
         <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
+        <translation type="vanished">MSA is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="156"/>
         <source>No sequences in MSA</source>
-        <translation>No sequences in MSA</translation>
+        <translation type="vanished">No sequences in MSA</translation>
     </message>
 </context>
 <context>
@@ -5814,7 +5905,12 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGraphCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="65"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
+        <source>MSA is NULL</source>
+        <translation type="unfinished">MSA is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
         <source>Overview width is zero</source>
         <translation>Overview width is zero</translation>
     </message>
@@ -5827,17 +5923,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="100"/>
         <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="105"/>
         <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="114"/>
         <source>Overview is rendering...</source>
         <translation>Панорама рассчитывается...</translation>
     </message>
@@ -5845,27 +5941,27 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAHighlightingOverviewCalculationTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="215"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="201"/>
         <source>MSA highlighting scheme registry is NULL</source>
         <translation>MSA highlighting scheme registry is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="217"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="203"/>
         <source>MSA highlighting scheme factory with '%1' id is NULL</source>
         <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="234"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="220"/>
         <source>Color scheme is NULL</source>
         <translation>Color scheme is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="235"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="221"/>
         <source>Highlighting scheme is NULL</source>
         <translation>Highlighting scheme is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="236"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="222"/>
         <source>Highlighting scheme factory is NULL</source>
         <translation>Highlighting scheme factory is NULL</translation>
     </message>
@@ -5918,22 +6014,22 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="189"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="186"/>
         <source>Alignment</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="237"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
         <source>MSA sequence area is NULL</source>
         <translation>MSA sequence area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="271"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="268"/>
         <source>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</source>
         <translation>Предупреждение: выделенный регион слишком большой для экспорта. Вы можете попробовать приблизить выравнивание или выделить другой регион.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="274"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="271"/>
         <source>Warning: selected region is too big to be exported. You can try to select another region.</source>
         <translation>Предупреждение: выделенный регион слишком большой для экспорта. Вы можете попробовать выделить другой регион.</translation>
     </message>
@@ -5941,7 +6037,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="44"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="41"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
@@ -5960,18 +6056,18 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="69"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="66"/>
         <source>Nothing to export</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="78"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="87"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="75"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="84"/>
         <source>Alignment is too big. </source>
         <translation>Alignment is too big. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="89"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="86"/>
         <source>Cannot save the file. </source>
         <translation>Cannot save the file. </translation>
     </message>
@@ -5979,22 +6075,22 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAImageExportToSvgTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="139"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="136"/>
         <source>Nothing to export</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="158"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
         <source>The image size is too big.</source>
         <translation>The image size is too big.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="162"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="159"/>
         <source>SVG %1</source>
         <translation>SVG %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="163"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="160"/>
         <source>SVG image of multiple alignment created by Unipro UGENE</source>
         <translation>SVG изображение множественного выравнивания создано Unipro UGENE</translation>
     </message>
@@ -6126,14 +6222,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="110"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="101"/>
         <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="153"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="149"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
@@ -6162,6 +6258,44 @@ Simple overview is unavailable.</source>
     </message>
 </context>
 <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"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="117"/>
+        <source>score</source>
+        <translation type="unfinished">счет</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaEditorTreeTab</name>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
+        <source>Add existing tree</source>
+        <translation type="unfinished">Добавить существующее дерево</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="54"/>
+        <source>Close other tabs</source>
+        <translation type="unfinished">Закрыть все вкладки</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="58"/>
+        <source>Close all tabs</source>
+        <translation type="unfinished">Закрыть все вкладки</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="62"/>
+        <source>Close tab</source>
+        <translation type="unfinished">Закрыть вкладку</translation>
+    </message>
+</context>
+<context>
     <name>U2::ObjectViewTask</name>
     <message>
         <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="275"/>
@@ -6349,37 +6483,41 @@ Simple overview is unavailable.</source>
         <translation>Выходные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="147"/>
         <source>Warning: Current alphabet does not correspond the requirements.</source>
-        <translation>Предупреждение: текущий алфавит не соответствует требованиям.</translation>
+        <translation type="vanished">Предупреждение: текущий алфавит не соответствует требованиям.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="155"/>
+        <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="193"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="199"/>
         <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="229"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="235"/>
         <source>Not defined</source>
         <translation>Не найдено</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="307"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Save file</source>
         <translation>Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="307"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Clustal format (*.aln)</source>
         <translation>Формат Clustal (*.aln)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="346"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="346"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
         <source>Please, change the output file.</source>
         <translation>Измените выходной файл.</translation>
     </message>
@@ -6422,8 +6560,7 @@ Simple overview is unavailable.</source>
         <translation>Изменён видимый диапазон: [%1, %2]</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="628"/>
-        <location filename="../src/ov_sequence/PanView.cpp" line="860"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="916"/>
         <source>empty</source>
         <translation><пусто></translation>
     </message>
@@ -6431,7 +6568,7 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::PanViewRenderArea</name>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="965"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="966"/>
         <source>[%1 %2]</source>
         <translation>[%1 %2]</translation>
     </message>
@@ -6901,37 +7038,37 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::TreeOptionsWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="123"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="124"/>
         <source>General</source>
         <translation>Основные</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="125"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="126"/>
         <source>Labels</source>
         <translation>Названия</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="127"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="128"/>
         <source>Scale Bar</source>
         <translation>Шкала</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="129"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="130"/>
         <source>Branches</source>
         <translation>Ветви</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Rectangular</source>
         <translation>Прямоугольное</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Circular</source>
         <translation>Круговое</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="257"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
         <source>Unrooted</source>
         <translation>Неукорененное</translation>
     </message>
@@ -7094,39 +7231,32 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::UpdatedTabWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="309"/>
         <source>Refresh tab</source>
-        <translation>Обновить вкладку</translation>
+        <translation type="vanished">Обновить вкладку</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="311"/>
         <source>Refresh all tabs</source>
-        <translation>Обновить все вкладки</translation>
+        <translation type="vanished">Обновить все вкладки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="316"/>
         <source>Close other tabs</source>
-        <translation>Закрыть все вкладки</translation>
+        <translation type="vanished">Закрыть все вкладки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="318"/>
         <source>Close all tabs</source>
-        <translation>Закрыть все вкладки</translation>
+        <translation type="vanished">Закрыть все вкладки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="320"/>
         <source>Close tab</source>
-        <translation>Закрыть вкладку</translation>
+        <translation type="vanished">Закрыть вкладку</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="325"/>
         <source>Add horizontal splitter</source>
-        <translation>Добавить горизонтальный разрыв</translation>
+        <translation type="vanished">Добавить горизонтальный разрыв</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorDataList.cpp" line="327"/>
         <source>Add vertical splitter</source>
-        <translation>Добавить вертикальный разрыв</translation>
+        <translation type="vanished">Добавить вертикальный разрыв</translation>
     </message>
 </context>
 <context>
diff --git a/src/include/U2Core/DASSource.h b/src/include/U2Core/DASSource.h
deleted file mode 100644
index ede7c59..0000000
--- a/src/include/U2Core/DASSource.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/datatype/DASSource.h"
diff --git a/src/include/U2Core/LoadDASDocumentTask.h b/src/include/U2Core/LoadDASDocumentTask.h
deleted file mode 100644
index 1446fee..0000000
--- a/src/include/U2Core/LoadDASDocumentTask.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/tasks/LoadDASDocumentTask.h"
diff --git a/src/include/U2Core/PicrApiTask.h b/src/include/U2Core/PicrApiTask.h
deleted file mode 100644
index 41851ff..0000000
--- a/src/include/U2Core/PicrApiTask.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/tasks/PicrApiTask.h"
diff --git a/src/include/U2Core/TaskWatchdog.h b/src/include/U2Core/TaskWatchdog.h
new file mode 100644
index 0000000..31aa3df
--- /dev/null
+++ b/src/include/U2Core/TaskWatchdog.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/TaskWatchdog.h"
diff --git a/src/include/U2Core/UniprotBlastTask.h b/src/include/U2Core/UniprotBlastTask.h
deleted file mode 100644
index 6d5ba9f..0000000
--- a/src/include/U2Core/UniprotBlastTask.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/tasks/UniprotBlastTask.h"
diff --git a/src/include/U2Test/CustomScenario.h b/src/include/U2Test/CustomScenario.h
new file mode 100644
index 0000000..5608f44
--- /dev/null
+++ b/src/include/U2Test/CustomScenario.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Test/src/gui_tests/CustomScenario.h"
diff --git a/src/include/U2Test/GUITestThread.h b/src/include/U2Test/GUITestThread.h
new file mode 100644
index 0000000..34c2240
--- /dev/null
+++ b/src/include/U2Test/GUITestThread.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Test/src/gui_tests/GUITestThread.h"
diff --git a/src/include/U2Test/MainThreadRunnable.h b/src/include/U2Test/MainThreadRunnable.h
new file mode 100644
index 0000000..8599c6e
--- /dev/null
+++ b/src/include/U2Test/MainThreadRunnable.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Test/src/gui_tests/MainThreadRunnable.h"
diff --git a/src/include/U2View/DasWidgetFactory.h b/src/include/U2View/DasWidgetFactory.h
deleted file mode 100644
index ccf2ebc..0000000
--- a/src/include/U2View/DasWidgetFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.h"
diff --git a/src/include/U2View/MSAEditorDataList.h b/src/include/U2View/MSAEditorDataList.h
deleted file mode 100644
index 460eb58..0000000
--- a/src/include/U2View/MSAEditorDataList.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorDataList.h"
diff --git a/src/include/U2View/MSASimpleOverview.h b/src/include/U2View/MSASimpleOverview.h
new file mode 100644
index 0000000..f263525
--- /dev/null
+++ b/src/include/U2View/MSASimpleOverview.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h"
diff --git a/src/include/U2View/MsaEditorSimilarityColumn.h b/src/include/U2View/MsaEditorSimilarityColumn.h
new file mode 100644
index 0000000..9b6faba
--- /dev/null
+++ b/src/include/U2View/MsaEditorSimilarityColumn.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h"
diff --git a/src/libs_3rdparty/humimit/Doxyfile b/src/libs_3rdparty/humimit/Doxyfile
new file mode 100644
index 0000000..7b48487
--- /dev/null
+++ b/src/libs_3rdparty/humimit/Doxyfile
@@ -0,0 +1,2384 @@
+# Doxyfile 1.8.10
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "HumImit"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = ./src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,
+# *.vhdl, *.ucf, *.qsf, *.as and *.js.
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = YES
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               = humimit.qhp
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/src/libs_3rdparty/humimit/humimit.pri b/src/libs_3rdparty/humimit/humimit.pri
new file mode 100644
index 0000000..3e945f7
--- /dev/null
+++ b/src/libs_3rdparty/humimit/humimit.pri
@@ -0,0 +1,69 @@
+# include (humimit.pri)
+
+include( ../../ugene_globals.pri )
+UGENE_RELATIVE_DESTDIR = ''
+
+TARGET = humimit
+TEMPLATE = lib
+CONFIG += thread debug_and_release warn_off qt dll
+INCLUDEPATH += src _tmp ../../include
+LIBS += -L../../_release
+QT += testlib 
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets 
+
+DEFINES += BUILDING_HUMIMIT_DLL
+DEFINES += QT_DLL
+
+!debug_and_release|build_pass {
+
+    CONFIG(debug, debug|release) {
+        TARGET = humimitd
+        DEFINES += _DEBUG
+        CONFIG +=console
+        DESTDIR=../../_debug/
+        OBJECTS_DIR=_tmp/obj/debug
+        LIBS -= -L../../_release
+        LIBS += -L../../_debug
+    }
+
+    CONFIG(release, debug|release) {
+        TARGET = humimit
+        DEFINES+=NDEBUG
+        DESTDIR=../../_release/
+        OBJECTS_DIR=_tmp/obj/release
+    }
+}
+
+
+unix {
+    !macx {
+    LIBS += -lXtst
+    }
+    macx {
+    QMAKE_LFLAGS += -framework ApplicationServices
+    }
+}
+
+win32 {
+    LIBS += User32.lib Gdi32.lib
+}
+
+macx {
+    LIBS += -framework AppKit
+}
+
+
+win32 {
+    QMAKE_CXXFLAGS_WARN_ON = -W3
+    QMAKE_CFLAGS_WARN_ON = -W3
+
+    QMAKE_MSVC_PROJECT_NAME=lib_3rd_humimit
+}
+
+
+unix {
+    target.path = $$UGENE_INSTALL_DIR/$$UGENE_RELATIVE_DESTDIR
+    INSTALLS += target
+}
+
diff --git a/src/libs_3rdparty/humimit/humimit.pro b/src/libs_3rdparty/humimit/humimit.pro
new file mode 100644
index 0000000..67bec10
--- /dev/null
+++ b/src/libs_3rdparty/humimit/humimit.pro
@@ -0,0 +1,110 @@
+include (humimit.pri)
+
+# Input
+HEADERS += \
+            src/GTGlobals.h \
+           src/base_dialogs/ColorDialogFiller.h \
+           src/base_dialogs/DefaultDialogFiller.h \
+           src/base_dialogs/FontDialogFiller.h \
+           src/base_dialogs/GTFileDialog.h \
+           src/base_dialogs/MessageBoxFiller.h \
+           src/drivers/GTKeyboardDriver.h \
+           src/drivers/GTMouseDriver.h \
+           src/primitives/GTAction.h \
+           src/primitives/GTCheckBox.h \
+           src/primitives/GTComboBox.h \
+           src/primitives/GTDoubleSpinBox.h \
+           src/primitives/GTGroupBox.h \
+           src/primitives/GTLineEdit.h \
+           src/primitives/GTListWidget.h \
+           src/primitives/GTMainWindow.h \
+           src/primitives/GTMenu.h \
+           src/primitives/GTMenuBar.h \
+           src/primitives/GTPlainTextEdit.h \
+           src/primitives/GTRadioButton.h \
+           src/primitives/GTScrollBar.h \
+           src/primitives/GTSlider.h \
+           src/primitives/GTSpinBox.h \
+           src/primitives/GTTabBar.h \
+           src/primitives/GTTableView.h \
+           src/primitives/GTTabWidget.h \
+           src/primitives/GTTextEdit.h \
+           src/primitives/GTToolbar.h \
+           src/primitives/GTTreeView.h \
+           src/primitives/GTTreeWidget.h \
+           src/primitives/GTWebView.h \
+           src/primitives/GTWidget.h \
+           src/primitives/PopupChooser.h \
+           src/primitives/private/GTMenuPrivate.h \
+           src/system/GTClipboard.h \
+           src/system/GTFile.h \
+           src/utils/GTKeyboardUtils.h \
+           src/utils/GTThread.h \
+           src/utils/GTUtilsApp.h \
+           src/utils/GTUtilsDialog.h \
+           src/utils/GTUtilsToolTip.h \
+           src/utils/GTMouseUtils.h \
+           src/core/GUITestOpStatus.h \
+           src/core/global.h \
+           src/core/CustomScenario.h \
+           src/core/GUITest.h \
+           src/core/MainThreadRunnable.h \
+           src/core/MainThreadTimer.h
+SOURCES += \
+           src/GTGlobals.cpp \
+           src/base_dialogs/ColorDialogFiller.cpp \
+           src/base_dialogs/DefaultDialogFiller.cpp \
+           src/base_dialogs/FontDialogFiller.cpp \
+           src/base_dialogs/GTFileDialog.cpp \
+           src/base_dialogs/MessageBoxFiller.cpp \
+           src/drivers/GTKeyboardDriver.cpp \
+           src/drivers/GTKeyboardDriverLinux.cpp \
+           src/drivers/GTKeyboardDriverMac.cpp \
+           src/drivers/GTKeyboardDriverWindows.cpp \
+           src/drivers/GTMouseDriver.cpp \
+           src/drivers/GTMouseDriverLinux.cpp \
+           src/drivers/GTMouseDriverMac.cpp \
+           src/drivers/GTMouseDriverWindows.cpp \
+           src/primitives/GTAction.cpp \
+           src/primitives/GTCheckBox.cpp \
+           src/primitives/GTComboBox.cpp \
+           src/primitives/GTDoubleSpinBox.cpp \
+           src/primitives/GTGroupBox.cpp \
+           src/primitives/GTLineEdit.cpp \
+           src/primitives/GTListWidget.cpp \
+           src/primitives/GTMainWindow.cpp \
+           src/primitives/GTMenu.cpp \
+           src/primitives/GTMenuBar.cpp \
+           src/primitives/GTPlainTextEdit.cpp \
+           src/primitives/GTRadioButton.cpp \
+           src/primitives/GTScrollBar.cpp \
+           src/primitives/GTSlider.cpp \
+           src/primitives/GTSpinBox.cpp \
+           src/primitives/GTTabBar.cpp \
+           src/primitives/GTTableView.cpp \
+           src/primitives/GTTabWidget.cpp \
+           src/primitives/GTTextEdit.cpp \
+           src/primitives/GTToolbar.cpp \
+           src/primitives/GTTreeView.cpp \
+           src/primitives/GTTreeWidget.cpp \
+           src/primitives/GTWebView.cpp \
+           src/primitives/GTWidget.cpp \
+           src/primitives/PopupChooser.cpp \
+           src/primitives/private/GTMenuPrivate.cpp \
+           src/system/GTClipboard.cpp \
+           src/system/GTFile.cpp \
+           src/utils/GTKeyboardUtils.cpp \
+           src/utils/GTThread.cpp \
+           src/utils/GTUtilsApp.cpp \
+           src/utils/GTUtilsDialog.cpp \
+           src/utils/GTUtilsToolTip.cpp \
+           src/utils/GTMouseUtils.cpp \
+           src/core/CustomScenario.cpp \
+           src/core/GUITest.cpp \
+           src/core/MainThreadRunnable.cpp \
+           src/core/MainThreadTimer.cpp
+
+macx {
+OBJECTIVE_HEADERS += src/primitives/private/GTMenuPrivateMac.h
+OBJECTIVE_SOURCES += src/primitives/private/GTMenuPrivateMac.mm
+}
diff --git a/src/plugins/GUITestBase/src/api/GTGlobals.cpp b/src/libs_3rdparty/humimit/src/GTGlobals.cpp
similarity index 88%
rename from src/plugins/GUITestBase/src/api/GTGlobals.cpp
rename to src/libs_3rdparty/humimit/src/GTGlobals.cpp
index 1c6fc83..5336e6a 100644
--- a/src/plugins/GUITestBase/src/api/GTGlobals.cpp
+++ b/src/libs_3rdparty/humimit/src/GTGlobals.cpp
@@ -33,8 +33,7 @@
 #include <QtGui/QScreen>
 #endif
 
-#include "api/GTGlobals.h"
-#include <U2Core/AppContext.h>
+#include "GTGlobals.h"
 
 #ifdef Q_OS_WIN
 #include <windows.h>
@@ -42,7 +41,7 @@
 #include <unistd.h>
 #endif
 
-namespace U2 {
+namespace HI {
 namespace {
     void sysSleep(int sec) {
 #ifdef Q_OS_WIN
@@ -68,11 +67,7 @@ void GTGlobals::sendEvent(QObject *obj, QEvent *e) {
 }
 
 void GTGlobals::takeScreenShot(QString path) {
-#if (QT_VERSION < 0x050000) // deprecated method
-    QPixmap originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
-#else
     QPixmap originalPixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
-#endif
     originalPixmap.save(path);
 }
 
@@ -84,7 +79,7 @@ GTGlobals::FindOptions::FindOptions(bool fail) :
 }
 
 void GTGlobals::GUITestFail(){
-    uiLog.trace("\nGT_DEBUG_MESSAGE !!!FIRST FAIL");
+    qCritical("\nGT_DEBUG_MESSAGE !!!FIRST FAIL");
 }
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTGlobals.h b/src/libs_3rdparty/humimit/src/GTGlobals.h
similarity index 65%
rename from src/plugins/GUITestBase/src/api/GTGlobals.h
rename to src/libs_3rdparty/humimit/src/GTGlobals.h
index 2193d56..060be97 100644
--- a/src/plugins/GUITestBase/src/api/GTGlobals.h
+++ b/src/libs_3rdparty/humimit/src/GTGlobals.h
@@ -19,39 +19,73 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_GLOBALS_H_
-#define _U2_GT_GLOBALS_H_
+#ifndef _HI_GT_GLOBALS_H_
+#define _HI_GT_GLOBALS_H_
 
-#include <U2Core/U2OpStatus.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/Log.h>
+#include <core/global.h>
+#include <core/GUITestOpStatus.h>
+#include <QMessageLogger>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
-namespace U2 {
+namespace HI {
+/*!
+ * \brief The class contains the most commonly used methods
+ */
+class HI_EXPORT GTGlobals {
+public:
+    enum UseMethod {UseMouse, UseKey, UseKeyBoard};
+    enum WindowAction {Minimize, Maximize, Close, WindowActionCount};
+
+    // if failIfNull is set to true, fails if object wasn't found
+	class HI_EXPORT FindOptions {
+    public:
+        FindOptions(bool fail = true);
+
+        int depth;
+        bool failIfNull;
+        Qt::MatchFlags matchPolicy;
+
+        static const int INFINITE_DEPTH = 0;
+    };
+
+    static void sleep(int msec = 2000);
+    static void systemSleep(int sec = 2);
+    static void sendEvent(QObject *obj, QEvent *e);
+    static void takeScreenShot(QString path);
+    static void GUITestFail();
+};
 
 #define GT_DEBUG_MESSAGE(condition, errorMessage, result) \
 { \
-    uiLog.trace("\n------------"); \
-    uiLog.trace("GT_DEBUG_MESSAGE Checking condition <" #condition ">"); \
-    uiLog.trace("GT_DEBUG_MESSAGE errorMessage <" + QString(errorMessage) + ">"); \
+    QString cond = #condition;\
     if (condition) { \
-        uiLog.trace("GT_DEBUG_MESSAGE ok"); \
+        qDebug("GT_DEBUG_MESSAGE Checking condition (%s). Result: OK", cond.toLocal8Bit().constData()); \
     } \
     else { \
-        uiLog.trace("GT_DEBUG_MESSAGE FAILED"); \
+        qWarning("\n------------"); \
+        qWarning("GT_DEBUG_MESSAGE Checking condition (%s). Result: FAILED", cond.toLocal8Bit().constData()); \
+        qWarning("GT_DEBUG_MESSAGE errorMessage '%s'", QString(errorMessage).toLocal8Bit().constData()); \
+        qWarning("------------\n"); \
     } \
     if (os.hasError()) { \
-        uiLog.trace("GT_DEBUG_MESSAGE OpStatus already has error"); \
-        uiLog.trace("GT_DEBUG_MESSAGE OpStatus error <" + os.getError() + ">"); \
+        qCritical("GT_DEBUG_MESSAGE OpStatus already has error"); \
+        qCritical("GT_DEBUG_MESSAGE OpStatus error '%s'",os.getError().toLocal8Bit().constData()); \
     } \
-    uiLog.trace("------------\n"); \
 }
 
+/**
+    Checks condition is false and returns the result if it is.
+    Before the result is returned the 'extraOp' operation is performed (for example logging)
+
+    Code style hint: use CHECK macro only to make error processing more compact but not all if {return;} patterns !
+*/
+#define CHECK_EXT(condition, extraOp, result) \
+    if (!(condition)) { \
+        extraOp; \
+        return result; \
+    }
+
 /** Used in tests */
 #define CHECK_SET_ERR(condition, errorMessage) \
     CHECK_SET_ERR_RESULT(condition, errorMessage, )
@@ -67,8 +101,8 @@ namespace U2 {
 #define CHECK_SET_ERR_RESULT(condition, errorMessage, result) \
 { \
     GT_DEBUG_MESSAGE(condition, errorMessage, result); \
-    if (os.hasError()) { GTGlobals::GUITestFail(); os.setError(os.getError()); return result; } \
-    CHECK_EXT(condition, if (!os.hasError()) { GTGlobals::GUITestFail(); os.setError(errorMessage);}, result) \
+    if (os.hasError()) { HI::GTGlobals::GUITestFail(); os.setError(os.getError()); return result; } \
+    CHECK_EXT(condition, if (!os.hasError()) { HI::GTGlobals::GUITestFail(); os.setError(errorMessage);}, result) \
 }
 
 #define CHECK_OP_SET_ERR_RESULT(os, errorMessage, result) \
@@ -92,31 +126,6 @@ namespace U2 {
 #define GT_CHECK_OP_RESULT(os, errorMessage, result) \
     GT_CHECK_RESULT(!os.isCoR(), errorMessage, result)
 
-
-class GTGlobals {
-public:
-    enum UseMethod {UseMouse, UseKey, UseKeyBoard};
-    enum WindowAction {Minimize, Maximize, Close, WindowActionCount};
-
-    // if failIfNull is set to true, fails if object wasn't found
-    class FindOptions {
-    public:
-        FindOptions(bool fail = true);
-
-        int depth;
-        bool failIfNull;
-        Qt::MatchFlags matchPolicy;
-
-        static const int INFINITE_DEPTH = 0;
-    };
-
-    static void sleep(int msec = 2000);
-    static void systemSleep(int sec = 2);
-    static void sendEvent(QObject *obj, QEvent *e);
-    static void takeScreenShot(QString path);
-    static void GUITestFail();
-};
-
 } //namespace
 
 #endif
diff --git a/src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.cpp b/src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.cpp
similarity index 69%
rename from src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.cpp
rename to src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.cpp
index b36b361..00bcc54 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.cpp
@@ -19,24 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include <api/GTKeyboardDriver.h>
-#include <api/GTSpinBox.h>
-#include "api/GTWidget.h"
-#include "ColorDialogFiller.h"
+#include "base_dialogs/ColorDialogFiller.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
+
+#include <QApplication>
 #include <QColor>
 #include <QColorDialog>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-#include <QWidget>
 #include <QSpinBox>
-namespace U2{
+#include <QWidget>
+
+namespace HI{
 
 #define GT_CLASS_NAME "GTUtilsDialog::ColorDialog filler"
 #define GT_METHOD_NAME "run"
 void ColorDialogFiller::run(){
+    GTGlobals::sleep();
 #ifdef Q_OS_LINUX
     setWithQt = true;
 #endif
@@ -44,10 +44,24 @@ void ColorDialogFiller::run(){
     GT_CHECK(dialog!=NULL, "dialog is NULL");
 
     if(setWithQt){
+        class Scenario : public CustomScenario {
+        public:
+            Scenario(QColorDialog* _d, QColor _c): d(_d), c(_c) {}
+            void run(GUITestOpStatus &os) {
+                Q_UNUSED(os);
+                d->setCurrentColor(c);
+                GTGlobals::sleep();
+                d->accept();
+            }
+        private:
+            QColorDialog* d;
+            QColor c;
+        };
+
         QColorDialog* d = qobject_cast<QColorDialog*>(dialog);
-        d->setCurrentColor(QColor(r, g, b));
-        GTGlobals::sleep();
-        d->accept();
+        GTThread::runInMainThread(os, new Scenario(d, QColor(r, g, b)));
+        GTThread::waitForMainThread(os);
+        GTGlobals::sleep(500);
         return;
     }
 
diff --git a/src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.h b/src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.h
similarity index 83%
rename from src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.h
rename to src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.h
index c06b898..9334d67 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/ColorDialogFiller.h
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/ColorDialogFiller.h
@@ -22,13 +22,13 @@
 #ifndef COLORDIALOGFILLER_H
 #define COLORDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
-namespace U2{
+#include "utils/GTUtilsDialog.h"
+namespace HI{
 
-class ColorDialogFiller : public Filler
+class HI_EXPORT ColorDialogFiller : public Filler
 {
 public:
-    ColorDialogFiller(U2OpStatus &os,int _r, int _g, int _b, bool _setWithQt = false) : Filler(os, ""),
+    ColorDialogFiller(GUITestOpStatus &os,int _r, int _g, int _b, bool _setWithQt = false) : Filler(os, ""),
         r(_r),g(_g),b(_b),setWithQt(_setWithQt){}
     virtual void run();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.cpp b/src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.cpp
similarity index 86%
rename from src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.cpp
rename to src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.cpp
index f78b1a0..e5e99c0 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.cpp
@@ -22,9 +22,9 @@
 
 #include "DefaultDialogFiller.h"
 
-namespace U2 {
+namespace HI {
 
-DefaultDialogFiller::DefaultDialogFiller(U2OpStatus &os, const QString &name, QDialogButtonBox::StandardButton _b, CustomScenario *scenario):
+DefaultDialogFiller::DefaultDialogFiller(GUITestOpStatus &os, const QString &name, QDialogButtonBox::StandardButton _b, CustomScenario *scenario):
     Filler(os, name, scenario),b(_b) {}
 void DefaultDialogFiller::commonScenario(){
     GTUtilsDialog::clickButtonBox(os, b);
diff --git a/src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.h b/src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.h
similarity index 76%
rename from src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.h
rename to src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.h
index 58bc2be..56dfadc 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/DefaultDialogFiller.h
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/DefaultDialogFiller.h
@@ -19,17 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_DEFAULT_DIALOG_FILLER_H_
-#define _U2_DEFAULT_DIALOG_FILLER_H_
+#ifndef _HI_DEFAULT_DIALOG_FILLER_H_
+#define _HI_DEFAULT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-namespace U2 {
+namespace HI {
 
-class DefaultDialogFiller: public Filler
+class HI_EXPORT DefaultDialogFiller: public Filler
 {
 public:
-    DefaultDialogFiller(U2OpStatus &os, const QString &name = "", QDialogButtonBox::StandardButton _b =
+    DefaultDialogFiller(GUITestOpStatus &os, const QString &name = "", QDialogButtonBox::StandardButton _b =
             QDialogButtonBox::Ok, CustomScenario *scenario = NULL);
     void commonScenario();
 private:
@@ -38,4 +38,4 @@ private:
 
 }
 
-#endif // DEFAULTDIALOGFILLER_H
+#endif // _HI_DEFAULT_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.cpp b/src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.cpp
similarity index 82%
rename from src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.cpp
rename to src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.cpp
index c95c046..1b8fee0 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.cpp
@@ -20,19 +20,13 @@
  */
 
 #include "FontDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTKeyboardDriver.h"
+#include <primitives/GTWidget.h>
+#include <drivers/GTKeyboardDriver.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QAbstractButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QAbstractButton>
-#endif
+#include <QApplication>
+#include <QAbstractButton>
 
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTUtilsDialog::FontDialogFiller"
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.h b/src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.h
similarity index 72%
rename from src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.h
rename to src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.h
index e46ed7d..024a6cb 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/FontDialogFiller.h
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/FontDialogFiller.h
@@ -19,24 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_FONT_DIALOG_FILLER_H_
-#define _U2_GT_FONT_DIALOG_FILLER_H_
+#ifndef _HI_GT_FONT_DIALOG_FILLER_H_
+#define _HI_GT_FONT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+namespace HI {
 
-namespace U2 {
-
-    class FontDialogFiller : public Filler {
+class HI_EXPORT FontDialogFiller : public Filler {
     public:
-        FontDialogFiller(U2OpStatus &_os)
+        FontDialogFiller(GUITestOpStatus &_os)
             :Filler(_os, ""){}
         virtual void run();
     };
 }
-#endif //_U2_GT_FONT_DIALOG_FILLER_H_
+#endif //_HI_GT_FONT_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/api/GTFileDialog.cpp b/src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.cpp
similarity index 74%
rename from src/plugins/GUITestBase/src/api/GTFileDialog.cpp
rename to src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.cpp
index a0e610f..49a6e69 100644
--- a/src/plugins/GUITestBase/src/api/GTFileDialog.cpp
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.cpp
@@ -19,42 +19,31 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTFileDialog.h"
-#include "GTMenu.h"
-#include "GTKeyboardDriver.h"
-#include "GTMouseDriver.h"
-#include "GTComboBox.h"
-#include "api/GTGlobals.h"
-#include "api/GTLineEdit.h"
-#include "GTWidget.h"
-
-#include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QFileSystemModel>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QTreeView>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QFileSystemModel>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTreeView>
-#endif
+#include "base_dialogs/GTFileDialog.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "GTGlobals.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
+
+#include <QApplication>
+#include <QComboBox>
+#include <QFileSystemModel>
+#include <QHeaderView>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QTreeView>
 
 #define FILE_NAME_LINE_EDIT "fileNameEdit"
 #define CURRENT_FODLER_COMBO_BOX "lookInCombo"
 
-namespace U2 {
-
+namespace HI {
 #define GT_CLASS_NAME "GTFileDialogUtils"
 
-GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &_os, const QString &_path, const QString &_fileName,
+GTFileDialogUtils::GTFileDialogUtils(GUITestOpStatus &_os, const QString &_path, const QString &_fileName,
                                      Button _button, GTGlobals::UseMethod _method) :
     Filler(_os, "QFileDialog"),
     fileName(_fileName),
@@ -67,7 +56,7 @@ GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &_os, const QString &_path, cons
     }
 }
 
-GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &os, const QString &filePath, GTGlobals::UseMethod method, Button b) :
+GTFileDialogUtils::GTFileDialogUtils(GUITestOpStatus &os, const QString &filePath, GTGlobals::UseMethod method, Button b) :
     Filler(os, "QFileDialog"),
     button(b),
     method(method)
@@ -81,7 +70,7 @@ GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &os, const QString &filePath, GT
     }
 }
 
-GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &os, CustomScenario *customScenario)
+GTFileDialogUtils::GTFileDialogUtils(GUITestOpStatus &os, CustomScenario *customScenario)
     : Filler(os, "QFileDialog", customScenario),
       fileDialog(NULL),
       button(Open),
@@ -90,7 +79,7 @@ GTFileDialogUtils::GTFileDialogUtils(U2OpStatus &os, CustomScenario *customScena
 
 }
 
-#define GT_METHOD_NAME "run"
+#define GT_METHOD_NAME "commonScenario"
 void GTFileDialogUtils::commonScenario()
 {
     QWidget *dialog = QApplication::activeModalWidget();
@@ -128,37 +117,36 @@ void GTFileDialogUtils::commonScenario()
     }else{
         clickButton(button);
     }
-
+    GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
 
-GTFileDialogUtils_list::GTFileDialogUtils_list(U2OpStatus &_os, const QString &_path, const QStringList &_fileNameList) :
+GTFileDialogUtils_list::GTFileDialogUtils_list(GUITestOpStatus &_os, const QString &_path, const QStringList &fileNames) :
     GTFileDialogUtils(_os,_path, "", Open, GTGlobals::UseMouse),
-    fileNameList(_fileNameList)
+    fileNamesList(fileNames)
 {
-    path = QDir::cleanPath(QDir::currentPath() + "/" + _path);
-    if (path.at(path.count() - 1) != '/') {
-        path += '/';
+//    path = QDir::cleanPath(QDir::currentPath() + "/" + _path);
+//    if (path.at(path.count() - 1) != '/') {
+//        path += '/';
+//    }
+    foreach (const QString &name, fileNames) {
+        filePaths << _path + "/" + name;
     }
 }
 
-#define GT_METHOD_NAME "GTFileDialogUtils_list run"
-void GTFileDialogUtils_list::run(){
+GTFileDialogUtils_list::GTFileDialogUtils_list(GUITestOpStatus &os, const QStringList &filePaths) :
+    GTFileDialogUtils(os, "", "", Open, GTGlobals::UseMouse),
+    filePaths(filePaths)
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void GTFileDialogUtils_list::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
-    GT_CHECK(dialog != NULL && QString(dialog->metaObject()->className()) == "QFileDialog",
-                   "file dialog not found");
+    GT_CHECK(NULL != dialog && QString(dialog->metaObject()->className()) == "QFileDialog", "file dialog not found");
 
-    fileDialog = dialog;
-    GTGlobals::sleep(200);
-    const bool dirWasChanged = setPath();
-    GTGlobals::sleep(200);
-    if(dirWasChanged){
-        clickButton(Open);
-        GTGlobals::sleep(200);
-    }
-    setViewMode(Detail);
-    GTGlobals::sleep(200);
-    setNameList(os,fileNameList);
+    setNameList(os, filePaths);
     GTGlobals::sleep(200);
 
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
@@ -166,36 +154,33 @@ void GTFileDialogUtils_list::run(){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setNameList"
-void GTFileDialogUtils_list::setNameList(U2OpStatus &os, const QStringList & nameList){
+void GTFileDialogUtils_list::setNameList(GUITestOpStatus &os, const QStringList &nameList) {
     QString str;
     foreach (QString name, nameList){
+        if (QFileInfo(name).isRelative()) {
+            name = QApplication::applicationDirPath() + "/" + name;
+        }
         str.append('\"' + name + "\" ");
     }
     QLineEdit* fileEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os,FILE_NAME_LINE_EDIT));
-    GTLineEdit::setText(os,fileEdit,str,false,false);
+    GTLineEdit::setText(os, fileEdit, str, false, true);
 }
 #undef GT_METHOD_NAME
 
 void GTFileDialogUtils_list::selectFile(){
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    foreach(QString name, fileNameList){
+    foreach(QString name, fileNamesList){
         GTFileDialogUtils::fileName = name;
         GTFileDialogUtils::selectFile();
     }
     GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
 }
-void GTFileDialogUtils::openFileDialog()
-{
-    QMenu *menu;
-    QStringList itemPath;
-    itemPath << ACTION_PROJECTSUPPORT__OPEN_PROJECT;
 
+void GTFileDialogUtils::openFileDialog() {
     switch(method) {
     case GTGlobals::UseMouse:
-        menu = GTMenu::showMainMenu(os, MWMENU_FILE, method);
-        GTMenu::clickMenuItemByName(os, menu, itemPath);
+        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
         break;
-
     case GTGlobals::UseKey:
         GTKeyboardDriver::keyClick(os, 'O', GTKeyboardDriver::key["ctrl"]);
         break;
@@ -261,6 +246,7 @@ void GTFileDialogUtils::selectFile()
         w->scrollTo(index);
         indexCenter = w->visualRect(index).center();
         indexCenter.setY(indexCenter.y() + w->header()->rect().height());
+        indexCenter.setX(indexCenter.x()+1);
         GTMouseDriver::moveTo(os, w->mapToGlobal(indexCenter));
         GTMouseDriver::click(os);
         break;
@@ -300,8 +286,8 @@ void GTFileDialogUtils::clickButton(Button btn)
         break;
 
     case GTGlobals::UseMouse:
-        GTWidget::click(os, button_to_click);
         GTGlobals::sleep(100);
+        GTWidget::click(os, button_to_click);
         break;
     default:
         break;
@@ -318,7 +304,7 @@ void GTFileDialogUtils::setViewMode(ViewMode v)
     QAbstractButton *w = qobject_cast<QAbstractButton *>(fileDialog->findChild<QWidget*>(button[v]));
 
     GT_CHECK(w != NULL, "view mode button not found");
-    CHECK(!w->isChecked(), );
+    GT_CHECK(!w->isChecked(), );
 
     switch(method) {
     case GTGlobals::UseMouse:
@@ -341,19 +327,21 @@ void GTFileDialogUtils::setViewMode(ViewMode v)
 }
 #undef GT_METHOD_NAME
 
-void GTFileDialog::openFile(U2OpStatus &os, const QString &path, const QString &fileName,
+#define GT_METHOD_NAME "openFile"
+void GTFileDialog::openFile(GUITestOpStatus &os, const QString &path, const QString &fileName,
                             Button button, GTGlobals::UseMethod m)
 {
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, path, fileName, (GTFileDialogUtils::Button)button, m);
     GTUtilsDialog::waitForDialog(os, ob);
 
     ob->openFileDialog();
-
-    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
+    GTGlobals::sleep(100);
 }
+#undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openFile"
-void GTFileDialog::openFile(U2OpStatus &os, const QString &filePath, Button button, GTGlobals::UseMethod m){
+void GTFileDialog::openFile(GUITestOpStatus &os, const QString &filePath, Button button, GTGlobals::UseMethod m){
     int num = filePath.lastIndexOf('/');
     if (num == -1){
         num = filePath.lastIndexOf('\\');
@@ -366,7 +354,7 @@ void GTFileDialog::openFile(U2OpStatus &os, const QString &filePath, Button butt
 }
 #undef GT_METHOD_NAME
 
-void GTFileDialog::openFileList(U2OpStatus &os, const QString &path, const QStringList &fileNameList)
+void GTFileDialog::openFileList(GUITestOpStatus &os, const QString &path, const QStringList &fileNameList)
 {
     GTFileDialogUtils_list *ob = new GTFileDialogUtils_list(os, path, fileNameList);
     GTUtilsDialog::waitForDialog(os, ob);
@@ -376,6 +364,12 @@ void GTFileDialog::openFileList(U2OpStatus &os, const QString &path, const QStri
     GTGlobals::sleep();
 }
 
+void GTFileDialog::openFileList(GUITestOpStatus &os, const QStringList &filePaths) {
+    GTFileDialogUtils_list *openFileDialogFiller = new GTFileDialogUtils_list(os, filePaths);
+    GTUtilsDialog::waitForDialog(os, openFileDialogFiller);
+    openFileDialogFiller->openFileDialog();
+}
+
 #undef GT_CLASS_NAME
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTFileDialog.h b/src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.h
similarity index 51%
rename from src/plugins/GUITestBase/src/api/GTFileDialog.h
rename to src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.h
index 6631387..e216316 100644
--- a/src/plugins/GUITestBase/src/api/GTFileDialog.h
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/GTFileDialog.h
@@ -23,23 +23,23 @@
 #define GTFILE_DIALOG_H
 
 #include "GTGlobals.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-namespace U2 {
+namespace HI {
 
-class GTFileDialogUtils : public Filler {
+class HI_EXPORT GTFileDialogUtils : public Filler {
 friend class GTFileDialogUtils_list;
 public:
     enum Button {Open, Cancel, Save, Choose};
     enum ViewMode {List, Detail};
 
-    GTFileDialogUtils(U2OpStatus &os, const QString &folderPath, const QString &fileName, Button b = Open, GTGlobals::UseMethod = GTGlobals::UseMouse);
-    GTFileDialogUtils(U2OpStatus &os, const QString &filePath, GTGlobals::UseMethod method = GTGlobals::UseMouse, Button b = Open);
-    GTFileDialogUtils(U2OpStatus &os, CustomScenario *customScenario);
+    GTFileDialogUtils(GUITestOpStatus &os, const QString &folderPath, const QString &fileName, Button b = Open, GTGlobals::UseMethod = GTGlobals::UseMouse);
+    GTFileDialogUtils(GUITestOpStatus &os, const QString &filePath, GTGlobals::UseMethod method = GTGlobals::UseMouse, Button b = Open);
+    GTFileDialogUtils(GUITestOpStatus &os, CustomScenario *customScenario);
     void openFileDialog();
     void commonScenario();
 
-private:
+protected:
 
     bool setPath();
     void setName();
@@ -52,24 +52,30 @@ private:
     Button button;
     GTGlobals::UseMethod method;
 };
-class GTFileDialogUtils_list : public GTFileDialogUtils{
+class HI_EXPORT GTFileDialogUtils_list : public GTFileDialogUtils{
 public:
-    GTFileDialogUtils_list(U2OpStatus&, const QString&, const QStringList&);
-    void setNameList(U2OpStatus &, const QStringList &);
-    void run();
+    GTFileDialogUtils_list(GUITestOpStatus &os, const QString &folderPath, const QStringList &fileNames);
+    GTFileDialogUtils_list(GUITestOpStatus &os, const QStringList &filePaths);
+
+    void setNameList(GUITestOpStatus &os, const QStringList &filePaths);
+    void commonScenario();
+
 private:
-    QString path;
-    QStringList fileNameList;
     void selectFile();
+
+    QString path;
+    QStringList fileNamesList;
+    QStringList filePaths;
 };
 
-class GTFileDialog {
+class HI_EXPORT GTFileDialog {
 public:
     enum Button {Open, Cancel};
-    static void openFile(U2OpStatus &os, const QString &path, const QString &fileName, Button button = Open, GTGlobals::UseMethod m = GTGlobals::UseMouse);
-    static void openFile(U2OpStatus &os, const QString &filePath, Button button = Open, GTGlobals::UseMethod m = GTGlobals::UseMouse);
+    static void openFile(GUITestOpStatus &os, const QString &path, const QString &fileName, Button button = Open, GTGlobals::UseMethod m = GTGlobals::UseMouse);
+    static void openFile(GUITestOpStatus &os, const QString &filePath, Button button = Open, GTGlobals::UseMethod m = GTGlobals::UseMouse);
 
-    static void openFileList(U2OpStatus &, const QString &, const QStringList &);
+    static void openFileList(GUITestOpStatus &, const QString &, const QStringList &);
+    static void openFileList(GUITestOpStatus &os, const QStringList &filePaths);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.cpp b/src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.cpp
similarity index 74%
rename from src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.cpp
rename to src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.cpp
index bda6e3f..00219a1 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.cpp
@@ -19,25 +19,38 @@
  * MA 02110-1301, USA.
  */
 
-#include "MessageBoxFiller.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
-#include "api/GTKeyboardDriver.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QAbstractButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QAbstractButton>
-#endif
+#include "base_dialogs/MessageBoxFiller.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "primitives/GTSpinBox.h"
+#include "primitives/GTWidget.h"
 
-namespace U2 {
+#include <QAbstractButton>
+#include <QApplication>
+
+namespace HI {
 
 #define GT_CLASS_NAME "GTUtilsDialog::MessageBoxDialogFiller"
-#define GT_METHOD_NAME "run"
-void MessageBoxDialogFiller::run() {
 
+MessageBoxDialogFiller::MessageBoxDialogFiller(GUITestOpStatus &os, QMessageBox::StandardButton b, const QString &message, const QString &objectName) :
+    Filler(os, objectName),
+    b(b),
+    message(message)
+{
+
+}
+
+MessageBoxDialogFiller::MessageBoxDialogFiller(GUITestOpStatus &os, const QString &buttonText, const QString &message) :
+    Filler(os, ""),
+    b(QMessageBox::NoButton),
+    buttonText(buttonText),
+    message(message)
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void MessageBoxDialogFiller::commonScenario() {
     QWidget* activeModal = QApplication::activeModalWidget();
     QMessageBox *messageBox = qobject_cast<QMessageBox*>(activeModal);
     GT_CHECK(messageBox != NULL, "messageBox is NULL");
@@ -65,11 +78,19 @@ void MessageBoxDialogFiller::run() {
     GTWidget::click(os, button);
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "GTUtilsDialog::AppCloseMessageBoxDialogFiller"
-#define GT_METHOD_NAME "run"
-void AppCloseMessageBoxDialogFiller::run() {
+
+AppCloseMessageBoxDialogFiller::AppCloseMessageBoxDialogFiller(GUITestOpStatus &os) :
+    Filler(os, "")
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void AppCloseMessageBoxDialogFiller::commonScenario() {
     QWidget* activeModal = QApplication::activeModalWidget();
     QMessageBox *messageBox = qobject_cast<QMessageBox*>(activeModal);
     GT_CHECK(messageBox != NULL, "messageBox is NULL");
@@ -86,12 +107,19 @@ void AppCloseMessageBoxDialogFiller::run() {
     }
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "GTUtilsDialog::MessageBoxNoToAllOrNo"
-#define GT_METHOD_NAME "run"
-void MessageBoxNoToAllOrNo::run() {
 
+MessageBoxNoToAllOrNo::MessageBoxNoToAllOrNo(GUITestOpStatus &os) :
+    Filler(os, "")
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void MessageBoxNoToAllOrNo::commonScenario() {
     QWidget* activeModal = QApplication::activeModalWidget();
     QMessageBox *messageBox = qobject_cast<QMessageBox*>(activeModal);
     GT_CHECK(messageBox != NULL, "messageBox is NULL");
@@ -105,12 +133,19 @@ void MessageBoxNoToAllOrNo::run() {
     GTWidget::click(os, button);
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "MessageBoxOpenAnotherProject"
-#define GT_METHOD_NAME "run"
-void MessageBoxOpenAnotherProject::run(){
 
+MessageBoxOpenAnotherProject::MessageBoxOpenAnotherProject(GUITestOpStatus &os) :
+    Filler(os, "")
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void MessageBoxOpenAnotherProject::commonScenario() {
     QWidget* activeModal = QApplication::activeModalWidget();
     QMessageBox *messageBox = qobject_cast<QMessageBox*>(activeModal);
     GT_CHECK(messageBox != NULL, "messageBox is NULL");
@@ -127,16 +162,19 @@ void MessageBoxOpenAnotherProject::run(){
     GTWidget::click(os, button);
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "MessageBoxOpenAnotherProject"
-InputIntFiller::InputIntFiller(U2OpStatus &os, int value)
-: Filler(os, ""), value(value)
+
+InputIntFiller::InputIntFiller(GUITestOpStatus &os, int value) :
+    Filler(os, ""),
+    value(value)
 {
 
 }
 
-#define GT_METHOD_NAME "run"
+#define GT_METHOD_NAME "commonScenario"
 void InputIntFiller::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     QSpinBox *spinBox = dialog->findChild<QSpinBox*>();
@@ -147,6 +185,7 @@ void InputIntFiller::commonScenario() {
     GTWidget::click(os, GTWidget::findButtonByText(os, "OK", dialog));
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
-}
+}   // namespace
diff --git a/src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.h b/src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.h
new file mode 100644
index 0000000..7c42129
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/base_dialogs/MessageBoxFiller.h
@@ -0,0 +1,71 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GT_RUNNABLES_MESSAGE_BOX_FILLER_H_
+#define _HI_GT_RUNNABLES_MESSAGE_BOX_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+#include <QMessageBox>
+
+namespace HI {
+
+class HI_EXPORT MessageBoxDialogFiller : public Filler {
+public:
+    MessageBoxDialogFiller(GUITestOpStatus &os, QMessageBox::StandardButton b, const QString &message = "", const QString &objectName = "");
+    MessageBoxDialogFiller(GUITestOpStatus &os, const QString &buttonText, const QString &message = "");
+
+    virtual void commonScenario();
+
+protected:
+    QMessageBox::StandardButton b;
+    QString buttonText;
+    QString message;
+};
+
+class HI_EXPORT AppCloseMessageBoxDialogFiller : public Filler {
+public:
+    AppCloseMessageBoxDialogFiller(GUITestOpStatus &os);
+    void commonScenario();
+};
+
+class HI_EXPORT MessageBoxNoToAllOrNo : public Filler {
+public:
+    MessageBoxNoToAllOrNo(GUITestOpStatus &os);
+    void commonScenario();
+};
+
+class HI_EXPORT MessageBoxOpenAnotherProject : public Filler {
+public:
+    MessageBoxOpenAnotherProject(GUITestOpStatus &os);
+    void commonScenario();
+};
+
+class HI_EXPORT InputIntFiller : public Filler {
+public:
+    InputIntFiller(GUITestOpStatus &os, int value);
+    void commonScenario();
+private:
+    int value;
+};
+
+}   // namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTSystem.cpp b/src/libs_3rdparty/humimit/src/core/CustomScenario.cpp
similarity index 89%
rename from src/plugins/GUITestBase/src/api/GTSystem.cpp
rename to src/libs_3rdparty/humimit/src/core/CustomScenario.cpp
index 98134e2..0cd7f55 100644
--- a/src/plugins/GUITestBase/src/api/GTSystem.cpp
+++ b/src/libs_3rdparty/humimit/src/core/CustomScenario.cpp
@@ -19,11 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTSystem.h"
+#include "CustomScenario.h"
 
-namespace U2 {
+namespace HI {
 
+CustomScenario::~CustomScenario() {
 
-} //namespace
-
+}
 
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsToolTip.h b/src/libs_3rdparty/humimit/src/core/CustomScenario.h
similarity index 74%
copy from src/plugins/GUITestBase/src/GTUtilsToolTip.h
copy to src/libs_3rdparty/humimit/src/core/CustomScenario.h
index 183d0df..9ba920a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsToolTip.h
+++ b/src/libs_3rdparty/humimit/src/core/CustomScenario.h
@@ -19,20 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_TOOLTIP_UTILS_H_
-#define _U2_GUI_TOOLTIP_UTILS_H_
+#ifndef _HI_CUSTOM_SCENARIO_H_
+#define _HI_CUSTOM_SCENARIO_H_
 
-#include "api/GTGlobals.h"
+#include <core/global.h>
+#include <core/GUITestOpStatus.h>
 
-namespace U2 {
+namespace HI {
 
-class GTUtilsToolTip {
-public:
-    static void checkExistingToolTip(U2OpStatus &os, const QString& tooltip);
 
-    static QString getToolTip();
+class HI_EXPORT CustomScenario {
+public:
+    virtual ~CustomScenario();
+    virtual void run(HI::GUITestOpStatus &os) = 0;
 };
 
-} // namespace
+}   // namespace
 
-#endif
+#endif // _HI_CUSTOM_SCENARIO_H_
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITest.cpp b/src/libs_3rdparty/humimit/src/core/GUITest.cpp
similarity index 63%
rename from src/corelibs/U2Test/src/gui_tests/GUITest.cpp
rename to src/libs_3rdparty/humimit/src/core/GUITest.cpp
index e10ce90..3dcaeef 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITest.cpp
+++ b/src/libs_3rdparty/humimit/src/core/GUITest.cpp
@@ -1,17 +1,13 @@
 #include "GUITest.h"
-#include "GUITestOpStatus.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDesktopWidget>
-#include <QtGui/QPixmap>
-#else
-#include <QtGui/QScreen>
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDesktopWidget>
-#endif
-#include "QDir"
+#include "core/GUITestOpStatus.h"
+
+#include <QApplication>
+#include <QDate>
+#include <QDesktopWidget>
+#include <QDir>
+#include <QScreen>
 
-namespace U2 {
+namespace HI {
 
 QString getTestDir(){
     bool ok;
@@ -49,16 +45,27 @@ QString getDataDir(){
 #endif
 }
 
+QString getScreenshotDir(){
+    QString result;
 #ifdef Q_OS_MAC
-const QString GUITest::screenshotDir = "../../../../../../screenshotFol/";
+    result = "../../../../../../screenshotFol/";
 #else
-const QString GUITest::screenshotDir = QDir::homePath() + "/gui_testing_output/" +
-        QDate::currentDate().toString("dd.MM.yyyy") + "/screenshots/";
+    QString guiTestOutputDirectory = qgetenv("GUI_TESTING_OUTPUT");
+    if(guiTestOutputDirectory.isEmpty()){
+        result = QDir::homePath() + "/gui_testing_output/" +
+                QDate::currentDate().toString("dd.MM.yyyy") + "/screenshots/";
+    }else{
+        result = guiTestOutputDirectory + "/gui_testing_output/" +
+                QDate::currentDate().toString("dd.MM.yyyy") + "/screenshots/";
+    }
 #endif
+    return result;
+}
 
 const QString GUITest::testDir = getTestDir();
 const QString GUITest::dataDir = getDataDir();
 const QString GUITest::sandBoxDir = testDir + "_common_data/scenarios/sandbox/";
+const QString GUITest::screenshotDir = getScreenshotDir();
 
 void GUITest::sl_fail(){
 #if (QT_VERSION < 0x050000) // deprecated method
@@ -67,8 +74,8 @@ void GUITest::sl_fail(){
     QPixmap originalPixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
 #endif
     originalPixmap.save(GUITest::screenshotDir + name + ".jpg");
-    uiLog.error("GUItest timed out");
-    uiLog.trace("\nGT_DEBUG_MESSAGE !!!FIRST FAIL");
+    qCritical("GUItest timed out");
+    qCritical("\nGT_DEBUG_MESSAGE !!!FIRST FAIL");
     GUITestOpStatus os;// = new GUITestOpStatus();
     os.setError("time out");
 }
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITest.h b/src/libs_3rdparty/humimit/src/core/GUITest.h
similarity index 78%
rename from src/corelibs/U2Test/src/gui_tests/GUITest.h
rename to src/libs_3rdparty/humimit/src/core/GUITest.h
index e6dfa75..587e2b9 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITest.h
+++ b/src/libs_3rdparty/humimit/src/core/GUITest.h
@@ -1,11 +1,11 @@
-#ifndef _U2_GUI_TEST_H_
-#define _U2_GUI_TEST_H_
+#ifndef _HI_GUI_TEST_H_
+#define _HI_GUI_TEST_H_
 
-#include <U2Core/global.h>
 #include <QtCore/QTimer>
-#include <U2Core/Task.h>
+#include "GTGlobals.h"
+#include <core/GUITestOpStatus.h>
 
-namespace U2 {
+namespace HI {
 
 class GUITestIgnorable {
 public:
@@ -46,13 +46,15 @@ private:
     IgnoreReason ignoreReason;
 };
 
-class U2TEST_EXPORT GUITest: public QObject, public GUITestIgnorable {
+class HI_EXPORT GUITest: public QObject, public GUITestIgnorable {
     Q_OBJECT
 public:
-    GUITest(const QString &_name = "", int _timeout=240000) : name(_name), timeout(_timeout) {}
+    GUITest(const QString &_name = "", const QString &_suite = "", int _timeout=240000) : name(_name), suite(_suite), timeout(_timeout) {}
     virtual ~GUITest(){}
 
     QString getName() const { return name; }
+    QString getSuite() const { return suite; }
+    QString getFullName() const { return suite + ":" + name; }
     int getTimeout() const { return timeout; }
     void setName(const QString &n) { name = n; }
     void setTimeout(int _timeout) { timeout = _timeout; }
@@ -62,12 +64,13 @@ public:
     static const QString screenshotDir;
     static const QString sandBoxDir;
 
-    virtual void run(U2OpStatus &os) = 0;
+    virtual void run(GUITestOpStatus &os) = 0;
 private:
     GUITest(const GUITest&);
     GUITest& operator=(const GUITest&);
 
     QString name;
+    QString suite;
     int timeout;
 public slots:
     void sl_fail();
@@ -75,6 +78,6 @@ public slots:
 
 typedef QList<GUITest*> GUITests;
 
-} //U2
+} //HI
 
 #endif
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestOpStatus.h b/src/libs_3rdparty/humimit/src/core/GUITestOpStatus.h
similarity index 63%
rename from src/corelibs/U2Test/src/gui_tests/GUITestOpStatus.h
rename to src/libs_3rdparty/humimit/src/core/GUITestOpStatus.h
index da58c45..4d94f49 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestOpStatus.h
+++ b/src/libs_3rdparty/humimit/src/core/GUITestOpStatus.h
@@ -20,13 +20,16 @@
  */
 
 
-#ifndef _U2_GUI_TEST_OP_STATUS_H_
-#define _U2_GUI_TEST_OP_STATUS_H_
+#ifndef _HI_GUI_TEST_OP_STATUS_H_
+#define _HI_GUI_TEST_OP_STATUS_H_
 
-#include <U2Core/U2OpStatus.h>
+#include "core/global.h"
 
-namespace U2 {
-class GUITestOpStatus : public U2OpStatus
+#include <QString>
+
+namespace HI {
+
+class HI_EXPORT GUITestOpStatus
 {
 public:
     GUITestOpStatus(){}
@@ -35,19 +38,9 @@ public:
     virtual QString getError() const {return error;}
     virtual bool hasError() const {return !error.isEmpty();}
 
+    //TODO:Remove this methods
     virtual bool isCanceled() const {return false;}
-    virtual void setCanceled(bool v) {Q_UNUSED(v)}
-
-    virtual int getProgress() const {return 100;}
-    virtual void setProgress(int v) {Q_UNUSED(v)}
-
-    virtual QString getDescription() const {return "";}
-    virtual void setDescription(const QString& desc) {Q_UNUSED(desc);}
-
-    virtual bool hasWarnings() const { return false; }
-    virtual void addWarning(const QString &w) { Q_UNUSED(w) }
-    virtual void addWarnings(const QStringList &wList) { Q_UNUSED(wList) }
-    virtual QStringList getWarnings() const { return QStringList(); }
+    virtual bool isCoR() const  {return isCanceled() || hasError();}
 
 private:
     QString error;
diff --git a/src/libs_3rdparty/humimit/src/core/MainThreadRunnable.cpp b/src/libs_3rdparty/humimit/src/core/MainThreadRunnable.cpp
new file mode 100644
index 0000000..2dcebf2
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/core/MainThreadRunnable.cpp
@@ -0,0 +1,91 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include <QThread>
+
+#include "MainThreadRunnable.h"
+
+namespace HI {
+
+MainThreadRunnable::MainThreadRunnable(GUITestOpStatus &os, CustomScenario *scenario) :
+    QObject(NULL),
+    os(os),
+    scenario(scenario)
+{
+    if (Q_UNLIKELY(NULL == scenario)) {
+        os.setError("Scenario is NULL");
+        return;
+    }
+}
+
+MainThreadRunnable::~MainThreadRunnable() {
+    delete scenario;
+}
+
+void MainThreadRunnable::doRequest() {
+    if (QThread::currentThread() == QApplication::instance()->thread()) {
+        run();
+        return;
+    }
+
+    MainThreadRunnableObject obj;
+
+    obj.moveToThread(QApplication::instance()->thread());
+
+    QMetaObject::Connection connection = connect(this,
+                                                 SIGNAL(si_request(MainThreadRunnable *)),
+                                                 &obj,
+                                                 SLOT(sl_requestAsked(MainThreadRunnable *)),
+                                                 Qt::BlockingQueuedConnection);
+
+    emit si_request(this);
+    disconnect(connection);
+
+}
+
+void MainThreadRunnable::run() {
+    if (Q_UNLIKELY(NULL == scenario)) {
+        os.setError("Scenario is NULL");
+        return;
+    }
+    scenario->run(os);
+}
+
+void MainThreadRunnable::runInMainThread(GUITestOpStatus &os, CustomScenario *scenario) {
+    if (Q_UNLIKELY(NULL == scenario)) {
+        os.setError("Custom scenario is NULL");
+        return;
+    }
+    MainThreadRunnable mainThreadRunnable(os, scenario);
+    mainThreadRunnable.doRequest();
+}
+
+MainThreadRunnableObject::MainThreadRunnableObject() :
+    QObject(NULL)
+{
+}
+
+void MainThreadRunnableObject::sl_requestAsked(MainThreadRunnable *runnable){
+    runnable->run();
+}
+
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.h b/src/libs_3rdparty/humimit/src/core/MainThreadRunnable.h
similarity index 54%
copy from src/plugins/GUITestBase/src/GTUtilsNotifications.h
copy to src/libs_3rdparty/humimit/src/core/MainThreadRunnable.h
index 1863bc7..27e07cd 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.h
+++ b/src/libs_3rdparty/humimit/src/core/MainThreadRunnable.h
@@ -19,41 +19,48 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _HI_MAIN_THREAD_RUNNABLE_H_
+#define _HI_MAIN_THREAD_RUNNABLE_H_
 
-#ifndef GTUTILSNOTIFICATIONS_H
-#define GTUTILSNOTIFICATIONS_H
+#include "GTGlobals.h"
 
-#include "GTUtilsDialog.h"
-#include "api/GTGlobals.h"
+#include <core/CustomScenario.h>
 
-namespace U2 {
+namespace HI {
 
-class NotificationChecker : public QObject {
+/**
+ * Class takes ownership over the scenario.
+ */
+class HI_EXPORT MainThreadRunnable : public QObject {
     Q_OBJECT
 public:
-    NotificationChecker(U2OpStatus &_os);
-    ~NotificationChecker();
-public slots:
-    void sl_checkNotification();
-private:
-    QTimer* t;
-    U2OpStatus &os;
-};
+    MainThreadRunnable(GUITestOpStatus &os, CustomScenario *scenario);
+    ~MainThreadRunnable();
+
+    void doRequest();
+    void run();
+
+    static void runInMainThread(GUITestOpStatus &os, CustomScenario *scenario);
+
+signals:
+    void si_request(MainThreadRunnable *mainThreadRunnable);
 
-class NotificationDialogFiller : public Filler{
-public:
-    NotificationDialogFiller(U2OpStatus &os, QString _message = ""):
-        Filler(os, "NotificationDialog"), message(_message){}
-    virtual void run();
 private:
-    QString message;
+    GUITestOpStatus &os;
+    CustomScenario *scenario;
 };
 
-class GTUtilsNotifications
-{
+class MainThreadRunnableObject : public QObject {
+    Q_OBJECT
 public:
-    static void waitForNotification(U2OpStatus &os, bool dialogExpected = true, const QString &message = "");
+    MainThreadRunnableObject();
+
+public slots:
+    void sl_requestAsked(MainThreadRunnable *mainThreadRunnable);
+
 };
-}
 
-#endif // GTUTILSNOTIFICATIONS_H
+
+}   // namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp b/src/libs_3rdparty/humimit/src/core/MainThreadTimer.cpp
similarity index 62%
copy from src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
copy to src/libs_3rdparty/humimit/src/core/MainThreadTimer.cpp
index 8837c23..4cbc7e2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/core/MainThreadTimer.cpp
@@ -19,29 +19,31 @@
  * MA 02110-1301, USA.
  */
 
+#include "MainThreadTimer.h"
 #include <QApplication>
 
-#include "OrfDialogFiller.h"
+namespace HI {
 
-namespace U2 {
-
-#define GT_CLASS_NAME "OrfDialogFiller"
-
-OrfDialogFiller::OrfDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
-    Filler(os, "ORFDialogBase", scenario)
+MainThreadTimer::MainThreadTimer(int interval) :
+    QObject(NULL),
+    counter(0)
 {
-
+    timer.setInterval(interval);
+    connect(&timer, SIGNAL(timeout()), SLOT(sl_timerTick()));
+    timer.start();
+    moveToThread(QApplication::instance()->thread());
 }
 
-#define GT_METHOD_NAME "commonScenario"
-void OrfDialogFiller::commonScenario() {
-    QWidget *dialog = QApplication::activeModalWidget();
-    GT_CHECK(NULL != dialog, "Active modal widget is NULL");
-
-    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+qint64 MainThreadTimer::getCounter() const {
+    QMutexLocker locker(&guard);
+    Q_UNUSED(locker);
+    return counter;
 }
-#undef GT_METHOD_NAME
 
-#undef GT_CLASS_NAME
+void MainThreadTimer::sl_timerTick() {
+    QMutexLocker locker(&guard);
+    Q_UNUSED(locker);
+    counter++;
+}
 
-}   // namespace U2
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTGroupBox.h b/src/libs_3rdparty/humimit/src/core/MainThreadTimer.h
similarity index 70%
copy from src/plugins/GUITestBase/src/api/GTGroupBox.h
copy to src/libs_3rdparty/humimit/src/core/MainThreadTimer.h
index 06a3d16..acdd7a4 100644
--- a/src/plugins/GUITestBase/src/api/GTGroupBox.h
+++ b/src/libs_3rdparty/humimit/src/core/MainThreadTimer.h
@@ -19,23 +19,30 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_GROUP_BOX_H_
-#define _U2_GT_GROUP_BOX_H_
+#ifndef _HI_MAIN_THREAD_TIMER_H_
+#define _HI_MAIN_THREAD_TIMER_H_
 
-#include <QGroupBox>
+#include <QTimer>
+#include <QMutex>
 
-#include "api/GTGlobals.h"
+namespace HI {
 
-namespace U2 {
-
-class GTGroupBox {
+class MainThreadTimer : public QObject {
+    Q_OBJECT
 public:
-    static void setChecked(U2OpStatus &os, QGroupBox *groupBox, bool checked = true);
+    MainThreadTimer(int interval);
+
+    qint64 getCounter() const;
+
+private slots:
+    void sl_timerTick();
 
 private:
-    static QRect getCheckBoxRect(QGroupBox *groupBox);
+    QTimer timer;
+    mutable QMutex guard;
+    qint64 counter;
 };
 
-}   // namespace U2
+}   // namespace
 
-#endif // _U2_GT_GROUP_BOX_H_
+#endif
diff --git a/src/libs_3rdparty/humimit/src/core/global.h b/src/libs_3rdparty/humimit/src/core/global.h
new file mode 100644
index 0000000..a0878c8
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/core/global.h
@@ -0,0 +1,14 @@
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#include <qglobal.h>
+
+#ifdef BUILDING_HUMIMIT_DLL
+#   define HI_EXPORT Q_DECL_EXPORT
+#else
+#   define HI_EXPORT Q_DECL_IMPORT
+#endif
+
+
+#endif // GLOBAL_H
+
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardDriver.cpp b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.cpp
similarity index 87%
rename from src/plugins/GUITestBase/src/api/GTKeyboardDriver.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.cpp
index 8a74351..c470705 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardDriver.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.cpp
@@ -21,19 +21,15 @@
 
 #include <cctype>
 #include "GTKeyboardDriver.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <utils/GTThread.h>
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTKeyboardDriver"
 
 #define GT_METHOD_NAME "keyClick"
 
-void GTKeyboardDriver::keyClick(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyClick(GUITestOpStatus &os, int key, int modifiers)
 {
     GT_CHECK(key != 0, "key = 0");
 #ifdef Q_OS_MAC
@@ -46,7 +42,7 @@ void GTKeyboardDriver::keyClick(U2::U2OpStatus &os, int key, int modifiers)
 }
 #undef GT_METHOD_NAME
 
-void GTKeyboardDriver::keySequence(U2::U2OpStatus &os, const QString &str, int modifiers)
+void GTKeyboardDriver::keySequence(GUITestOpStatus &os, const QString &str, int modifiers)
 {
     if (modifiers) {
         keyPress(os, modifiers);
@@ -59,7 +55,10 @@ void GTKeyboardDriver::keySequence(U2::U2OpStatus &os, const QString &str, int m
         } else {
             keyClick(os, asciiChar);
         }
+#ifdef  Q_OS_MAC
         GTGlobals::sleep(10); // need for MacOS
+        GTThread::waitForMainThread(os);
+#endif
     }
 
     if (modifiers) {
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardDriver.h b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.h
similarity index 52%
rename from src/plugins/GUITestBase/src/api/GTKeyboardDriver.h
rename to src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.h
index 2bf3865..1d78645 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardDriver.h
+++ b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriver.h
@@ -19,11 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_GTKEYBOARDDRIVER_H_
-#define _U2_GUI_GTKEYBOARDDRIVER_H_
+#ifndef _HI_GUI_GTKEYBOARDDRIVER_H_
+#define _HI_GUI_GTKEYBOARDDRIVER_H_
 
 #include <QMap>
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 #ifdef _WIN32
 #include <windows.h>
@@ -31,16 +31,31 @@
 
 #define ADD_KEY(name, code) insert(name, code)
 
-namespace U2 {
-
-class GTKeyboardDriver {
+namespace HI {
+/*!
+ * \brief The base class for keyboard's actions imitation
+ *
+ * Example:
+ * \code {.cpp}
+ * GTKeyboardDriver::keyClick(os, 'A'); // print 'a'
+ * GTKeyboardDriver::keyClick(os, 'a'); // print 'a'
+ *
+ * GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["shift"]); // print 'A'
+ * GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["SHIFT"]); // print 'A'
+ * //case in ["..."] does not matter
+ *
+ * GTKeyboardDriver::keySequence(os, "ThIs Is a TeSt StRiNg"); // print "ThIs Is a TeSt StRiNg"
+ * //i.e. case sensitive
+ * \endcode
+ */
+class HI_EXPORT GTKeyboardDriver {
 public:
     //
 #if defined Q_OS_WIN || defined Q_OS_MAC
-    static void keyClick(U2OpStatus &os, char key, int modifiers = 0);
+    static void keyClick(GUITestOpStatus &os, char key, int modifiers = 0);
 
-    static void keyPress(U2OpStatus &os, char key, int modifiers = 0);
-    static void keyRelease(U2OpStatus &os, char key, int modifiers = 0);
+    static void keyPress(GUITestOpStatus &os, char key, int modifiers = 0);
+    static void keyRelease(GUITestOpStatus &os, char key, int modifiers = 0);
 #if defined Q_OS_WIN
     static INPUT getKeyEvent(int key, bool keyUp = false);
 #endif
@@ -49,13 +64,13 @@ public:
     // fails if key == 0
     // Linux: fails if there is an opening X display error
 
-    static void keyClick(U2OpStatus &os, int key, int modifiers = 0);
-    static void keySequence(U2OpStatus &os, const QString &str, int modifiers = 0);
+    static void keyClick(GUITestOpStatus &os, int key, int modifiers = 0);
+    static void keySequence(GUITestOpStatus &os, const QString &str, int modifiers = 0);
 
-    static void keyPress(U2OpStatus &os, int key, int modifiers = 0);
-    static void keyRelease(U2OpStatus &os, int key, int modifiers = 0);
+    static void keyPress(GUITestOpStatus &os, int key, int modifiers = 0);
+    static void keyRelease(GUITestOpStatus &os, int key, int modifiers = 0);
 
-    class keys : private QMap<QString, int> {
+	class HI_EXPORT keys : private QMap<QString, int> {
     public:
         keys();
         const QStringList mapKeys() const {
@@ -66,20 +81,9 @@ public:
 
     static keys key;
 
-    /**
-    * Example:
-    * GTKeyboardDriver::keyClick(os, 'A'); // print 'a'
-    * GTKeyboardDriver::keyClick(os, 'a'); // print 'a'
-    *
-    * GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["shift"]); // print 'A'
-    * GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["SHIFT"]); // print 'A'
-    * case in ["..."] does not matter
-    *
-    * GTKeyboardDriver::keySequence(os, "ThIs Is a TeSt StRiNg"); // print "ThIs Is a TeSt StRiNg"
-    * i.e. case sensitive
-    */
+
 };
 
 } //namespace
 
-#endif // _U2_GUI_GTKEYBOARDDRIVER_H_
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardDriverLinux.cpp b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverLinux.cpp
similarity index 94%
rename from src/plugins/GUITestBase/src/api/GTKeyboardDriverLinux.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverLinux.cpp
index fdea59b..ab6ce47 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardDriverLinux.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverLinux.cpp
@@ -21,12 +21,6 @@
 
 #include <cctype>
 #include "GTKeyboardDriver.h"
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
 
 #if defined __linux__
     #define XK_LATIN1      // for latin symbol
@@ -35,17 +29,16 @@
     #include <X11/extensions/XTest.h>
 #endif
 
-namespace U2 {
+namespace HI {
 
 #if defined __linux__
 
 #define GT_CLASS_NAME "GTKeyboardDriverLinux"
 
 #define GT_METHOD_NAME "keyPress"
-void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyPress(GUITestOpStatus &os, int key, int modifiers)
 {
     GT_CHECK_NO_MESSAGE(key != 0, "key = 0");
-//    GT_CHECK(QApplication::activeWindow() != NULL, "There is no activeWindow");
 
     QByteArray display_name = qgetenv("DISPLAY");
     GT_CHECK_NO_MESSAGE(!display_name.isEmpty(), "Environment variable \"DISPLAY\" not found");
@@ -111,10 +104,9 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "keyRelease"
-void GTKeyboardDriver::keyRelease(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyRelease(GUITestOpStatus &os, int key, int modifiers)
 {
     GT_CHECK_NO_MESSAGE(key != 0, "key = ");
-//    GT_CHECK(QApplication::activeWindow() != NULL, "There is no activeWindow");
 
     QByteArray display_name = qgetenv("DISPLAY");
     GT_CHECK_NO_MESSAGE(!display_name.isEmpty(), "Environment variable \"DISPLAY\" not found");
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardDriverMac.cpp b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverMac.cpp
similarity index 81%
rename from src/plugins/GUITestBase/src/api/GTKeyboardDriverMac.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverMac.cpp
index 813baf7..8b1e146 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardDriverMac.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverMac.cpp
@@ -20,69 +20,26 @@
  */
 
 #include "GTKeyboardDriver.h"
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 #ifdef  Q_OS_MAC
 #include <ApplicationServices/ApplicationServices.h>
 #include <Carbon/Carbon.h>
 #endif
 
-namespace U2 {
+namespace HI {
 
 #ifdef  Q_OS_MAC
 
 int asciiToVirtual(int);
+bool extractShiftModifier(char &key);
 
 #define GT_CLASS_NAME "GTKeyboardDriverMac"
 #define GT_METHOD_NAME "keyPress_char"
-void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
-{
+void GTKeyboardDriver::keyPress(GUITestOpStatus &os, char key, int modifiers) {
     GT_CHECK(key != 0, "key = 0");
 
-    bool isChanged = false;
-    switch(key) {
-    case '_':
-        key = asciiToVirtual('-');
-        isChanged = true;
-        break;
-    case '<':
-        key = asciiToVirtual(',');
-        isChanged = true;
-        break;
-    case '>':
-        key = asciiToVirtual('.');
-        isChanged = true;
-        break;
-    case '(':
-        key = asciiToVirtual('9');
-        isChanged = true;
-        break;
-    case ')':
-        key = asciiToVirtual('0');
-        isChanged = true;
-        break;
-    case '$':
-        key = asciiToVirtual('4');
-        isChanged = true;
-        break;
-    case '#':
-        key = asciiToVirtual('3');
-        isChanged = true;
-        break;
-    case '\"':
-        key = asciiToVirtual('\'');
-        isChanged = true;
-        break;
-    case ':':
-        key = asciiToVirtual(';');
-        isChanged = true;
-        break;
-    case '*':
-        key = asciiToVirtual('8');
-        isChanged = true;
-        break;
-    }
-
+    const bool isChanged = extractShiftModifier(key);
     if (isChanged) {
         CGEventRef event = CGEventCreateKeyboardEvent(NULL, GTKeyboardDriver::key["shift"], true);
         GT_CHECK(event != NULL, "Can't create event");
@@ -99,7 +56,7 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "keyPress_int"
-void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyPress(GUITestOpStatus &os, int key, int modifiers)
 {
     if (key==GTKeyboardDriver::key["ctrl"])
         key=GTKeyboardDriver::key["cmd"];
@@ -123,54 +80,10 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "keyRelease_char"
-void GTKeyboardDriver::keyRelease(U2::U2OpStatus &os, char key, int modifiers)
-{
+void GTKeyboardDriver::keyRelease(GUITestOpStatus &os, char key, int modifiers) {
     GT_CHECK(key != 0, "key = 0");
 
-    bool isChanged = false;
-    switch(key) {
-    case '_':
-        key = asciiToVirtual('-');
-        isChanged = true;
-        break;
-    case '<':
-        key = asciiToVirtual(',');
-        isChanged = true;
-        break;
-    case '>':
-        key = asciiToVirtual('.');
-        isChanged = true;
-        break;
-    case '(':
-        key = asciiToVirtual('9');
-        isChanged = true;
-        break;
-    case ')':
-        key = asciiToVirtual('0');
-        isChanged = true;
-        break;
-    case '$':
-        key = asciiToVirtual('4');
-        isChanged = true;
-        break;
-    case '#':
-        key = asciiToVirtual('3');
-        isChanged = true;
-        break;
-    case '\"':
-        key = asciiToVirtual('\'');
-        isChanged = true;
-        break;
-    case ':':
-        key = asciiToVirtual(';');
-        isChanged = true;
-        break;
-    case '*':
-        key = asciiToVirtual('8');
-        isChanged = true;
-        break;
-    }
-
+    const bool isChanged = extractShiftModifier(key);
     if (!isChanged) {
         key = asciiToVirtual(key);
     } else {
@@ -187,7 +100,7 @@ void GTKeyboardDriver::keyRelease(U2::U2OpStatus &os, char key, int modifiers)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "keyRelease_int"
-void GTKeyboardDriver::keyRelease(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyRelease(GUITestOpStatus &os, int key, int modifiers)
 {
     if (key==GTKeyboardDriver::key["ctrl"])
         key=GTKeyboardDriver::key["cmd"];
@@ -248,7 +161,7 @@ GTKeyboardDriver::keys::keys()
 }
 
 #define GT_METHOD_NAME "keyClick"
-void GTKeyboardDriver::keyClick(U2::U2OpStatus &os, char key, int modifiers)
+void GTKeyboardDriver::keyClick(GUITestOpStatus &os, char key, int modifiers)
 {
     GT_CHECK(key != 0, "key = 0");
     if (modifiers==GTKeyboardDriver::key["ctrl"])
@@ -416,5 +329,48 @@ int asciiToVirtual(int key)
     return key;
 }
 
+bool extractShiftModifier(char &key) {
+    switch(key) {
+    case '_':
+        key = asciiToVirtual('-');
+        return true;
+    case '<':
+        key = asciiToVirtual(',');
+        return true;
+    case '>':
+        key = asciiToVirtual('.');
+        return true;
+    case '(':
+        key = asciiToVirtual('9');
+        return true;
+    case ')':
+        key = asciiToVirtual('0');
+        return true;
+    case '$':
+        key = asciiToVirtual('4');
+        return true;
+    case '#':
+        key = asciiToVirtual('3');
+        return true;
+    case '\"':
+        key = asciiToVirtual('\'');
+        return true;
+    case ':':
+        key = asciiToVirtual(';');
+        return true;
+    case '*':
+        key = asciiToVirtual('8');
+        return true;
+    case '{':
+        key = asciiToVirtual('[');
+        return true;
+    case '}':
+        key = asciiToVirtual(']');
+        return true;
+    }
+
+    return false;
+}
+
 #endif
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardDriverWindows.cpp b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverWindows.cpp
similarity index 72%
rename from src/plugins/GUITestBase/src/api/GTKeyboardDriverWindows.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverWindows.cpp
index d648a97..352d8b5 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardDriverWindows.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTKeyboardDriverWindows.cpp
@@ -21,12 +21,6 @@
 
 #include <cctype>
 #include "GTKeyboardDriver.h"
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
 #include <QtGui/QClipboard>
 
 #ifdef _WIN32
@@ -34,13 +28,13 @@
     #define VIRTUAL_TO_SCAN_CODE 0
 #endif
 
-namespace U2 {
+namespace HI {
 
 #ifdef _WIN32
 
 #define GT_CLASS_NAME "GTKeyboardDriver Windows"
 
-void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
+void GTKeyboardDriver::keyPress(GUITestOpStatus &os, char key, int modifiers)
 {
     if (isalpha(key)) {
         key = toupper(key);
@@ -132,8 +126,26 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
             }
             keyPress(os, '0', GTKeyboardDriver::key["shift"]);
             break;
+        case '"':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, VK_OEM_7, GTKeyboardDriver::key["shift"]);
+            break;
+        case '!':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, '1', GTKeyboardDriver::key["shift"]);
+            break;
+        case '@':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, '2', GTKeyboardDriver::key["shift"]);
+            break;
         case '#':
-             if (modifiers != 0) {
+            if (modifiers != 0) {
                 keyPress(os, modifiers);
             }
             keyPress(os, '3', GTKeyboardDriver::key["shift"]);
@@ -141,14 +153,44 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
         case '$':
             if (modifiers != 0) {
                 keyPress(os, modifiers);
-                }
+            }
             keyPress(os, '4', GTKeyboardDriver::key["shift"]);
             break;
-        case '"':
+        case '%':
             if (modifiers != 0) {
                 keyPress(os, modifiers);
             }
-            keyPress(os, VK_OEM_7, GTKeyboardDriver::key["shift"]);
+            keyPress(os, '5', GTKeyboardDriver::key["shift"]);
+            break;
+        case '^':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, '6', GTKeyboardDriver::key["shift"]);
+            break;
+        case '&':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, '7', GTKeyboardDriver::key["shift"]);
+            break;
+        case '*':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, '8', GTKeyboardDriver::key["shift"]);
+            break;
+        case '+':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, VK_OEM_PLUS, GTKeyboardDriver::key["shift"]);
+            break;
+        case '?':
+            if (modifiers != 0) {
+                keyPress(os, modifiers);
+            }
+            keyPress(os, VK_OEM_2, GTKeyboardDriver::key["shift"]);
             break;
         default:
             keyPress(os, (int)key, modifiers);
@@ -156,7 +198,7 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, char key, int modifiers)
     }
 }
 
-void GTKeyboardDriver::keyRelease(U2OpStatus &os, char key, int modifiers)
+void GTKeyboardDriver::keyRelease(GUITestOpStatus &os, char key, int modifiers)
 {
     if (isalpha(key)) {
         key = toupper(key);
@@ -241,6 +283,24 @@ void GTKeyboardDriver::keyRelease(U2OpStatus &os, char key, int modifiers)
                 keyRelease(os, modifiers);
             }
             break;
+        case '"':
+            keyRelease(os, VK_OEM_7, GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '!':
+            keyRelease(os, '1', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '@':
+            keyRelease(os, '2', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
         case '#':
             keyRelease(os, '3', GTKeyboardDriver::key["shift"]);
             if (modifiers != 0) {
@@ -251,10 +311,40 @@ void GTKeyboardDriver::keyRelease(U2OpStatus &os, char key, int modifiers)
             keyRelease(os, '4', GTKeyboardDriver::key["shift"]);
             if (modifiers != 0) {
                 keyRelease(os, modifiers);
-                }
+            }
             break;
-        case '"':
-            keyRelease(os, VK_OEM_7, GTKeyboardDriver::key["shift"]);
+        case '%':
+            keyRelease(os, '5', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '^':
+            keyRelease(os, '6', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '&':
+            keyRelease(os, '7', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '*':
+            keyRelease(os, '8', GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '+':
+            keyRelease(os, VK_OEM_PLUS, GTKeyboardDriver::key["shift"]);
+            if (modifiers != 0) {
+                keyRelease(os, modifiers);
+            }
+            break;
+        case '?':
+            keyRelease(os, VK_OEM_2, GTKeyboardDriver::key["shift"]);
             if (modifiers != 0) {
                 keyRelease(os, modifiers);
             }
@@ -266,12 +356,13 @@ void GTKeyboardDriver::keyRelease(U2OpStatus &os, char key, int modifiers)
 }
 
 #define GT_METHOD_NAME "keyClick"
-void GTKeyboardDriver::keyClick(U2OpStatus &os, char key, int modifiers)
+void GTKeyboardDriver::keyClick(GUITestOpStatus &os, char key, int modifiers)
 {
     GT_CHECK(key != 0, "key = 0");
 
     keyPress(os, key, modifiers);
     keyRelease(os, key, modifiers);
+    GTGlobals::sleep(10);
 }
 #undef GT_METHOD_NAME
 
@@ -289,10 +380,9 @@ INPUT GTKeyboardDriver::getKeyEvent(int key, bool keyUp) {
 }
 
 #define GT_METHOD_NAME "keyPress"
-void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers) {
+void GTKeyboardDriver::keyPress(GUITestOpStatus &os, int key, int modifiers) {
 
     GT_CHECK(key != 0, " Error: key = 0 in GTKeyboardDriver::keyPress()");
-//    GT_CHECK(QApplication::activeWindow() != NULL, "There is no activeWindow");
 
     if (modifiers) {
         INPUT input = getKeyEvent(modifiers);
@@ -305,10 +395,9 @@ void GTKeyboardDriver::keyPress(U2::U2OpStatus &os, int key, int modifiers) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "keyRelease"
-void GTKeyboardDriver::keyRelease(U2::U2OpStatus &os, int key, int modifiers)
+void GTKeyboardDriver::keyRelease(GUITestOpStatus &os, int key, int modifiers)
 {
     GT_CHECK(key != 0, " Error: key = 0 in GTKeyboardDriver::keyRelease()");
-//    GT_CHECK(QApplication::activeWindow() != NULL, "There is no activeWindow");
 
     if (modifiers) {
         INPUT input = getKeyEvent(modifiers, true);
diff --git a/src/plugins/GUITestBase/src/api/GTMouseDriver.cpp b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.cpp
similarity index 58%
rename from src/plugins/GUITestBase/src/api/GTMouseDriver.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.cpp
index c35efad..6ad0bb7 100644
--- a/src/plugins/GUITestBase/src/api/GTMouseDriver.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.cpp
@@ -21,32 +21,45 @@
 
 #include <QApplication>
 #include <QTimer>
+#include <utils/GTThread.h>
 
 #include "GTMouseDriver.h"
 
-namespace U2 {
+namespace HI {
 
-void GTMouseDriver::click(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::click(GUITestOpStatus &os, Qt::MouseButton button)
 {
     press(os, button);
     release(os, button);
 
-    GTGlobals::sleep(250);
+    GTGlobals::sleep(500);
+}
+
+namespace {
+
+bool isFarEnoughToStartDnd(const QPoint &start, const QPoint &end) {
+    return (end - start).manhattanLength() > 2 * QApplication::startDragDistance();
+}
+
 }
 
-void GTMouseDriver::dragAndDrop(U2OpStatus &os, const QPoint& start, const QPoint& end, const QPoint extraShift) {
+void GTMouseDriver::dragAndDrop(GUITestOpStatus &os, const QPoint& start, const QPoint& end) {
     moveTo(os, start);
     GTDragger d(os, end);
+    Q_UNUSED(d);
+
     press(os);
 
-    Q_UNUSED(d);
-    GTMouseDriver::moveTo(os, start + QPoint(QApplication::startDragDistance(),0));
-    GTMouseDriver::moveTo(os, start + extraShift);
-    GTGlobals::sleep(200);
+    const QPoint farPoint = (isFarEnoughToStartDnd(start, (end + start) / 2) ?
+                                 (end + start) / 2 :
+                                 QPoint(0, 0));
+    GTMouseDriver::moveTo(os, farPoint);
+
+    GTThread::waitForMainThread(os);
 }
 
 #ifndef Q_OS_MAC
-void GTMouseDriver::doubleClick(U2OpStatus &os)
+void GTMouseDriver::doubleClick(GUITestOpStatus &os)
 {
     press(os, Qt::LeftButton);
     release(os, Qt::LeftButton);
@@ -58,20 +71,32 @@ void GTMouseDriver::doubleClick(U2OpStatus &os)
 }
 #endif
 
-GTDragger::GTDragger(U2OpStatus &_os, const QPoint& _to):QObject(), os(_os), to(_to){
-    timer = new QTimer(this);
-    timer->singleShot(2000, this, SLOT(sl_execDrag()));
+GTDragger::GTDragger(GUITestOpStatus &_os, const QPoint& _to) :
+    QObject(),
+    os(_os),
+    to(_to),
+    done(false)
+{
+    QTimer::singleShot(2000, this, SLOT(sl_execDrag()));
     GTGlobals::sleep(500);
 }
 
+GTDragger::~GTDragger() {
+    if (!done) {
+        sl_execDrag();
+    }
+}
+
 void GTDragger::sl_execDrag(){
     GTMouseDriver::moveTo(os, to);
-#ifdef Q_OS_WIN
+#ifndef Q_OS_LINUX
     GTMouseDriver::release(os);
+    GTThread::waitForMainThread(os);
 #else
     GTMouseDriver::click(os);
     GTGlobals::sleep();
 #endif
+    done = true;
 }
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTMouseDriver.h b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.h
similarity index 54%
rename from src/plugins/GUITestBase/src/api/GTMouseDriver.h
rename to src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.h
index fed180c..f0408fe 100644
--- a/src/plugins/GUITestBase/src/api/GTMouseDriver.h
+++ b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriver.h
@@ -19,54 +19,59 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_GTMOUSEDRIVER_H_
-#define _U2_GUI_GTMOUSEDRIVER_H_
+#ifndef _HI_GUI_GTMOUSEDRIVER_H_
+#define _HI_GUI_GTMOUSEDRIVER_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <QtCore/QPoint>
 
-namespace U2 {
-
-class GTMouseDriver {
+namespace HI {
+/*!
+ * \brief The base class for mouse's actions imitation
+ */
+class HI_EXPORT GTMouseDriver {
 public:
     // fails if given coordinates are not in the screen's rect
     // Linux: fails if there is an opening X display error
-    static void moveTo(U2OpStatus &os, const QPoint& p) {mousePos = p; moveToP(os, p.x(), p.y()); }
+    static void moveTo(GUITestOpStatus &os, const QPoint& p) {mousePos = p; moveToP(os, p.x(), p.y()); }
 
     // fails if press or release fails
     // Linux: fails if there is an opening X display error
-    static void click(U2OpStatus &os, Qt::MouseButton = Qt::LeftButton); //all click methods work with the current position of the cursor
-    static void doubleClick(U2OpStatus &os);
+    static void click(GUITestOpStatus &os, Qt::MouseButton = Qt::LeftButton); //all click methods work with the current position of the cursor
+    static void doubleClick(GUITestOpStatus &os);
 
     // fails if the given button is not Qt::LeftButton, Qt::RightButton or Qt::MiddleButton
     // Linux: fails if there is an opening X display error
-    static void press(U2OpStatus &os, Qt::MouseButton = Qt::LeftButton);
-    static void release(U2OpStatus &os, Qt::MouseButton = Qt::LeftButton); //release method should check if this key has been already pressed. Do nothing otherwise
+    static void press(GUITestOpStatus &os, Qt::MouseButton = Qt::LeftButton);
+    static void release(GUITestOpStatus &os, Qt::MouseButton = Qt::LeftButton); //release method should check if this key has been already pressed. Do nothing otherwise
 
-    static void dragAndDrop(U2OpStatus &os, const QPoint& start, const QPoint& end, const QPoint extraShift = QPoint(0, 0));
+    static void dragAndDrop(GUITestOpStatus &os, const QPoint& start, const QPoint& end);
 
     // Linux: fails if there is an opening X display error
-    static void scroll(U2OpStatus &os, int value); //positive values for scrolling up, negative for scrolling down
+    static void scroll(GUITestOpStatus &os, int value); //positive values for scrolling up, negative for scrolling down
 
     static QPoint getMousePosition() { return mousePos; }
 private:
     static QPoint mousePos;
     static Qt::MouseButtons bp;
 
-    static void moveToP(U2OpStatus &os, const int x, const int y); // platform-depended realization of moveTo
-    static void selectArea(U2OpStatus &os, const int x, const int y);
+    static void moveToP(GUITestOpStatus &os, const int x, const int y); // platform-depended realization of moveTo
+    static void selectArea(GUITestOpStatus &os, const int x, const int y);
 };
 
-class GTDragger: public QObject{
+class HI_EXPORT GTDragger : public QObject{
     Q_OBJECT
 public:
-    GTDragger(U2OpStatus &_os, const QPoint& _to);
+    GTDragger(GUITestOpStatus &_os, const QPoint& _to);
+    ~GTDragger();
+
 public slots:
     void sl_execDrag();
+
 private:
-    QTimer* timer;
-    U2OpStatus& os;
+    GUITestOpStatus& os;
     QPoint to;
+    bool done;
 };
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTMouseDriverLinux.cpp b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverLinux.cpp
similarity index 93%
rename from src/plugins/GUITestBase/src/api/GTMouseDriverLinux.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTMouseDriverLinux.cpp
index 01265db..82703b6 100644
--- a/src/plugins/GUITestBase/src/api/GTMouseDriverLinux.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverLinux.cpp
@@ -20,14 +20,13 @@
  */
 
 #include "GTMouseDriver.h"
-#include "api/GTGlobals.h"
 #include <QByteArray>
 
 #ifdef __linux__
     #include <X11/extensions/XTest.h>
 #endif
 
-namespace U2 {
+namespace HI {
 
 #ifdef __linux__
 
@@ -35,7 +34,7 @@ namespace U2 {
 QPoint GTMouseDriver::mousePos = QPoint(-1, -1);
 
 #define GT_METHOD_NAME "moveToP"
-void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
+void GTMouseDriver::moveToP(GUITestOpStatus &os, const int x, const int y)
 {
     QByteArray display_name = qgetenv("DISPLAY");
     GT_CHECK(!display_name.isEmpty(), "Environment variable \"DISPLAY\" not found");
@@ -105,13 +104,16 @@ void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
     }
 
     XCloseDisplay(display);
-
+#ifdef _DEBUG
     GTGlobals::sleep(500);
+#else
+    GTGlobals::sleep(100); //May be not needed
+#endif
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "press"
-void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::press(GUITestOpStatus &os, Qt::MouseButton button)
 {
     QByteArray display_name = qgetenv("DISPLAY");
     GT_CHECK(!display_name.isEmpty(), "Environment variable \"DISPLAY\" not found");
@@ -133,7 +135,7 @@ void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "release"
-void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::release(GUITestOpStatus &os, Qt::MouseButton button)
 {
     // TODO: check if this key has been already pressed
     QByteArray display_name = qgetenv("DISPLAY");
@@ -155,7 +157,7 @@ void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scroll"
-void GTMouseDriver::scroll(U2OpStatus &os, int value)
+void GTMouseDriver::scroll(GUITestOpStatus &os, int value)
 {
     QByteArray display_name = qgetenv("DISPLAY");
     GT_CHECK(!display_name.isEmpty(), "Environment variable \"DISPLAY\" not found");
diff --git a/src/plugins/GUITestBase/src/api/GTMouseDriverMac.cpp b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverMac.cpp
similarity index 79%
rename from src/plugins/GUITestBase/src/api/GTMouseDriverMac.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTMouseDriverMac.cpp
index 1f01993..c18d5fd 100644
--- a/src/plugins/GUITestBase/src/api/GTMouseDriverMac.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverMac.cpp
@@ -20,7 +20,6 @@
  */
 
 #include "GTMouseDriver.h"
-#include "api/GTGlobals.h"
 
 #include <QCursor>
 
@@ -28,26 +27,39 @@
 #include <ApplicationServices/ApplicationServices.h>
 #endif
 
-namespace U2 {
+namespace HI {
 
 #ifdef  Q_OS_MAC
 #define GT_CLASS_NAME "GTMouseDriverMac"
 QPoint GTMouseDriver::mousePos = QPoint(-1, -1);
 Qt::MouseButtons GTMouseDriver::bp = Qt::NoButton;
 
+namespace {
+
+bool isPointInsideScreen(const QPoint &point) {
+    const CGDirectDisplayID displayID = CGMainDisplayID();
+    const size_t horres = CGDisplayPixelsWide(displayID);
+    const size_t vertres = CGDisplayPixelsHigh(displayID);
+
+    const QRect screen(0, 0, horres, vertres);
+    return screen.contains(point);
+}
+
+bool isPointInsideScreen(int x, int y) {
+    return isPointInsideScreen(QPoint(x, y));
+}
+
+}
+
 #define GT_METHOD_NAME "moveToP"
-void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
+void GTMouseDriver::moveToP(GUITestOpStatus &os, const int x, const int y)
 {
-    if(bp.testFlag(Qt::LeftButton)){
-        selectArea(os,x,y);
+    if (bp.testFlag(Qt::LeftButton)) {
+        selectArea(os, x, y);
         return;
     }
-    CGDirectDisplayID displayID = CGMainDisplayID();
-    size_t horres = CGDisplayPixelsWide (displayID);
-    size_t vertres = CGDisplayPixelsHigh (displayID);
 
-    QRect screen(0, 0, horres-1, vertres-1);
-    GT_CHECK(screen.contains(QPoint(x, y)), "Invalid coordinates");
+    GT_CHECK(isPointInsideScreen(x, y), "Invalid coordinates");
 
     CGEventRef event = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CGPointMake(x, y), 0 /*ignored*/);
     GT_CHECK(event != NULL, "Can't create event");
@@ -59,14 +71,10 @@ void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectArea"
-void GTMouseDriver::selectArea(U2::U2OpStatus &os, const int x, const int y)
-{
-    CGDirectDisplayID displayID = CGMainDisplayID();
-    size_t horres = CGDisplayPixelsWide (displayID);
-    size_t vertres = CGDisplayPixelsHigh (displayID);
+void GTMouseDriver::selectArea(GUITestOpStatus &os, const int x, const int y) {
+    Q_UNUSED(os);
 
-    QRect screen(0, 0, horres-1, vertres-1);
-    GT_CHECK(screen.contains(QPoint(x, y)), "Invalid coordinates");
+    GT_CHECK(isPointInsideScreen(x, y), "Invalid coordinates");
 
     CGEventRef event = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDragged, CGPointMake(x, y), kCGMouseButtonLeft /*ignored*/);
     GT_CHECK(event != NULL, "Can't create event");
@@ -78,7 +86,7 @@ void GTMouseDriver::selectArea(U2::U2OpStatus &os, const int x, const int y)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "press"
-void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::press(GUITestOpStatus &os, Qt::MouseButton button)
 {
     bp |= button;
     QPoint mousePos = QCursor::pos();
@@ -95,7 +103,7 @@ void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "release"
-void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::release(GUITestOpStatus &os, Qt::MouseButton button)
 {
     bp &= (Qt::MouseButtonMask^button);
     QPoint mousePos = QCursor::pos();
@@ -112,10 +120,9 @@ void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doubleClick"
-void GTMouseDriver::doubleClick(U2OpStatus &os)
-{   //**********TODO: find out why click(os) is needed here*********
-                                click(os);
-    //**************************************************************
+void GTMouseDriver::doubleClick(GUITestOpStatus &os) {
+    Q_UNUSED(os);
+
     QPoint mousePos = QCursor::pos();
     CGEventType eventTypeMouseDown = kCGEventLeftMouseDown ;
     CGEventRef eventPress = CGEventCreateMouseEvent(NULL, eventTypeMouseDown, CGPointMake(mousePos.x(), mousePos.y()), 0 /*ignored*/);
@@ -125,6 +132,11 @@ void GTMouseDriver::doubleClick(U2OpStatus &os)
     CGEventRef eventRelease = CGEventCreateMouseEvent(NULL, eventTypeMouseUp, CGPointMake(mousePos.x(), mousePos.y()), 0 /*ignored*/);
     GT_CHECK(eventRelease != NULL, "Can't create event");
 
+    CGEventPost(kCGSessionEventTap, eventPress);
+    GTGlobals::sleep(0); // don't touch, it's Mac's magic
+    CGEventPost(kCGSessionEventTap, eventRelease);
+    GTGlobals::sleep(0);
+
     CGEventSetDoubleValueField(eventPress, kCGMouseEventClickState, 2);
     CGEventSetDoubleValueField(eventRelease, kCGMouseEventClickState, 2);
 
@@ -141,7 +153,7 @@ void GTMouseDriver::doubleClick(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scroll"
-void GTMouseDriver::scroll(U2OpStatus &os, int value)
+void GTMouseDriver::scroll(GUITestOpStatus &os, int value)
 {
     CGEventRef event = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, 1, value > 0 ? 10 : -10);
     GT_CHECK(event != NULL, "Can't create event");
diff --git a/src/plugins/GUITestBase/src/api/GTMouseDriverWindows.cpp b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverWindows.cpp
similarity index 93%
rename from src/plugins/GUITestBase/src/api/GTMouseDriverWindows.cpp
rename to src/libs_3rdparty/humimit/src/drivers/GTMouseDriverWindows.cpp
index 53a8809..4d16845 100644
--- a/src/plugins/GUITestBase/src/api/GTMouseDriverWindows.cpp
+++ b/src/libs_3rdparty/humimit/src/drivers/GTMouseDriverWindows.cpp
@@ -20,13 +20,12 @@
  */
 
 #include "GTMouseDriver.h"
-#include "api/GTGlobals.h"
 
 #ifdef _WIN32
     #include <windows.h>
 #endif
 
-namespace U2 {
+namespace HI {
 
 #ifdef _WIN32
 
@@ -34,7 +33,7 @@ namespace U2 {
 QPoint GTMouseDriver::mousePos = QPoint(-1, -1);
 
 #define GT_METHOD_NAME "moveToP"
-void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
+void GTMouseDriver::moveToP(GUITestOpStatus &os, const int x, const int y)
 {
     // get screen resolution
     HDC hDCScreen = GetDC(NULL);
@@ -110,12 +109,16 @@ void GTMouseDriver::moveToP(U2::U2OpStatus &os, const int x, const int y)
         }
     }
 
+#ifdef _DEBUG
     GTGlobals::sleep(500);
+#else
+    GTGlobals::sleep(100); //May be not needed
+#endif
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "press"
-void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::press(GUITestOpStatus &os, Qt::MouseButton button)
 {
     unsigned int btn = button == Qt::LeftButton ? MOUSEEVENTF_LEFTDOWN :
                        button == Qt::RightButton ? MOUSEEVENTF_RIGHTDOWN :
@@ -136,7 +139,7 @@ void GTMouseDriver::press(U2::U2OpStatus &os, Qt::MouseButton button)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "release"
-void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
+void GTMouseDriver::release(GUITestOpStatus &os, Qt::MouseButton button)
 {
     // TODO: check if this key has been already pressed
     unsigned int buttons[3] = {MOUSEEVENTF_LEFTUP, MOUSEEVENTF_RIGHTUP, MOUSEEVENTF_MIDDLEUP};
@@ -158,7 +161,7 @@ void GTMouseDriver::release(U2::U2OpStatus &os, Qt::MouseButton button)
 }
 #undef GT_METHOD_NAME
 
-void GTMouseDriver::scroll(U2OpStatus &os, int value)
+void GTMouseDriver::scroll(GUITestOpStatus &os, int value)
 {
     INPUT event;
     event.type = INPUT_MOUSE;
diff --git a/src/plugins/GUITestBase/src/api/GTAction.cpp b/src/libs_3rdparty/humimit/src/primitives/GTAction.cpp
similarity index 58%
rename from src/plugins/GUITestBase/src/api/GTAction.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTAction.cpp
index a13c2f0..078d953 100644
--- a/src/plugins/GUITestBase/src/api/GTAction.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTAction.cpp
@@ -19,31 +19,25 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTAction.h"
-#include <U2Core/AppContext.h>
-#include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QMainWindow>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QToolButton>
-#endif
-
-namespace U2 {
+#include "primitives/GTAction.h"
+#include "primitives/GTMainWindow.h"
+
+#include <QAbstractButton>
+#include <QApplication>
+#include <QMainWindow>
+#include <QToolButton>
+#include <QWidget>
+
+namespace HI {
 
 #define GT_CLASS_NAME "GTAction"
 
 #define GT_METHOD_NAME "button"
-QAbstractButton* GTAction::button(U2OpStatus &os, const QString &actionName, QObject *parent, const GTGlobals::FindOptions& options) {
+QAbstractButton* GTAction::button(GUITestOpStatus &os, const QString &actionName, QObject *parent, const GTGlobals::FindOptions& options) {
 
     QAction* a = findAction(os, actionName, parent);
     if (!a) {
-        a = findAction(os, actionName);
+        a = findAction(os, actionName, NULL, GTGlobals::FindOptions(false));
     }
     if (options.failIfNull) {
         GT_CHECK_RESULT(NULL != a, "Action " + actionName + " is NULL!", NULL);
@@ -72,7 +66,7 @@ QAbstractButton* GTAction::button(U2OpStatus &os, const QString &actionName, QOb
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "button"
-QAbstractButton* GTAction::button(U2OpStatus &os, const QAction* a, QObject *parent) {
+QAbstractButton* GTAction::button(GUITestOpStatus &os, const QAction* a, QObject *parent) {
 
     GT_CHECK_RESULT(a != NULL, "action is NULL", NULL);
 
@@ -96,11 +90,22 @@ QAbstractButton* GTAction::button(U2OpStatus &os, const QAction* a, QObject *par
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "getAction"
-QAction* GTAction::findAction(U2OpStatus &/*os*/, const QString &actionName, QObject *parent) {
+#define GT_METHOD_NAME "findAction"
+QAction* GTAction::findAction(GUITestOpStatus &os, const QString &actionName, QObject *parent, const GTGlobals::FindOptions& options) {
 
-    if (parent == NULL) {
-        parent = AppContext::getMainWindow()->getQMainWindow();
+    if (parent == NULL) { // If parent null, then searching for at QMainWindows
+        QList<QAction*> list;
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            if(parent->findChild<QAction*>(actionName) != NULL){
+                list.append(parent->findChild<QAction*>(actionName));
+            }
+        }
+        GT_CHECK_RESULT(list.count()<2, QString("There are %1 actions with this text").arg(list.count()), NULL);
+        if(options.failIfNull){
+            GT_CHECK_RESULT(list.count()!=0,"action not found", NULL);
+            return list.takeFirst();
+        }
+        return NULL;
     }
     QAction* a = parent->findChild<QAction*>(actionName);
 
@@ -109,16 +114,26 @@ QAction* GTAction::findAction(U2OpStatus &/*os*/, const QString &actionName, QOb
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findActionByText"
-QAction* GTAction::findActionByText(U2OpStatus &os, const QString &text, QObject *parent) {
-
-    if (parent == NULL) {
-        parent = AppContext::getMainWindow()->getQMainWindow();
+QAction* GTAction::findActionByText(GUITestOpStatus &os, const QString &text, QWidget *parent) {
+
+    if (parent == NULL) { // If parent null, then searching for at QMainWindows
+        QList<QAction*> resultList;
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            QList<QAction*> list = parent->findChildren<QAction*>();
+            foreach(QAction* act, list){
+                if(act->text() == text){
+                    resultList<<act;
+                }
+            }
+        }
+        GT_CHECK_RESULT(resultList.count()!=0,"action not found", NULL);
+        GT_CHECK_RESULT(resultList.count()<2, QString("There are %1 actions with this text").arg(resultList.count()), NULL);
+        return resultList.takeFirst();
     }
     QList<QAction*> list = parent->findChildren<QAction*>();
     QList<QAction*> resultList;
-
     foreach(QAction* act, list){
-        if(act->text()==text){
+        if(act->text() == text){
             resultList<<act;
         }
     }
diff --git a/src/plugins/GUITestBase/src/api/GTAction.h b/src/libs_3rdparty/humimit/src/primitives/GTAction.h
similarity index 59%
rename from src/plugins/GUITestBase/src/api/GTAction.h
rename to src/libs_3rdparty/humimit/src/primitives/GTAction.h
index 627225a..8159dd2 100644
--- a/src/plugins/GUITestBase/src/api/GTAction.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTAction.h
@@ -19,24 +19,25 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_GTACTION_H_
-#define _U2_GUI_GTACTION_H_
+#ifndef _HI_GUI_GTACTION_H_
+#define _HI_GUI_GTACTION_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include <QAction>
 
 class QAbstractButton;
-namespace U2 {
+namespace HI {
 
-class GTAction {
+class HI_EXPORT GTAction {
 public:
     // returns first QAbstractButton associated with an action with a given name
-    static QAbstractButton* button(U2OpStatus &os, const QString &actionName, QObject *parent = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QAbstractButton* button(GUITestOpStatus &os, const QString &actionName, QObject *parent = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
-    static QAbstractButton* button(U2OpStatus &os, const QAction* a, QObject *parent = NULL);
+    static QAbstractButton* button(GUITestOpStatus &os, const QAction* a, QObject *parent = NULL);
 
-    static QAction* findAction(U2OpStatus &os, const QString &actionName, QObject *parent = NULL);
+    static QAction* findAction(GUITestOpStatus &os, const QString &actionName, QObject *parent = NULL, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
 
-    static QAction* findActionByText(U2OpStatus &os, const QString &text, QObject *parent = NULL);
+    static QAction* findActionByText(GUITestOpStatus &os, const QString &text, QWidget *parent = NULL);
 };
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTCheckBox.cpp b/src/libs_3rdparty/humimit/src/primitives/GTCheckBox.cpp
similarity index 67%
rename from src/plugins/GUITestBase/src/api/GTCheckBox.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTCheckBox.cpp
index bf28c7a..a4e1f8d 100644
--- a/src/plugins/GUITestBase/src/api/GTCheckBox.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTCheckBox.cpp
@@ -19,18 +19,15 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTCheckBox.h"
-#include "GTWidget.h"
+#include "primitives/GTCheckBox.h"
+#include "primitives/GTWidget.h"
 
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTCheckBox"
 
 #define GT_METHOD_NAME "setChecked"
-void GTCheckBox::setChecked(U2OpStatus& os, QCheckBox *checkBox, bool checked) {
+void GTCheckBox::setChecked(GUITestOpStatus& os, QCheckBox *checkBox, bool checked) {
     GT_CHECK(checkBox != NULL, "QCheckBox == NULL");
     if(checkBox->isChecked() == checked){
         return;
@@ -48,6 +45,18 @@ void GTCheckBox::setChecked(U2OpStatus& os, QCheckBox *checkBox, bool checked) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "setChecked"
+void GTCheckBox::setChecked(GUITestOpStatus& os, const QString &checkBoxName, bool checked, QWidget *parent) {
+    GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, checkBoxName, parent), checked);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setChecked"
+void GTCheckBox::setChecked(GUITestOpStatus& os, const QString &checkBoxName, QWidget *parent) {
+    GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, checkBoxName, parent));
+}
+#undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 }
diff --git a/src/plugins/GUITestBase/src/api/GTCheckBox.h b/src/libs_3rdparty/humimit/src/primitives/GTCheckBox.h
similarity index 62%
rename from src/plugins/GUITestBase/src/api/GTCheckBox.h
rename to src/libs_3rdparty/humimit/src/primitives/GTCheckBox.h
index afc5499..831b1c4 100644
--- a/src/plugins/GUITestBase/src/api/GTCheckBox.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTCheckBox.h
@@ -19,23 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_CHECKBOX_H_
-#define _U2_GT_CHECKBOX_H_
+#ifndef _HI_GT_CHECKBOX_H_
+#define _HI_GT_CHECKBOX_H_
 
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QCheckBox>
-#endif
-
-namespace U2 {
+#include "GTGlobals.h"
+#include <QCheckBox>
 
-class GTCheckBox {
+namespace HI {
+/*!
+ * \brief The class for working with QCheckBox primitive
+ */
+class HI_EXPORT GTCheckBox {
 public:
-    // fails if the comboBox is NULL or can't set checkbox i.e. it's not enabled
-    static void setChecked(U2OpStatus& os, QCheckBox *checkBox, bool checked = true);
+    static void setChecked(GUITestOpStatus& os, QCheckBox *checkBox, bool checked = true);
+
+    static void setChecked(GUITestOpStatus& os, const QString &checkBoxName, bool checked = true, QWidget *parent = NULL);
+    static void setChecked(GUITestOpStatus& os, const QString &checkBoxName, QWidget *parent = NULL);
 };
 
 }
-#endif // _U2_GT_CHECKBOX_H_
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTComboBox.cpp b/src/libs_3rdparty/humimit/src/primitives/GTComboBox.cpp
similarity index 85%
rename from src/plugins/GUITestBase/src/api/GTComboBox.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTComboBox.cpp
index 9307871..1dd3d17 100644
--- a/src/plugins/GUITestBase/src/api/GTComboBox.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTComboBox.cpp
@@ -19,25 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include <QStandardItemModel>
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QListView>
-#else
-#include <QtWidgets/QListView>
-#endif
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTComboBox.h"
+#include "primitives/GTWidget.h"
 
-#include "GTComboBox.h"
-#include "GTWidget.h"
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
+#include <QListView>
+#include <QStandardItemModel>
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTComboBox"
 
 #define GT_METHOD_NAME "setCurrentIndex"
-void GTComboBox::setCurrentIndex(U2OpStatus& os, QComboBox *comboBox, int index, bool checkVal, GTGlobals::UseMethod method) {
+void GTComboBox::setCurrentIndex(GUITestOpStatus& os, QComboBox *comboBox, int index, bool checkVal, GTGlobals::UseMethod method) {
 
     GT_CHECK(comboBox != NULL, "QComboBox* == NULL");
 
@@ -83,7 +78,7 @@ void GTComboBox::setCurrentIndex(U2OpStatus& os, QComboBox *comboBox, int index,
         GT_CHECK(modelIndex.isValid(), "invalid model index");
         view->scrollTo(modelIndex);
         GTGlobals::sleep(500);
-        coreLog.trace("MOVING TO LIST ITEM");
+        qDebug("GT_DEBUG_MESSAGE moving to list item");
         GTMouseDriver::moveTo(os, view->viewport()->mapToGlobal(view->visualRect(modelIndex).center()));
         GTMouseDriver::click(os);
         GTGlobals::sleep(500);
@@ -93,14 +88,14 @@ void GTComboBox::setCurrentIndex(U2OpStatus& os, QComboBox *comboBox, int index,
 
 }
 
-void GTComboBox::setIndexWithText(U2OpStatus& os, QComboBox *comboBox, const QString& text, bool checkVal, GTGlobals::UseMethod method) {
+void GTComboBox::setIndexWithText(GUITestOpStatus& os, QComboBox *comboBox, const QString& text, bool checkVal, GTGlobals::UseMethod method) {
     GT_CHECK(comboBox != NULL, "QComboBox* == NULL");
 
     int index = comboBox->findText(text, Qt::MatchContains);
     GT_CHECK(index != -1, "Text " + text + " was not found");
 
     setCurrentIndex(os, comboBox, index, checkVal, method);
-    CHECK_OP(os, );
+    //CHECK_OP(os, );
     if(checkVal){
         QString currentText = comboBox->currentText();
         GT_CHECK(currentText == text, "Can't set text");
@@ -109,7 +104,7 @@ void GTComboBox::setIndexWithText(U2OpStatus& os, QComboBox *comboBox, const QSt
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getValues"
-QStringList GTComboBox::getValues(U2OpStatus &os, QComboBox *comboBox) {
+QStringList GTComboBox::getValues(GUITestOpStatus &os, QComboBox *comboBox) {
     QStringList result;
     GT_CHECK_RESULT(NULL != comboBox, "Combobox is NULL", result);
     for (int i = 0; i < comboBox->count(); i++) {
@@ -121,7 +116,7 @@ QStringList GTComboBox::getValues(U2OpStatus &os, QComboBox *comboBox) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkValues"
-void GTComboBox::checkValues(U2OpStatus& os, QComboBox *comboBox, const QStringList &values) {
+void GTComboBox::checkValues(GUITestOpStatus& os, QComboBox *comboBox, const QStringList &values) {
     GT_CHECK(NULL != comboBox, "comboBox is NULL");
 
     GTWidget::setFocus(os, comboBox);
@@ -164,7 +159,7 @@ void GTComboBox::checkValues(U2OpStatus& os, QComboBox *comboBox, const QStringL
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkValuesPresence"
-void GTComboBox::checkValuesPresence(U2OpStatus &os, QComboBox *comboBox, const QStringList &values){
+void GTComboBox::checkValuesPresence(GUITestOpStatus &os, QComboBox *comboBox, const QStringList &values){
     Q_UNUSED(os)
     GT_CHECK(NULL != comboBox, "ComboBox is NULL");
 
@@ -176,7 +171,7 @@ void GTComboBox::checkValuesPresence(U2OpStatus &os, QComboBox *comboBox, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkCurrentValue"
-void GTComboBox::checkCurrentValue(U2OpStatus &os, QComboBox *comboBox, const QString &expectedValue) {
+void GTComboBox::checkCurrentValue(GUITestOpStatus &os, QComboBox *comboBox, const QString &expectedValue) {
     Q_UNUSED(os);
     GT_CHECK(NULL != comboBox, "ComboBox is NULL");
     GT_CHECK(expectedValue == comboBox->currentText(), QString("An unexpected value: expect '%1', got '%2'")
diff --git a/src/plugins/GUITestBase/src/api/GTComboBox.h b/src/libs_3rdparty/humimit/src/primitives/GTComboBox.h
similarity index 56%
rename from src/plugins/GUITestBase/src/api/GTComboBox.h
rename to src/libs_3rdparty/humimit/src/primitives/GTComboBox.h
index d09d109..17e167e 100644
--- a/src/plugins/GUITestBase/src/api/GTComboBox.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTComboBox.h
@@ -19,34 +19,32 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_COMBOBOX_H_
-#define _U2_GT_COMBOBOX_H_
+#ifndef _HI_GT_COMBOBOX_H_
+#define _HI_GT_COMBOBOX_H_
 
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QComboBox>
-#endif
-
-namespace U2 {
+#include "GTGlobals.h"
+#include <QComboBox>
 
-class GTComboBox {
+namespace HI {
+/*!
+ * \brief The class for working with QComboBox primitive
+ */
+class HI_EXPORT GTComboBox {
 public:
     // fails if the comboBox is NULL, index is not in a comboBox range
     // or a comboBox's index differs from a given index in the end of method's execution
-    static void setCurrentIndex(U2OpStatus& os, QComboBox *comboBox, int index, bool checkVal = true, GTGlobals::UseMethod method = GTGlobals::UseKey);
+    static void setCurrentIndex(GUITestOpStatus& os, QComboBox *comboBox, int index, bool checkVal = true, GTGlobals::UseMethod method = GTGlobals::UseKey);
 
     // Fails if the comboBox is NULL, combobox doesn't contain an item with text
     // or a comboBox current item's text differs from a given text in the end of method's execution
-    static void setIndexWithText(U2OpStatus& os, QComboBox *comboBox, const QString& text, bool checkVal = true, GTGlobals::UseMethod method = GTGlobals::UseKey);
+    static void setIndexWithText(GUITestOpStatus& os, QComboBox *comboBox, const QString& text, bool checkVal = true, GTGlobals::UseMethod method = GTGlobals::UseKey);
 
-    static QStringList getValues(U2OpStatus &os, QComboBox *comboBox);
-    static void checkValues(U2OpStatus& os, QComboBox *comboBox, const QStringList &values);
+    static QStringList getValues(GUITestOpStatus &os, QComboBox *comboBox);
+    static void checkValues(GUITestOpStatus& os, QComboBox *comboBox, const QStringList &values);
 
-    static void checkValuesPresence(U2OpStatus& os, QComboBox *comboBox, const QStringList &values);
-    static void checkCurrentValue(U2OpStatus &os, QComboBox *comboBox, const QString &expectedValue);
+    static void checkValuesPresence(GUITestOpStatus& os, QComboBox *comboBox, const QStringList &values);
+    static void checkCurrentValue(GUITestOpStatus &os, QComboBox *comboBox, const QString &expectedValue);
 };
 
 }
-#endif // _U2_GT_COMBOBOX_H_
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTDoubleSpinBox.cpp b/src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.cpp
similarity index 65%
rename from src/plugins/GUITestBase/src/api/GTDoubleSpinBox.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.cpp
index a8e2931..ec732ff 100644
--- a/src/plugins/GUITestBase/src/api/GTDoubleSpinBox.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.cpp
@@ -19,18 +19,31 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTDoubleSpinBox.h"
-#include "GTWidget.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTDoubleSpinBox.h"
+#include "primitives/GTWidget.h"
 
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTSpinBox"
 
+#define GT_METHOD_NAME "getValue"
+int GTDoubleSpinbox::getValue(GUITestOpStatus &os, QDoubleSpinBox *spinBox) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(spinBox != NULL, "spinBox is NULL", -1);
+    return spinBox->value();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getValue"
+int GTDoubleSpinbox::getValue(GUITestOpStatus &os, const QString &spinBoxName, QWidget *parent) {
+    return GTDoubleSpinbox::getValue(os, GTWidget::findExactWidget<QDoubleSpinBox *>(os, spinBoxName, parent));
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "setValue"
-void GTDoubleSpinbox::setValue(U2OpStatus& os, QDoubleSpinBox *spinBox, double v, GTGlobals::UseMethod useMethod) {
+void GTDoubleSpinbox::setValue(GUITestOpStatus& os, QDoubleSpinBox *spinBox, double v, GTGlobals::UseMethod useMethod) {
     GT_CHECK(spinBox != NULL, "spinBox is NULL");
     if(spinBox->value() == v){
         return;
@@ -91,8 +104,20 @@ void GTDoubleSpinbox::setValue(U2OpStatus& os, QDoubleSpinBox *spinBox, double v
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "setValue"
+void GTDoubleSpinbox::setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, GTGlobals::UseMethod useMethod, QWidget *parent) {
+    GTDoubleSpinbox::setValue(os, GTWidget::findExactWidget<QDoubleSpinBox *>(os, spinBoxName, parent), v, useMethod);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setValue"
+void GTDoubleSpinbox::setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, QWidget *parent) {
+    GTDoubleSpinbox::setValue(os, GTWidget::findExactWidget<QDoubleSpinBox *>(os, spinBoxName, parent), v);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "checkLimits"
-void GTDoubleSpinbox::checkLimits(U2OpStatus &os, QDoubleSpinBox *spinBox, double min, double max){
+void GTDoubleSpinbox::checkLimits(GUITestOpStatus &os, QDoubleSpinBox *spinBox, double min, double max){
     GT_CHECK(spinBox != NULL, "spinbox is NULL");
     int actualMin = spinBox->minimum();
     int actualMax = spinBox->maximum();
@@ -101,6 +126,12 @@ void GTDoubleSpinbox::checkLimits(U2OpStatus &os, QDoubleSpinBox *spinBox, doubl
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "checkLimits"
+void GTDoubleSpinbox::checkLimits(GUITestOpStatus &os, const QString &spinBoxName, int min, int max, QWidget *parent){
+    GTDoubleSpinbox::checkLimits(os, GTWidget::findExactWidget<QDoubleSpinBox *>(os, spinBoxName, parent), min, max);
+}
+#undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 }
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.h b/src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.h
new file mode 100644
index 0000000..aa43ad0
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTDoubleSpinBox.h
@@ -0,0 +1,27 @@
+#ifndef _HI_GT_DOUBLE_SPINBOX_H
+#define _HI_GT_DOUBLE_SPINBOX_H
+
+#include "primitives/GTSpinBox.h"
+#include "GTGlobals.h"
+
+#include <QDoubleSpinBox>
+
+namespace HI {
+/*!
+ * \brief The class for working with QDoubleSpinBox primitive
+ */
+class HI_EXPORT GTDoubleSpinbox
+{
+public:
+    static int getValue(GUITestOpStatus &os, QDoubleSpinBox *spinBox);
+    static int getValue(GUITestOpStatus &os, const QString &spinBoxName, QWidget *parent = NULL);
+
+    static void setValue(GUITestOpStatus& os, QDoubleSpinBox *spinBox, double v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse);
+    static void setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse, QWidget *parent = NULL);
+    static void setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, QWidget *parent = NULL);
+
+    static void checkLimits(GUITestOpStatus &os, QDoubleSpinBox *spinBox, double min, double max);
+    static void checkLimits(GUITestOpStatus &os, const QString &spinBoxName, int min, int max, QWidget *parent = NULL);
+};
+}
+#endif // GTDOUBLESPINBOX_H
diff --git a/src/plugins/GUITestBase/src/api/GTGroupBox.cpp b/src/libs_3rdparty/humimit/src/primitives/GTGroupBox.cpp
similarity index 67%
rename from src/plugins/GUITestBase/src/api/GTGroupBox.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTGroupBox.cpp
index d261c42..97ea488 100644
--- a/src/plugins/GUITestBase/src/api/GTGroupBox.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTGroupBox.cpp
@@ -19,21 +19,24 @@
  * MA 02110-1301, USA.
  */
 
+
+#include "primitives/GTGroupBox.h"
+#include "primitives/GTWidget.h"
+
 #include <QStyle>
 #include <QStyleOption>
 
-#include "GTGroupBox.h"
-#include "GTWidget.h"
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTGroupBox"
 
 #define GT_METHOD_NAME "setChecked"
-void GTGroupBox::setChecked(U2OpStatus &os, QGroupBox *groupBox, bool checked) {
+void GTGroupBox::setChecked(GUITestOpStatus &os, QGroupBox *groupBox, bool checked) {
     GT_CHECK(groupBox != NULL, "QGroupBox is NULL");
 
-    CHECK(groupBox->isChecked() != checked, );
+    if (groupBox->isChecked() == checked) {
+        return;
+    }
 
     GT_CHECK(groupBox->isEnabled(), "QGroupBox is disabled");
 
@@ -46,6 +49,18 @@ void GTGroupBox::setChecked(U2OpStatus &os, QGroupBox *groupBox, bool checked) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "setChecked"
+void GTGroupBox::setChecked(GUITestOpStatus& os, const QString &groupBoxName, bool checked, QWidget *parent) {
+    GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, groupBoxName, parent), checked);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setChecked"
+void GTGroupBox::setChecked(GUITestOpStatus& os, const QString &groupBoxName, QWidget *parent) {
+    GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, groupBoxName, parent));
+}
+#undef GT_METHOD_NAME
+
 QRect GTGroupBox::getCheckBoxRect(QGroupBox *groupBox) {
     QStyleOptionGroupBox options;
     return groupBox->style()->subControlRect(QStyle::CC_GroupBox, &options, QStyle::SC_GroupBoxCheckBox);
@@ -53,4 +68,4 @@ QRect GTGroupBox::getCheckBoxRect(QGroupBox *groupBox) {
 
 #undef GT_CLASS_NAME
 
-}   // namespace U2
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTGroupBox.h b/src/libs_3rdparty/humimit/src/primitives/GTGroupBox.h
similarity index 65%
rename from src/plugins/GUITestBase/src/api/GTGroupBox.h
rename to src/libs_3rdparty/humimit/src/primitives/GTGroupBox.h
index 06a3d16..13a9c4c 100644
--- a/src/plugins/GUITestBase/src/api/GTGroupBox.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTGroupBox.h
@@ -19,23 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_GROUP_BOX_H_
-#define _U2_GT_GROUP_BOX_H_
+#ifndef _HI_GT_GROUP_BOX_H_
+#define _HI_GT_GROUP_BOX_H_
 
+#include "GTGlobals.h"
 #include <QGroupBox>
 
-#include "api/GTGlobals.h"
-
-namespace U2 {
-
-class GTGroupBox {
+namespace HI {
+/*!
+ * \brief The class for working with QGroupBox primitive
+ */
+class HI_EXPORT GTGroupBox {
 public:
-    static void setChecked(U2OpStatus &os, QGroupBox *groupBox, bool checked = true);
+    static void setChecked(GUITestOpStatus &os, QGroupBox *groupBox, bool checked = true);
+    static void setChecked(GUITestOpStatus& os, const QString &groupBoxName, bool checked = true, QWidget *parent = NULL);
+    static void setChecked(GUITestOpStatus& os, const QString &groupBoxName, QWidget *parent = NULL);
 
 private:
     static QRect getCheckBoxRect(QGroupBox *groupBox);
 };
 
-}   // namespace U2
+}
 
-#endif // _U2_GT_GROUP_BOX_H_
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTLineEdit.cpp b/src/libs_3rdparty/humimit/src/primitives/GTLineEdit.cpp
similarity index 77%
rename from src/plugins/GUITestBase/src/api/GTLineEdit.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTLineEdit.cpp
index 091a546..5187cf6 100644
--- a/src/plugins/GUITestBase/src/api/GTLineEdit.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTLineEdit.cpp
@@ -19,20 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTClipboard.h"
-#include "GTLineEdit.h"
-#include "GTWidget.h"
-
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-#include "GTKeyboardUtils.h"
-
-namespace U2 {
-
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTLineEdit.h"
+#include "primitives/GTWidget.h"
+#include "system/GTClipboard.h"
+#include "utils/GTKeyboardUtils.h"
+
+namespace HI {
 #define GT_CLASS_NAME "GTLineEdit"
 
 #define GT_METHOD_NAME ""
-void GTLineEdit::setText(U2OpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck /* = false*/, bool useCopyPaste) {
+void GTLineEdit::setText(GUITestOpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck /* = false*/, bool useCopyPaste) {
 
     GT_CHECK(lineEdit != NULL, "lineEdit is NULL");
     if(lineEdit->text() == str){
@@ -68,8 +66,16 @@ void GTLineEdit::setText(U2OpStatus& os, QLineEdit* lineEdit, const QString &str
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getText"
+QString GTLineEdit::getText(GUITestOpStatus &os, QLineEdit *lineEdit) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(NULL != lineEdit, "lineEdit is NULL", "");
+    return lineEdit->text();
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "clear"
-void GTLineEdit::clear(U2OpStatus& os, QLineEdit* lineEdit) {
+void GTLineEdit::clear(GUITestOpStatus& os, QLineEdit* lineEdit) {
 
     GT_CHECK(lineEdit != NULL, "lineEdit is NULL");
 
@@ -86,7 +92,7 @@ void GTLineEdit::clear(U2OpStatus& os, QLineEdit* lineEdit) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "pasteClipboard"
-void GTLineEdit::pasteClipboard(U2OpStatus& os, QLineEdit* lineEdit, PasteMethod pasteMethod) {
+void GTLineEdit::pasteClipboard(GUITestOpStatus& os, QLineEdit* lineEdit, PasteMethod pasteMethod) {
 
     GT_CHECK(lineEdit != NULL, "lineEdit is NULL");
 
@@ -107,7 +113,7 @@ void GTLineEdit::pasteClipboard(U2OpStatus& os, QLineEdit* lineEdit, PasteMethod
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkTextSize"
-void GTLineEdit::checkTextSize(U2OpStatus& os, QLineEdit* lineEdit) {
+void GTLineEdit::checkTextSize(GUITestOpStatus& os, QLineEdit* lineEdit) {
 
     GT_CHECK(lineEdit != NULL, "lineEdit is NULL");
 
@@ -121,7 +127,7 @@ void GTLineEdit::checkTextSize(U2OpStatus& os, QLineEdit* lineEdit) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkText"
-void GTLineEdit::checkText(U2OpStatus &os, QLineEdit *lineEdit, const QString &expectedText) {
+void GTLineEdit::checkText(GUITestOpStatus &os, QLineEdit *lineEdit, const QString &expectedText) {
     Q_UNUSED(os);
     GT_CHECK(NULL != lineEdit, "Line edit is NULL");
     GT_CHECK(expectedText == lineEdit->text(), QString("The text differs: expect '%1', got '%2'").arg(expectedText).arg(lineEdit->text()));
@@ -129,14 +135,14 @@ void GTLineEdit::checkText(U2OpStatus &os, QLineEdit *lineEdit, const QString &e
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "copyText"
-QString GTLineEdit::copyText(U2OpStatus& os, QLineEdit* lineEdit) {
+QString GTLineEdit::copyText(GUITestOpStatus& os, QLineEdit* lineEdit) {
     GT_CHECK_RESULT(lineEdit != NULL, "lineEdit is NULL", QString());
     return lineEdit->text();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "tryToSetText"
-bool GTLineEdit::tryToSetText(U2OpStatus &os, QLineEdit *lineEdit, const QString &str) {
+bool GTLineEdit::tryToSetText(GUITestOpStatus &os, QLineEdit *lineEdit, const QString &str) {
     GT_CHECK_RESULT(lineEdit != NULL, "lineEdit is NULL", false);
     GTWidget::setFocus(os, lineEdit);
     if (lineEdit->text() == str) {
@@ -157,4 +163,4 @@ bool GTLineEdit::tryToSetText(U2OpStatus &os, QLineEdit *lineEdit, const QString
 
 #undef GT_CLASS_NAME
 
-}
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTLineEdit.h b/src/libs_3rdparty/humimit/src/primitives/GTLineEdit.h
similarity index 55%
rename from src/plugins/GUITestBase/src/api/GTLineEdit.h
rename to src/libs_3rdparty/humimit/src/primitives/GTLineEdit.h
index 7bced8a..70998a4 100644
--- a/src/plugins/GUITestBase/src/api/GTLineEdit.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTLineEdit.h
@@ -19,47 +19,46 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_LINEEDIT_H_
-#define _U2_GT_LINEEDIT_H_
+#ifndef _HI_GT_LINEEDIT_H_
+#define _HI_GT_LINEEDIT_H_
 
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QLineEdit>
-#endif
+#include "GTGlobals.h"
+#include <QLineEdit>
 
-namespace U2 {
-
-class GTLineEdit {
+namespace HI {
+/*!
+ * \brief The class for working with QLineEdit primitive
+ */
+class HI_EXPORT GTLineEdit {
 public:
     enum PasteMethod {Shortcut, Mouse};
 
     // fails if lineEdit is NULL, GTLineEdit::clear fails
     // or a set text differs from a given string
 #ifdef Q_OS_MAC
-    static void setText(U2OpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck = false, bool useCopyPaste = true);
+    static void setText(GUITestOpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck = false, bool useCopyPaste = true);
 #else
-    static void setText(U2OpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck = false, bool useCopyPaste = false);
+    static void setText(GUITestOpStatus& os, QLineEdit* lineEdit, const QString &str, bool noCheck = false, bool useCopyPaste = false);
 #endif
+    static QString getText(GUITestOpStatus &os, QLineEdit *lineEdit);
     // fails if lineEdit is NULL, or lineEdit's text wasn't cleared
-    static void clear(U2OpStatus& os, QLineEdit* lineEdit);
+    static void clear(GUITestOpStatus& os, QLineEdit* lineEdit);
 
     // fails if GTLineEdit::clear fails
-    static void pasteClipboard(U2OpStatus& os, QLineEdit* lineEdit, PasteMethod pasteMethod = Shortcut);
+    static void pasteClipboard(GUITestOpStatus& os, QLineEdit* lineEdit, PasteMethod pasteMethod = Shortcut);
 
     // fails if lineEdit is NULL or lineEdit text is not in lineEdit's rect
     // considering lineEdit's fontMetrics and textMargins
-    static void checkTextSize(U2OpStatus& os, QLineEdit* lineEdit);
-    static void checkText(U2OpStatus& os, QLineEdit* lineEdit, const QString &expectedText);
+    static void checkTextSize(GUITestOpStatus& os, QLineEdit* lineEdit);
+    static void checkText(GUITestOpStatus& os, QLineEdit* lineEdit, const QString &expectedText);
 
-    static QString copyText(U2OpStatus& os, QLineEdit* lineEdit);
+    static QString copyText(GUITestOpStatus& os, QLineEdit* lineEdit);
 
     // fails if lineEdit is NULL
     // checks if str can be pasted in lineEdit
-    static bool tryToSetText(U2OpStatus& os, QLineEdit* lineEdit, const QString& str);
+    static bool tryToSetText(GUITestOpStatus& os, QLineEdit* lineEdit, const QString& str);
 };
 
-}
+}   // namespace
 
-#endif // _U2_GT_LINEEDIT_H_
+#endif // _HI_GT_LINEEDIT_H_
diff --git a/src/plugins/GUITestBase/src/api/GTListWidget.cpp b/src/libs_3rdparty/humimit/src/primitives/GTListWidget.cpp
similarity index 80%
rename from src/plugins/GUITestBase/src/api/GTListWidget.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTListWidget.cpp
index 715ac06..66e6c0a 100644
--- a/src/plugins/GUITestBase/src/api/GTListWidget.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTListWidget.cpp
@@ -19,23 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTListWidget.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QListWidget>
-#else
-#include <QtWidgets/QListWidget>
-#endif
+namespace HI{
 
-#include "GTListWidget.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-
-namespace U2{
 #define GT_CLASS_NAME "GTListWidget"
 
 #define GT_METHOD_NAME "click"
-void GTListWidget::click(U2OpStatus &os, QListWidget *listWidget, const QString &text, Qt::MouseButton button){
+void GTListWidget::click(GUITestOpStatus &os, QListWidget *listWidget, const QString &text, Qt::MouseButton button){
     QList<QListWidgetItem*> list = listWidget->findItems(text, Qt::MatchExactly);
     GT_CHECK(!list.isEmpty(), QString("item %1 not found").arg(text));
 
@@ -53,7 +46,7 @@ void GTListWidget::click(U2OpStatus &os, QListWidget *listWidget, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isItemChecked"
-bool GTListWidget::isItemChecked(U2OpStatus &os, QListWidget *listWidget, const QString &text) {
+bool GTListWidget::isItemChecked(GUITestOpStatus &os, QListWidget *listWidget, const QString &text) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != listWidget, "List widget is NULL", false);
     QList<QListWidgetItem *> list = listWidget->findItems(text, Qt::MatchExactly);
@@ -64,7 +57,7 @@ bool GTListWidget::isItemChecked(U2OpStatus &os, QListWidget *listWidget, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-void GTListWidget::checkItem(U2OpStatus &os, QListWidget *listWidget, const QString &text, bool newState) {
+void GTListWidget::checkItem(GUITestOpStatus &os, QListWidget *listWidget, const QString &text, bool newState) {
     Q_UNUSED(os);
     GT_CHECK(NULL != listWidget, "List widget is NULL");
     if (newState != isItemChecked(os, listWidget, text)) {
@@ -75,7 +68,7 @@ void GTListWidget::checkItem(U2OpStatus &os, QListWidget *listWidget, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkAllItems"
-void GTListWidget::checkAllItems(U2OpStatus &os, QListWidget *listWidget, bool newState) {
+void GTListWidget::checkAllItems(GUITestOpStatus &os, QListWidget *listWidget, bool newState) {
     Q_UNUSED(os);
     GT_CHECK(NULL != listWidget, "List widget is NULL");
 
@@ -87,7 +80,7 @@ void GTListWidget::checkAllItems(U2OpStatus &os, QListWidget *listWidget, bool n
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkOnlyItems"
-void GTListWidget::checkOnlyItems(U2OpStatus &os, QListWidget *listWidget, const QStringList &itemTexts, bool newState) {
+void GTListWidget::checkOnlyItems(GUITestOpStatus &os, QListWidget *listWidget, const QStringList &itemTexts, bool newState) {
     Q_UNUSED(os);
     GT_CHECK(NULL != listWidget, "List widget is NULL");
 
@@ -106,7 +99,7 @@ void GTListWidget::checkOnlyItems(U2OpStatus &os, QListWidget *listWidget, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItems"
-QStringList GTListWidget::getItems(U2OpStatus &os, QListWidget *listWidget) {
+QStringList GTListWidget::getItems(GUITestOpStatus &os, QListWidget *listWidget) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != listWidget, "List widget is NULL", QStringList());
     QStringList itemTexts;
diff --git a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h b/src/libs_3rdparty/humimit/src/primitives/GTListWidget.h
similarity index 52%
copy from src/plugins/GUITestBase/src/api/GTGraphicsItem.h
copy to src/libs_3rdparty/humimit/src/primitives/GTListWidget.h
index a90d7a5..da15e61 100644
--- a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTListWidget.h
@@ -19,25 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef GTGRAPHICSITEM_H
-#define GTGRAPHICSITEM_H
 
-#include <U2Core/U2OpStatus.h>
+#ifndef _HI_GT_LISTWIDGET_H_
+#define _HI_GT_LISTWIDGET_H_
+
 #include "GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <QListWidget>
 
-namespace U2 {
+namespace HI{
 
-class GTGraphicsItem {
+class HI_EXPORT GTListWidget
+{
 public:
-    static QRect getGraphicsItemRect(U2OpStatus &os, QGraphicsItem *it);
-    static QPoint getItemCenter(U2OpStatus &os, QGraphicsItem *it);
+    static void click(GUITestOpStatus &os, QListWidget *listWidget, const QString &text, Qt::MouseButton button = Qt::LeftButton);
+    static bool isItemChecked(GUITestOpStatus &os, QListWidget *listWidget, const QString &text);
+    static void checkItem(GUITestOpStatus &os, QListWidget *listWidget, const QString &text, bool newState);
+    static void checkAllItems(GUITestOpStatus &os, QListWidget *listWidget, bool newState);
+    static void checkOnlyItems(GUITestOpStatus &os, QListWidget *listWidget, const QStringList &itemTexts, bool newState = true);
+    static QStringList getItems(GUITestOpStatus &os, QListWidget *listWidget);
 };
 
-} //namespace
+}
 
-#endif // GTGRAPHICSITEM_H
+#endif // _HI_GT_LISTWIDGET_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp b/src/libs_3rdparty/humimit/src/primitives/GTMainWindow.cpp
similarity index 50%
copy from src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
copy to src/libs_3rdparty/humimit/src/primitives/GTMainWindow.cpp
index de545ca..e151e2d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMainWindow.cpp
@@ -19,35 +19,43 @@
  * MA 02110-1301, USA.
  */
 
-#include <QApplication>
+#include "primitives/GTMainWindow.h"
 
-#include "api/GTCheckBox.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <QApplication>
+#include <QWindow>
 
-#include "GraphLabelsSelectDialogFiller.h"
+namespace HI {
 
-namespace U2 {
+#define GT_CLASS_NAME "GTMainWindow"
 
-#define GT_CLASS_NAME "GTUtilsDialog::GraphLabelsSelectDialogFiller"
-#define GT_METHOD_NAME "commonScenario"
+#define GT_METHOD_NAME "getMainWindows"
+QList<QMainWindow*> GTMainWindow::getMainWindows(GUITestOpStatus &os) {
+    QList<QMainWindow*> list;
+    foreach(QWindow *window, qApp->topLevelWindows()){
+        if(window->inherits("QMainWindow")){
+            list.append(qobject_cast<QMainWindow*>(window));
+        }
+    }
 
-void GraphLabelsSelectDialogFiller::commonScenario(){
-    QWidget* dialog = QApplication::activeModalWidget();
-    GT_CHECK(dialog, "activeModalWidget is NULL");
+    GT_CHECK_RESULT(!list.isEmpty(),"No one main window found", list);
+    return list;
+}
+#undef GT_METHOD_NAME
 
-    if(windowSize != -1){
-        QSpinBox* stepSpinBox = GTWidget::findExactWidget<QSpinBox*>(os, "stepSpinBox", dialog);
-        GTSpinBox::setValue(os, stepSpinBox, windowSize, GTGlobals::UseKeyBoard);
+#define GT_METHOD_NAME "getMainWindowsAsWidget"
+QList<QWidget*> GTMainWindow::getMainWindowsAsWidget(GUITestOpStatus &os) {
+    QList<QWidget*> list;
+    foreach(QWidget *widget, qApp->topLevelWidgets()){
+        if(widget->inherits("QMainWindow")){
+            list.append(widget);
+        }
     }
 
-    QCheckBox* usedIntervalsCheck = GTWidget::findExactWidget<QCheckBox*>(os, "usedIntervalsCheck", dialog);
-    GTCheckBox::setChecked(os, usedIntervalsCheck, selectedAreaCheck);
-
-    GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+    GT_CHECK_RESULT(!list.isEmpty(),"No one main window widget found", list);
+    return list;
 }
-
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsToolTip.h b/src/libs_3rdparty/humimit/src/primitives/GTMainWindow.h
similarity index 74%
copy from src/plugins/GUITestBase/src/GTUtilsToolTip.h
copy to src/libs_3rdparty/humimit/src/primitives/GTMainWindow.h
index 183d0df..61e5c7a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsToolTip.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMainWindow.h
@@ -19,18 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_TOOLTIP_UTILS_H_
-#define _U2_GUI_TOOLTIP_UTILS_H_
+#ifndef _HI_GT_MAIN_WINDOW_H_
+#define _HI_GT_MAIN_WINDOW_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
-namespace U2 {
+#include <QMainWindow>
+#include <QWidget>
 
-class GTUtilsToolTip {
-public:
-    static void checkExistingToolTip(U2OpStatus &os, const QString& tooltip);
+namespace HI {
 
-    static QString getToolTip();
+class HI_EXPORT GTMainWindow {
+public:
+    static QList<QMainWindow *> getMainWindows(GUITestOpStatus &os);
+    static QList<QWidget *> getMainWindowsAsWidget(GUITestOpStatus &os);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTMenu.cpp b/src/libs_3rdparty/humimit/src/primitives/GTMenu.cpp
similarity index 57%
rename from src/plugins/GUITestBase/src/api/GTMenu.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTMenu.cpp
index da5a7d8..b332c94 100644
--- a/src/plugins/GUITestBase/src/api/GTMenu.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMenu.cpp
@@ -19,47 +19,36 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTMenu.h"
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-#include "api/GTGlobals.h"
-#include "api/GTWidget.h"
-#include "api/private/GTMenuPrivate.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/Log.h>
-#include <U2Gui/MainWindow.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <QtGui/QMenuBar>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QMenuBar>
-#endif
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTMainWindow.h"
+#include "primitives/GTMenu.h"
+#include "primitives/GTWidget.h"
+#include "primitives/private/GTMenuPrivate.h"
 
-namespace U2 {
+#include <QApplication>
+#include <QMainWindow>
+#include <QMenuBar>
 
-#define GT_CLASS_NAME "GTMenu"
+namespace HI {
 
-const QString GTMenu::FILE = MWMENU_FILE;
-const QString GTMenu::ACTIONS = MWMENU_ACTIONS;
-const QString GTMenu::SETTINGS = MWMENU_SETTINGS;
-const QString GTMenu::TOOLS = MWMENU_TOOLS;
-const QString GTMenu::WINDOW = MWMENU_WINDOW;
-const QString GTMenu::HELP = MWMENU_HELP;
+#define GT_CLASS_NAME "GTMenu"
 
 #define GT_METHOD_NAME "showMainMenu"
-QMenu* GTMenu::showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::UseMethod m)
-{
-    MainWindow *mw = AppContext::getMainWindow();
-    GT_CHECK_RESULT(mw != NULL, "MainWindow is NULL", NULL);
-    QMainWindow *mainWindow = mw->getQMainWindow();
-    GT_CHECK_RESULT(mainWindow != NULL, "QMainWindow is NULL", NULL);
+QMenu* GTMenu::showMainMenu(GUITestOpStatus &os, const QString &menuName, GTGlobals::UseMethod m) {
+
+    QMainWindow* mainWindow = NULL;
+    QList<QAction*> list;
+    foreach(QWidget* window, GTMainWindow::getMainWindowsAsWidget(os)){
+        if(window->findChild<QAction*>(menuName) != NULL){
+            list.append(window->findChild<QAction*>(menuName));
+            mainWindow = qobject_cast<QMainWindow*>(window);
+        }
+    }
+    GT_CHECK_RESULT(list.count()!=0,"action not found", NULL);
+    GT_CHECK_RESULT(list.count()<2, QString("There are %1 actions with this text").arg(list.count()), NULL);
 
-    QAction *menu = mainWindow->findChild<QAction*>(menuName);
+    QAction *menu = list.takeFirst();
 
     GT_CHECK_RESULT(menu != NULL, QString("menu \"%1\" not found").arg(menuName), NULL);
 
@@ -77,6 +66,7 @@ QMenu* GTMenu::showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::
         GTMouseDriver::click(os);
         break;
 
+    case GTGlobals::UseKeyBoard:
     case GTGlobals::UseKey:
         menuText = menu->text();
         key_pos = menuText.indexOf('&');
@@ -95,14 +85,64 @@ QMenu* GTMenu::showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::
 }
 #undef GT_METHOD_NAME
 
+namespace {
+
+QStringList fixMenuItemPath(const QStringList &itemPath) {
+    QStringList fixedItemPath = itemPath;
+#ifdef Q_OS_MAC
+    // Some actions are moved to the application menu on mac
+#ifdef _DEBUG
+    const QString appName = "ugeneuid";
+#else
+    const QString appName = "Unipro UGENE";
+#endif
+    const QString menuName = "Apple";
+
+    static const QStringList appSettingsPath = QStringList() << "Settings" << "Preferences...";
+    if (appSettingsPath == itemPath) {
+        fixedItemPath = QStringList() << menuName << "Preferences...";
+    }
+
+    static const QStringList aboutPath = QStringList() << "Help" << "About";
+    if (aboutPath == itemPath) {
+        fixedItemPath = QStringList() << menuName << "About " + appName;
+    }
+#endif
+    return fixedItemPath;
+}
+bool compare(QString s1, QString s2, Qt::MatchFlag mathcFlag, bool replaceSpecSymbol = true){
+    if(replaceSpecSymbol){
+        s1.remove('&');
+        s2.remove('&');
+    }
+    switch (mathcFlag) {
+    case Qt::MatchContains:
+        return s1.contains(s2);
+    case Qt::MatchExactly:
+        return s1 == s2;
+    default:
+        return false;
+    }
+}
+
+}
+
 #define GT_METHOD_NAME "clickMainMenuItem"
-void GTMenu::clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method) {
-    GTMenuPrivate::clickMainMenuItem(os, itemPath, method);
+void GTMenu::clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method, Qt::MatchFlag matchFlag) {
+    GTMenuPrivate::clickMainMenuItem(os, fixMenuItemPath(itemPath), method, matchFlag);
+    GTGlobals::sleep(100);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "checkMainMenuItemState"
+void GTMenu::checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState) {
+    GTMenuPrivate::checkMainMenuItemState(os, fixMenuItemPath(itemPath), expectedState);
+    GTGlobals::sleep(100);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "showContextMenu"
-QMenu* GTMenu::showContextMenu(U2OpStatus &os, QWidget *ground, GTGlobals::UseMethod m)
+QMenu* GTMenu::showContextMenu(GUITestOpStatus &os, QWidget *ground, GTGlobals::UseMethod m)
 {
     GT_CHECK_RESULT(ground != NULL, "ground widget is NULL", NULL);
 
@@ -126,7 +166,7 @@ QMenu* GTMenu::showContextMenu(U2OpStatus &os, QWidget *ground, GTGlobals::UseMe
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getMenuItem"
-QAction* GTMenu::getMenuItem(U2OpStatus &os, const QMenu* menu, const QString &itemName, bool byText) {
+QAction* GTMenu::getMenuItem(GUITestOpStatus &os, const QMenu* menu, const QString &itemName, bool byText, Qt::MatchFlag matchFlag) {
 
     GT_CHECK_RESULT(menu != NULL, "menu not found", NULL);
 
@@ -135,9 +175,9 @@ QAction* GTMenu::getMenuItem(U2OpStatus &os, const QMenu* menu, const QString &i
     if(!byText){
         foreach(QAction *act, actions) {
             QString objName = act->objectName();
-            uiLog.trace("GT_DEBUG_MESSAGE: Action name: <" + objName + ">");
-            if (objName == itemName) {
-                uiLog.trace("GT_DEBUG_MESSAGE: Found action");
+            qDebug("GT_DEBUG_MESSAGE: Action name: '%s'", objName.toLocal8Bit().constData());
+            if (compare(objName, itemName, matchFlag)) {
+                qDebug("GT_DEBUG_MESSAGE: Found action");
                 action = act;
                 break;
             }
@@ -145,10 +185,9 @@ QAction* GTMenu::getMenuItem(U2OpStatus &os, const QMenu* menu, const QString &i
     }else{
         foreach(QAction *act, actions) {
             QString text = act->text();
-            uiLog.trace("GT_DEBUG_MESSAGE: Action text: <" + text + ">");
-            if (text.contains(itemName, Qt::CaseInsensitive)) { //TODO: if (text == itemName) {
-
-                uiLog.trace("GT_DEBUG_MESSAGE: Found action");
+            qDebug("GT_DEBUG_MESSAGE: Action text: '%s'",text.toLocal8Bit().constData());
+            if (compare(text, itemName, matchFlag)) {
+                qDebug("GT_DEBUG_MESSAGE: Found action");
                 action = act;
                 break;
             }
@@ -156,14 +195,14 @@ QAction* GTMenu::getMenuItem(U2OpStatus &os, const QMenu* menu, const QString &i
     }
 
     if (!action) {
-        uiLog.trace("GT_DEBUG_MESSAGE: Not found action");
+       qDebug("GT_DEBUG_MESSAGE: Not found action");
     }
     return action;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "actionPos"
-QPoint GTMenu::actionPos(U2OpStatus &os, const QMenu* menu, QAction* action) {
+QPoint GTMenu::actionPos(GUITestOpStatus &os, const QMenu* menu, QAction* action) {
 
     GT_CHECK_RESULT(menu != NULL, "menu == NULL", QPoint());
     GT_CHECK_RESULT(action != NULL, "action == NULL", QPoint());
@@ -174,12 +213,12 @@ QPoint GTMenu::actionPos(U2OpStatus &os, const QMenu* menu, QAction* action) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickMenuItem"
-QAction* GTMenu::clickMenuItem(U2OpStatus &os, const QMenu *menu, const QString &itemName, GTGlobals::UseMethod m,bool byText) {
+QAction* GTMenu::clickMenuItem(GUITestOpStatus &os, const QMenu *menu, const QString &itemName, GTGlobals::UseMethod m,bool byText, Qt::MatchFlag matchFlag) {
 
     GT_CHECK_RESULT(menu != NULL, "menu not found", NULL);
     GT_CHECK_RESULT(itemName.isEmpty() == false, "itemName is empty", NULL);
 
-    QAction *action = getMenuItem(os, menu, itemName, byText);
+    QAction *action = getMenuItem(os, menu, itemName, byText, matchFlag);
     GT_CHECK_RESULT(action != NULL, "action not found for item " + itemName, NULL);
     GT_CHECK_RESULT(action->isEnabled() == true, "action <" + itemName + "> is not enabled", NULL);
 
@@ -207,13 +246,12 @@ QAction* GTMenu::clickMenuItem(U2OpStatus &os, const QMenu *menu, const QString
         GTMouseDriver::moveTo(os, actionPosition); // move cursor to action
         GTGlobals::sleep(200);
 
-#ifndef Q_OS_MAC
+#ifdef Q_OS_WIN
+        GTMouseDriver::click(os);
+#else
         if (!clickingSubMenu) {
             GTMouseDriver::click(os);
         }
-#else
-        Q_UNUSED(clickingSubMenu);
-        GTMouseDriver::click(os);
 #endif
         break;
     }
@@ -224,6 +262,7 @@ QAction* GTMenu::clickMenuItem(U2OpStatus &os, const QMenu *menu, const QString
         }
 
         GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTGlobals::sleep(200);
         break;
     default:
         break;
@@ -236,7 +275,7 @@ QAction* GTMenu::clickMenuItem(U2OpStatus &os, const QMenu *menu, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickMenuItem"
-void GTMenu::clickMenuItemPrivate(U2OpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod useMethod, bool byText) {
+void GTMenu::clickMenuItemPrivate(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod useMethod, bool byText, Qt::MatchFlag matchFlag) {
 
     GT_CHECK(menu != NULL, "menu is NULL");
     GT_CHECK(itemPath.isEmpty() == false, "itemPath is empty");
@@ -245,22 +284,21 @@ void GTMenu::clickMenuItemPrivate(U2OpStatus &os, const QMenu *menu, const QStri
         GT_CHECK(menu != NULL, "menu not found for item " + itemName);
 
         GTGlobals::sleep(500);
-        QAction *action = clickMenuItem(os, menu, itemName, useMethod, byText);
+        QAction *action = clickMenuItem(os, menu, itemName, useMethod, byText, matchFlag);
         menu = action ? action->menu() : NULL;
-        GTGlobals::sleep(200);
     }
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickMenuItemByName"
-void GTMenu::clickMenuItemByName(U2OpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m){
-    clickMenuItemPrivate(os, menu, itemPath, m, false);
+void GTMenu::clickMenuItemByName(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m, Qt::MatchFlag matchFlag){
+    clickMenuItemPrivate(os, menu, itemPath, m, false, matchFlag);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickMenuItemByText"
-void GTMenu::clickMenuItemByText(U2OpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m){
-    clickMenuItemPrivate(os, menu, itemPath, m, true);
+void GTMenu::clickMenuItemByText(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m, Qt::MatchFlag matchFlag){
+    clickMenuItemPrivate(os, menu, itemPath, m, true, matchFlag);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTMenu.h b/src/libs_3rdparty/humimit/src/primitives/GTMenu.h
new file mode 100644
index 0000000..1fd49b9
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMenu.h
@@ -0,0 +1,65 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 GTMENU_H
+#define GTMENU_H
+
+#include "GTGlobals.h"
+#include "primitives/PopupChooser.h"
+
+#include <QAction>
+#include <QMenu>
+
+namespace HI {
+
+class HI_EXPORT GTMenu {
+public:
+    static QMenu* showMainMenu(GUITestOpStatus &os, const QString &menuName, GTGlobals::UseMethod m = GTGlobals::UseMouse);  // should be removed in Qt5, use clickMainMenuItem instead
+    static void clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method = GTGlobals::UseMouse, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+    static void checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState);
+    static QMenu* showContextMenu(GUITestOpStatus &os, QWidget *ground, GTGlobals::UseMethod m = GTGlobals::UseMouse);
+
+    static void clickMenuItemByName(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m = GTGlobals::UseMouse, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+    static void clickMenuItemByText(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m = GTGlobals::UseMouse, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+
+    // moves cursor to menu item, clicks on menu item;
+
+    static QAction* clickMenuItem(GUITestOpStatus &os, const QMenu *menu, const QString &itemName, GTGlobals::UseMethod m = GTGlobals::UseMouse, bool byText = false, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+
+    static QAction* getMenuItem(GUITestOpStatus &os, const QMenu* menu, const QString &itemName, bool byText = false, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+
+    // global position of menu action's center
+    static QPoint actionPos(GUITestOpStatus &os, const QMenu* menu, QAction* action);
+
+    static const QString FILE;
+    static const QString ACTIONS;
+    static const QString SETTINGS;
+    static const QString TOOLS;
+    static const QString WINDOW;
+    static const QString HELP;
+
+private:
+    static void clickMenuItemPrivate(GUITestOpStatus &os, const QMenu *menu, const QStringList &itemName, GTGlobals::UseMethod m = GTGlobals::UseMouse,
+                                     bool byText = false, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+};
+
+}
+#endif // GTMENU_H
diff --git a/src/plugins/GUITestBase/src/api/GTMenuBar.cpp b/src/libs_3rdparty/humimit/src/primitives/GTMenuBar.cpp
similarity index 81%
rename from src/plugins/GUITestBase/src/api/GTMenuBar.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTMenuBar.cpp
index 1811324..66795cb 100644
--- a/src/plugins/GUITestBase/src/api/GTMenuBar.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMenuBar.cpp
@@ -19,20 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTMenuBar.h"
-#include "api/GTMouseDriver.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenuBar>
-#else
-#include <QtWidgets/QMenuBar>
-#endif
-
-namespace U2 {
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTMenuBar.h"
 
+namespace HI {
 #define GT_CLASS_NAME "GTMenuBar"
 
 #define GT_METHOD_NAME "clickCornerMenu"
-void GTMenuBar::clickCornerMenu(U2OpStatus &os, QMenuBar* mBar, GTGlobals::WindowAction action) {
+void GTMenuBar::clickCornerMenu(GUITestOpStatus &os, QMenuBar* mBar, GTGlobals::WindowAction action) {
 
     GT_CHECK(mBar != NULL, "QMenuBar is NULL");
     QWidget* cWidget = mBar->cornerWidget();
@@ -42,7 +36,7 @@ void GTMenuBar::clickCornerMenu(U2OpStatus &os, QMenuBar* mBar, GTGlobals::Windo
     int num = (int)action;
     GT_CHECK(num>=0 && num<(int)GTGlobals::WindowActionCount, "action is not GTGlobals::WindowAction");
 
-    SAFE_POINT((int)GTGlobals::WindowActionCount != 0, "GTGlobals::WindowActionCount == 0", );
+    GT_CHECK((int)GTGlobals::WindowActionCount != 0, "GTGlobals::WindowActionCount == 0");
     int oneWidth = r.width()/(int)GTGlobals::WindowActionCount;
 
     QPoint need((num+1)*oneWidth - oneWidth/2, r.height()/2);
diff --git a/src/plugins/GUITestBase/src/api/GTMenuBar.h b/src/libs_3rdparty/humimit/src/primitives/GTMenuBar.h
similarity index 81%
rename from src/plugins/GUITestBase/src/api/GTMenuBar.h
rename to src/libs_3rdparty/humimit/src/primitives/GTMenuBar.h
index c606bd7..9d18dce 100644
--- a/src/plugins/GUITestBase/src/api/GTMenuBar.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTMenuBar.h
@@ -19,19 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_MENU_BAR_H_
-#define _U2_GT_MENU_BAR_H_
+#ifndef _HI_GT_MENU_BAR_H_
+#define _HI_GT_MENU_BAR_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include <QMenuBar>
 
-class QMenuBar;
-namespace U2 {
+namespace HI {
 
-class GTMenuBar {
+class HI_EXPORT GTMenuBar {
 public:
     // clicks cornerMenu of QMenuBar as if it is a standard {Minimize, Maximize, Close} buttons widget
     // fails if menuBar is NULL or action as int value is not one of GTGlobals::WindowAction values
-    static void clickCornerMenu(U2OpStatus &os, QMenuBar *mBar, GTGlobals::WindowAction action);
+    static void clickCornerMenu(GUITestOpStatus &os, QMenuBar *mBar, GTGlobals::WindowAction action);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTPlainTextEdit.cpp b/src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.cpp
similarity index 79%
rename from src/plugins/GUITestBase/src/api/GTPlainTextEdit.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.cpp
index 5a97326..4b087be 100644
--- a/src/plugins/GUITestBase/src/api/GTPlainTextEdit.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.cpp
@@ -19,19 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTPlainTextEdit.h"
-#include "GTWidget.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTPlainTextEdit.h"
+#include "primitives/GTWidget.h"
+#include "utils/GTKeyboardUtils.h"
 
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include <QDebug>
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTPlainTextEdit"
 
-#define GT_METHOD_NAME ""
-void GTPlainTextEdit::setPlainText(U2OpStatus& os, QPlainTextEdit* plainTextEdit, const QString &text) {
+#define GT_METHOD_NAME "setPlainText"
+void GTPlainTextEdit::setPlainText(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit, const QString &text) {
 
     GT_CHECK(plainTextEdit != NULL, "plainTextEdit is NULL");
     if(plainTextEdit->toPlainText() == text){
@@ -40,16 +39,14 @@ void GTPlainTextEdit::setPlainText(U2OpStatus& os, QPlainTextEdit* plainTextEdit
 
     GTWidget::setFocus(os, plainTextEdit);
 
-    qDebug() << "Test in setPlainTest() = " << text;
     GTKeyboardDriver::keySequence(os, text);
     GTGlobals::sleep(500);
 
-
 }
 #undef GT_METHOD_NAME
 
 //#define GT_METHOD_NAME "clear"
-//void GTPlainTextEdit::clear(U2OpStatus& os, QPlainTextEdit* plainTextEdit) {
+//void GTPlainTextEdit::clear(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit) {
 //
 //    GT_CHECK(plainTextEdit != NULL, "plainTextEdit is NULL");
 //
diff --git a/src/plugins/GUITestBase/src/api/GTPlainTextEdit.h b/src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.h
similarity index 66%
rename from src/plugins/GUITestBase/src/api/GTPlainTextEdit.h
rename to src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.h
index 32a029c..d7fb0f7 100644
--- a/src/plugins/GUITestBase/src/api/GTPlainTextEdit.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTPlainTextEdit.h
@@ -19,37 +19,33 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_PLAINTEXTEDIT_H_
-#define _U2_GT_PLAINTEXTEDIT_H_
+#ifndef _HI_GT_PLAINTEXTEDIT_H_
+#define _HI_GT_PLAINTEXTEDIT_H_
 
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPlainTextEdit>
-#else
-#include <QtWidgets/QPlainTextEdit>
-#endif
+#include "GTGlobals.h"
+#include <QPlainTextEdit>
 
-namespace U2 {
+namespace HI {
 
-class GTPlainTextEdit {
+class HI_EXPORT GTPlainTextEdit {
 public:
     enum PasteMethod {Shortcut, Mouse};
 
     // fails if lineEdit is NULL, GTLineEdit::clear fails
     // or a set text differs from a given string
-    static void setPlainText(U2OpStatus& os, QPlainTextEdit* plainTextEdit, const QString &text);
+    static void setPlainText(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit, const QString &text);
 
     // fails if lineEdit is NULL, or lineEdit's text wasn't cleared
-    static void clear(U2OpStatus& os, QPlainTextEdit* plainTextEdit);
+    static void clear(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit);
 
     // fails if GTLineEdit::clear fails
-   // static void pasteClipboard(U2OpStatus& os, QPlainTextEdit* plainTextEdit, PasteMethod pasteMethod = Shortcut);
+   // static void pasteClipboard(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit, PasteMethod pasteMethod = Shortcut);
 
     // fails if lineEdit is NULL or lineEdit text is not in lineEdit's rect
     // considering lineEdit's fontMetrics and textMargins
-    //static void checkTextSize(U2OpStatus& os, QPlainTextEdit* plainTextEdit);
+    //static void checkTextSize(GUITestOpStatus& os, QPlainTextEdit* plainTextEdit);
 };
 
 }
 
-#endif // _U2_GT_PLAINTEXTEDIT_H_
+#endif // _HI_GT_PLAINTEXTEDIT_H_
diff --git a/src/plugins/GUITestBase/src/api/GTRadioButton.cpp b/src/libs_3rdparty/humimit/src/primitives/GTRadioButton.cpp
similarity index 70%
rename from src/plugins/GUITestBase/src/api/GTRadioButton.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTRadioButton.cpp
index f528444..979e3ed 100644
--- a/src/plugins/GUITestBase/src/api/GTRadioButton.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTRadioButton.cpp
@@ -19,27 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTRadioButton.h"
-#include "GTWidget.h"
-#include <U2Gui/MainWindow.h>
-#include <U2Core/AppContext.h>
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTMainWindow.h"
+#include "primitives/GTRadioButton.h"
+#include "primitives/GTWidget.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QMainWindow>
-#endif
-
-
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-namespace U2 {
+#include <QApplication>
+#include <QMainWindow>
 
+namespace HI {
 #define GT_CLASS_NAME "GTRadioButton"
 
 #define GT_METHOD_NAME "click"
-void GTRadioButton::click(U2OpStatus& os, QRadioButton *radioButton) {
+void GTRadioButton::click(GUITestOpStatus& os, QRadioButton *radioButton) {
     GT_CHECK(radioButton != NULL, "RadioButton is NULL");
     if(radioButton->isChecked() == true){
         return;
@@ -54,10 +47,7 @@ void GTRadioButton::click(U2OpStatus& os, QRadioButton *radioButton) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRadioButtonByText"
-QRadioButton* GTRadioButton::getRadioButtonByText(U2OpStatus &os, QString text, QWidget *parent){
-    if(parent==NULL){
-        parent=AppContext::getMainWindow()->getQMainWindow();
-    }
+QRadioButton* GTRadioButton::getRadioButtonByText(GUITestOpStatus &os, QString text, QWidget *parent){
     QList<QRadioButton*> radioList = getAllButtonsByText(os, text, parent);
     GT_CHECK_RESULT(radioList.size() > 1, "Several radioButtons contain this text", NULL);
     GT_CHECK_RESULT(radioList.size() == 0, "No radioButtons with this text found", NULL);
@@ -67,11 +57,19 @@ QRadioButton* GTRadioButton::getRadioButtonByText(U2OpStatus &os, QString text,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAllButtonsByText"
-QList<QRadioButton*> GTRadioButton::getAllButtonsByText(U2OpStatus &os, QString text, QWidget *parent){
+QList<QRadioButton*> GTRadioButton::getAllButtonsByText(GUITestOpStatus &os, QString text, QWidget *parent){
     Q_UNUSED(os);
     QList<QRadioButton*> result;
     if(parent==NULL){
-        parent=AppContext::getMainWindow()->getQMainWindow();
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            QList<QRadioButton*> list = parent->findChildren<QRadioButton*>();
+            foreach(QRadioButton* rb, list){
+                if(rb->text() == text){
+                    result.append(rb);
+                }
+            }
+        }
+        return result;
     }
     QList<QRadioButton*> radioList = parent->findChildren<QRadioButton*>();
     foreach(QRadioButton* but, radioList){
diff --git a/src/plugins/GUITestBase/src/api/GTRadioButton.h b/src/libs_3rdparty/humimit/src/primitives/GTRadioButton.h
similarity index 63%
rename from src/plugins/GUITestBase/src/api/GTRadioButton.h
rename to src/libs_3rdparty/humimit/src/primitives/GTRadioButton.h
index 0fd4d3b..76cbac6 100644
--- a/src/plugins/GUITestBase/src/api/GTRadioButton.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTRadioButton.h
@@ -19,26 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_RADIOBUTTON_H_
-#define _U2_GT_RADIOBUTTON_H_
+#ifndef _HI_GT_RADIOBUTTON_H_
+#define _HI_GT_RADIOBUTTON_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QRadioButton>
-#else
-#include <QtWidgets/QRadioButton>
-#endif
+#include <QRadioButton>
 
-namespace U2 {
-
-class GTRadioButton {
+namespace HI {
+/*!
+ * \brief The class for working with QRadioButton primitive
+ */
+class HI_EXPORT GTRadioButton {
 public:
     // fails if the radioButton is NULL or can't click
-    static void click(U2OpStatus& os, QRadioButton *radioButton);
-    static QRadioButton* getRadioButtonByText(U2OpStatus& os, QString text, QWidget* parent=NULL);
-    static QList<QRadioButton*> getAllButtonsByText(U2OpStatus &os, QString text, QWidget* parent=NULL);
+    static void click(GUITestOpStatus& os, QRadioButton *radioButton);
+    static QRadioButton* getRadioButtonByText(GUITestOpStatus& os, QString text, QWidget* parent=NULL);
+    static QList<QRadioButton*> getAllButtonsByText(GUITestOpStatus &os, QString text, QWidget* parent=NULL);
 };
 
 }
-#endif // _U2_GT_RADIOBUTTON_H_
+#endif // _HI_GT_RADIOBUTTON_H_
diff --git a/src/plugins/GUITestBase/src/api/GTScrollBar.cpp b/src/libs_3rdparty/humimit/src/primitives/GTScrollBar.cpp
similarity index 86%
rename from src/plugins/GUITestBase/src/api/GTScrollBar.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTScrollBar.cpp
index 45f7538..c99363d 100644
--- a/src/plugins/GUITestBase/src/api/GTScrollBar.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTScrollBar.cpp
@@ -19,16 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTScrollBar.h"
-#include "GTWidget.h"
-
-
-namespace U2 {
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTScrollBar.h"
+#include "primitives/GTWidget.h"
 
+namespace HI {
 #define GT_CLASS_NAME "GTScrollBar"
 
 #define GT_METHOD_NAME "getScrollBar"
-QScrollBar* GTScrollBar::getScrollBar(U2OpStatus &os, const QString &scrollBarSysName) {
+QScrollBar* GTScrollBar::getScrollBar(GUITestOpStatus &os, const QString &scrollBarSysName) {
     QString scrollBarTypeCheck = "QScrollBar";
     QScrollBar *scrollBar = static_cast<QScrollBar*>(GTWidget::findWidget(os, scrollBarSysName));
     GT_CHECK_RESULT(0 == scrollBarTypeCheck.compare(scrollBar->metaObject()->className()), "No such scrollbar: " + scrollBarSysName, NULL); //the found widget is not a qscrollbar
@@ -37,7 +37,7 @@ QScrollBar* GTScrollBar::getScrollBar(U2OpStatus &os, const QString &scrollBarSy
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "pageUp"
-void GTScrollBar::pageUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
+void GTScrollBar::pageUp(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     switch (useMethod) {
         case GTGlobals::UseMouse:
@@ -58,7 +58,7 @@ void GTScrollBar::pageUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMe
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "pageDown"
-void GTScrollBar::pageDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
+void GTScrollBar::pageDown(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     switch (useMethod) {
         case GTGlobals::UseMouse:
@@ -79,7 +79,7 @@ void GTScrollBar::pageDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::Use
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "lineUp"
-void GTScrollBar::lineUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
+void GTScrollBar::lineUp(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     switch (useMethod) {
         case GTGlobals::UseMouse:
@@ -100,7 +100,7 @@ void GTScrollBar::lineUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMe
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "lineDown"
-void GTScrollBar::lineDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
+void GTScrollBar::lineDown(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     switch (useMethod) {
         case GTGlobals::UseMouse:
@@ -121,7 +121,7 @@ void GTScrollBar::lineDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::Use
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "moveSliderWithMouseUp"
-void GTScrollBar::moveSliderWithMouseUp(U2OpStatus &os, QScrollBar *scrollbar, int nPix) {
+void GTScrollBar::moveSliderWithMouseUp(GUITestOpStatus &os, QScrollBar *scrollbar, int nPix) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     GTMouseDriver::moveTo(os, GTScrollBar::getSliderPosition(os, scrollbar));
     QPoint newPosition;
@@ -138,7 +138,7 @@ void GTScrollBar::moveSliderWithMouseUp(U2OpStatus &os, QScrollBar *scrollbar, i
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "moveSliderWithMouseDown"
-void GTScrollBar::moveSliderWithMouseDown(U2OpStatus &os, QScrollBar *scrollbar, int nPix) {
+void GTScrollBar::moveSliderWithMouseDown(GUITestOpStatus &os, QScrollBar *scrollbar, int nPix) {
     GT_CHECK(scrollbar != NULL, "scrollbar is NULL");
     GTMouseDriver::moveTo(os, GTScrollBar::getSliderPosition(os, scrollbar));
     GTMouseDriver::press(os);
@@ -154,20 +154,20 @@ void GTScrollBar::moveSliderWithMouseDown(U2OpStatus &os, QScrollBar *scrollbar,
 }
 #undef GT_METHOD_NAME
 
-void GTScrollBar::moveSliderWithMouseWheelUp(U2OpStatus &os, QScrollBar *scrollbar, int nScrolls) {
+void GTScrollBar::moveSliderWithMouseWheelUp(GUITestOpStatus &os, QScrollBar *scrollbar, int nScrolls) {
     GTMouseDriver::moveTo(os, GTScrollBar::getSliderPosition(os, scrollbar));
     GTMouseDriver::click(os);
     GTMouseDriver::scroll(os, nScrolls);
 }
 
-void GTScrollBar::moveSliderWithMouseWheelDown(U2OpStatus &os, QScrollBar *scrollbar, int nScrolls) {
+void GTScrollBar::moveSliderWithMouseWheelDown(GUITestOpStatus &os, QScrollBar *scrollbar, int nScrolls) {
     GTMouseDriver::moveTo(os, GTScrollBar::getSliderPosition(os, scrollbar));
     GTMouseDriver::click(os);
     GTMouseDriver::scroll(os, (-1 * nScrolls)); //since scrolling down means negative value for GTMouseDriver::scroll
 }
 
 #define GT_METHOD_NAME "getSliderPosition"
-QPoint GTScrollBar::getSliderPosition(U2OpStatus &os, QScrollBar *scrollbar) {
+QPoint GTScrollBar::getSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QPoint());
     QStyleOptionSlider options = initScrollbarOptions(os, scrollbar);
     QRect sliderRect = scrollbar->style()->subControlRect(QStyle::CC_ScrollBar, &options, QStyle::SC_ScrollBarSlider);
@@ -176,7 +176,7 @@ QPoint GTScrollBar::getSliderPosition(U2OpStatus &os, QScrollBar *scrollbar) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getUpArrowPosition"
-QPoint GTScrollBar::getUpArrowPosition(U2OpStatus &os, QScrollBar *scrollbar) {
+QPoint GTScrollBar::getUpArrowPosition(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QPoint());
     QStyleOptionSlider options = initScrollbarOptions(os, scrollbar);
     QRect grooveRect = scrollbar->style()->subControlRect(QStyle::CC_ScrollBar, &options, QStyle::SC_ScrollBarGroove);
@@ -196,7 +196,7 @@ QPoint GTScrollBar::getUpArrowPosition(U2OpStatus &os, QScrollBar *scrollbar) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getDownArrowPosition"
-QPoint GTScrollBar::getDownArrowPosition(U2OpStatus &os, QScrollBar *scrollbar) {
+QPoint GTScrollBar::getDownArrowPosition(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QPoint());
     QStyleOptionSlider options = initScrollbarOptions(os, scrollbar);
     QRect grooveRect = scrollbar->style()->subControlRect(QStyle::CC_ScrollBar, &options, QStyle::SC_ScrollBarGroove);
@@ -216,7 +216,7 @@ QPoint GTScrollBar::getDownArrowPosition(U2OpStatus &os, QScrollBar *scrollbar)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAreaUnderSliderPosition"
-QPoint GTScrollBar::getAreaUnderSliderPosition(U2OpStatus &os, QScrollBar *scrollbar) {
+QPoint GTScrollBar::getAreaUnderSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QPoint());
     QStyleOptionSlider options = initScrollbarOptions(os, scrollbar);
     QRect grooveRect = scrollbar->style()->subControlRect(QStyle::CC_ScrollBar, &options, QStyle::SC_ScrollBarGroove);
@@ -242,7 +242,7 @@ QPoint GTScrollBar::getAreaUnderSliderPosition(U2OpStatus &os, QScrollBar *scrol
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAreaOverSliderPosition"
-QPoint GTScrollBar::getAreaOverSliderPosition(U2OpStatus &os, QScrollBar *scrollbar) {
+QPoint GTScrollBar::getAreaOverSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QPoint());
     QStyleOptionSlider options = initScrollbarOptions(os, scrollbar);
     QRect grooveRect = scrollbar->style()->subControlRect(QStyle::CC_ScrollBar, &options, QStyle::SC_ScrollBarGroove);
@@ -268,7 +268,7 @@ QPoint GTScrollBar::getAreaOverSliderPosition(U2OpStatus &os, QScrollBar *scroll
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "initScrollbarOptions"
-QStyleOptionSlider GTScrollBar::initScrollbarOptions(U2OpStatus &os, QScrollBar *scrollbar) {
+QStyleOptionSlider GTScrollBar::initScrollbarOptions(GUITestOpStatus &os, QScrollBar *scrollbar) {
     GT_CHECK_RESULT(scrollbar != NULL, "scrollbar is NULL", QStyleOptionSlider());
     QStyleOptionSlider options;
     options.initFrom(scrollbar);
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTScrollBar.h b/src/libs_3rdparty/humimit/src/primitives/GTScrollBar.h
new file mode 100644
index 0000000..c74c6ef
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTScrollBar.h
@@ -0,0 +1,61 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GUI_GTSCROLLBAR_H_
+#define _HI_GUI_GTSCROLLBAR_H_
+
+#include "GTGlobals.h"
+
+#include <QPoint>
+#include <QScrollBar>
+#include <QStyleOptionSlider>
+
+namespace HI {
+
+class HI_EXPORT GTScrollBar {
+public:
+    static QScrollBar* getScrollBar(GUITestOpStatus &os, const QString &scrollBarSysName);
+
+    static void pageUp(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod);
+    static void pageDown(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod);
+
+    static void lineUp(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod); //does not necessarily move one line up (for example, moves cursor in text editors)
+    static void lineDown(GUITestOpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod); //does not necessarily move one line down (for example, moves cursor in text editors)
+
+    static void moveSliderWithMouseUp(GUITestOpStatus &os, QScrollBar *scrollbar, int nPix);
+    static void moveSliderWithMouseDown(GUITestOpStatus &os, QScrollBar *scrollbar, int nPix);
+
+    static void moveSliderWithMouseWheelUp(GUITestOpStatus &os, QScrollBar *scrollbar, int nScrolls); //first moves the cursor to the slider and clicks it, then starts scrolling
+    static void moveSliderWithMouseWheelDown(GUITestOpStatus &os, QScrollBar *scrollbar, int nScrolls); //first moves the cursor to the slider and clicks it, then starts scrolling
+
+    static QPoint getSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar);
+    static QPoint getUpArrowPosition(GUITestOpStatus &os, QScrollBar *scrollbar);
+    static QPoint getDownArrowPosition(GUITestOpStatus &os, QScrollBar *scrollbar);
+    static QPoint getAreaUnderSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar);
+    static QPoint getAreaOverSliderPosition(GUITestOpStatus &os, QScrollBar *scrollbar);
+
+private:
+    static QStyleOptionSlider initScrollbarOptions(GUITestOpStatus &os, QScrollBar *scrollbar);
+};
+
+} //namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTSlider.cpp b/src/libs_3rdparty/humimit/src/primitives/GTSlider.cpp
similarity index 91%
rename from src/plugins/GUITestBase/src/api/GTSlider.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTSlider.cpp
index f1a2d44..f74c967 100644
--- a/src/plugins/GUITestBase/src/api/GTSlider.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTSlider.cpp
@@ -21,11 +21,11 @@
 
 #include "GTSlider.h"
 
-namespace U2{
-#define GT_CLASS_NAME "GTSpinBox"
+namespace HI{
+#define GT_CLASS_NAME "GTSlider"
 
 #define GT_METHOD_NAME "setValue"
-void GTSlider::setValue(U2OpStatus &os, QSlider *slider, int value){
+void GTSlider::setValue(GUITestOpStatus &os, QSlider *slider, int value){
     Q_UNUSED(os);
     GT_CHECK(slider != NULL, "slider not found");
     int min = slider->minimum();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp b/src/libs_3rdparty/humimit/src/primitives/GTSlider.h
similarity index 77%
copy from src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
copy to src/libs_3rdparty/humimit/src/primitives/GTSlider.h
index 827da45..cf48b85 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTSlider.h
@@ -19,14 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "PwmSearchDialogFiller.h"
+#ifndef _HI_GT_SLIDER_H_
+#define _HI_GT_SLIDER_H_
 
-namespace U2 {
+#include "GTGlobals.h"
+#include <QSlider>
 
-PwmSearchDialogFiller::PwmSearchDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
-    Filler(os, "PWMSearchDialog", scenario)
-{
+namespace HI {
+
+class HI_EXPORT GTSlider {
+public:
+    static void setValue(GUITestOpStatus &os, QSlider* slider, int value);
+};
 
 }
 
-}   // namespace U2
+#endif // _HI_GT_SLIDER_H
diff --git a/src/plugins/GUITestBase/src/api/GTSpinBox.cpp b/src/libs_3rdparty/humimit/src/primitives/GTSpinBox.cpp
similarity index 66%
rename from src/plugins/GUITestBase/src/api/GTSpinBox.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTSpinBox.cpp
index 8345b90..103522b 100644
--- a/src/plugins/GUITestBase/src/api/GTSpinBox.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTSpinBox.cpp
@@ -19,18 +19,31 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTSpinBox.h"
-#include "GTWidget.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTSpinBox.h"
+#include "primitives/GTWidget.h"
 
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTSpinBox"
 
+#define GT_METHOD_NAME "getValue"
+int GTSpinBox::getValue(GUITestOpStatus &os, QSpinBox *spinBox) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(spinBox != NULL, "spinBox is NULL", -1);
+    return spinBox->value();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getValue"
+int GTSpinBox::getValue(GUITestOpStatus &os, const QString &spinBoxName, QWidget *parent) {
+    return GTSpinBox::getValue(os, GTWidget::findExactWidget<QSpinBox *>(os, spinBoxName, parent));
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "setValue"
-void GTSpinBox::setValue(U2OpStatus& os, QSpinBox *spinBox, int v, GTGlobals::UseMethod useMethod) {
+void GTSpinBox::setValue(GUITestOpStatus& os, QSpinBox *spinBox, int v, GTGlobals::UseMethod useMethod) {
     GT_CHECK(spinBox != NULL, "spinBox is NULL");
     if(spinBox->value() == v){
         return;
@@ -90,12 +103,25 @@ void GTSpinBox::setValue(U2OpStatus& os, QSpinBox *spinBox, int v, GTGlobals::Us
     }
 
     int currIndex = spinBox->value();
-    GT_CHECK(currIndex == v, "Can't set index");
+    GT_CHECK(currIndex == v, QString("Can't set index. Expected: %1 actual: %2").arg(v).arg(currIndex));
+    GTGlobals::sleep(100);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setValue"
+void GTSpinBox::setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, GTGlobals::UseMethod useMethod, QWidget *parent) {
+    GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, spinBoxName, parent), v, useMethod);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setValue"
+void GTSpinBox::setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, QWidget *parent) {
+    GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, spinBoxName, parent), v);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkLimits"
-void GTSpinBox::checkLimits(U2OpStatus &os, QSpinBox *spinBox, int min, int max){
+void GTSpinBox::checkLimits(GUITestOpStatus &os, QSpinBox *spinBox, int min, int max){
     GT_CHECK(spinBox != NULL, "spinbox is NULL");
     int actualMin = spinBox->minimum();
     int actualMax = spinBox->maximum();
@@ -104,6 +130,12 @@ void GTSpinBox::checkLimits(U2OpStatus &os, QSpinBox *spinBox, int min, int max)
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "checkLimits"
+void GTSpinBox::checkLimits(GUITestOpStatus &os, const QString &spinBoxName, int min, int max, QWidget *parent){
+    GTSpinBox::checkLimits(os, GTWidget::findExactWidget<QSpinBox *>(os, spinBoxName, parent), min, max);
+}
+#undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 }
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTSpinBox.h b/src/libs_3rdparty/humimit/src/primitives/GTSpinBox.h
new file mode 100644
index 0000000..e0b836a
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTSpinBox.h
@@ -0,0 +1,47 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GT_SPINBOX_H_
+#define _HI_GT_SPINBOX_H_
+
+#include "GTGlobals.h"
+#include <QSpinBox>
+
+namespace HI {
+/*!
+ * \brief The class for working with QSpinBox primitive
+ */
+class HI_EXPORT GTSpinBox {
+public:
+    static int getValue(GUITestOpStatus &os, QSpinBox *spinBox);
+    static int getValue(GUITestOpStatus &os, const QString &spinBoxName, QWidget *parent = NULL);
+
+    static void setValue(GUITestOpStatus &os, QSpinBox *spinBox, int v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse);
+    static void setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse, QWidget *parent = NULL);
+    static void setValue(GUITestOpStatus &os, const QString &spinBoxName, int v, QWidget *parent = NULL);
+
+    static void checkLimits(GUITestOpStatus &os, QSpinBox *spinBox, int min, int max);
+    static void checkLimits(GUITestOpStatus &os, const QString &spinBoxName, int min, int max, QWidget *parent = NULL);
+};
+
+}   // namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTTabBar.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTabBar.cpp
similarity index 82%
rename from src/plugins/GUITestBase/src/api/GTTabBar.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTabBar.cpp
index 43c2afe..0aeb60d 100644
--- a/src/plugins/GUITestBase/src/api/GTTabBar.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTabBar.cpp
@@ -19,23 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTabBar.h"
-#include "GTWidget.h"
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTTabBar.h"
+#include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QToolButton>
-#endif
-
-namespace U2 {
+#include <QToolButton>
 
+namespace HI {
 #define GT_CLASS_NAME "GTTabBar"
 
 #define GT_METHOD_NAME "setCurrentIndex"
-void GTTabBar::setCurrentIndex(U2OpStatus& os, QTabBar *tabBar, int index) {
+void GTTabBar::setCurrentIndex(GUITestOpStatus& os, QTabBar *tabBar, int index) {
 
     GT_CHECK(tabBar != NULL, "QTabWidget* == NULL");
 
diff --git a/src/plugins/GUITestBase/src/api/GTTabBar.h b/src/libs_3rdparty/humimit/src/primitives/GTTabBar.h
similarity index 76%
rename from src/plugins/GUITestBase/src/api/GTTabBar.h
rename to src/libs_3rdparty/humimit/src/primitives/GTTabBar.h
index 2783130..07c6472 100644
--- a/src/plugins/GUITestBase/src/api/GTTabBar.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTabBar.h
@@ -19,24 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_TABBAR_H_
-#define _U2_GT_TABBAR_H_
+#ifndef _HI_GT_TABBAR_H_
+#define _HI_GT_TABBAR_H_
 
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTabBar>
-#else
-#include <QtWidgets/QTabBar>
-#endif
+#include "GTGlobals.h"
+#include <QTabBar>
 
-namespace U2 {
+namespace HI {
 
-class GTTabBar {
+class HI_EXPORT GTTabBar {
 public:
     // fails if the tabbar is NULL, index is not in a tabbar's range
     // or a tabbar's index differs from a given index in the end of method's execution
-    static void setCurrentIndex(U2OpStatus& os, QTabBar *tabBar, int index);
+    static void setCurrentIndex(GUITestOpStatus& os, QTabBar *tabBar, int index);
 };
 
 }
-#endif // _U2_GT_TABBAR_H_
+#endif // _HI_GT_TABBAR_H_
diff --git a/src/plugins/GUITestBase/src/api/GTTabWidget.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTabWidget.cpp
similarity index 56%
rename from src/plugins/GUITestBase/src/api/GTTabWidget.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTabWidget.cpp
index 2968779..e8dc433 100644
--- a/src/plugins/GUITestBase/src/api/GTTabWidget.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTabWidget.cpp
@@ -19,18 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTabWidget.h"
-#include "GTTabBar.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTTabBar.h"
+#include "primitives/GTTabWidget.h"
+#include <primitives/GTWidget.h>
 
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTTabWidget"
 
 #define GT_METHOD_NAME "setCurrentIndex"
-void GTTabWidget::setCurrentIndex(U2OpStatus& os, QTabWidget *tabWidget, int index) {
+void GTTabWidget::setCurrentIndex(GUITestOpStatus& os, QTabWidget *tabWidget, int index) {
 
     GT_CHECK(tabWidget != NULL, "QTabWidget* == NULL");
 
@@ -46,7 +46,7 @@ void GTTabWidget::setCurrentIndex(U2OpStatus& os, QTabWidget *tabWidget, int ind
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getTabBar"
-QTabBar* GTTabWidget::getTabBar(U2OpStatus &os, QTabWidget* tabWidget){
+QTabBar* GTTabWidget::getTabBar(GUITestOpStatus &os, QTabWidget* tabWidget){
     Q_UNUSED(os)
     GT_CHECK_RESULT(tabWidget != NULL, "tabWidget is NULL", NULL);
     QList<QTabBar*> tabBars= tabWidget->findChildren<QTabBar*>();
@@ -58,7 +58,7 @@ QTabBar* GTTabWidget::getTabBar(U2OpStatus &os, QTabWidget* tabWidget){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickTab"
-void GTTabWidget::clickTab(U2OpStatus &os, QTabWidget* tabWidget, int idx, Qt::MouseButton button){
+void GTTabWidget::clickTab(GUITestOpStatus &os, QTabWidget* tabWidget, int idx, Qt::MouseButton button){
     GT_CHECK(tabWidget != NULL, "tabWidget is NULL");
     setCurrentIndex(os, tabWidget, idx);
     QTabBar* tabBar = getTabBar(os, tabWidget);
@@ -69,8 +69,19 @@ void GTTabWidget::clickTab(U2OpStatus &os, QTabWidget* tabWidget, int idx, Qt::M
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickTab"
-void GTTabWidget::clickTab(U2OpStatus &os, QTabWidget* tabWidget, QString tabName, Qt::MouseButton button){
-    GT_CHECK(tabWidget != NULL, "tabWidget is NULL");
+void GTTabWidget::clickTab(GUITestOpStatus &os, QTabWidget* tabWidget, QString tabName, Qt::MouseButton button){
+    int num = getTabNumByName(os, tabWidget, tabName);
+    clickTab(os, tabWidget, num, button);
+}
+#undef GT_METHOD_NAME
+
+QString GTTabWidget::getTabName(GUITestOpStatus &os, QTabWidget *tabWidget, int idx){
+    return getTabBar(os, tabWidget)->tabText(idx);
+}
+
+#define GT_METHOD_NAME "getTabNumByName"
+int GTTabWidget::getTabNumByName(GUITestOpStatus &os, QTabWidget *tabWidget, QString tabName){
+    GT_CHECK_RESULT(tabWidget != NULL, "tabWidget is NULL", -1);
     QTabBar* tabBar = getTabBar(os, tabWidget);
     int num = -1;
     for(int i=0; i<tabBar->count(); i++){
@@ -79,13 +90,32 @@ void GTTabWidget::clickTab(U2OpStatus &os, QTabWidget* tabWidget, QString tabNam
             num = -1;
         }
     }
-    GT_CHECK(num != -1, "tab " + tabName + " not found");
-    clickTab(os, tabWidget, num, button);
+    GT_CHECK_RESULT(num != -1, "tab " + tabName + " not found", -1);
+    return num;
 }
 #undef GT_METHOD_NAME
 
-QString GTTabWidget::getTabName(U2OpStatus &os, QTabWidget *tabWidget, int idx){
-    return getTabBar(os, tabWidget)->tabText(idx);
+#define GT_METHOD_NAME "getTabCornerWidget"
+QWidget* GTTabWidget::getTabCornerWidget(GUITestOpStatus &os, QTabWidget *tabWidget, int idx){
+    QWidget* result = GTTabWidget::getTabBar(os, tabWidget)->tabButton(idx, QTabBar::RightSide);
+    GT_CHECK_RESULT(result != NULL, "corner widget not found", NULL);
+    return result;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getTabCornerWidget"
+QWidget* GTTabWidget::getTabCornerWidget(GUITestOpStatus &os, QTabWidget *tabWidget, QString tabName){
+    int idx = getTabNumByName(os, tabWidget, tabName);
+    return getTabCornerWidget(os, tabWidget, idx);
+}
+#undef GT_METHOD_NAME
+
+void GTTabWidget::closeTab(GUITestOpStatus &os, QTabWidget *tabWidget, int idx){
+    GTWidget::click(os, getTabCornerWidget(os, tabWidget, idx));
+}
+
+void GTTabWidget::closeTab(GUITestOpStatus &os, QTabWidget *tabWidget, QString tabName){
+    GTWidget::click(os, getTabCornerWidget(os, tabWidget, tabName));
 }
 
 #undef GT_CLASS_NAME
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTTabWidget.h b/src/libs_3rdparty/humimit/src/primitives/GTTabWidget.h
new file mode 100644
index 0000000..32c7841
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTabWidget.h
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GT_TABWIDGET_H_
+#define _HI_GT_TABWIDGET_H_
+
+#include "GTGlobals.h"
+#include <QTabWidget>
+
+namespace HI {
+
+class HI_EXPORT GTTabWidget {
+public:
+    // fails if the tabwidget is NULL, index is not in a tabwidget's range
+    // or a tabwidget's index differs from a given index in the end of method's execution
+    static void setCurrentIndex(GUITestOpStatus& os, QTabWidget *tabWidget, int index);
+    static QTabBar* getTabBar(GUITestOpStatus &os, QTabWidget* tabWidget);
+    static void clickTab(GUITestOpStatus &os, QTabWidget* tabWidget, int idx, Qt::MouseButton button = Qt::LeftButton);
+    static void clickTab(GUITestOpStatus &os, QTabWidget* tabWidget, QString tabName, Qt::MouseButton button = Qt::LeftButton);
+    static QString getTabName(GUITestOpStatus &os, QTabWidget* tabWidget, int idx);
+
+    static int getTabNumByName(GUITestOpStatus &os, QTabWidget* tabWidget, QString tabName);
+    static QWidget* getTabCornerWidget(GUITestOpStatus &os, QTabWidget* tabWidget, int idx);
+    static QWidget* getTabCornerWidget(GUITestOpStatus &os, QTabWidget* tabWidget, QString tabName);
+
+    static void closeTab(GUITestOpStatus &os, QTabWidget *tabWidget, int idx);
+    static void closeTab(GUITestOpStatus &os, QTabWidget *tabWidget, QString tabName);
+
+
+};
+
+}
+#endif // _HI_GT_TABWIDGET_H_
diff --git a/src/plugins/GUITestBase/src/api/GTTableView.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTableView.cpp
similarity index 83%
rename from src/plugins/GUITestBase/src/api/GTTableView.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTableView.cpp
index d2b18ad..ec6673a 100644
--- a/src/plugins/GUITestBase/src/api/GTTableView.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTableView.cpp
@@ -19,15 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTWidget.h"
+#include "primitives/GTTableView.h"
+#include <primitives/GTWidget.h>
 
-#include "GTTableView.h"
-
-namespace U2{
+namespace HI{
 
 #define GT_CLASS_NAME "GTSpinBox"
 #define GT_METHOD_NAME "getCellPosition"
-QPoint GTTableView::getCellPosition(U2OpStatus &os, QTableView *table, int column, int row){
+QPoint GTTableView::getCellPosition(GUITestOpStatus &os, QTableView *table, int column, int row){
     GT_CHECK_RESULT(table,"table view is NULL",QPoint());
     QPoint p(table->columnViewportPosition(column)+table->columnWidth(column)/2,
              table->rowViewportPosition(row)+table->rowHeight(row)*1.5);
@@ -37,7 +36,7 @@ QPoint GTTableView::getCellPosition(U2OpStatus &os, QTableView *table, int colum
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getCellPoint"
-QPoint GTTableView::getCellPoint(U2OpStatus &os, QTableView *table, int row, int column) {
+QPoint GTTableView::getCellPoint(GUITestOpStatus &os, QTableView *table, int row, int column) {
     QModelIndex idx = table->model()->index(row, column);
     table->scrollTo(idx);
     QRect rect = table->visualRect(idx);
@@ -47,7 +46,7 @@ QPoint GTTableView::getCellPoint(U2OpStatus &os, QTableView *table, int row, int
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "rowCount"
-int GTTableView::rowCount(U2OpStatus &os, QTableView *table) {
+int GTTableView::rowCount(GUITestOpStatus &os, QTableView *table) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != table, "Table view is NULL", -1);
     GT_CHECK_RESULT(NULL != table->model(), "Table view model is NULL", -1);
@@ -56,7 +55,7 @@ int GTTableView::rowCount(U2OpStatus &os, QTableView *table) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "data"
-QString GTTableView::data(U2OpStatus &os, QTableView *table, int row, int column) {
+QString GTTableView::data(GUITestOpStatus &os, QTableView *table, int row, int column) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != table, "Table view is NULL", "");
     GT_CHECK_RESULT(NULL != table->model(), "Table view model is NULL", "");
diff --git a/src/plugins/GUITestBase/src/api/GTTableView.h b/src/libs_3rdparty/humimit/src/primitives/GTTableView.h
similarity index 64%
rename from src/plugins/GUITestBase/src/api/GTTableView.h
rename to src/libs_3rdparty/humimit/src/primitives/GTTableView.h
index bdc69bd..2c19f4c 100644
--- a/src/plugins/GUITestBase/src/api/GTTableView.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTableView.h
@@ -21,23 +21,20 @@
 #ifndef GTTABLEVIEW_H
 #define GTTABLEVIEW_H
 
-#include "api/GTGlobals.h"
-#include <QtCore/QPoint>
+#include "GTGlobals.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTableView>
-#else
-#include <QtWidgets/QTableView>
-#endif
+#include <QPoint>
+#include <QTableView>
 
-namespace U2{
-class GTTableView
-{
+namespace HI{
+
+class HI_EXPORT GTTableView {
 public:
-    static QPoint getCellPosition(U2OpStatus &os, QTableView *table, int column, int row);
-    static QPoint getCellPoint(U2OpStatus &os, QTableView *table, int row, int column);
-    static int rowCount(U2OpStatus &os, QTableView *table);
-    static QString data(U2OpStatus &os, QTableView *table, int row, int column);
+    static QPoint getCellPosition(GUITestOpStatus &os, QTableView *table, int column, int row);
+    static QPoint getCellPoint(GUITestOpStatus &os, QTableView *table, int row, int column);
+    static int rowCount(GUITestOpStatus &os, QTableView *table);
+    static QString data(GUITestOpStatus &os, QTableView *table, int row, int column);
 };
+
 }
 #endif // GTTABLEVIEW_H
diff --git a/src/plugins/GUITestBase/src/api/GTTextEdit.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTextEdit.cpp
similarity index 80%
rename from src/plugins/GUITestBase/src/api/GTTextEdit.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTextEdit.cpp
index 397be4c..d86a733 100644
--- a/src/plugins/GUITestBase/src/api/GTTextEdit.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTextEdit.cpp
@@ -19,17 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTextEdit.h"
-#include "GTWidget.h"
-#include "GTKeyboardDriver.h"
-#include "GTKeyboardUtils.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTTextEdit.h"
+#include <primitives/GTWidget.h>
+#include "utils/GTKeyboardUtils.h"
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTTextEdit"
 
 #define GT_METHOD_NAME ""
-void GTTextEdit::setText(U2OpStatus& os, QTextEdit* textEdit, const QString &text) {
+void GTTextEdit::setText(GUITestOpStatus& os, QTextEdit* textEdit, const QString &text) {
 
     GT_CHECK(textEdit != NULL, "plainTextEdit is NULL");
 
@@ -46,7 +46,7 @@ void GTTextEdit::setText(U2OpStatus& os, QTextEdit* textEdit, const QString &tex
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getText"
-QString GTTextEdit::getText(U2OpStatus &os, QTextEdit *textEdit) {
+QString GTTextEdit::getText(GUITestOpStatus &os, QTextEdit *textEdit) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != textEdit, "Text edit is NULL", "");
     return textEdit->toPlainText();
@@ -54,14 +54,14 @@ QString GTTextEdit::getText(U2OpStatus &os, QTextEdit *textEdit) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "containsString"
-bool GTTextEdit::containsString(U2OpStatus &os, QTextEdit *textEdit, const QString &string) {
+bool GTTextEdit::containsString(GUITestOpStatus &os, QTextEdit *textEdit, const QString &string) {
     const QString text = getText(os, textEdit);
     return text.contains(string);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clear"
-void GTTextEdit::clear(U2OpStatus& os, QTextEdit* textEdit) {
+void GTTextEdit::clear(GUITestOpStatus& os, QTextEdit* textEdit) {
 
     GT_CHECK(textEdit != NULL, "textEdit is NULL");
 
diff --git a/src/plugins/GUITestBase/src/api/GTTextEdit.h b/src/libs_3rdparty/humimit/src/primitives/GTTextEdit.h
similarity index 63%
rename from src/plugins/GUITestBase/src/api/GTTextEdit.h
rename to src/libs_3rdparty/humimit/src/primitives/GTTextEdit.h
index b072e2c..b9f055f 100644
--- a/src/plugins/GUITestBase/src/api/GTTextEdit.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTextEdit.h
@@ -19,31 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_TEXTEDIT_H_
-#define _U2_GT_TEXTEDIT_H_
+#ifndef _HI_GT_TEXTEDIT_H_
+#define _HI_GT_TEXTEDIT_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include <QTextEdit>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTextEdit>
-#else
-#include <QtWidgets/QTextEdit>
-#endif
+namespace HI {
 
-namespace U2 {
-
-class GTTextEdit {
+class HI_EXPORT GTTextEdit {
 public:
     // fails if textEdit is NULL
     // or a set text differs from a given text
-    static void setText(U2OpStatus& os, QTextEdit* textEdit, const QString &text);
-    static QString getText(U2OpStatus &os, QTextEdit* textEdit);
+    static void setText(GUITestOpStatus& os, QTextEdit* textEdit, const QString &text);
+    static QString getText(GUITestOpStatus &os, QTextEdit* textEdit);
 
-    static bool containsString(U2OpStatus &os, QTextEdit *textEdit, const QString &string);
+    static bool containsString(GUITestOpStatus &os, QTextEdit *textEdit, const QString &string);
 
-    static void clear(U2OpStatus& os, QTextEdit* textEdit);
+    static void clear(GUITestOpStatus& os, QTextEdit* textEdit);
 };
 
 }
 
-#endif // _U2_GT_TEXTEDIT_H_
+#endif // _HI_GT_TEXTEDIT_H_
diff --git a/src/plugins/GUITestBase/src/api/GTToolbar.cpp b/src/libs_3rdparty/humimit/src/primitives/GTToolbar.cpp
similarity index 73%
rename from src/plugins/GUITestBase/src/api/GTToolbar.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTToolbar.cpp
index 0a7cff1..a918f78 100644
--- a/src/plugins/GUITestBase/src/api/GTToolbar.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTToolbar.cpp
@@ -19,25 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTToolbar.h"
-#include "GTWidget.h"
-#include <U2Gui/MainWindow.h>
-#include <U2Gui/GUIUtils.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include "QtGui/QToolBar"
-#include "QtGui/QAction"
-#else
-#include "QtWidgets/QToolBar"
-#include "QtWidgets/QAction"
-#endif
+#include "primitives/GTToolbar.h"
+#include "primitives/GTWidget.h"
 
+#include <QAction>
 
-namespace U2 {
-
+namespace HI {
 #define GT_CLASS_NAME "GTToolbar"
 
 #define GT_METHOD_NAME "getToolbar"
-    QToolBar* GTToolbar::getToolbar(U2OpStatus &os, const QString &toolbarSysName) {
+    QToolBar* GTToolbar::getToolbar(GUITestOpStatus &os, const QString &toolbarSysName) {
         QString toolbarTypeCheck = "QToolBar";
         QToolBar *toolbar = static_cast<QToolBar*>(GTWidget::findWidget(os, toolbarSysName));
         GT_CHECK_RESULT((toolbar != NULL) && 0 == toolbarTypeCheck.compare(toolbar->metaObject()->className()), "No such toolbar: " + toolbarSysName, NULL); //the found widget is not a qtoolbar
@@ -46,7 +37,7 @@ namespace U2 {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getWidgetForAction"
-    QWidget* GTToolbar::getWidgetForAction(U2OpStatus &os, const QToolBar *toolbar, QAction *action) {
+    QWidget* GTToolbar::getWidgetForAction(GUITestOpStatus &os, const QToolBar *toolbar, QAction *action) {
         QString toolbarTypeCheck = "QToolBar";
         GT_CHECK_RESULT((toolbar != NULL) && (0 == toolbarTypeCheck.compare(toolbar->metaObject()->className())), "Toolbar not found", NULL); //the found widget is not a qtoolbar or doesn't exist
         QWidget *widget = toolbar->widgetForAction(action);
@@ -56,7 +47,7 @@ namespace U2 {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getWidgetForActionName"
-    QWidget* GTToolbar::getWidgetForActionName(U2OpStatus &os, const QToolBar *toolbar, const QString &actionName) {
+    QWidget* GTToolbar::getWidgetForActionName(GUITestOpStatus &os, const QToolBar *toolbar, const QString &actionName) {
         QString toolbarTypeCheck = "QToolBar";
         GT_CHECK_RESULT((toolbar != NULL) && (0 == toolbarTypeCheck.compare(toolbar->metaObject()->className())), "Toolbar not found", NULL); //the found widget is not a qtoolbar or doesn't exist
         QAction *action = GTToolbar::getToolbarAction(os, actionName, toolbar);
@@ -66,26 +57,38 @@ namespace U2 {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getWidgetForActionTooltip"
-    QWidget* GTToolbar::getWidgetForActionTooltip(U2OpStatus &os, const QToolBar *toolbar, const QString &tooltip) {
+    QWidget* GTToolbar::getWidgetForActionTooltip(GUITestOpStatus &os, const QToolBar *toolbar, const QString &tooltip) {
         QString toolbarTypeCheck = "QToolBar";
         GT_CHECK_RESULT((toolbar != NULL) && (0 == toolbarTypeCheck.compare(toolbar->metaObject()->className())), "Toolbar not found", NULL); //the found widget is not a qtoolbar or doesn't exist
-        QAction *action = GUIUtils::findActionByTooltip(toolbar->actions(), tooltip);
+        QAction *action = NULL;
+        foreach (QAction* a, toolbar->actions()) {
+            if (a->toolTip() == tooltip) {
+                action = a;
+                break;
+            }
+        }
         GT_CHECK_RESULT(action != NULL, "No action with such tooltip: " + tooltip, NULL);
         return GTToolbar::getWidgetForAction(os, toolbar, action);
     }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickButtonByTooltipOnToolbar"
-void GTToolbar::clickButtonByTooltipOnToolbar(U2OpStatus &os, const QString &toolbarSysName, const QString &tooltip) {
+void GTToolbar::clickButtonByTooltipOnToolbar(GUITestOpStatus &os, const QString &toolbarSysName, const QString &tooltip) {
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, getToolbar(os, toolbarSysName), tooltip));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getToolbarAction"
-    QAction* GTToolbar::getToolbarAction(U2OpStatus &os, const QString &actionName, const QToolBar *toolbar) {
+    QAction* GTToolbar::getToolbarAction(GUITestOpStatus &os, const QString &actionName, const QToolBar *toolbar) {
         QString toolbarTypeCheck = "QToolBar";
         GT_CHECK_RESULT((toolbar != NULL) && (0 == toolbarTypeCheck.compare(toolbar->metaObject()->className())), "Toolbar not found", NULL); //the found widget is not a qtoolbar or doesn't exist
-        QAction *action = GUIUtils::findAction(toolbar->actions(), actionName);
+        QAction *action = NULL;
+        foreach(QAction* a, toolbar->actions()) {
+            const QString& aname =  a->objectName();
+            if (aname == actionName) {
+                action = a;
+            }
+        }
         return action;
     }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h b/src/libs_3rdparty/humimit/src/primitives/GTToolbar.h
similarity index 52%
copy from src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
copy to src/libs_3rdparty/humimit/src/primitives/GTToolbar.h
index b4e3b67..a0d870f 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTToolbar.h
@@ -19,38 +19,32 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef GTSEQUENCEREADINGMODEDIALOGUTILS_H
-#define GTSEQUENCEREADINGMODEDIALOGUTILS_H
+#ifndef _HI_GUI_GTTOOLBAR_H_
+#define _HI_GUI_GTTOOLBAR_H_
 
-#include "GTUtilsDialog.h"
+#include "GTGlobals.h"
+#include <QToolBar>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QSpinBox>
-#endif
-
-namespace U2 {
+namespace HI {
 
-class GTSequenceReadingModeDialogUtils : public Filler {
+class HI_EXPORT GTToolbar {
 public:
-    enum sequenceMode {Separate, Merge};
-    enum Button {Ok, Cancel};
 
-    GTSequenceReadingModeDialogUtils(U2OpStatus &os, CustomScenario *scenario = NULL);
-    virtual void commonScenario();
+    static QToolBar* getToolbar(GUITestOpStatus &os, const QString &toolbarSysName);
+
+    static QWidget* getWidgetForAction(GUITestOpStatus &os, const QToolBar *toolbar, QAction *action);
+    static QWidget* getWidgetForActionName(GUITestOpStatus &os, const QToolBar *toolbar, const QString &actionName);
+    static QWidget* getWidgetForActionTooltip(GUITestOpStatus &os, const QToolBar *toolbar, const QString &tooltip);
+
+    static void clickButtonByTooltipOnToolbar(GUITestOpStatus &os, const QString &toolbarSysName, const QString &tooltip);
+
 private:
-    void selectMode();
-    void setNumSymbolsParts();
-    void setNumSymbolsFiles();
-    void setNewDocumentName();
-    void selectSaveDocument();
-    void clickButton();
-    void changeSpinBoxValue(QSpinBox*, int);
-
-    QWidget *dialog;
+
+    static QAction* getToolbarAction(GUITestOpStatus &os, const QString &actionName, const QToolBar *toolbar);
+
+
 };
 
 } // namespace
 
-#endif // GTSEQUENCEREADINGMODEDIALOGUTILS_H
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTTreeView.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTreeView.cpp
similarity index 81%
rename from src/plugins/GUITestBase/src/api/GTTreeView.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTreeView.cpp
index 196aebf..fda1ff8 100644
--- a/src/plugins/GUITestBase/src/api/GTTreeView.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTreeView.cpp
@@ -19,23 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTreeView.h"
+#include "primitives/GTTreeView.h"
 
 #include <QAbstractItemModel>
 
 
-namespace U2{
+namespace HI{
 
 #define GT_CLASS_NAME "GTTreeView"
 #define GT_METHOD_NAME "findIndex"
-QModelIndex GTTreeView::findIndex(U2OpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role,
+QModelIndex GTTreeView::findIndex(GUITestOpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role,
                                   const GTGlobals::FindOptions& options){
     return findIndex(os, treeView, data, QModelIndex(), role, options);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findIndex"
-QModelIndex GTTreeView::findIndex(U2OpStatus &os, QTreeView* treeView, QVariant data, QModelIndex parent, Qt::ItemDataRole role,
+QModelIndex GTTreeView::findIndex(GUITestOpStatus &os, QTreeView* treeView, QVariant data, QModelIndex parent, Qt::ItemDataRole role,
                                  const GTGlobals::FindOptions& options){
 
     GT_CHECK_RESULT(treeView != NULL, "Tree widget is NULL", QModelIndex());
@@ -58,10 +58,12 @@ QModelIndex GTTreeView::findIndex(U2OpStatus &os, QTreeView* treeView, QVariant
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findIndexes"
-QModelIndexList GTTreeView::findIndexes(U2OpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role,
+QModelIndexList GTTreeView::findIndexes(GUITestOpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role,
                                         QModelIndex parent, int depth, const GTGlobals::FindOptions& options){
     QModelIndexList foundIndexes;
-    CHECK(GTGlobals::FindOptions::INFINITE_DEPTH == options.depth || depth < options.depth, foundIndexes);
+    if (!(GTGlobals::FindOptions::INFINITE_DEPTH == options.depth || depth < options.depth)) {
+        return foundIndexes;
+    }
 
     QAbstractItemModel *model = treeView->model();
     CHECK_SET_ERR_RESULT(NULL != model, "Model is NULL", foundIndexes);
@@ -83,7 +85,7 @@ QModelIndexList GTTreeView::findIndexes(U2OpStatus &os, QTreeView* treeView, QVa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTTreeView::getItemCenter(U2OpStatus &, QTreeView *treeView, const QModelIndex &itemIndex) {
+QPoint GTTreeView::getItemCenter(GUITestOpStatus &, QTreeView *treeView, const QModelIndex &itemIndex) {
     QRect r = treeView->visualRect(itemIndex);
 
     return treeView->mapToGlobal(r.center());
diff --git a/src/plugins/GUITestBase/src/api/GTTreeView.h b/src/libs_3rdparty/humimit/src/primitives/GTTreeView.h
similarity index 70%
rename from src/plugins/GUITestBase/src/api/GTTreeView.h
rename to src/libs_3rdparty/humimit/src/primitives/GTTreeView.h
index 7db3102..9988924 100644
--- a/src/plugins/GUITestBase/src/api/GTTreeView.h
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTreeView.h
@@ -22,26 +22,26 @@
 #ifndef GTTREEVIEW_H
 #define GTTREEVIEW_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <QTreeView>
 
-namespace U2{
+namespace HI{
 
-class GTTreeView
+class HI_EXPORT GTTreeView
 {
 public:
     //find index with data and role in the tree view
-    static QModelIndex findIndex(U2OpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role = Qt::DisplayRole,
+    static QModelIndex findIndex(GUITestOpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role = Qt::DisplayRole,
                                  const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
     //find index with data and role for current parent index
-    static QModelIndex findIndex(U2OpStatus &os, QTreeView* treeView, QVariant data, QModelIndex parent, Qt::ItemDataRole role = Qt::DisplayRole,
+    static QModelIndex findIndex(GUITestOpStatus &os, QTreeView* treeView, QVariant data, QModelIndex parent, Qt::ItemDataRole role = Qt::DisplayRole,
                                  const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
-    static QPoint getItemCenter(U2OpStatus &os, QTreeView* treeView, const QModelIndex &itemIndex);
+    static QPoint getItemCenter(GUITestOpStatus &os, QTreeView* treeView, const QModelIndex &itemIndex);
 
 private:
-    static QModelIndexList findIndexes(U2OpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role = Qt::DisplayRole,
+    static QModelIndexList findIndexes(GUITestOpStatus &os, QTreeView* treeView, QVariant data, Qt::ItemDataRole role = Qt::DisplayRole,
                                        QModelIndex parent = QModelIndex(), int depth = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 };
 
diff --git a/src/plugins/GUITestBase/src/api/GTTreeWidget.cpp b/src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.cpp
similarity index 83%
rename from src/plugins/GUITestBase/src/api/GTTreeWidget.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.cpp
index f9967cb..9a18a98 100644
--- a/src/plugins/GUITestBase/src/api/GTTreeWidget.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.cpp
@@ -19,27 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QHeaderView>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QTreeWidget>
-#endif
-
-#include "GTTreeWidget.h"
-#include "GTUtilsProjectTreeView.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-
-namespace U2 {
+
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTTreeWidget.h"
+#include <primitives/GTWidget.h>
+
+#include <QHeaderView>
+
+namespace HI {
 
 #define GT_CLASS_NAME "GTUtilsTreeView"
 
 #define GT_METHOD_NAME "expand"
-void GTTreeWidget::expand(U2OpStatus &os, QTreeWidgetItem* item) {
+void GTTreeWidget::expand(GUITestOpStatus &os, QTreeWidgetItem* item) {
     if (item == NULL) {
         return;
     }
@@ -62,7 +55,7 @@ void GTTreeWidget::expand(U2OpStatus &os, QTreeWidgetItem* item) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-void GTTreeWidget::checkItem(U2OpStatus &os, QTreeWidgetItem *item, int column, GTGlobals::UseMethod method) {
+void GTTreeWidget::checkItem(GUITestOpStatus &os, QTreeWidgetItem *item, int column, GTGlobals::UseMethod method) {
     Q_UNUSED(os);
     GT_CHECK(NULL != item, "treeWidgetItem is NULL");
     GT_CHECK(0 <= column, "The column number is invalid");
@@ -97,7 +90,7 @@ void GTTreeWidget::checkItem(U2OpStatus &os, QTreeWidgetItem *item, int column,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemRect"
-QRect GTTreeWidget::getItemRect(U2OpStatus &os, QTreeWidgetItem* item) {
+QRect GTTreeWidget::getItemRect(GUITestOpStatus &os, QTreeWidgetItem* item) {
     GT_CHECK_RESULT(item != NULL, "treeWidgetItem is NULL", QRect());
 
     QTreeWidget *treeWidget = item->treeWidget();
@@ -113,7 +106,7 @@ QRect GTTreeWidget::getItemRect(U2OpStatus &os, QTreeWidgetItem* item) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTTreeWidget::getItemCenter(U2OpStatus &os, QTreeWidgetItem* item) {
+QPoint GTTreeWidget::getItemCenter(GUITestOpStatus &os, QTreeWidgetItem* item) {
 
     GT_CHECK_RESULT(item != NULL, "item is NULL", QPoint());
 
@@ -141,7 +134,7 @@ QList<QTreeWidgetItem*> GTTreeWidget::getItems(QTreeWidgetItem* root) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItems"
-QList<QTreeWidgetItem *> GTTreeWidget::getItems(U2OpStatus &os, QTreeWidget *treeWidget) {
+QList<QTreeWidgetItem *> GTTreeWidget::getItems(GUITestOpStatus &os, QTreeWidget *treeWidget) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != treeWidget, "Tree widget is NULL", QList<QTreeWidgetItem *>());
     return getItems(treeWidget->invisibleRootItem());
@@ -149,7 +142,7 @@ QList<QTreeWidgetItem *> GTTreeWidget::getItems(U2OpStatus &os, QTreeWidget *tre
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemNames"
-QStringList GTTreeWidget::getItemNames(U2OpStatus &os, QTreeWidget *treeWidget) {
+QStringList GTTreeWidget::getItemNames(GUITestOpStatus &os, QTreeWidget *treeWidget) {
     QStringList itemNames;
     QList<QTreeWidgetItem *> items = getItems(os, treeWidget);
     foreach (QTreeWidgetItem *item, items) {
@@ -160,7 +153,7 @@ QStringList GTTreeWidget::getItemNames(U2OpStatus &os, QTreeWidget *treeWidget)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItemPrivate"
-QTreeWidgetItem * GTTreeWidget::findItemPrivate(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem * GTTreeWidget::findItemPrivate(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(tree != NULL, "tree widget is NULL", NULL);
 
@@ -195,7 +188,7 @@ QTreeWidgetItem * GTTreeWidget::findItemPrivate(U2OpStatus &os, QTreeWidget *tre
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem * GTTreeWidget::findItem(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem * GTTreeWidget::findItem(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
     QTreeWidgetItem* result = findItemPrivate(os, tree, text, parent, column, options);
     if(options.failIfNull){
         CHECK_SET_ERR_RESULT(result != NULL, QString("Item '%1' not found").arg(text), NULL);
@@ -205,7 +198,7 @@ QTreeWidgetItem * GTTreeWidget::findItem(U2OpStatus &os, QTreeWidget *tree, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItems"
-QList<QTreeWidgetItem *> GTTreeWidget::findItems(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
+QList<QTreeWidgetItem *> GTTreeWidget::findItems(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent, int column, const GTGlobals::FindOptions &options) {
     QList<QTreeWidgetItem *> items;
 
     GT_CHECK_RESULT(tree != NULL, "tree widget is NULL", items);
@@ -239,7 +232,7 @@ QList<QTreeWidgetItem *> GTTreeWidget::findItems(U2OpStatus &os, QTreeWidget *tr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTTreeWidget::click(U2OpStatus &os, QTreeWidgetItem *item, int column) {
+void GTTreeWidget::click(GUITestOpStatus &os, QTreeWidgetItem *item, int column) {
     GT_CHECK(item != NULL, "item is NULL");
     QTreeWidget* tree = item->treeWidget();
     tree->scrollToItem(item);
@@ -259,7 +252,7 @@ void GTTreeWidget::click(U2OpStatus &os, QTreeWidgetItem *item, int column) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemLevel"
-int GTTreeWidget::getItemLevel(U2OpStatus &os, QTreeWidgetItem *item) {
+int GTTreeWidget::getItemLevel(GUITestOpStatus &os, QTreeWidgetItem *item) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(item != NULL, "item is NULL", -1);
 
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.h b/src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.h
new file mode 100644
index 0000000..0d2d5ca
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTTreeWidget.h
@@ -0,0 +1,65 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GT_TREE_WIDGET_H_
+#define _HI_GT_TREE_WIDGET_H_
+
+#include "GTGlobals.h"
+
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+
+namespace HI {
+
+class HI_EXPORT GTTreeWidget {
+public:
+    // expands treeWidget to the item and returns item's rect
+    static QRect getItemRect(GUITestOpStatus &os, QTreeWidgetItem* item);
+
+    static QPoint getItemCenter(GUITestOpStatus &os, QTreeWidgetItem* item);
+
+    // recursively expands the tree making the given item visible
+    // fails if item is NULL, item is hidden or item wasn't expanded
+    static void expand(GUITestOpStatus &os, QTreeWidgetItem* item);
+
+    // Checks the tree item or unchecks it if it is already checked
+    static void checkItem(GUITestOpStatus &os, QTreeWidgetItem *item, int column = 0, GTGlobals::UseMethod method = GTGlobals::UseMouse);
+
+    // gets all items under root recursively and returns a list of them
+    static QList<QTreeWidgetItem*> getItems(QTreeWidgetItem* root);
+    static QList<QTreeWidgetItem*> getItems(GUITestOpStatus &os, QTreeWidget *treeWidget);
+    static QStringList getItemNames(GUITestOpStatus &os, QTreeWidget *treeWidget);
+
+    static QTreeWidgetItem * findItem(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+
+    static QList<QTreeWidgetItem *> findItems(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+
+    static void click(GUITestOpStatus &os, QTreeWidgetItem* item, int column = -1);  //  column == -1 - item center
+
+    // Returns item level, 0 - top level item
+    static int getItemLevel(GUITestOpStatus &os, QTreeWidgetItem *item);
+private:
+    static QTreeWidgetItem * findItemPrivate(GUITestOpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+};
+
+} // namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/api/GTWebView.cpp b/src/libs_3rdparty/humimit/src/primitives/GTWebView.cpp
similarity index 52%
rename from src/plugins/GUITestBase/src/api/GTWebView.cpp
rename to src/libs_3rdparty/humimit/src/primitives/GTWebView.cpp
index 9aea8c3..cde7bdc 100644
--- a/src/plugins/GUITestBase/src/api/GTWebView.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/GTWebView.cpp
@@ -19,16 +19,15 @@
 * MA 02110-1301, USA.
 */
 
-#include <QWebElement>
-#include <QWebFrame>
-#include <QWebView>
 
-#include "api/GTMouseDriver.h"
+#include <core/MainThreadRunnable.h>
 
-#include "GTWebView.h"
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTWebView.h"
 
-namespace U2 {
+#include <QWebFrame>
 
+namespace HI {
 namespace {
 bool compare(QString s1, QString s2, bool exactMatch){
     if(exactMatch){
@@ -39,26 +38,51 @@ bool compare(QString s1, QString s2, bool exactMatch){
 }
 }
 
-#define GT_CLASS_NAME "GTUtilsDashboard"
+#define GT_CLASS_NAME "GTWebView"
 
 #define GT_METHOD_NAME "findElement"
-QWebElement GTWebView::findElement(U2OpStatus &os, QWebView *view, QString text, QString tag, bool exactMatch){
-
-    QWebFrame* frame = view->page()->mainFrame();
-    foreach (QWebElement el, frame->findAllElements(tag)) {
-        QString s = el.toPlainText();
-        int width = el.geometry().width();
-
-        if (compare(s, text, exactMatch) && width != 0){
-            return el;
+QWebElement GTWebView::findElement(GUITestOpStatus &os, QWebView *view, const QString &text, const QString &tag, bool exactMatch) {
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QWebView *view, const QString &text, const QString &tag, bool exactMatch, QWebElement &webElement) :
+            view(view),
+            text(text),
+            tag(tag),
+            exactMatch(exactMatch),
+            webElement(webElement) {}
+
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            QWebFrame* frame = view->page()->mainFrame();
+            foreach (QWebElement el, frame->findAllElements(tag)) {
+                QString s = el.toPlainText();
+                int width = el.geometry().width();
+
+                if (compare(s, text, exactMatch) && width != 0) {
+                    webElement = el;
+                    return;
+                }
+            }
+            GT_CHECK(false, QString("element with text '%1' and tag '%2' not found").arg(text).arg(tag));
         }
-    }
-    GT_CHECK_RESULT(false, "element with text " + text + " and tag " + tag + " not found", QWebElement());
+
+    private:
+        QWebView *view;
+        const QString text;
+        const QString tag;
+        bool exactMatch;
+        QWebElement &webElement;
+    };
+
+    QWebElement webElement;
+    MainThreadRunnable mainThreadRunnable(os, new Scenario(view, text, tag, exactMatch, webElement));
+    mainThreadRunnable.doRequest();
+    return webElement;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkElement"
-void GTWebView::checkElement(U2OpStatus &os, QWebView *view, QString text, QString tag, bool exists, bool exactMatch){
+void GTWebView::checkElement(GUITestOpStatus &os, QWebView *view, QString text, QString tag, bool exists, bool exactMatch){
     const bool found = doesElementExist(os, view, text, tag, exactMatch);
     if (exists) {
         GT_CHECK(found, "element with text " + text + " and tag " + tag + " not found");
@@ -69,7 +93,7 @@ void GTWebView::checkElement(U2OpStatus &os, QWebView *view, QString text, QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doesElementExist"
-bool GTWebView::doesElementExist(U2OpStatus &os, QWebView *view, const QString &text, const QString &tag, bool exactMatch) {
+bool GTWebView::doesElementExist(GUITestOpStatus &os, QWebView *view, const QString &text, const QString &tag, bool exactMatch) {
     Q_UNUSED(os)
     QWebFrame* frame = view->page()->mainFrame();
 
@@ -85,27 +109,27 @@ bool GTWebView::doesElementExist(U2OpStatus &os, QWebView *view, const QString &
 }
 #undef GT_METHOD_NAME
 
-QWebElement GTWebView::findTreeElement(U2OpStatus &os, QWebView *view, QString text){
+QWebElement GTWebView::findTreeElement(GUITestOpStatus &os, QWebView *view, QString text){
     return findElement(os, view, text, "SPAN");
 }
 
-QWebElement GTWebView::findContextMenuElement(U2OpStatus &os, QWebView *view, QString text){
+QWebElement GTWebView::findContextMenuElement(GUITestOpStatus &os, QWebView *view, QString text){
     return findElement(os, view, text, "LI");
 }
 
-void GTWebView::click(U2OpStatus &os, QWebView *view, QWebElement el, Qt::MouseButton button){
+void GTWebView::click(GUITestOpStatus &os, QWebView *view, QWebElement el, Qt::MouseButton button){
     GTMouseDriver::moveTo(os, view->mapToGlobal(el.geometry().center()));
     GTMouseDriver::click(os, button);
 }
 
-void GTWebView::selectElementText(U2OpStatus &os, QWebView *view, QWebElement el){
+void GTWebView::selectElementText(GUITestOpStatus &os, QWebView *view, QWebElement el){
     GTMouseDriver::moveTo(os, view->mapToGlobal(el.geometry().topLeft()) + QPoint(5,5));
     GTMouseDriver::press(os);
     GTMouseDriver::moveTo(os, view->mapToGlobal(el.geometry().bottomRight()) - QPoint(5,5));
     GTMouseDriver::release(os);
 }
 
-void GTWebView::traceAllWebElements(U2OpStatus &os, QWebView *view){
+void GTWebView::traceAllWebElements(GUITestOpStatus &os, QWebView *view){
     Q_UNUSED(os)
     QWebFrame* frame = view->page()->mainFrame();
     QWebElement result;
@@ -113,10 +137,9 @@ void GTWebView::traceAllWebElements(U2OpStatus &os, QWebView *view){
         QString s = el.toPlainText();
         QString tagName = el.tagName();
         QString localName = el.localName();
-        QString rect = QString("%1").arg(el.geometry().width());
 
-        if(rect != "0"){
-            uiLog.trace("tag: " + tagName + " name: " + localName + " text: " + s + " width: " + rect);
+        if(el.geometry().width() != 0){
+            qDebug("GT_DEBUG_MESSAGE tag: %s name: %s text: %s width: %d", tagName.toLocal8Bit().constData(), localName.toLocal8Bit().constData(), s.toLocal8Bit().constData(), el.geometry().width());
         }
         if (s == "Input"){
             result = el;
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTWebView.h b/src/libs_3rdparty/humimit/src/primitives/GTWebView.h
new file mode 100644
index 0000000..06574d1
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTWebView.h
@@ -0,0 +1,49 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+* http://ugene.unipro.ru
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public 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 GTWEBVIEW_H
+#define GTWEBVIEW_H
+
+#include "GTGlobals.h"
+
+#include <QWebView>
+#include <QWebElement>
+
+namespace HI {
+
+class HI_EXPORT GTWebView{
+public:
+    static QWebElement findElement(GUITestOpStatus &os, QWebView *view, const QString &text, const QString &tag = "*", bool exactMatch = false);
+    static void checkElement(GUITestOpStatus &os, QWebView *view, QString text, QString tag = "*", bool exists = true, bool exactMatch = false);
+    static bool doesElementExist(GUITestOpStatus &os, QWebView *view, const QString &text, const QString &tag = "*", bool exactMatch = false);
+
+    static void click(GUITestOpStatus &os, QWebView *view, QWebElement el, Qt::MouseButton button = Qt::LeftButton);
+    static void selectElementText(GUITestOpStatus &os, QWebView *view, QWebElement el);
+    static QWebElement findTreeElement(GUITestOpStatus &os, QWebView *view, QString text);
+    static QWebElement findContextMenuElement(GUITestOpStatus &os, QWebView *view, QString text);
+
+    static void traceAllWebElements(GUITestOpStatus &os, QWebView *view);
+
+};
+
+}
+
+#endif // GTWEBVIEW_H
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTWidget.cpp b/src/libs_3rdparty/humimit/src/primitives/GTWidget.cpp
new file mode 100644
index 0000000..e7a18b2
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTWidget.cpp
@@ -0,0 +1,404 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "drivers/GTMouseDriver.h"
+#include "primitives/GTMainWindow.h"
+#include "primitives/GTWidget.h"
+#include "utils/GTThread.h"
+
+#include <QApplication>
+#include <QComboBox>
+#include <QDesktopWidget>
+#include <QGuiApplication>
+#include <QMainWindow>
+#include <QStyle>
+
+namespace HI {
+#define GT_CLASS_NAME "GTWidget"
+
+#define GT_METHOD_NAME "click"
+void GTWidget::click(GUITestOpStatus &os, QWidget *w, Qt::MouseButton mouseButton, QPoint p, bool safe) {
+
+    GTGlobals::sleep(100);
+    GT_CHECK(w != NULL, "widget is NULL");
+//    GT_CHECK(w->isEnabled() == true, "widget " + w->objectName() + "is not enabled");
+
+    if (p.isNull()) {
+        p = w->rect().center();
+
+        // TODO: this is a fast fix
+        if (w->objectName().contains("ADV_single_sequence_widget")) {
+            p += QPoint(0, 8);
+        }
+    }
+    GTMouseDriver::moveTo(os, w->mapToGlobal(p));
+    if(safe){
+        GTMouseDriver::click(os, mouseButton);
+    }else{
+        //sometimes GTGlobals::sleep(os) should not be used after clicking
+        GTMouseDriver::press(os, mouseButton);
+        GTMouseDriver::release(os, mouseButton);
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setFocus"
+void GTWidget::setFocus(GUITestOpStatus &os, QWidget *w) {
+
+    GT_CHECK(w != NULL, "widget is NULL");
+
+    GTWidget::click(os, w);
+    GTGlobals::sleep(1000);
+
+    if(!qobject_cast<QComboBox*>(w)){
+        GT_CHECK(w->hasFocus(), "Can't set focus on widget " + w->objectName());
+    }
+
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "findWidget"
+QWidget* GTWidget::findWidget(GUITestOpStatus &os, const QString &widgetName, QWidget *parentWidget, const GTGlobals::FindOptions& options) {
+    Q_UNUSED(os);
+
+    if (parentWidget == NULL) {
+        QList<QWidget*> list;
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            if(parent->findChild<QWidget*>(widgetName) != NULL){
+                list.append(parent->findChild<QWidget*>(widgetName));
+            }
+        }
+        if (options.failIfNull) {
+            GT_CHECK_RESULT(list.count()!=0,"Widget " + widgetName + " not found", NULL);
+        }
+        GT_CHECK_RESULT(list.count()<2, QString("There are %1 widgets with this text").arg(list.count()), NULL);
+        if(list.count() == 0){
+            return NULL;
+        }else{
+            return list.takeFirst();
+        }
+    }
+    QWidget* widget = parentWidget->findChild<QWidget*>(widgetName);
+
+    if (options.failIfNull) {
+        GT_CHECK_RESULT(widget != NULL, "Widget " + widgetName + " not found", NULL);
+    }
+
+    return widget;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getWidgetCenter"
+QPoint GTWidget::getWidgetCenter(GUITestOpStatus &os, QWidget *w){
+    Q_UNUSED(os)
+    return w->mapToGlobal(w->rect().center());
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "findButtonByText"
+QAbstractButton* GTWidget::findButtonByText(GUITestOpStatus &os, const QString &text, QWidget *parentWidget, const GTGlobals::FindOptions& options) {
+
+    if (parentWidget == NULL) {
+        QList<QAbstractButton*> resultList;
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            QList<QAbstractButton*> list = parent->findChildren<QAbstractButton*>();
+            foreach(QAbstractButton* ab, list){
+                if(ab->text().contains(text, Qt::CaseInsensitive)){
+                    resultList.append(ab);
+                }
+            }
+        }
+
+        if (options.failIfNull) {
+            GT_CHECK_RESULT(resultList.count()!=0,"button not found", NULL);
+        }
+        GT_CHECK_RESULT(resultList.count()<2, QString("There are %1 buttons with this text").arg(resultList.count()), NULL);
+        if(resultList.count() == 0){
+            return NULL;
+        }else{
+            return resultList.takeFirst();
+        }
+    }
+    QList<QAbstractButton*> buttonList = parentWidget->findChildren<QAbstractButton*>();
+    QList<QAbstractButton*> foundButtonList;
+    QStringList sL;
+
+    foreach(QAbstractButton* but, buttonList){
+        sL.append(but->text());
+        if (but->text().contains(text, Qt::CaseInsensitive)){
+            foundButtonList << but;
+        }
+    }
+
+    GT_CHECK_RESULT(foundButtonList.count()<=1, QString("there are %1 buttons with such text").arg(foundButtonList.count()), NULL);
+
+    if (options.failIfNull) {
+        GT_CHECK_RESULT(foundButtonList.count() != 0, QString("button with this text <%1> not found").arg(text), NULL);
+    }
+
+    return foundButtonList.takeFirst();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "findWidget"
+void GTWidget::getAllWidgetsInfo(GUITestOpStatus &os, QWidget *parent){
+
+    QList<QObject*> list;
+    if(parent == NULL){
+        foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+            list.append(parent->findChildren<QObject*>());
+        }
+    }else{
+        list = parent->findChildren<QObject*>();
+    }
+    QString actStr;
+    actStr.append("Getting all info about widget\n");
+
+    foreach(QObject* act, list){
+        actStr.append(act->objectName()+ "  " + act->metaObject()->className() + "  " + /*QString("%1").arg(act->isVisible()) + " " + QString("%1").arg(act->geometry().width()) +*/ "\n");
+    }
+    CHECK_SET_ERR(false, actStr);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "close"
+void GTWidget::close(GUITestOpStatus &os, QWidget *widget) {
+#ifndef Q_OS_MAC
+    GT_CHECK(NULL != widget, "Widget is NULL");
+
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QWidget *widget) :
+            widget(widget)
+        {
+
+        }
+
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            CHECK_SET_ERR(NULL != widget, "Widget is NULL");
+            widget->close();
+            GTGlobals::sleep(100);
+        }
+
+    private:
+        QWidget *widget;
+    };
+
+    GTThread::runInMainThread(os, new Scenario(widget));
+#else
+    const QPoint closeButtonPos = GTWidget::getWidgetGlobalTopLeftPoint(os, widget) + QPoint(10, 5);
+    GTMouseDriver::moveTo(os, closeButtonPos);
+    GTMouseDriver::click(os);
+    GTGlobals::sleep(100);
+#endif
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "showMaximized"
+void GTWidget::showMaximized(GUITestOpStatus &os, QWidget *widget) {
+    GT_CHECK(NULL != widget, "Widget is NULL");
+
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QWidget *widget) :
+            widget(widget)
+        {
+
+        }
+
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            CHECK_SET_ERR(NULL != widget, "Widget is NULL");
+            widget->showMaximized();
+            GTGlobals::sleep(100);
+        }
+
+    private:
+        QWidget *widget;
+    };
+
+    GTThread::runInMainThread(os, new Scenario(widget));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "showNormal"
+void GTWidget::showNormal(GUITestOpStatus &os, QWidget *widget) {
+    GT_CHECK(NULL != widget, "Widget is NULL");
+
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QWidget *widget) :
+            widget(widget)
+        {
+
+        }
+
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            CHECK_SET_ERR(NULL != widget, "Widget is NULL");
+            widget->showNormal();
+            GTGlobals::sleep(100);
+        }
+
+    private:
+        QWidget *widget;
+    };
+
+    GTThread::runInMainThread(os, new Scenario(widget));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getColor"
+QColor GTWidget::getColor(GUITestOpStatus &os, QWidget *widget, const QPoint &point) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(NULL != widget, "Widget is NULL", QColor());
+
+    return QColor(getImage(os, widget).pixel(point));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getPixmap"
+QPixmap GTWidget::getPixmap(GUITestOpStatus &os, QWidget *widget) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(NULL != widget, "Widget is NULL", QPixmap());
+
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QWidget *widget, QPixmap &pixmap) :
+            widget(widget),
+            pixmap(pixmap)
+        {
+
+        }
+
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            CHECK_SET_ERR(NULL != widget, "Widget to grab is NULL");
+            pixmap = widget->grab(widget->rect());
+        }
+
+    private:
+        QWidget *widget;
+        QPixmap &pixmap;
+    };
+
+    QPixmap pixmap;
+    GTThread::runInMainThread(os, new Scenario(widget, pixmap));
+    return pixmap;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getImage"
+QImage GTWidget::getImage(GUITestOpStatus &os, QWidget *widget) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(NULL != widget, "Widget is NULL", QImage());
+
+    return getPixmap(os, widget).toImage();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickLabelLink"
+void GTWidget::clickLabelLink(GUITestOpStatus &os, QWidget *label, int step, int indent){
+
+    QRect r = label->rect();
+
+    int left = r.left();
+    int right = r.right();
+    int top = r.top() + indent;
+    int bottom = r.bottom();
+    for(int i = left; i < right; i+=step){
+        for(int j = top; j < bottom; j+=step){
+            GTMouseDriver::moveTo(os, label->mapToGlobal(QPoint(i,j)));
+            if(label->cursor().shape() == Qt::PointingHandCursor){
+                GTGlobals::sleep(500);
+                GTMouseDriver::click(os);
+                return;
+            }
+        }
+    }
+    GT_CHECK(false, "label does not contain link");
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickWindowTitle"
+void GTWidget::clickWindowTitle(GUITestOpStatus &os, QWidget *window) {
+    GT_CHECK(NULL != window, "Window is NULL");
+
+    QStyleOptionTitleBar opt;
+    opt.initFrom(window);
+    const QRect titleLabelRect = window->style()->subControlRect(QStyle::CC_TitleBar, &opt, QStyle::SC_TitleBarLabel);
+    GTMouseDriver::moveTo(os, getWidgetGlobalTopLeftPoint(os, window) + titleLabelRect.center());
+    GTMouseDriver::click(os);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveWidgetTo"
+void GTWidget::moveWidgetTo(GUITestOpStatus &os, QWidget *window, const QPoint &point){
+    //QPoint(window->width()/2,3) - is hack
+    GTMouseDriver::moveTo(os, getWidgetGlobalTopLeftPoint(os, window) + QPoint(window->width()/2,3));
+    const QPoint p0 = getWidgetGlobalTopLeftPoint(os, window) + QPoint(window->width()/2,3);
+    const QPoint p1 = point + QPoint(window->width()/2,3);
+    GTMouseDriver::dragAndDrop(os, p0, p1);
+    GTGlobals::sleep(1000);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "resizeWidget"
+void GTWidget::resizeWidget(GUITestOpStatus &os, QWidget *widget, const QSize &size) {
+    GT_CHECK(NULL != widget, "Widget is NULL");
+
+    QRect displayRect = QApplication::desktop()->screenGeometry();
+    GT_CHECK( (displayRect.width() >= size.width()) && (displayRect.height() >= size.height()) , "Specified the size larger than the size of the screen");
+
+    bool neededPositionFound = false;
+    QSize oldSize = widget->size();
+
+    QPoint topLeftPos = getWidgetGlobalTopLeftPoint(os, widget) + QPoint(5, 5);
+    for (int i=0; i<5; i++){
+        GTMouseDriver::moveTo(os, topLeftPos);
+        QPoint newTopLeftPos = topLeftPos + QPoint(widget->frameGeometry().width() - 1, widget->frameGeometry().height() - 1) - QPoint(size.width(), size.height());
+        GTMouseDriver::dragAndDrop(os, topLeftPos, newTopLeftPos);
+        if (widget->size() != oldSize){
+            neededPositionFound = true;
+            break;
+        }else{
+            topLeftPos -= QPoint(1,1);
+        }
+    }
+    GT_CHECK(neededPositionFound, "Needed mouse position for resizing not found");
+
+    GTGlobals::sleep(1000);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getWidgetGlobalTopLeftPoint"
+QPoint GTWidget::getWidgetGlobalTopLeftPoint(GUITestOpStatus &os, QWidget *widget) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(NULL != widget, "Widget is NULL", QPoint());
+    return (widget->isWindow() ? widget->pos() : widget->parentWidget()->mapToGlobal(QPoint(0, 0)));
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+} //namespace
diff --git a/src/libs_3rdparty/humimit/src/primitives/GTWidget.h b/src/libs_3rdparty/humimit/src/primitives/GTWidget.h
new file mode 100644
index 0000000..68f5cbb
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/GTWidget.h
@@ -0,0 +1,86 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _HI_GUI_GTWIDGET_H_
+#define _HI_GUI_GTWIDGET_H_
+
+#include "GTGlobals.h"
+
+#include <QAbstractButton>
+#include <QPushButton>
+#include <QWidget>
+
+namespace HI {
+/*!
+ * \brief The class for working with QWidget primitive
+ */
+class HI_EXPORT GTWidget {
+public:
+    // fails if widget is NULL, not visible or not enabled; if p isNull, clicks on the center of widget
+    static void click(GUITestOpStatus &os, QWidget *w, Qt::MouseButton mouseButton = Qt::LeftButton, QPoint p = QPoint(), bool safe = true);
+
+    // fails if widget is NULL, GTWidget::click fails or widget hasn't got focus
+    static void setFocus(GUITestOpStatus &os, QWidget *w);
+
+    // finds widget with the given object name using given FindOptions. Parent widget is QMainWindow, if not set
+    static QWidget *findWidget(GUITestOpStatus &os, const QString &widgetName, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QPoint getWidgetCenter(GUITestOpStatus &os, QWidget* w);
+
+    static QAbstractButton *findButtonByText(GUITestOpStatus &os, const QString &text, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+
+    //returns color of point p in widget w coordinates
+    static QColor getColor(GUITestOpStatus &os, QWidget *widget, const QPoint &point);
+    static QPixmap getPixmap(GUITestOpStatus &os, QWidget *widget);
+    static QImage getImage(GUITestOpStatus &os, QWidget *widget);
+
+    //this method writes info about all widgets to opStatus
+    static void getAllWidgetsInfo(GUITestOpStatus &os, QWidget* parent=NULL);
+
+    static void close(GUITestOpStatus &os, QWidget *widget);
+    static void showMaximized(GUITestOpStatus &os, QWidget *widget);
+    static void showNormal(GUITestOpStatus &os, QWidget *widget);
+
+    static void clickLabelLink(GUITestOpStatus &os, QWidget* label, int step = 10, int indent = 0);
+    static void clickWindowTitle(GUITestOpStatus &os, QWidget *window);
+    static void moveWidgetTo(GUITestOpStatus &os, QWidget *window, const QPoint &point);
+    static void resizeWidget(GUITestOpStatus &os, QWidget *widget, const QSize &size);
+    static QPoint getWidgetGlobalTopLeftPoint(GUITestOpStatus &os, QWidget *widget);
+
+    #define GT_CLASS_NAME "GTWidget"
+    #define GT_METHOD_NAME "findWidget"
+    template<class T>
+    static T findExactWidget(GUITestOpStatus &os, const QString &widgetName, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& options= GTGlobals::FindOptions()){
+        T result = NULL;
+        QWidget* w = findWidget(os, widgetName, parentWidget, options);
+        result = qobject_cast<T>(w);
+        if(options.failIfNull == true){
+            GT_CHECK_RESULT(w != NULL, "widget " + widgetName + " not found", result);
+            GT_CHECK_RESULT(result != NULL, "widget of specefied class not found, but there is another widget with the same name, its class is: " + QString(w->metaObject()->className()), result);
+        }
+        return result;
+    }
+    #undef GT_METHOD_NAME
+    #undef GT_CLASS_NAME
+};
+
+} //namespace
+
+#endif
diff --git a/src/plugins/GUITestBase/src/runnables/qt/PopupChooser.cpp b/src/libs_3rdparty/humimit/src/primitives/PopupChooser.cpp
similarity index 80%
rename from src/plugins/GUITestBase/src/runnables/qt/PopupChooser.cpp
rename to src/libs_3rdparty/humimit/src/primitives/PopupChooser.cpp
index 448a011..7bf4b1c 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/PopupChooser.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/PopupChooser.cpp
@@ -19,27 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "PopupChooser.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
+#include "primitives/PopupChooser.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "primitives/GTMenu.h"
+#include "drivers/GTMouseDriver.h"
 
-#include <U2Core/U2OpStatusUtils.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMenu>
-#endif
-
-namespace U2 {
+#include <QApplication>
+#include <QMenu>
 
+namespace HI {
 #define GT_CLASS_NAME "PopupChooser"
 
 #define GT_METHOD_NAME "run"
-void PopupChooser::run() {
+void PopupChooser::commonScenario() {
     GTGlobals::sleep(1000);
     GTMouseDriver::release(os);
     QMenu* activePopupMenu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
@@ -48,38 +40,36 @@ void PopupChooser::run() {
     if (!namePath.isEmpty()) {
         GTMenu::clickMenuItemByName(os, activePopupMenu, namePath, useMethod);
     } else {
-        clickEsc();
+        clickEsc(os);
     }
 
     if (os.hasError()) {
-        clickEsc();
+        clickEsc(os);
     }
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickEsc"
-void PopupChooser::clickEsc() {
-    U2OpStatus2Log opStatus;
-    GTKeyboardDriver::keyClick(opStatus, GTKeyboardDriver::key["esc"]);
-    SAFE_POINT_OP(opStatus, );
+void PopupChooser::clickEsc(GUITestOpStatus &os) {
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
 }
 #undef GT_METHOD_NAME
 
 #undef GT_CLASS_NAME
 
-void PopupChooserByText::run()
+void PopupChooserByText::commonScenario()
 {
     GTGlobals::sleep(1000);
     GTMouseDriver::release(os);
     QMenu* activePopupMenu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
-    GTMenu::clickMenuItemByText(os, activePopupMenu, namePath, useMethod);
+    GTMenu::clickMenuItemByText(os, activePopupMenu, namePath, useMethod, matchFlag);
 }
 
 
 #define GT_CLASS_NAME "PopupChecker"
 
 #define GT_METHOD_NAME "run"
-PopupChecker::PopupChecker(U2OpStatus &os, CustomScenario *scenario) :
+PopupChecker::PopupChecker(GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup), scenario)
 {
 }
@@ -107,36 +97,36 @@ void PopupChecker::commonScenario() {
 
         if(options.testFlag(Exists)){
             GT_CHECK(act != NULL, "action '" + actName + "' not found");
-            uiLog.trace("options.testFlag(Exists)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(Exists)");
         }else{
             GT_CHECK(act == NULL, "action '" + actName + "' unexpectidly found");
         }
         if(options.testFlag(IsEnabled)){
             GT_CHECK(act->isEnabled(), "action '" + act->objectName() + "' is not enabled");
-            uiLog.trace("options.testFlag(IsEnabled)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsEnabled)");
         }
         if(options.testFlag(IsDisabled)){
             GT_CHECK(!act->isEnabled(), "action '" + act->objectName() + "' is enabled");
-            uiLog.trace("options.testFlag(IsDisabled");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsDisabled");
         }
         if(options.testFlag(IsChecable)){
             GT_CHECK(act->isCheckable(), "action '" + act->objectName() + "' is not checkable");
-            uiLog.trace("options.testFlag(IsChecable)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsChecable)");
         }
         if(options.testFlag(IsChecked)){
             GT_CHECK(act->isCheckable(), "action '" + act->objectName() + "' is not checked");
-            uiLog.trace("options.testFlag(IsChecked)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsChecked)");
         }
         for(int i = 0; i<escCount; i++){
-            PopupChooser::clickEsc();
+            PopupChooser::clickEsc(os);
             GTGlobals::sleep(300);
         }
     } else {
-        PopupChooser::clickEsc();
+        PopupChooser::clickEsc(os);
     }
 
     if (os.hasError()) {
-        PopupChooser::clickEsc();
+        PopupChooser::clickEsc(os);
     }
 }
 #undef GT_METHOD_NAME
@@ -146,12 +136,12 @@ void PopupChecker::commonScenario() {
 #define GT_CLASS_NAME "PopupCheckerByText"
 
 #define GT_METHOD_NAME "run"
-PopupCheckerByText::PopupCheckerByText(U2OpStatus &os, CustomScenario *scenario) :
+PopupCheckerByText::PopupCheckerByText(GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup), scenario)
 {
 }
 
-PopupCheckerByText::PopupCheckerByText(U2OpStatus &os,
+PopupCheckerByText::PopupCheckerByText(GUITestOpStatus &os,
                                        const QStringList &namePath,
                                        PopupChecker::CheckOptions options,
                                        GTGlobals::UseMethod useMethod) :
@@ -163,7 +153,7 @@ PopupCheckerByText::PopupCheckerByText(U2OpStatus &os,
 
 }
 
-PopupCheckerByText::PopupCheckerByText(U2OpStatus &os,
+PopupCheckerByText::PopupCheckerByText(GUITestOpStatus &os,
                                        const QList<QStringList> &namePaths,
                                        PopupChecker::CheckOptions options,
                                        GTGlobals::UseMethod useMethod) :
@@ -184,7 +174,7 @@ void PopupCheckerByText::commonScenario() {
     QAction* act;
 
     if (textPaths.isEmpty() || textPaths.first().isEmpty()) {
-        PopupChooser::clickEsc();
+        PopupChooser::clickEsc(os);
         return;
     }
 
@@ -204,33 +194,33 @@ void PopupCheckerByText::commonScenario() {
 
         if(options.testFlag(PopupChecker::Exists)){
             GT_CHECK(act != NULL, "action '" + actName + "' not found");
-            uiLog.trace("options.testFlag(Exists)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(Exists)");
         }else{
             GT_CHECK(act == NULL, "action '" + actName + "' unexpectidly found");
         }
         if(options.testFlag(PopupChecker::IsEnabled)){
             GT_CHECK(act->isEnabled(), "action '" + act->objectName() + "' is not enabled");
-            uiLog.trace("options.testFlag(IsEnabled)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsEnabled)");
         }
         if(options.testFlag(PopupChecker::IsDisabled)){
             GT_CHECK(!act->isEnabled(), "action '" + act->objectName() + "' is enabled");
-            uiLog.trace("options.testFlag(IsDisabled");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsDisabled");
         }
         if(options.testFlag(PopupChecker::IsChecable)){
             GT_CHECK(act->isCheckable(), "action '" + act->objectName() + "' is not checkable");
-            uiLog.trace("options.testFlag(IsChecable)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsChecable)");
         }
         if(options.testFlag(PopupChecker::IsChecked)){
             GT_CHECK(act->isCheckable(), "action '" + act->objectName() + "' is not checked");
-            uiLog.trace("options.testFlag(IsChecked)");
+            qDebug("GT_DEBUG_MESSAGE options.testFlag(IsChecked)");
         }
         for (int i = 0; i < escCount - 1; i++) {
-            PopupChooser::clickEsc();
+            PopupChooser::clickEsc(os);
             GTGlobals::sleep(300);
         }
     }
 
-    PopupChooser::clickEsc();
+    PopupChooser::clickEsc(os);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/runnables/qt/PopupChooser.h b/src/libs_3rdparty/humimit/src/primitives/PopupChooser.h
similarity index 68%
rename from src/plugins/GUITestBase/src/runnables/qt/PopupChooser.h
rename to src/libs_3rdparty/humimit/src/primitives/PopupChooser.h
index d0821ed..058ee79 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/PopupChooser.h
+++ b/src/libs_3rdparty/humimit/src/primitives/PopupChooser.h
@@ -19,39 +19,41 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_RUNNABLES_POPUP_CHOOSER_FILLER_H_
-#define _U2_GT_RUNNABLES_POPUP_CHOOSER_FILLER_H_
+#ifndef _HI_GT_RUNNABLES_POPUP_CHOOSER_FILLER_H_
+#define _HI_GT_RUNNABLES_POPUP_CHOOSER_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "GTGlobals.h"
+#include "utils/GTUtilsDialog.h"
 
-namespace U2 {
+namespace HI {
 
-    class PopupChooser : public Filler {
+class HI_EXPORT PopupChooser : public Filler {
         friend class PopupChecker;
         friend class PopupCheckerByText;
     public:
-        PopupChooser(U2OpStatus &_os, const QStringList &_namePath, GTGlobals::UseMethod _useMethod = GTGlobals::UseKey) //UseKey need for Ubuntu
+        PopupChooser(GUITestOpStatus &_os, const QStringList &_namePath, GTGlobals::UseMethod _useMethod = GTGlobals::UseKey) //UseKey need for Ubuntu
             :Filler(_os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup)), namePath(_namePath), useMethod(_useMethod){}
-        virtual void run();
+        virtual void commonScenario();
     protected:
         QStringList namePath;
         GTGlobals::UseMethod useMethod;
 
     private:
-        static void clickEsc();
+        static void clickEsc(GUITestOpStatus &_os);
     };
 
-    class PopupChooserByText : public Filler {
+class HI_EXPORT PopupChooserByText : public Filler {
     public:
-        PopupChooserByText(U2OpStatus &_os, const QStringList &_namePath, GTGlobals::UseMethod _useMethod = GTGlobals::UseKey) //UseKey need for Ubuntu
-            :Filler(_os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup)), namePath(_namePath), useMethod(_useMethod){}
-        virtual void run();
+        PopupChooserByText(GUITestOpStatus &_os, const QStringList &_namePath, GTGlobals::UseMethod _useMethod = GTGlobals::UseKey, Qt::MatchFlag _matchFlag = Qt::MatchExactly) //UseKey need for Ubuntu
+            :Filler(_os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup)), namePath(_namePath), useMethod(_useMethod), matchFlag(_matchFlag){}
+        virtual void commonScenario();
     protected:
         QStringList namePath;
         GTGlobals::UseMethod useMethod;
+        Qt::MatchFlag matchFlag;
     };
 
-    class PopupChecker : public Filler {
+class HI_EXPORT PopupChecker : public Filler {
     public:
         enum CheckOption{
             NotExists = 0,
@@ -62,8 +64,8 @@ namespace U2 {
             IsChecked = 16 | Exists | IsChecable
         };
         Q_DECLARE_FLAGS(CheckOptions, CheckOption)
-        PopupChecker(U2OpStatus &os, CustomScenario *scenario);
-        PopupChecker(U2OpStatus &_os, const QStringList &_namePath, CheckOptions _options = CheckOptions(IsEnabled),
+        PopupChecker(GUITestOpStatus &os, CustomScenario *scenario);
+        PopupChecker(GUITestOpStatus &_os, const QStringList &_namePath, CheckOptions _options = CheckOptions(IsEnabled),
                      GTGlobals::UseMethod _useMethod = GTGlobals::UseKey) //UseKey need for Ubuntu
             :Filler(_os, GUIDialogWaiter::WaitSettings(QString(), GUIDialogWaiter::Popup)), namePath(_namePath), options(_options), useMethod(_useMethod){}
         virtual void commonScenario();
@@ -74,14 +76,14 @@ namespace U2 {
     };
     Q_DECLARE_OPERATORS_FOR_FLAGS(PopupChecker::CheckOptions)
 
-    class PopupCheckerByText : public Filler {
+class HI_EXPORT PopupCheckerByText : public Filler {
     public:
-        PopupCheckerByText(U2OpStatus &os, CustomScenario *scenario);
-        PopupCheckerByText(U2OpStatus &os,
+        PopupCheckerByText(GUITestOpStatus &os, CustomScenario *scenario);
+        PopupCheckerByText(GUITestOpStatus &os,
                            const QStringList &namePath,
                            PopupChecker::CheckOptions options = PopupChecker::CheckOptions(PopupChecker::IsEnabled),
                            GTGlobals::UseMethod useMethod = GTGlobals::UseKey);  //UseKey need for Ubuntu
-        PopupCheckerByText(U2OpStatus &os, const QList<QStringList> &namePaths,
+        PopupCheckerByText(GUITestOpStatus &os, const QList<QStringList> &namePaths,
                            PopupChecker::CheckOptions _options = PopupChecker::CheckOptions(PopupChecker::IsEnabled),
                            GTGlobals::UseMethod useMethod = GTGlobals::UseKey);
 
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivate.cpp b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.cpp
similarity index 51%
rename from src/plugins/GUITestBase/src/api/private/GTMenuPrivate.cpp
rename to src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.cpp
index 57497b8..259b6e6 100644
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivate.cpp
+++ b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.cpp
@@ -19,51 +19,79 @@
  * MA 02110-1301, USA.
  */
 
-#include <QMainWindow>
-#include <QMenuBar>
-
-#include <U2Core/AppContext.h>
-
-#include <U2Gui/MainWindow.h>
-
 #include "GTMenuPrivate.h"
 #ifdef Q_OS_MAC
 #include "GTMenuPrivateMac.h"
 #endif
-#include "GTUtilsDialog.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "runnables/qt/PopupChooser.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "drivers/GTMouseDriver.h"
+#include "primitives/GTAction.h"
+#include "primitives/GTMainWindow.h"
+#include "primitives/PopupChooser.h"
+#include "utils/GTUtilsDialog.h"
 
-namespace U2 {
+#include <QMainWindow>
+#include <QMenuBar>
+
+namespace HI {
 
 #define GT_CLASS_NAME "GTMenu"
 
 #define GT_METHOD_NAME "clickMainMenuItem"
-void GTMenuPrivate::clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath, U2::GTGlobals::UseMethod method) {
+void GTMenuPrivate::clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method, Qt::MatchFlag matchFlag) {
     GT_CHECK(itemPath.count() > 1, QString("Menu item path is too short: { %1 }").arg(itemPath.join(" -> ")));
+
 #ifdef Q_OS_MAC
     Q_UNUSED(method);
-    GTMenuPrivateMac::clickMainMenuItem(os, itemPath);
+    GTMenuPrivateMac::clickMainMenuItem(os, itemPath, matchFlag);
 #else
     QStringList cuttedItemPath = itemPath;
     const QString menuName = cuttedItemPath.takeFirst();
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, cuttedItemPath, method));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, cuttedItemPath, method, matchFlag));
     showMainMenu(os, menuName, method);
 #endif
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "showMainMenu"
-void GTMenuPrivate::showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::UseMethod m) {
-    MainWindow *mw = AppContext::getMainWindow();
-    GT_CHECK(mw != NULL, "MainWindow is NULL");
-    QMainWindow *mainWindow = mw->getQMainWindow();
-    GT_CHECK(mainWindow != NULL, "QMainWindow is NULL");
+#define GT_METHOD_NAME "checkMainMenuItemState"
+void GTMenuPrivate::checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState) {
+    GT_CHECK(itemPath.count() > 1, QString("Menu item path is too short: { %1 }").arg(itemPath.join(" -> ")));
 
-    QAction *menu = mainWindow->findChild<QAction*>(menuName);
+#ifdef Q_OS_MAC
+    GTMenuPrivateMac::checkMainMenuItemState(os, itemPath, expectedState);
+#else
+    QStringList cuttedItemPath = itemPath;
+    const QString menuName = cuttedItemPath.takeFirst();
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, cuttedItemPath, expectedState, GTGlobals::UseMouse));
+    showMainMenu(os, menuName, GTGlobals::UseMouse);
+    GTGlobals::sleep(100);
+#endif
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "showMainMenu"
+void GTMenuPrivate::showMainMenu(GUITestOpStatus &os, const QString &menuName, GTGlobals::UseMethod m) {
+
+    QMainWindow* mainWindow = NULL;
+    QList<QAction*> resultList;
+    foreach(QWidget* parent, GTMainWindow::getMainWindowsAsWidget(os)){
+        QList<QAction*> list = parent->findChildren<QAction*>();
+        bool isContainMenu = false;
+        foreach(QAction* act, list){
+            QString name = act->text().replace('&',"");
+            if(name == menuName){
+                resultList<<act;
+                isContainMenu = true;
+            }
+        }
+        if (isContainMenu){
+            mainWindow = qobject_cast<QMainWindow*>(parent);
+        }
+    }
+    GT_CHECK_RESULT(resultList.count()!=0,"action not found", );
+    GT_CHECK_RESULT(resultList.count()<2, QString("There are %1 actions with this text").arg(resultList.count()), );
 
-    GT_CHECK(menu != NULL, QString("menu \"%1\" not found").arg(menuName));
+    QAction *menu = resultList.takeFirst();
 
     QPoint pos;
     QPoint gPos;
@@ -98,4 +126,4 @@ void GTMenuPrivate::showMainMenu(U2OpStatus &os, const QString &menuName, GTGlob
 
 #undef GT_CLASS_NAME
 
-}   // namespace U2
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivate.h b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.h
similarity index 60%
rename from src/plugins/GUITestBase/src/api/private/GTMenuPrivate.h
rename to src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.h
index ba997ec..7ef1c58 100644
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivate.h
+++ b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivate.h
@@ -19,22 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_MENU_PRIVATE_H_
-#define _U2_GT_MENU_PRIVATE_H_
+#ifndef _HI_GT_MENU_PRIVATE_H_
+#define _HI_GT_MENU_PRIVATE_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include "primitives/PopupChooser.h"
 
-namespace U2 {
+namespace HI {
 
 class GTMenuPrivate {
 public:
-    static void clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method = GTGlobals::UseMouse);
+    static void clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method = GTGlobals::UseMouse, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+    static void checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState);
 
 private:
-    static void showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::UseMethod m = GTGlobals::UseMouse);
+    static void showMainMenu(GUITestOpStatus &os, const QString &menuName, GTGlobals::UseMethod m = GTGlobals::UseMouse);
 
 };
 
-}   // namespace U2
+}   // namespace
 
-#endif // _U2_GT_MENU_PRIVATE_H_
+#endif
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.h
similarity index 60%
copy from src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
copy to src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.h
index e3ecea3..6f105c2 100644
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
+++ b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.h
@@ -27,21 +27,25 @@
 #import <AppKit/AppKit.h>
 #endif // __OBJC__
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include "primitives/PopupChooser.h"
 
-namespace U2 {
+namespace HI {
 
 /**
  * It is supposed that Cocoa is used on OSX
  */
 class GTMenuPrivateMac {
 public:
-    static void clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath);
+    static void clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, Qt::MatchFlag matchFlag = Qt::MatchExactly);
+    static void checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState);
 
 private:
 #ifdef __OBJC__
-    static NSMenu *clickMenuItem(U2OpStatus &os, NSMenu *menu, const QString &itemTitle);
-#endif // __OBJC__
+    static NSMenu *clickMenuItem(GUITestOpStatus &os, NSMenu *menu, const QString &itemTitle, Qt::MatchFlag matchFlag);
+    static NSMenuItem *getMenuItem(GUITestOpStatus &os, NSMenu *menu, const QString &itemTitle, Qt::MatchFlag matchFlag);
+    static void checkMenuItemState(GUITestOpStatus &os, NSMenu *containerMenu, const QString &itemTitle, PopupChecker::CheckOption expectedState);
+#endif // __OBJC__NSMenuItem
 };
 
 }   // namespace U2
diff --git a/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.mm b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.mm
new file mode 100644
index 0000000..c6765fa
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/primitives/private/GTMenuPrivateMac.mm
@@ -0,0 +1,164 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "GTMenuPrivateMac.h"
+
+namespace HI {
+
+#ifdef __OBJC__
+
+#define GT_CLASS_NAME "GTMenuPrivateMac"
+class U2CocoaAutoReleasePool {
+public:
+    U2CocoaAutoReleasePool();
+    ~U2CocoaAutoReleasePool();
+
+private:
+    NSAutoreleasePool *pool;
+};
+
+U2CocoaAutoReleasePool::U2CocoaAutoReleasePool() {
+    pool = [[NSAutoreleasePool alloc] init];
+}
+
+U2CocoaAutoReleasePool::~U2CocoaAutoReleasePool() {
+    [pool release];
+}
+
+#define GT_METHOD_NAME "clickMainMenuItem"
+void GTMenuPrivateMac::clickMainMenuItem(GUITestOpStatus &os, const QStringList &itemPath, Qt::MatchFlag matchFlag) {
+    U2CocoaAutoReleasePool pool;
+    Q_UNUSED(pool);
+
+    NSMenu *menu = [NSApp mainMenu];
+    foreach (const QString &itemTitle, itemPath) {
+        GT_CHECK(NULL != menu, QString("Menu not found: '%1'").arg(itemTitle));
+        menu = clickMenuItem(os, menu, itemTitle, matchFlag);
+        GTGlobals::sleep(100);
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "checkMainMenuItemState"
+void GTMenuPrivateMac::checkMainMenuItemState(GUITestOpStatus &os, const QStringList &itemPath, PopupChecker::CheckOption expectedState) {
+    U2CocoaAutoReleasePool pool;
+    Q_UNUSED(pool);
+
+    const QStringList itemContainerMenuPath = itemPath.mid(0, itemPath.size() - 1);
+    NSMenu *menu = [NSApp mainMenu];
+    foreach (const QString &itemTitle, itemContainerMenuPath) {
+        GT_CHECK(NULL != menu, QString("Menu not found: '%1'").arg(itemTitle));
+        menu = clickMenuItem(os, menu, itemTitle, Qt::MatchExactly);
+    }
+
+    checkMenuItemState(os, menu, itemPath.last(), expectedState);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickMenuItem"
+NSMenu * GTMenuPrivateMac::clickMenuItem(GUITestOpStatus &os, NSMenu *menu, const QString &itemTitle, Qt::MatchFlag matchFlag) {
+    NSMenuItem *item = getMenuItem(os, menu, itemTitle, matchFlag);
+    if (NULL == item) {
+        QStringList items;
+        for (NSInteger i = 0, itemsCount = [menu  numberOfItems]; i < itemsCount; i++) {
+            items << QString::fromNSString([[menu itemAtIndex:i] title]);
+        }
+        GT_CHECK_RESULT(NULL != item, QString("Menu item not found: '%1', available items: %2")
+                        .arg(itemTitle).arg(items.join(", ")), NULL);
+    }
+    NSMenu *submenu = [item submenu];
+    [menu performActionForItemAtIndex:[menu indexOfItem:item]];
+    return submenu;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getMenuItem"
+NSMenuItem *GTMenuPrivateMac::getMenuItem(GUITestOpStatus &os, NSMenu *menu, const QString &itemTitle, Qt::MatchFlag matchFlag) {
+    switch (matchFlag) {
+    case Qt::MatchExactly:
+        return [menu itemWithTitle:(itemTitle.toNSString())];
+    case Qt::MatchContains: {
+        NSInteger itemsCount = [menu numberOfItems];
+        for (NSInteger i = 0; i < itemsCount; i++) {
+            NSMenuItem *menuItem = [menu itemAtIndex:i];
+            if (QString::fromNSString([menuItem title]).contains(itemTitle)) {
+                return menuItem;
+            }
+        }
+        break;
+    }
+    default:
+        GT_CHECK_RESULT(false, "Match flag is not supported", NULL);
+    }
+    return NULL;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getMenuItem"
+void GTMenuPrivateMac::checkMenuItemState(GUITestOpStatus &os, NSMenu *containerMenu, const QString &itemTitle, PopupChecker::CheckOption expectedState) {
+    switch (expectedState) {
+    case PopupChecker::NotExists: {
+        NSMenuItem *menuItem = getMenuItem(os, containerMenu, itemTitle, Qt::MatchExactly);
+        GT_CHECK(NULL == menuItem, QString("A menu item unexpectedly exists: %1").arg(itemTitle));
+        break;
+    }
+
+    case PopupChecker::Exists: {
+        NSMenuItem *menuItem = getMenuItem(os, containerMenu, itemTitle, Qt::MatchExactly);
+        GT_CHECK(NULL != menuItem, QString("A menu item unexpectedly doesn't exist: %1").arg(itemTitle));
+        break;
+    }
+
+    case PopupChecker::IsEnabled: {
+        NSMenuItem *menuItem = getMenuItem(os, containerMenu, itemTitle, Qt::MatchExactly);
+        GT_CHECK(NULL != menuItem, QString("A menu item unexpectedly doesn't exist: %1").arg(itemTitle));
+        GT_CHECK([menuItem isEnabled], QString("A menu item is unexpectedly disabled: %1").arg(itemTitle));
+        break;
+    }
+
+    case PopupChecker::IsDisabled: {
+        NSMenuItem *menuItem = getMenuItem(os, containerMenu, itemTitle, Qt::MatchExactly);
+        GT_CHECK(NULL != menuItem, QString("A menu item unexpectedly doesn't exist: %1").arg(itemTitle));
+        GT_CHECK(![menuItem isEnabled], QString("A menu item is unexpectedly enabled: %1").arg(itemTitle));
+        break;
+    }
+
+    case PopupChecker::IsChecable: {
+        GT_CHECK(false, "Not implemented. Do you really need to check is menu item checkable or not?");
+        break;
+    }
+
+    case PopupChecker::IsChecked: {
+        NSMenuItem *menuItem = getMenuItem(os, containerMenu, itemTitle, Qt::MatchExactly);
+        GT_CHECK(NULL != menuItem, QString("A menu item unexpectedly doesn't exist: %1").arg(itemTitle));
+        GT_CHECK(NSOnState == [menuItem state], QString("A menu item is unexpectedly not checked: %1").arg(itemTitle));
+        break;
+    }
+    }
+}
+
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}   // namespace
+
+#endif // __OBJC__
diff --git a/src/libs_3rdparty/humimit/src/system/GTClipboard.cpp b/src/libs_3rdparty/humimit/src/system/GTClipboard.cpp
new file mode 100644
index 0000000..db4a850
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/system/GTClipboard.cpp
@@ -0,0 +1,139 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 "system/GTClipboard.h"
+#ifdef Q_OS_WIN
+#include "utils/GTThread.h"
+#endif
+
+#include <QApplication>
+#include <QClipboard>
+#include <QFileInfo>
+#include <QMimeData>
+#include <QUrl>
+
+namespace HI {
+
+#define GT_CLASS_NAME "GTClipboard"
+
+#define GT_METHOD_NAME "text"
+QString GTClipboard::text(GUITestOpStatus &os) {
+    GTGlobals::sleep(300);
+// check that clipboard contains text
+    QClipboard *clipboard = QApplication::clipboard();
+
+    GT_CHECK_RESULT(clipboard != NULL, "Clipboard is NULL", "");
+    const QMimeData *mimeData = clipboard->mimeData();
+    GT_CHECK_RESULT(mimeData != NULL, "Clipboard MimeData is NULL", "");
+
+    GT_CHECK_RESULT(mimeData->hasText() == true, "Clipboard doesn't contain text data", "");
+    QString clipboardText = mimeData->text();
+// need to clear clipboard, UGENE will crash on close otherwise because of Qt assert
+    clipboard->clear();
+
+    return clipboardText;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setText"
+void GTClipboard::setText(GUITestOpStatus &os, QString text ){
+#ifdef Q_OS_WIN
+	//On windows clipboard actions should be done in main thread
+    class Scenario : public CustomScenario {
+	public:
+		Scenario(const QString &_text) : text(_text){}
+        void run(GUITestOpStatus &os) {
+			Q_UNUSED(os);
+			QClipboard *clipboard = QApplication::clipboard();
+			clipboard->clear();
+			clipboard->setText(text);
+			GTGlobals::sleep();
+		}
+	private:
+		QString text;
+	};
+
+	GTThread::runInMainThread(os, new Scenario(text));
+#else
+    Q_UNUSED(os);
+    QClipboard *clipboard = QApplication::clipboard();
+    clipboard->clear();
+    clipboard->setText(text);
+	GTGlobals::sleep();
+#endif
+}
+
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setUrls"
+void GTClipboard::setUrls(GUITestOpStatus &os, const QList<QString>& urls ){
+    Q_UNUSED(os);
+    QList<QUrl> updated;
+    foreach (QString url, urls){
+        QFileInfo fi (url);
+        if (fi.makeAbsolute()){
+            QString updatedurl = fi.absoluteFilePath();
+            updatedurl.prepend("file://");
+            updated.append(updatedurl);
+        }else{
+            os.setError("cannot make an absolute path");
+            return;
+        }
+    }
+    QMimeData *urlMime = new QMimeData();
+    urlMime->setUrls(updated);
+
+    QClipboard *clipboard = QApplication::clipboard();
+    clipboard->clear();
+    clipboard->setMimeData(urlMime);
+}
+
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clear"
+void GTClipboard::clear(GUITestOpStatus &os){
+#ifdef Q_OS_WIN
+    //On windows clipboard actions should be done in main thread
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(){}
+        void run(GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            QClipboard *clipboard = QApplication::clipboard();
+            clipboard->clear();
+            GTGlobals::sleep(500);
+        }
+    };
+
+    GTThread::runInMainThread(os, new Scenario());
+#else
+    Q_UNUSED(os);
+    QClipboard *clipboard = QApplication::clipboard();
+    clipboard->clear();
+    GTGlobals::sleep(500);
+#endif
+}
+#undef GT_METHOD_NAME
+
+
+#undef GT_CLASS_NAME
+
+} //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTClipboard.h b/src/libs_3rdparty/humimit/src/system/GTClipboard.h
similarity index 73%
rename from src/plugins/GUITestBase/src/api/GTClipboard.h
rename to src/libs_3rdparty/humimit/src/system/GTClipboard.h
index 256441b..be63abd 100644
--- a/src/plugins/GUITestBase/src/api/GTClipboard.h
+++ b/src/libs_3rdparty/humimit/src/system/GTClipboard.h
@@ -19,19 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_CLIPBOARD_H_
-#define _U2_GT_CLIPBOARD_H_
+#ifndef _HI_GT_CLIPBOARD_H_
+#define _HI_GT_CLIPBOARD_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
-namespace U2 {
+namespace HI {
 
-class GTClipboard {
+class HI_EXPORT GTClipboard {
 public:
     // fails if can't get clipboard or clipboard doesn't contain text data
-    static QString text(U2OpStatus &os);
+    static QString text(GUITestOpStatus &os);
 
-    static void setText(U2OpStatus &os, QString text);
+    static void setText(GUITestOpStatus &os, QString text);
+
+    static void setUrls(GUITestOpStatus &os, const QList<QString>& urls);
+
+    static void clear(GUITestOpStatus &os);
 };
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTFile.cpp b/src/libs_3rdparty/humimit/src/system/GTFile.cpp
similarity index 86%
rename from src/plugins/GUITestBase/src/api/GTFile.cpp
rename to src/libs_3rdparty/humimit/src/system/GTFile.cpp
index 316adf6..0775a22 100644
--- a/src/plugins/GUITestBase/src/api/GTFile.cpp
+++ b/src/libs_3rdparty/humimit/src/system/GTFile.cpp
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTFile.h"
-#include <QtCore/QDir>
+#include "system/GTFile.h"
+#include <QDir>
 
 #ifdef Q_OS_WIN
 
@@ -118,7 +118,7 @@ static void qt2WinPermissions( QFile::Permissions p, DWORD &allowedPermissions,
 
 #endif
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "PermissionsSetter"
 
@@ -144,7 +144,7 @@ bool PermissionsSetter::setPermissions(const QString& path, QFile::Permissions p
 }
 
 #define GT_METHOD_NAME "setReadWrite"
-void PermissionsSetter::setReadWrite(U2OpStatus &os, const QString &path){
+void PermissionsSetter::setReadWrite(GUITestOpStatus &os, const QString &path){
     QFile::Permissions p = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | QFile::ReadUser | QFile::WriteUser |
             QFile::ExeUser | QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup | QFile::ReadOther | QFile::ExeOther;
     PermissionsSetter setter;
@@ -154,7 +154,7 @@ void PermissionsSetter::setReadWrite(U2OpStatus &os, const QString &path){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setReadOnly"
-void PermissionsSetter::setReadOnly(U2OpStatus &os, const QString &path){
+void PermissionsSetter::setReadOnly(GUITestOpStatus &os, const QString &path){
     QFile::Permissions p = QFile::ReadOwner | QFile::ExeOwner | QFile::ReadUser |
             QFile::ExeUser | QFile::ReadGroup | QFile::ExeGroup | QFile::ReadOther | QFile::ExeOther;
     bool set = setPermissions(path, p);
@@ -164,15 +164,21 @@ void PermissionsSetter::setReadOnly(U2OpStatus &os, const QString &path){
 
 bool PermissionsSetter::setRecursive(const QString& path, QFile::Permissions perm) {
     QFileInfo fileInfo(path);
-    CHECK(fileInfo.exists(), false);
-    CHECK(!fileInfo.isSymLink(), false);
+    if (!(fileInfo.exists())) {
+        return false;
+    }
+    if (fileInfo.isSymLink()) {
+        return false;
+    }
 
     if (fileInfo.isDir()) {
         QDir dir(path);
         foreach (const QString& entryPath, dir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks)) {
             setOnce(path + "/" + entryPath, perm);
             bool res = setRecursive(path + "/" + entryPath, perm);
-            CHECK(res, res);
+            if(!res){
+                return res;
+            }
         }
     }
 
@@ -183,8 +189,12 @@ bool PermissionsSetter::setRecursive(const QString& path, QFile::Permissions per
 
 bool PermissionsSetter::setOnce( const QString &path, QFile::Permissions perm, bool savePreviousState ) {
     QFileInfo fileInfo( path );
-    CHECK( fileInfo.exists( ), false );
-    CHECK( !fileInfo.isSymLink( ), false );
+    if (!(fileInfo.exists())) {
+        return false;
+    }
+    if (fileInfo.isSymLink()) {
+        return false;
+    }
 
     QFile file( path );
     QFile::Permissions p = file.permissions( );
@@ -222,6 +232,16 @@ bool PermissionsSetter::setOnce( const QString &path, QFile::Permissions perm, b
 #endif
 }
 
+#define GT_METHOD_NAME "setReadOnlyFlag"
+void PermissionsSetter::setReadOnlyFlag(GUITestOpStatus &os, const QString& path) {
+#ifdef Q_OS_WIN
+    GT_CHECK(SetFileAttributesW(reinterpret_cast<LPCWSTR>(path.utf16()), FILE_ATTRIBUTE_READONLY), 
+        "Read flag could not be set");
+#else
+    setReadOnly(os, path);
+#endif
+}
+#undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "GTFile"
@@ -229,7 +249,7 @@ bool PermissionsSetter::setOnce( const QString &path, QFile::Permissions perm, b
 const QString GTFile::backupPostfix = "_GT_backup";
 
 #define GT_METHOD_NAME "equals"
-bool GTFile::equals(U2OpStatus &os, const QString& path1, const QString& path2) {
+bool GTFile::equals(GUITestOpStatus &os, const QString& path1, const QString& path2) {
 
     QFile f1(path1);
     QFile f2(path2);
@@ -247,7 +267,7 @@ bool GTFile::equals(U2OpStatus &os, const QString& path1, const QString& path2)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSize"
-qint64 GTFile::getSize(U2OpStatus &os, const QString &path){
+qint64 GTFile::getSize(GUITestOpStatus &os, const QString &path){
     QFile f(path);
     bool ok = f.open(QIODevice::ReadOnly);
     GT_CHECK_RESULT(ok, "file " + path + "not found",-1);
@@ -259,7 +279,7 @@ qint64 GTFile::getSize(U2OpStatus &os, const QString &path){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "copy"
-void GTFile::copy(U2OpStatus &os, const QString& from, const QString& to) {
+void GTFile::copy(GUITestOpStatus &os, const QString& from, const QString& to) {
 
     QFile f2(to);
     bool ok = f2.open(QIODevice::ReadOnly);
@@ -273,7 +293,7 @@ void GTFile::copy(U2OpStatus &os, const QString& from, const QString& to) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "copyDir"
-void GTFile::copyDir(U2OpStatus &os, const QString& dirToCopy, const QString& dirToPaste) {
+void GTFile::copyDir(GUITestOpStatus &os, const QString& dirToCopy, const QString& dirToPaste) {
 
     QDir from;
     from.setFilter(QDir::Hidden | QDir::AllDirs | QDir::Files);
@@ -325,7 +345,7 @@ void GTFile::removeDir(QString dirName)
 void GTFile::removeDir(QString dirName)
 {
     QDir dir(dirName);
-    coreLog.trace("removing dir: " + dirName);
+    qDebug("GT_DEBUG_MESSAGE removing dir: %s", dirName.toLocal8Bit().constData());
 
     foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden)) {
         QString fileName = fileInfo.fileName();
@@ -344,7 +364,7 @@ void GTFile::removeDir(QString dirName)
     }
     dir.rmdir(dir.absoluteFilePath(dirName));
 
-    coreLog.trace("directory removed: " + dirName);
+    qDebug("GT_DEBUG_MESSAGE directory removed: %s", dirName.toLocal8Bit().constData());
 
 }
 #endif
@@ -352,21 +372,21 @@ void GTFile::removeDir(QString dirName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "backup"
-void GTFile::backup(U2OpStatus &os, const QString& path) {
+void GTFile::backup(GUITestOpStatus &os, const QString& path) {
 
     copy(os, path, path + backupPostfix);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "backupDir"
-void GTFile::backupDir(U2OpStatus &os, const QString& path) {
+void GTFile::backupDir(GUITestOpStatus &os, const QString& path) {
 
     copyDir(os, path, path + backupPostfix);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "restore"
-void GTFile::restore(U2OpStatus &os, const QString& path) {
+void GTFile::restore(GUITestOpStatus &os, const QString& path) {
 
     QFile backupFile(path + backupPostfix);
 
@@ -385,7 +405,7 @@ void GTFile::restore(U2OpStatus &os, const QString& path) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "restoreDir"
-void GTFile::restoreDir(U2OpStatus &os, const QString& path) {
+void GTFile::restoreDir(GUITestOpStatus &os, const QString& path) {
     QDir backupDir(path + backupPostfix);
     bool exists = backupDir.exists();
     if(!exists){
@@ -404,14 +424,14 @@ void GTFile::restoreDir(U2OpStatus &os, const QString& path) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "check"
-bool GTFile::check(U2OpStatus &/*os*/, const QString& path) {
+bool GTFile::check(GUITestOpStatus &/*os*/, const QString& path) {
     QFile file(path);
     return file.exists();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "create"
-void GTFile::create(U2OpStatus &os, const QString &filePath) {
+void GTFile::create(GUITestOpStatus &os, const QString &filePath) {
     Q_UNUSED(os);
     bool success = QFile(filePath).open(QIODevice::WriteOnly);
     GT_CHECK(success, "Can't open file to write");
@@ -419,7 +439,7 @@ void GTFile::create(U2OpStatus &os, const QString &filePath) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "readAll"
-QByteArray GTFile::readAll(U2OpStatus &os, const QString &filePath) {
+QByteArray GTFile::readAll(GUITestOpStatus &os, const QString &filePath) {
     Q_UNUSED(os);
     QFile file(filePath);
     const bool opened = file.open(QFile::ReadOnly);
@@ -428,7 +448,6 @@ QByteArray GTFile::readAll(U2OpStatus &os, const QString &filePath) {
     return file.readAll();
 }
 #undef GT_METHOD_NAME
-
 #undef GT_CLASS_NAME
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTFile.h b/src/libs_3rdparty/humimit/src/system/GTFile.h
similarity index 63%
rename from src/plugins/GUITestBase/src/api/GTFile.h
rename to src/libs_3rdparty/humimit/src/system/GTFile.h
index b571ad1..d5c4a7f 100644
--- a/src/plugins/GUITestBase/src/api/GTFile.h
+++ b/src/libs_3rdparty/humimit/src/system/GTFile.h
@@ -19,25 +19,25 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_FILE_H_
-#define _U2_GT_FILE_H_
+#ifndef _HI_GT_FILE_H_
+#define _HI_GT_FILE_H_
 
-#include "api/GTGlobals.h"
-#include <QtCore/QFile>
+#include "GTGlobals.h"
+#include <QFile>
 
-namespace U2 {
+namespace HI {
 
-class PermissionsSetter {
+class HI_EXPORT PermissionsSetter {
     // If UGENE crash in the test, permissions won't be restored.
 public:
     PermissionsSetter();
     ~PermissionsSetter();
 
 
-    static void setReadWrite(U2OpStatus &os, const QString& path);
-    void setReadOnly(U2OpStatus &os, const QString& path);
-
+    static void setReadWrite(GUITestOpStatus &os, const QString& path);
+    void setReadOnly(GUITestOpStatus &os, const QString& path);
 
+    void setReadOnlyFlag(GUITestOpStatus &os, const QString& path);
 private:
     bool setPermissions(const QString& path, QFile::Permissions perm, bool recursive = true);
     bool setRecursive(const QString& path, QFile::Permissions perm);
@@ -46,40 +46,40 @@ private:
     QMap<QString, QFile::Permissions> previousState;
 };
 
-class GTFile {
+class HI_EXPORT GTFile {
 public:
-    static bool equals(U2OpStatus &os, const QString&, const QString&);
+    static bool equals(GUITestOpStatus &os, const QString&, const QString&);
 
-    static qint64 getSize(U2OpStatus &os, const QString&);
+    static qint64 getSize(GUITestOpStatus &os, const QString&);
 
     // backup file to the file with backupPostfix. fail the given file can't be opened
-    static void backup(U2OpStatus &os, const QString&);
+    static void backup(GUITestOpStatus &os, const QString&);
 
     // backup directory to the file with backupPostfix
-    static void backupDir(U2OpStatus &os, const QString&);
+    static void backupDir(GUITestOpStatus &os, const QString&);
 
     // copy file removing target file if exist
-    static void copy(U2OpStatus &os, const QString& from, const QString& to);
+    static void copy(GUITestOpStatus &os, const QString& from, const QString& to);
 
     // copy directory entries removing target file if exist
-    static void copyDir(U2OpStatus &os, const QString& dirToCopy, const QString& dirToPaste);
+    static void copyDir(GUITestOpStatus &os, const QString& dirToCopy, const QString& dirToPaste);
 
     // copy file removing target file if exist
     static void removeDir(QString dirName);
 
     // restores file and deletes backup. fail if there is no backup or can't write to the given file
-    static void restore(U2OpStatus &os, const QString&);
+    static void restore(GUITestOpStatus &os, const QString&);
 
     // restores file and deletes backup. fail if there is no backup or can't write to the given file
-    static void restoreDir(U2OpStatus &os, const QString&);
+    static void restoreDir(GUITestOpStatus &os, const QString&);
 
     // checks if file exists
-    static bool check(U2OpStatus &os, const QString&);
+    static bool check(GUITestOpStatus &os, const QString&);
 
     // creates a new empty file, rewrite the file if it already exists
-    static void create(U2OpStatus &os, const QString &filePath);
+    static void create(GUITestOpStatus &os, const QString &filePath);
 
-    static QByteArray readAll(U2OpStatus &os, const QString &filePath);
+    static QByteArray readAll(GUITestOpStatus &os, const QString &filePath);
 
     static const QString backupPostfix;
 };
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardUtils.cpp b/src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.cpp
similarity index 85%
rename from src/plugins/GUITestBase/src/api/GTKeyboardUtils.cpp
rename to src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.cpp
index 042d071..385c8bd 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardUtils.cpp
+++ b/src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.cpp
@@ -19,12 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTKeyboardDriver.h"
-#include "GTKeyboardUtils.h"
+#include "utils/GTKeyboardUtils.h"
 
-namespace U2 {
+namespace HI {
 
-void GTKeyboardUtils::selectAll(U2OpStatus &os)
+void GTKeyboardUtils::selectAll(GUITestOpStatus &os)
 {
 #ifndef Q_OS_MAC
     int modifiers = GTKeyboardDriver::key["ctrl"];
@@ -35,7 +34,7 @@ void GTKeyboardUtils::selectAll(U2OpStatus &os)
     GTKeyboardDriver::keyClick(os, 'a', modifiers);
 }
 
-void GTKeyboardUtils::copy(U2OpStatus &os)
+void GTKeyboardUtils::copy(GUITestOpStatus &os)
 {
 #ifndef Q_OS_MAC
     int modifiers = GTKeyboardDriver::key["ctrl"];
@@ -46,7 +45,7 @@ void GTKeyboardUtils::copy(U2OpStatus &os)
     GTKeyboardDriver::keyClick(os, 'c', modifiers);
 }
 
-void GTKeyboardUtils::paste(U2OpStatus &os)
+void GTKeyboardUtils::paste(GUITestOpStatus &os)
 {
 #ifndef Q_OS_MAC
     int modifiers = GTKeyboardDriver::key["ctrl"];
@@ -57,7 +56,7 @@ void GTKeyboardUtils::paste(U2OpStatus &os)
     GTKeyboardDriver::keyClick(os, 'v', modifiers);
 }
 
-void GTKeyboardUtils::cut(U2OpStatus &os)
+void GTKeyboardUtils::cut(GUITestOpStatus &os)
 {
 #ifndef Q_OS_MAC
     int modifiers = GTKeyboardDriver::key["ctrl"];
@@ -68,4 +67,4 @@ void GTKeyboardUtils::cut(U2OpStatus &os)
     GTKeyboardDriver::keyClick(os, 'x', modifiers);
 }
 
-} // namespace U2
+} // namespace
diff --git a/src/plugins/GUITestBase/src/api/GTKeyboardUtils.h b/src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.h
similarity index 64%
rename from src/plugins/GUITestBase/src/api/GTKeyboardUtils.h
rename to src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.h
index 78e0395..96802b2 100644
--- a/src/plugins/GUITestBase/src/api/GTKeyboardUtils.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTKeyboardUtils.h
@@ -22,19 +22,21 @@
 #ifndef GTKEYBOARD_UTILS_H
 #define GTKEYBOARD_UTILS_H
 
-#include "GTKeyboardDriver.h"
-#include "api/GTGlobals.h"
+#include "drivers/GTKeyboardDriver.h"
+#include "GTGlobals.h"
 
-namespace U2 {
-
-class GTKeyboardUtils {
+namespace HI {
+/*!
+ * \brief The class contains the most commonly used keyboard hotkeys
+ */
+class HI_EXPORT GTKeyboardUtils {
 public:
-    static void selectAll(U2OpStatus&); // ctrl (or cmd on MacOS) + A
-    static void copy(U2OpStatus&);      // ctrl (or cmd on MacOS) + C
-    static void paste(U2OpStatus&);     // ctrl (or cmd on MacOS) + V
-    static void cut(U2OpStatus&);       // ctrl (or cmd on MacOS) + X
+    static void selectAll(GUITestOpStatus&); // ctrl (or cmd on MacOS) + A
+    static void copy(GUITestOpStatus&);      // ctrl (or cmd on MacOS) + C
+    static void paste(GUITestOpStatus&);     // ctrl (or cmd on MacOS) + V
+    static void cut(GUITestOpStatus&);       // ctrl (or cmd on MacOS) + X
 };
 
-} // namespace U2
+} // namespace
 
 #endif
diff --git a/src/plugins/GUITestBase/src/api/GTMouse.cpp b/src/libs_3rdparty/humimit/src/utils/GTMouseUtils.cpp
similarity index 83%
rename from src/plugins/GUITestBase/src/api/GTMouse.cpp
rename to src/libs_3rdparty/humimit/src/utils/GTMouseUtils.cpp
index 4ede63c..d1f3900 100644
--- a/src/plugins/GUITestBase/src/api/GTMouse.cpp
+++ b/src/libs_3rdparty/humimit/src/utils/GTMouseUtils.cpp
@@ -19,20 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef U2_GUI_GTMOUSE_H
-#define U2_GUI_GTMOUSE_H
-
-#include "GTMouse.h"
-#include "api/GTGlobals.h"
-#include "GTMouseDriver.h"
+#include "GTMouseUtils.h"
+#include "GTGlobals.h"
+#include "drivers/GTMouseDriver.h"
 #include <QtGui/QCursor>
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTMouse"
 
 #define GT_METHOD_NAME "moveCursorToWidget"
-void GTMouse::moveCursorToWidget(U2OpStatus &os, QWidget *widget) {
+void GTMouseUtils::moveCursorToWidget(GUITestOpStatus &os, QWidget *widget) {
     GT_CHECK(widget != NULL, "Provided widget is null");
     QPoint widgetCenter = widget->rect().center();
     GTMouseDriver::moveTo(os, widgetCenter);
@@ -40,7 +37,7 @@ void GTMouse::moveCursorToWidget(U2OpStatus &os, QWidget *widget) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "moveCursorOutOfWidget"
-void GTMouse::moveCursorOutOfWidget(U2OpStatus &os, QWidget *widget) {
+void GTMouseUtils::moveCursorOutOfWidget(GUITestOpStatus &os, QWidget *widget) {
     GT_CHECK(widget != NULL, "Provided widget is null");
     QPoint currentPosition = QCursor::pos();
     GT_CHECK(widget->rect().contains(currentPosition, false), "Cursor not over widget");
@@ -52,5 +49,3 @@ void GTMouse::moveCursorOutOfWidget(U2OpStatus &os, QWidget *widget) {
 #undef GT_CLASS_NAME
 
 }
-
-#endif // U2_GUI_GTMOUSE_H
diff --git a/src/plugins/GUITestBase/src/api/GTMouse.h b/src/libs_3rdparty/humimit/src/utils/GTMouseUtils.h
similarity index 77%
rename from src/plugins/GUITestBase/src/api/GTMouse.h
rename to src/libs_3rdparty/humimit/src/utils/GTMouseUtils.h
index 9d9217e..a8303cf 100644
--- a/src/plugins/GUITestBase/src/api/GTMouse.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTMouseUtils.h
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef U2_GUI_GTMOUSE_H_
-#define U2_GUI_GTMOUSE_H_
+#ifndef HI_GUI_GTMOUSE_H_
+#define HI_GUI_GTMOUSE_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QWidget>
 #else
@@ -30,15 +30,15 @@
 #endif
 
 
-namespace U2 {
+namespace HI {
 
-class GTMouse {
+class HI_EXPORT GTMouseUtils {
 public:
 
-    static void moveCursorToWidget(U2OpStatus &os, QWidget *widget);
-    static void moveCursorOutOfWidget(U2OpStatus &os, QWidget *widget);
+    static void moveCursorToWidget(GUITestOpStatus &os, QWidget *widget);
+    static void moveCursorOutOfWidget(GUITestOpStatus &os, QWidget *widget);
 
 };
 
 }
-#endif // U2_GUI_GTMOUSE_H
+#endif
diff --git a/src/libs_3rdparty/humimit/src/utils/GTThread.cpp b/src/libs_3rdparty/humimit/src/utils/GTThread.cpp
new file mode 100644
index 0000000..f951f94
--- /dev/null
+++ b/src/libs_3rdparty/humimit/src/utils/GTThread.cpp
@@ -0,0 +1,70 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <core/MainThreadRunnable.h>
+#include "core/MainThreadTimer.h"
+
+#include "GTGlobals.h"
+#include "utils/GTThread.h"
+
+namespace HI {
+
+#define GT_CLASS_NAME "ThreadWaiter"
+const qint64 TIMER_INTERVAL = 100;
+
+ThreadWaiter::ThreadWaiter(GUITestOpStatus &os) :
+    os(os),
+    startValue(0),
+    endValue(0)
+{
+}
+
+#define GT_METHOD_NAME "wait"
+void ThreadWaiter::wait() {
+    MainThreadTimer mainThreadTimer(TIMER_INTERVAL);
+    startValue = mainThreadTimer.getCounter();
+    while (endValue <= startValue) {
+        GTGlobals::sleep(TIMER_INTERVAL);
+        endValue = mainThreadTimer.getCounter();
+    }
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+#define GT_CLASS_NAME "GTThread"
+
+#define GT_METHOD_NAME "waitForMainThread"
+void GTThread::waitForMainThread(GUITestOpStatus &os) {
+    ThreadWaiter waiter(os);
+    waiter.wait();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "runInMainThread"
+void GTThread::runInMainThread(GUITestOpStatus &os, CustomScenario *scenario) {
+    MainThreadRunnable::runInMainThread(os, scenario);
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}   // namespace
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h b/src/libs_3rdparty/humimit/src/utils/GTThread.h
similarity index 61%
copy from src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
copy to src/libs_3rdparty/humimit/src/utils/GTThread.h
index e3ecea3..c362dee 100644
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTThread.h
@@ -19,31 +19,34 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_MENU_PRIVATE_MAC_H_
-#define _U2_GT_MENU_PRIVATE_MAC_H_
+#ifndef _HI_GT_THREAD_H_
+#define _HI_GT_THREAD_H_
 
+#include <QTimer>
+#include <GTGlobals.h>
+#include <core/CustomScenario.h>
 
-#ifdef __OBJC__
-#import <AppKit/AppKit.h>
-#endif // __OBJC__
+namespace HI {
 
-#include "api/GTGlobals.h"
-
-namespace U2 {
-
-/**
- * It is supposed that Cocoa is used on OSX
- */
-class GTMenuPrivateMac {
+class HI_EXPORT ThreadWaiter : public QObject {
+    Q_OBJECT
 public:
-    static void clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath);
+    ThreadWaiter(GUITestOpStatus &os);
+
+    void wait();
 
 private:
-#ifdef __OBJC__
-    static NSMenu *clickMenuItem(U2OpStatus &os, NSMenu *menu, const QString &itemTitle);
-#endif // __OBJC__
+    GUITestOpStatus &os;
+    qint64 startValue;
+    qint64 endValue;
+};
+
+class HI_EXPORT GTThread {
+public:
+    static void waitForMainThread(GUITestOpStatus &os);
+    static void runInMainThread(GUITestOpStatus &os, CustomScenario *scenario);
 };
 
-}   // namespace U2
+}   // namespace
 
-#endif // _U2_GT_MENU_PRIVATE_MAC_H_
+#endif // _HI_GT_THREAD_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsApp.cpp b/src/libs_3rdparty/humimit/src/utils/GTUtilsApp.cpp
similarity index 55%
rename from src/plugins/GUITestBase/src/GTUtilsApp.cpp
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsApp.cpp
index 84c9b4e..f88fd5e 100644
--- a/src/plugins/GUITestBase/src/GTUtilsApp.cpp
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsApp.cpp
@@ -19,26 +19,27 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTUtilsApp.h"
-#include <U2Core/AppContext.h>
-#include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QMainWindow>
-#endif
+#include "primitives/GTMainWindow.h"
+#include "utils/GTUtilsApp.h"
 
-namespace U2 {
+#include <QMainWindow>
+
+namespace HI {
 
 #define GT_CLASS_NAME "GTUtilsApp"
 
 #define GT_METHOD_NAME "checkUGENETitle"
-void GTUtilsApp::checkUGENETitle(U2OpStatus &os, const QString &title) {
+void GTUtilsApp::checkUGENETitle(GUITestOpStatus &os, const QString &title) {
+
+    bool isTitleGood = false;
+    foreach(QWidget* w, GTMainWindow::getMainWindowsAsWidget(os)){
+        QString ugeneTitle = w->windowTitle();
+        if(ugeneTitle == title){
+            isTitleGood = true;
+        }
+    }
 
-    QMainWindow* w = AppContext::getMainWindow()->getQMainWindow();
-    GT_CHECK(w, "main window is NULL");
-    QString ugeneTitle = w->windowTitle();
-    GT_CHECK(ugeneTitle == title, "UGENE title is <" + ugeneTitle + ">, not <" + title + ">");
+    GT_CHECK(isTitleGood, "UGENE title not <" + title + ">");
 }
 
 #undef GT_METHOD_NAME
@@ -48,11 +49,17 @@ void GTUtilsApp::checkUGENETitle(U2OpStatus &os, const QString &title) {
 #define GT_CLASS_NAME "GTUtilsApp"
 
 #define GT_METHOD_NAME "checkUGENETitleContains"
-void GTUtilsApp::checkUGENETitleContains(U2OpStatus &os, const QString& string) {
-    QMainWindow* w = AppContext::getMainWindow()->getQMainWindow();
-    GT_CHECK(w, "main window is NULL");
-    QString ugeneTitle = w->windowTitle();
-    GT_CHECK(ugeneTitle.contains(string), "UGENE title is <" + ugeneTitle + ">, and it not contains <" + string + ">");
+void GTUtilsApp::checkUGENETitleContains(GUITestOpStatus &os, const QString& string) {
+
+    bool isTitleContains = false;
+    foreach(QWidget* w, GTMainWindow::getMainWindowsAsWidget(os)){
+        QString ugeneTitle = w->windowTitle();
+        if(ugeneTitle.contains(string)){
+            isTitleContains = true;
+        }
+    }
+
+    GT_CHECK(isTitleContains, "UGENE title not contains <" + string + ">");
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsApp.h b/src/libs_3rdparty/humimit/src/utils/GTUtilsApp.h
similarity index 75%
rename from src/plugins/GUITestBase/src/GTUtilsApp.h
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsApp.h
index ca74a2d..4624512 100644
--- a/src/plugins/GUITestBase/src/GTUtilsApp.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsApp.h
@@ -19,17 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_APP_UTILS_H_
-#define _U2_GUI_APP_UTILS_H_
+#ifndef _HI_GUI_APP_UTILS_H_
+#define _HI_GUI_APP_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
-namespace U2 {
+namespace HI {
 
-class GTUtilsApp {
+class HI_EXPORT GTUtilsApp {
 public:
-    static void checkUGENETitle(U2OpStatus &os, const QString& title);
-    static void checkUGENETitleContains(U2OpStatus &os, const QString& string);
+    static void checkUGENETitle(GUITestOpStatus &os, const QString& title);
+    static void checkUGENETitleContains(GUITestOpStatus &os, const QString& string);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsDialog.cpp b/src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.cpp
similarity index 75%
rename from src/plugins/GUITestBase/src/GTUtilsDialog.cpp
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.cpp
index b09214a..cab8764 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDialog.cpp
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.cpp
@@ -19,27 +19,22 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QTimer>
+#include <QApplication>
+#include <QDateTime>
+#include <QPushButton>
+#include <QTimer>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#endif
-
-#include <U2Test/GUITest.h>
+#include <core/GUITest.h>
 
 #include "GTUtilsDialog.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include "utils/GTThread.h"
+#include "primitives/GTWidget.h"
 
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GUIDialogWaiter"
 
-GUIDialogWaiter::GUIDialogWaiter(U2OpStatus &_os, Runnable* _r, const WaitSettings& _settings)
+GUIDialogWaiter::GUIDialogWaiter(GUITestOpStatus &_os, Runnable* _r, const WaitSettings& _settings)
 : hadRun(false), waiterId(-1), os(_os), runnable(_r), settings(_settings), timer(NULL), waitingTime(0) {
 
     static int totalWaiterCount = 0;
@@ -68,11 +63,11 @@ void GUIDialogWaiter::stopTimer(){
 bool GUIDialogWaiter::isExpectedName(const QString& widgetObjectName, const QString& expectedObjectName) {
 
     if (expectedObjectName.isNull()) {
-        uiLog.trace("GUIDialogWaiter Warning!! Checking name, widget name <" + widgetObjectName + ">, but expected any, saying it's expected");
+        qWarning("GT_DEBUG_MESSAGE GUIDialogWaiter Warning!! Checking name, widget name '%s', but expected any, saying it's expected", widgetObjectName.toLocal8Bit().constData());
         return true;
     }
 
-    uiLog.trace("GUIDialogWaiter Checking name, widget name <" + widgetObjectName + ">, expected <" + expectedObjectName + ">");
+    qDebug("GT_DEBUG_MESSAGE GUIDialogWaiter Checking name, widget name '%s', expected '%s'", widgetObjectName.toLocal8Bit().constData(), expectedObjectName.toLocal8Bit().constData());
     return widgetObjectName == expectedObjectName;
 }
 
@@ -103,14 +98,14 @@ void GUIDialogWaiter::checkDialog() {
 
     if (widget && !hadRun && isExpectedName(widget->objectName(), settings.objectName)) {
         timer->stop();
-        uiLog.trace("-------------------------");
-        uiLog.trace("GUIDialogWaiter::wait Id = " + QString::number(waiterId) + ", going to RUN");
-        uiLog.trace("-------------------------");
+        qDebug("-------------------------");
+        qDebug("GT_DEBUG_MESSAGE GUIDialogWaiter::wait ID = %d, name = '%s' going to RUN", waiterId, settings.objectName.toLocal8Bit().constData());
+        qDebug("-------------------------");
 
         try {
             runnable->run();
             hadRun = true;
-        } catch(U2OpStatus *) {
+        } catch(GUITestOpStatus *) {
             GTGlobals::takeScreenShot(GUITest::screenshotDir + QDateTime::currentDateTime().toString() + ".jpg");
             QWidget* w = QApplication::activeModalWidget();
             while (w != NULL){
@@ -127,9 +122,9 @@ void GUIDialogWaiter::checkDialog() {
     else {
         waitingTime += timerPeriod;
         if (waitingTime > settings.timeout) {
-            uiLog.trace("-------------------------");
-            uiLog.trace("!!! GUIDialogWaiter::TIMEOUT Id = " + QString::number(waiterId) + ", going to finish waiting");
-            uiLog.trace("-------------------------");
+            qDebug("-------------------------");
+            qDebug("GT_DEBUG_MESSAGE !!! GUIDialogWaiter::TIMEOUT Id = %d, going to finish waiting", waiterId);
+            qDebug("-------------------------");
 
             finishWaiting();
             GT_CHECK(false, "TIMEOUT, waiterId = " + QString::number(waiterId));
@@ -137,7 +132,7 @@ void GUIDialogWaiter::checkDialog() {
     }
 
     }
-    catch(U2OpStatus *){}
+    catch(GUITestOpStatus *){}
 
 }
 #undef GT_METHOD_NAME
@@ -147,7 +142,7 @@ void GUIDialogWaiter::checkDialog() {
 
 #define GT_CLASS_NAME "GTUtilsDialog"
 
-HangChecker::HangChecker(U2OpStatus &_os):os(_os), mightHung(false){
+HangChecker::HangChecker(GUITestOpStatus &_os):os(_os), mightHung(false){
     timer = new QTimer();
 }
 
@@ -178,14 +173,14 @@ void HangChecker::sl_check(){
             if(!found){
                 if(!mightHung){
                     mightHung = true;
-                    uiLog.trace("dialog mignt hang up");
+                    qWarning("GT_DEBUG_MESSAGE dialog mignt hang up");
                 }
             }
 
         }else{
             mightHung = false;
         }
-    } catch(U2OpStatus *) {
+    } catch(GUITestOpStatus *) {
         GTGlobals::takeScreenShot(GUITest::screenshotDir + QDateTime::currentDateTime().toString() + ".jpg");
         QWidget* w = QApplication::activeModalWidget();
         while (w != NULL){
@@ -209,7 +204,7 @@ void HangChecker::sl_check(){
 QList<GUIDialogWaiter*> GTUtilsDialog::pool = QList<GUIDialogWaiter*>();
 HangChecker* GTUtilsDialog::hangChecker = NULL;
 
-void GTUtilsDialog::startHangChecking(U2OpStatus &os){
+void GTUtilsDialog::startHangChecking(GUITestOpStatus &os){
     hangChecker = new HangChecker(os);
     hangChecker->startChecking();
 }
@@ -221,19 +216,19 @@ void GTUtilsDialog::stopHangChecking(){
 }
 
 #define GT_METHOD_NAME "buttonBox"
-QDialogButtonBox * GTUtilsDialog::buttonBox(U2OpStatus &os, QWidget *dialog) {
+QDialogButtonBox * GTUtilsDialog::buttonBox(GUITestOpStatus &os, QWidget *dialog) {
     return qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickButtonBox"
-void GTUtilsDialog::clickButtonBox(U2OpStatus &os, QDialogButtonBox::StandardButton button) {
+void GTUtilsDialog::clickButtonBox(GUITestOpStatus &os, QDialogButtonBox::StandardButton button) {
     clickButtonBox(os, QApplication::activeModalWidget(), button);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickButtonBox"
-void GTUtilsDialog::clickButtonBox(U2OpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button) {
+void GTUtilsDialog::clickButtonBox(GUITestOpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button) {
     QDialogButtonBox* box = buttonBox(os, dialog);
     GT_CHECK(box != NULL, "buttonBox is NULL");
     QPushButton* pushButton = box->button(button);
@@ -242,23 +237,26 @@ void GTUtilsDialog::clickButtonBox(U2OpStatus& os, QWidget* dialog, QDialogButto
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsDialog::waitForDialog(U2OpStatus &os, Runnable *r, const GUIDialogWaiter::WaitSettings& settings)
+void GTUtilsDialog::waitForDialog(GUITestOpStatus &os, Runnable *r, const GUIDialogWaiter::WaitSettings& settings)
 {
     GUIDialogWaiter *waiter = new GUIDialogWaiter(os, r, settings);
     pool.prepend(waiter);
 }
 
-void GTUtilsDialog::waitForDialog(U2OpStatus &os, Runnable *r) {
+void GTUtilsDialog::waitForDialog(GUITestOpStatus &os, Runnable *r, int timeout) {
     GUIDialogWaiter::WaitSettings settings;
     Filler* f = dynamic_cast<Filler*>(r);
     if (f) {
         settings = f->getSettings();
+        if (timeout > 0) {
+            settings.timeout = timeout;
+        }
     }
 
     waitForDialog(os, r, settings);
 }
 
-void GTUtilsDialog::waitForDialogWhichMustNotBeRunned(U2OpStatus &os, Runnable *r) {
+void GTUtilsDialog::waitForDialogWhichMustNotBeRunned(GUITestOpStatus &os, Runnable *r) {
     GUIDialogWaiter::WaitSettings settings;
     Filler* f = dynamic_cast<Filler*>(r);
     if (f) {
@@ -269,7 +267,7 @@ void GTUtilsDialog::waitForDialogWhichMustNotBeRunned(U2OpStatus &os, Runnable *
     waitForDialog(os, r, settings);
 }
 
-void GTUtilsDialog::waitForDialogWhichMayRunOrNot(U2OpStatus &os, Runnable *r) {
+void GTUtilsDialog::waitForDialogWhichMayRunOrNot(GUITestOpStatus &os, Runnable *r) {
     GUIDialogWaiter::WaitSettings settings;
     Filler* f = dynamic_cast<Filler*>(r);
     if (f) {
@@ -282,7 +280,7 @@ void GTUtilsDialog::waitForDialogWhichMayRunOrNot(U2OpStatus &os, Runnable *r) {
 }
 
 #define GT_METHOD_NAME "checkAllFinished"
-void GTUtilsDialog::checkAllFinished(U2OpStatus &os) {
+void GTUtilsDialog::checkAllFinished(GUITestOpStatus &os) {
     Q_UNUSED(os);
 
     foreach(GUIDialogWaiter* w, pool) {
@@ -302,7 +300,7 @@ void GTUtilsDialog::checkAllFinished(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isButtonEnabled"
-bool GTUtilsDialog::isButtonEnabled(U2OpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button) {
+bool GTUtilsDialog::isButtonEnabled(GUITestOpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button) {
     QDialogButtonBox* box = buttonBox(os, dialog);
     GT_CHECK_RESULT(box != NULL, "buttonBox is NULL", false);
     QPushButton* pushButton = box->button(button);
@@ -311,7 +309,7 @@ bool GTUtilsDialog::isButtonEnabled(U2OpStatus& os, QWidget* dialog, QDialogButt
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsDialog::cleanup(U2OpStatus &os, CleanupSettings s) {
+void GTUtilsDialog::cleanup(GUITestOpStatus &os, CleanupSettings s) {
     foreach (GUIDialogWaiter* waiter, pool) {
         waiter->stopTimer();
     }
@@ -328,13 +326,13 @@ void GTUtilsDialog::cleanup(U2OpStatus &os, CleanupSettings s) {
 
 #undef GT_CLASS_NAME
 
-Filler::Filler(U2OpStatus &os, const GUIDialogWaiter::WaitSettings &settings, CustomScenario *scenario)
+Filler::Filler(GUITestOpStatus &os, const GUIDialogWaiter::WaitSettings &settings, CustomScenario *scenario)
 : os(os), settings(settings), scenario(scenario)
 {
 
 }
 
-Filler::Filler(U2OpStatus &os, const QString &objectName, CustomScenario *scenario)
+Filler::Filler(GUITestOpStatus &os, const QString &objectName, CustomScenario *scenario)
 : os(os), settings(GUIDialogWaiter::WaitSettings(objectName)), scenario(scenario)
 {
 
@@ -349,11 +347,13 @@ GUIDialogWaiter::WaitSettings Filler::getSettings() const {
 }
 
 void Filler::run() {
+    GTGlobals::sleep(500);
     if (NULL == scenario) {
         commonScenario();
     } else {
         scenario->run(os);
     }
+    GTThread::waitForMainThread(os);
 }
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsDialog.h b/src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.h
similarity index 62%
rename from src/plugins/GUITestBase/src/GTUtilsDialog.h
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.h
index 82deb7a..12f396b 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDialog.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsDialog.h
@@ -19,27 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_DIALOG_UTILS_H_
-#define _U2_GUI_DIALOG_UTILS_H_
-
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#ifndef _HI_GUI_DIALOG_UTILS_H_
+#define _HI_GUI_DIALOG_UTILS_H_
+
+#include <QDialogButtonBox>
+
+#include <core/CustomScenario.h>
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
-namespace U2 {
+namespace HI {
 
-class Runnable {
+class HI_EXPORT Runnable {
 public:
     virtual void run() = 0;
     virtual ~Runnable(){}
 };
 
-class GUIDialogWaiter : public QObject {
+class HI_EXPORT GUIDialogWaiter : public QObject {
     Q_OBJECT
 public:
     enum DialogType {
@@ -68,7 +65,7 @@ public:
         DialogDestiny destiny;
     };
 
-    GUIDialogWaiter(U2OpStatus &os, Runnable* _r, const WaitSettings& settings = WaitSettings());
+    GUIDialogWaiter(GUITestOpStatus &os, Runnable* _r, const WaitSettings& settings = WaitSettings());
     virtual ~GUIDialogWaiter();
 
     WaitSettings getSettings(){return settings;}
@@ -84,7 +81,7 @@ public slots:
     void checkDialogPool();
 
 private:
-    U2OpStatus &os;
+    GUITestOpStatus &os;
     Runnable *runnable;
     WaitSettings settings;
 
@@ -95,16 +92,10 @@ private:
 
 };
 
-class CustomScenario {
-public:
-    virtual void run(U2OpStatus &os) = 0;
-    virtual ~CustomScenario() {}
-};
-
-class Filler : public Runnable {
+class HI_EXPORT Filler : public Runnable {
 public:
-    Filler(U2OpStatus &os, const GUIDialogWaiter::WaitSettings &settings, CustomScenario *scenario = NULL);
-    Filler(U2OpStatus &os, const QString &objectName, CustomScenario *scenario = NULL);
+    Filler(GUITestOpStatus &os, const GUIDialogWaiter::WaitSettings &settings, CustomScenario *scenario = NULL);
+    Filler(GUITestOpStatus &os, const QString &objectName, CustomScenario *scenario = NULL);
     ~Filler();
 
     GUIDialogWaiter::WaitSettings getSettings() const;
@@ -112,24 +103,24 @@ public:
     virtual void commonScenario() {}
 
 protected:
-    U2OpStatus &os;
+    GUITestOpStatus &os;
     GUIDialogWaiter::WaitSettings settings;
     CustomScenario *scenario;
 };
 
-class HangChecker: public QObject{
+class HI_EXPORT HangChecker: public QObject{
     Q_OBJECT
 public:
-    HangChecker(U2OpStatus &_os);
+    HangChecker(GUITestOpStatus &_os);
     QTimer* timer;
     void startChecking();
-    U2OpStatus &os;
+    GUITestOpStatus &os;
     bool mightHung;
 public slots:
     void sl_check();
 };
 
-class GTUtilsDialog{
+class HI_EXPORT GTUtilsDialog{
     friend class TimerLauncher;
     friend class GUIDialogWaiter;
     friend class HangChecker;
@@ -138,30 +129,30 @@ public:
         FailOnUnfinished, NoFailOnUnfinished
     };
 
-    static QDialogButtonBox * buttonBox(U2OpStatus &os, QWidget *dialog);
+    static QDialogButtonBox * buttonBox(GUITestOpStatus &os, QWidget *dialog);
 
-    static void clickButtonBox(U2OpStatus &os, QDialogButtonBox::StandardButton button);
-    static void clickButtonBox(U2OpStatus &os, QWidget *dialog, QDialogButtonBox::StandardButton button);
+    static void clickButtonBox(GUITestOpStatus &os, QDialogButtonBox::StandardButton button);
+    static void clickButtonBox(GUITestOpStatus &os, QWidget *dialog, QDialogButtonBox::StandardButton button);
 
     // if objectName is not empty, waits for QWidget with a given name
-    static void waitForDialog(U2OpStatus &os, Runnable *r, const GUIDialogWaiter::WaitSettings& settings);
+    static void waitForDialog(GUITestOpStatus &os, Runnable *r, const GUIDialogWaiter::WaitSettings& settings);
 
-    static void waitForDialog(U2OpStatus &os, Runnable *r);
+    static void waitForDialog(GUITestOpStatus &os, Runnable *r, int timeout = 0);
 
-    static void waitForDialogWhichMustNotBeRunned(U2OpStatus &os, Runnable *r);
+    static void waitForDialogWhichMustNotBeRunned(GUITestOpStatus &os, Runnable *r);
 
-    static void waitForDialogWhichMayRunOrNot(U2OpStatus &os, Runnable *r);
+    static void waitForDialogWhichMayRunOrNot(GUITestOpStatus &os, Runnable *r);
 
     // deletes all GUIDialogWaiters, sets err if there are unfinished waiters
-    static void cleanup(U2OpStatus &os, CleanupSettings s = FailOnUnfinished);
+    static void cleanup(GUITestOpStatus &os, CleanupSettings s = FailOnUnfinished);
 
-    static void startHangChecking(U2OpStatus &os);
+    static void startHangChecking(GUITestOpStatus &os);
     static void stopHangChecking();
 
-    static bool isButtonEnabled(U2OpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button);
+    static bool isButtonEnabled(GUITestOpStatus& os, QWidget* dialog, QDialogButtonBox::StandardButton button);
 
 private:
-    static void checkAllFinished(U2OpStatus &os);
+    static void checkAllFinished(GUITestOpStatus &os);
 
     static QList<GUIDialogWaiter*> pool;
     static HangChecker* hangChecker;
diff --git a/src/plugins/GUITestBase/src/GTUtilsToolTip.cpp b/src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.cpp
similarity index 85%
rename from src/plugins/GUITestBase/src/GTUtilsToolTip.cpp
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.cpp
index c6bb020..b0b2281 100644
--- a/src/plugins/GUITestBase/src/GTUtilsToolTip.cpp
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.cpp
@@ -21,18 +21,12 @@
 
 #include "GTUtilsToolTip.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolTip>
-#else
-#include <QtWidgets/QToolTip>
-#endif
-
-namespace U2 {
+namespace HI {
 
 #define GT_CLASS_NAME "GTUtilsToolTip"
 
 #define GT_METHOD_NAME "checkExistingToolTip"
-void GTUtilsToolTip::checkExistingToolTip(U2OpStatus &os, const QString& tooltip) {
+void GTUtilsToolTip::checkExistingToolTip(GUITestOpStatus &os, const QString& tooltip) {
 
     QString t = getToolTip();
     GT_CHECK(t.contains(tooltip), "Tooltip is <" + t + ">, doesn't contain <" + tooltip + ">");
diff --git a/src/plugins/GUITestBase/src/GTUtilsToolTip.h b/src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.h
similarity index 79%
rename from src/plugins/GUITestBase/src/GTUtilsToolTip.h
rename to src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.h
index 183d0df..97cebd9 100644
--- a/src/plugins/GUITestBase/src/GTUtilsToolTip.h
+++ b/src/libs_3rdparty/humimit/src/utils/GTUtilsToolTip.h
@@ -19,16 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GUI_TOOLTIP_UTILS_H_
-#define _U2_GUI_TOOLTIP_UTILS_H_
+#ifndef _HI_GUI_TOOLTIP_UTILS_H_
+#define _HI_GUI_TOOLTIP_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include <QToolTip>
 
-namespace U2 {
+namespace HI {
 
-class GTUtilsToolTip {
+class HI_EXPORT GTUtilsToolTip {
 public:
-    static void checkExistingToolTip(U2OpStatus &os, const QString& tooltip);
+    static void checkExistingToolTip(GUITestOpStatus &os, const QString& tooltip);
 
     static QString getToolTip();
 };
diff --git a/src/plugins/CoreTests/CoreTests.pro b/src/plugins/CoreTests/CoreTests.pro
index 1f1b284..eeafc26 100644
--- a/src/plugins/CoreTests/CoreTests.pro
+++ b/src/plugins/CoreTests/CoreTests.pro
@@ -16,7 +16,6 @@ HEADERS += src/AnnotationTableObjectTest.h \
            src/FindAlgorithmTests.h \
            src/FormatDetectionTests.h \
            src/GUrlTests.h \
-           src/LoadDASDocumentTests.h \
            src/LoadRemoteDocumentTests.h \
            src/PWMatrixTests.h \
            src/PhyTreeObjectTests.h \
@@ -42,7 +41,6 @@ SOURCES += src/AnnotationTableObjectTest.cpp \
            src/FindAlgorithmTests.cpp \
            src/FormatDetectionTests.cpp \
            src/GUrlTests.cpp \
-           src/LoadDASDocumentTests.cpp \
            src/LoadRemoteDocumentTests.cpp \
            src/PWMatrixTests.cpp \
            src/PhyTreeObjectTests.cpp \
diff --git a/src/plugins/CoreTests/src/CoreTests.cpp b/src/plugins/CoreTests/src/CoreTests.cpp
index c19754b..04f25a7 100644
--- a/src/plugins/CoreTests/src/CoreTests.cpp
+++ b/src/plugins/CoreTests/src/CoreTests.cpp
@@ -42,7 +42,6 @@
 #include "FindAlgorithmTests.h"
 #include "FormatDetectionTests.h"
 #include "GUrlTests.h"
-#include "LoadDASDocumentTests.h"
 #include "LoadRemoteDocumentTests.h"
 #include "PWMatrixTests.h"
 #include "PhyTreeObjectTests.h"
@@ -132,8 +131,6 @@ void CoreTests::registerFactories() {
 
     registerFactory<LoadRemoteDocumentTests>(xmlTestFormat);
 
-    registerFactory<LoadDASDocumentTests>(xmlTestFormat);
-
     // PWMatrix tests
     registerFactory<PWMatrixTests>(xmlTestFormat);
 
diff --git a/src/plugins/CoreTests/src/DocumentModelTests.cpp b/src/plugins/CoreTests/src/DocumentModelTests.cpp
index 3703315..4c74390 100644
--- a/src/plugins/CoreTests/src/DocumentModelTests.cpp
+++ b/src/plugins/CoreTests/src/DocumentModelTests.cpp
@@ -552,10 +552,16 @@ Task::ReportResult GTest_DocumentObjectNames::report() {
         stateInfo.setError(QString("number of objects in document not matched: %1, expected %2").arg(objs.size()).arg(names.size()));
         return ReportResult_Finished;
     }
+    QStringList objNames;
+    foreach(GObject *ob, objs) {
+        objNames.append(ob->getGObjectName());
+    }
+    qSort(objNames);
+    qSort(names);
     for(int i=0; i<names.size(); i++) {
         QString name = names[i];
-        QString objName = objs[i]->getGObjectName();
-        if (name!=objName) {
+        QString objName = objNames[i];
+        if (name != objName) {
             stateInfo.setError(QString("name of the objects not matched: %1, expected %2").arg(objName).arg(name));
             return ReportResult_Finished;
         }
@@ -596,10 +602,16 @@ Task::ReportResult GTest_DocumentObjectTypes::report() {
         stateInfo.setError(QString("number of objects in document not matched: %1, expected %2").arg(objs.size()).arg(types.size()));
         return ReportResult_Finished;
     }
+    QStringList objTypes;
+    foreach(GObject *ob, objs) {
+        objTypes.append(ob->getGObjectType());
+    }
+    qSort(objTypes);
+    qSort(types);
     for(int i=0; i<types.size(); i++) {
         GObjectType type = types[i];
-        GObjectType objType = objs[i]->getGObjectType();
-        if (type!=objType) {
+        GObjectType objType = objTypes[i];
+        if (type != objType) {
             stateInfo.setError(QString("types of the objects not matched: %1, expected %2").arg(objType).arg(type));
             return ReportResult_Finished;
         }
diff --git a/src/plugins/CoreTests/src/LoadDASDocumentTests.cpp b/src/plugins/CoreTests/src/LoadDASDocumentTests.cpp
deleted file mode 100644
index e5d9a55..0000000
--- a/src/plugins/CoreTests/src/LoadDASDocumentTests.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "LoadDASDocumentTests.h"
-
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/LoadDASDocumentTask.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/U2SafePoints.h>
-
-#define DB_ATTR "database"
-#define DOC_ID_ATTR "document_id"
-#define EXPECTED_DOC_ATTR "expected_document"
-
-namespace U2 {
-
-//////////////////////////////////////////////////////////////////////////
-//GTest_LoadDASDocumentTask
-
-void GTest_LoadDASDocumentTask::init(XMLTestFormat *tf, const QDomElement& el){
-    Q_UNUSED(tf);
-
-    dbName.clear();
-    docId.clear();
-    expectedDoc.clear();
-    t = NULL;
-
-    QString tmp = el.attribute(DB_ATTR);
-
-    if(tmp.isEmpty()){
-        failMissingValue(DB_ATTR);
-        return;
-    }
-    dbName = tmp;
-
-    tmp = el.attribute(DOC_ID_ATTR);
-    if(tmp.isEmpty()){
-        failMissingValue(DB_ATTR);
-        return;
-    }
-    docId = tmp;
-
-    tmp = el.attribute(EXPECTED_DOC_ATTR);
-    if(tmp.isEmpty()){
-        failMissingValue(EXPECTED_DOC_ATTR);
-        return;
-    }
-    expectedDoc = tmp;
-}
-
-void GTest_LoadDASDocumentTask::prepare(){
-    //load das doc
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    if (!dasRegistry){
-        setError(tr("No DASSourceRegistry"));
-        return;
-    }else{
-        DASSource refSource = dasRegistry->findByName(dbName);
-        if (!refSource.isValid()){
-            setError(tr("Cannot find das source by DB name given: %1").arg(dbName));
-            return;
-        }
-        QList<DASSource> featureSources = dasRegistry->getFeatureSourcesByType(refSource.getReferenceType());
-        t = new LoadDasDocumentTask(docId, "", refSource, featureSources);
-        addSubTask(t);
-    }
-}
-
-Task::ReportResult GTest_LoadDASDocumentTask::report(){
-    if(t != NULL){
-        if(!t->hasError()){
-            //get expected doc
-            Document* doc = getContext<Document>(this, expectedDoc);
-            if (doc == NULL) {
-                stateInfo.setError(GTest::tr("context not found %1").arg(expectedDoc));
-                return ReportResult_Finished;
-            }
-            QList<GObject*> seqlist = doc->findGObjectByType(GObjectTypes::SEQUENCE);
-            if (seqlist.size() == 0) {
-                stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::SEQUENCE));
-                return ReportResult_Finished;
-            }
-
-            U2SequenceObject *expectedSequence = qobject_cast<U2SequenceObject *>(seqlist.first());
-            if (!expectedSequence){
-                stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::SEQUENCE));
-                return ReportResult_Finished;
-            }
-
-            QList<GObject*> annlist = doc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-
-            QList<AnnotationTableObject *> expectedAnnotations;
-            foreach(GObject* at, annlist){
-                AnnotationTableObject *aobj = qobject_cast<AnnotationTableObject *>(at);
-                if (aobj){
-                    expectedAnnotations.append(aobj);
-                }
-            }
-
-            //get actual doc
-            Document* actDoc = t->takeDocument();
-            if (actDoc == NULL) {
-                stateInfo.setError(GTest::tr("Could find a loaded document"));
-                return ReportResult_Finished;
-            }
-            QList<GObject*> seqlist_act = actDoc->findGObjectByType(GObjectTypes::SEQUENCE);
-            if (seqlist_act.size() == 0) {
-                stateInfo.setError(GTest::tr("No sequence in the document loaded"));
-                return ReportResult_Finished;
-            }
-
-            U2SequenceObject *actualSequence = qobject_cast<U2SequenceObject *>(seqlist_act.first());
-            if (!actualSequence){
-                stateInfo.setError(GTest::tr("No sequence in the document loaded"));
-                return ReportResult_Finished;
-            }
-
-            QList<GObject*> annlist_act = actDoc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-
-            QList<AnnotationTableObject *> actualAnnotations;
-            foreach (GObject *at, annlist_act) {
-                AnnotationTableObject *aobj = qobject_cast<AnnotationTableObject *>(at);
-                if (aobj) {
-                    actualAnnotations.append(aobj);
-                }
-            }
-
-            //compare sequences
-            if (actualSequence->getWholeSequenceData(stateInfo) != expectedSequence->getWholeSequenceData(stateInfo)){
-                CHECK_OP(stateInfo, ReportResult_Finished);
-                stateInfo.setError(GTest::tr("Actual sequence %1 does not match expected sequence %2").arg(actualSequence->getSequenceName()).arg(expectedSequence->getSequenceName()));
-                return ReportResult_Finished;
-            }
-            CHECK_OP(stateInfo, ReportResult_Finished);
-
-            //compare annotations
-            foreach (const AnnotationTableObject *expObj, expectedAnnotations) {
-                const QList<Annotation *> &expAnnoations = expObj->getAnnotations();
-                foreach (Annotation *expA, expAnnoations) {
-                    bool found = false;
-                    foreach (const AnnotationTableObject *actObj, actualAnnotations) {
-                        if (found) {
-                            break;
-                        }
-                        const QList<Annotation *> actAnnoations = actObj->getAnnotations();
-                        foreach (Annotation *actA, actAnnoations) {
-                            if (actA->getName() == expA->getName()){
-                                found = true;
-                                break;
-                            }
-                        }
-                    }
-                    if (!found) {
-                        stateInfo.setError(GTest::tr("Expected annotation %1 has not been found in the actual annotations. "
-                            "If the test fails, please, load the sequence %2 with annotation from DAS, manually compare the annotations and update the test. "
-                            "There might be updates in the DAS databases.").arg(expA->getName()).arg(expectedSequence->getSequenceName()));
-                        return ReportResult_Finished;
-                    }
-                }
-
-            }
-
-        }
-        return ReportResult_Finished;
-    }
-    return ReportResult_Finished;
-}
-
-QList<XMLTestFactory*> LoadDASDocumentTests::createTestFactories(){
-    QList<XMLTestFactory*> res;
-    res.append(GTest_LoadDASDocumentTask::createFactory());
-    return res;
-}
-
-} //namespace
diff --git a/src/plugins/CoreTests/src/LoadDASDocumentTests.h b/src/plugins/CoreTests/src/LoadDASDocumentTests.h
deleted file mode 100644
index e6fcecc..0000000
--- a/src/plugins/CoreTests/src/LoadDASDocumentTests.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_LOAD_DAS_DOCUMENT_TEST_H_
-#define _U2_LOAD_DAS_DOCUMENT_TEST_H_
-
-#include <U2Test/GTest.h>
-#include <U2Test/XMLTestUtils.h>
-
-namespace U2 {
-
-    class LoadDasDocumentTask;
-
-    class GTest_LoadDASDocumentTask : public GTest {
-        Q_OBJECT
-    public:
-        SIMPLE_XML_TEST_BODY_WITH_FACTORY_EXT(GTest_LoadDASDocumentTask, "load-das-document", TaskFlags_NR_FOSCOE);
-
-        void prepare();
-        ReportResult report();
-    private:
-        LoadDasDocumentTask *t;
-        QString dbName;
-        QString docId;
-        QString expectedDoc;
-    };
-
-    class LoadDASDocumentTests {
-    public:
-        static QList<XMLTestFactory*> createTestFactories();
-    };
-
-
-} //namespace
-
-#endif // _U2_LOAD_DAS_DOCUMENT_TEST_H_
diff --git a/src/plugins/GUITestBase/GUITestBase.pri b/src/plugins/GUITestBase/GUITestBase.pri
index 910a781..abd5a3f 100644
--- a/src/plugins/GUITestBase/GUITestBase.pri
+++ b/src/plugins/GUITestBase/GUITestBase.pri
@@ -7,7 +7,21 @@ PLUGIN_VENDOR=Unipro
 QT += testlib
 greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets
 
-INCLUDEPATH += ../../corelibs/U2View/_tmp/
+INCLUDEPATH += ../../corelibs/U2View/_tmp/ ../../libs_3rdparty/humimit/src
+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 {
     !macx {
diff --git a/src/plugins/GUITestBase/GUITestBase.pro b/src/plugins/GUITestBase/GUITestBase.pro
index 14125d4..c07abaf 100644
--- a/src/plugins/GUITestBase/GUITestBase.pro
+++ b/src/plugins/GUITestBase/GUITestBase.pro
@@ -7,12 +7,12 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/crazy_user/GUICrazyUserTest.h \
 #   Runnables
 #   Runnables / Qt
-            src/runnables/qt/ColorDialogFiller.h \
-            src/runnables/qt/DefaultDialogFiller.h \
+#            src/runnables/qt/ColorDialogFiller.h \
+#            src/runnables/qt/DefaultDialogFiller.h \
             src/runnables/qt/EscapeClicker.h \
-            src/runnables/qt/FontDialogFiller.h \
-            src/runnables/qt/MessageBoxFiller.h \
-            src/runnables/qt/PopupChooser.h \
+#            src/runnables/qt/FontDialogFiller.h \
+#            src/runnables/qt/MessageBoxFiller.h \
+#            src/runnables/qt/PopupChooser.h \
 #   Runnables / UGENE
 #   Runnables / UGENE / ugeneui
             src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h \
@@ -76,7 +76,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h \
-            src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h \
+            src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h \
 #   Runnables / UGENE / plugins_3rdparty
 #   Runnables / UGENE / plugins_3rdparty / kalign
@@ -145,12 +145,12 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/GTDatabaseConfig.h \
             src/GTUtilsAnnotationsHighlightingTreeView.h \
             src/GTUtilsAnnotationsTreeView.h \
-            src/GTUtilsApp.h \
+#            src/GTUtilsApp.h \
             src/GTUtilsAssemblyBrowser.h \
             src/GTUtilsBookmarksTreeView.h \
             src/GTUtilsCircularView.h \
             src/GTUtilsDashboard.h \
-            src/GTUtilsDialog.h \
+#            src/GTUtilsDialog.h \
             src/GTUtilsDocument.h \
             src/GTUtilsEscClicker.h \
             src/GTUtilsExternalTools.h \
@@ -172,7 +172,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/GTUtilsSharedDatabaseDocument.h \
             src/GTUtilsTask.h \
             src/GTUtilsTaskTreeView.h \
-            src/GTUtilsToolTip.h \
+#            src/GTUtilsToolTip.h \
             src/GTUtilsWizard.h \
             src/GTUtilsWorkflowDesigner.h \
             src/GTUtilsStartPage.h \
@@ -207,6 +207,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h \
             src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h \
             src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h \
+            src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h \
             src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h \
             src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h \
             src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h \
@@ -246,40 +247,41 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/api/GTSequenceReadingModeDialog.h \
             src/api/GTSequenceReadingModeDialogUtils.h \
 #   Qt primitives
-            src/api/GTAction.h \
-            src/api/GTCheckBox.h \
-            src/api/GTClipboard.h \
-            src/api/GTComboBox.h \
-            src/api/GTDoubleSpinBox.h \
-            src/api/GTFile.h \
-            src/api/GTFileDialog.h \
-            src/api/GTGlobals.h \
-            src/api/GTGraphicsItem.h \
-            src/api/GTGroupBox.h \
-            src/api/GTKeyboardDriver.h \
-            src/api/GTKeyboardUtils.h \
-            src/api/GTLineEdit.h \
-            src/api/GTListWidget.h \
-            src/api/GTMenu.h \
-            src/api/GTMenuBar.h \
-            src/api/GTMouse.h \
-            src/api/GTMouseDriver.h \
-            src/api/GTPlainTextEdit.h \
-            src/api/GTRadioButton.h \
-            src/api/GTScrollBar.h \
-            src/api/GTSlider.h \
-            src/api/GTSpinBox.h \
-            src/api/GTSystem.h \
-            src/api/GTTabBar.h \
-            src/api/GTTabWidget.h \
-            src/api/GTTableView.h  \
-            src/api/GTTextEdit.h \
-            src/api/GTToolbar.h \
-            src/api/GTTreeView.h \
-            src/api/GTTreeWidget.h \
-            src/api/GTWebView.h \
-            src/api/GTWidget.h \
-            src/api/private/GTMenuPrivate.h
+#            src/primitives/GTAction.h \
+#            src/api/GTCheckBox.h \
+#            src/system/GTClipboard.h \
+#            src/primitives/GTComboBox.h \
+#            src/api/GTDoubleSpinBox.h \
+#            src/system/GTFile.h \
+#            src/api/GTFileDialog.h \
+#            src/GTGlobals.h \
+            src/api/GTGraphicsItem.h \ #\
+    src/test_runner/GUITestRunner.h
+#            src/api/GTGroupBox.h \
+#            src/drivers/GTKeyboardDriver.h \
+#            src/api/GTKeyboardUtils.h \
+#            src/primitives/GTLineEdit.h \
+#            src/api/GTListWidget.h \
+#            src/api/GTMesnu.h \
+#            src/api/GTMenuBar.h \
+#            src/api/GTMouse.h \
+#            src/drivers/GTMouseDriver.h \
+#            src/api/GTPlainTextEdit.h \
+#            src/api/GTRadioButton.h \
+#            src/api/GTScrollBar.h \
+#            src/api/GTSlider.h \
+#            src/primitives/GTSpinBox.h \
+#            src/api/GTTabBar.h \
+#            src/api/GTTabWidget.h \
+#            src/api/GTTableView.h  \
+#            src/api/GTTextEdit.h \
+#            src/api/GTThread.h \
+#            src/api/GTToolbar.h \
+#            src/api/GTTreeView.h \
+#            src/api/GTTreeWidget.h \
+#            src/api/GTWebView.h #\
+#            src/primitives/GTWidget.h \
+#            src/api/private/GTMenuPrivate.h
 
 SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/crazy_user/GTAbstractGUIAction.cpp \
@@ -287,12 +289,12 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/crazy_user/GUICrazyUserTest.cpp \
 #   Runnables
 #   Runnables / Qt
-            src/runnables/qt/ColorDialogFiller.cpp \
-            src/runnables/qt/DefaultDialogFiller.cpp \
+#            src/runnables/qt/ColorDialogFiller.cpp \
+#            src/runnables/qt/DefaultDialogFiller.cpp \
             src/runnables/qt/EscapeClicker.cpp \
-            src/runnables/qt/FontDialogFiller.cpp \
-            src/runnables/qt/MessageBoxFiller.cpp \
-            src/runnables/qt/PopupChooser.cpp \
+#            src/runnables/qt/FontDialogFiller.cpp \
+#            src/runnables/qt/MessageBoxFiller.cpp \
+#            src/runnables/qt/PopupChooser.cpp \
 #   Runnables / UGENE
 #   Runnables / UGENE / ugeneui
             src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp \
@@ -356,6 +358,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp \
+            src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp \
 #   Runnables / UGENE / plugins_3rdparty
 #   Runnables / UGENE / plugins_3rdparty / kalign
@@ -424,12 +427,12 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/GTDatabaseConfig.cpp \
             src/GTUtilsAnnotationsHighlightingTreeView.cpp \
             src/GTUtilsAnnotationsTreeView.cpp \
-            src/GTUtilsApp.cpp \
+#            src/GTUtilsApp.cpp \
             src/GTUtilsAssemblyBrowser.cpp \
             src/GTUtilsBookmarksTreeView.cpp \
             src/GTUtilsCircularView.cpp \
             src/GTUtilsDashboard.cpp \
-            src/GTUtilsDialog.cpp \
+#            src/GTUtilsDialog.cpp \
             src/GTUtilsDocument.cpp \
             src/GTUtilsEscClicker.cpp \
             src/GTUtilsExternalTools.cpp \
@@ -451,7 +454,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/GTUtilsSharedDatabaseDocument.cpp \
             src/GTUtilsTask.cpp \
             src/GTUtilsTaskTreeView.cpp \
-            src/GTUtilsToolTip.cpp \
+#            src/GTUtilsToolTip.cpp \
             src/GTUtilsWizard.cpp \
             src/GTUtilsWorkflowDesigner.cpp \
             src/GTUtilsStartPage.cpp \
@@ -486,6 +489,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp \
             src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp \
             src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.cpp  \
+            src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp \
             src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.cpp \
             src/tests/common_scenarios/options_panel/GTTestsOptionPanel.cpp \
             src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.cpp \
@@ -525,48 +529,55 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/api/GTSequenceReadingModeDialog.cpp \
             src/api/GTSequenceReadingModeDialogUtils.cpp \
 #   Qt primitives
-            src/api/GTAction.cpp \
-            src/api/GTCheckBox.cpp \
-            src/api/GTClipboard.cpp \
-            src/api/GTComboBox.cpp \
-            src/api/GTDoubleSpinBox.cpp \
-            src/api/GTFile.cpp \
-            src/api/GTFileDialog.cpp \
-            src/api/GTGlobals.cpp \
-            src/api/GTGraphicsItem.cpp \
-            src/api/GTGroupBox.cpp \
-            src/api/GTKeyboardDriver.cpp \
-            src/api/GTKeyboardDriverLinux.cpp \
-            src/api/GTKeyboardDriverMac.cpp \
-            src/api/GTKeyboardDriverWindows.cpp \
-            src/api/GTKeyboardUtils.cpp \
-            src/api/GTLineEdit.cpp \
-            src/api/GTListWidget.cpp \
-            src/api/GTMenu.cpp \
-            src/api/GTMenuBar.cpp \
-            src/api/GTMouse.cpp \
-            src/api/GTMouseDriver.cpp \
-            src/api/GTMouseDriverLinux.cpp \
-            src/api/GTMouseDriverMac.cpp \
-            src/api/GTMouseDriverWindows.cpp \
-            src/api/GTPlainTextEdit.cpp \
-            src/api/GTRadioButton.cpp \
-            src/api/GTScrollBar.cpp \
-            src/api/GTSlider.cpp \
-            src/api/GTSpinBox.cpp \
-            src/api/GTSystem.cpp \
-            src/api/GTTabBar.cpp \
-            src/api/GTTabWidget.cpp \
-            src/api/GTTableView.cpp \
-            src/api/GTTextEdit.cpp \
-            src/api/GTToolbar.cpp \
-            src/api/GTTreeView.cpp \
-            src/api/GTTreeWidget.cpp \
-            src/api/GTWebView.cpp \
-            src/api/GTWidget.cpp \
-            src/api/private/GTMenuPrivate.cpp
+#            src/api/GTAction.cpp \
+#            src/api/GTCheckBox.cpp \
+#            src/api/GTClipboard.cpp \
+#            src/api/GTComboBox.cpp \
+#            src/api/GTDoubleSpinBox.cpp \
+#            src/api/GTFile.cpp \
+#            src/api/GTFileDialog.cpp \
+#            src/api/GTGlobals.cpp \
+            src/api/GTGraphicsItem.cpp \ #\
+    src/test_runner/GUITestRunner.cpp
+#            src/api/GTGroupBox.cpp \
+#            src/api/GTKeyboardDriver.cpp \
+#            src/api/GTKeyboardDriverLinux.cpp \
+#            src/api/GTKeyboardDriverMac.cpp \
+#            src/api/GTKeyboardDriverWindows.cpp \
+#            src/api/GTKeyboardUtils.cpp \
+#            src/api/GTLineEdit.cpp \
+#            src/api/GTListWidget.cpp \
+#            src/api/GTMenu.cpp \
+#            src/api/GTMenuBar.cpp \
+#            src/api/GTMouse.cpp \
+#            src/api/GTMouseDriver.cpp \
+#            src/api/GTMouseDriverLinux.cpp \
+#            src/api/GTMouseDriverMac.cpp \
+#            src/api/GTMouseDriverWindows.cpp \
+#            src/api/GTPlainTextEdit.cpp \
+#            src/api/GTRadioButton.cpp \
+#            src/api/GTScrollBar.cpp \
+#            src/api/GTSlider.cpp \
+#            src/api/GTSpinBox.cpp \
+#            src/api/GTTabBar.cpp \
+#            src/api/GTTabWidget.cpp \
+#            src/api/GTTableView.cpp \
+#            src/api/GTTextEdit.cpp \
+#            src/api/GTThread.cpp \
+#            src/api/GTToolbar.cpp \
+#            src/api/GTTreeView.cpp \
+#            src/api/GTTreeWidget.cpp \
+#            src/api/GTWebView.cpp #\
+#            src/api/GTWidget.cpp \
+#            src/api/private/GTMenuPrivate.cpp
 
-macx {
-OBJECTIVE_HEADERS += src/api/private/GTMenuPrivateMac.h
-OBJECTIVE_SOURCES += src/api/private/GTMenuPrivateMac.mm
-}
+#macx {
+#OBJECTIVE_HEADERS += src/api/private/GTMenuPrivateMac.h
+#OBJECTIVE_SOURCES += src/api/private/GTMenuPrivateMac.mm
+#}
+
+FORMS += \
+    src/test_runner/GUITestRunner.ui
+
+RESOURCES += \
+    GUITestBase.qrc
diff --git a/src/plugins/GUITestBase/GUITestBase.qrc b/src/plugins/GUITestBase/GUITestBase.qrc
new file mode 100644
index 0000000..a72d8e5
--- /dev/null
+++ b/src/plugins/GUITestBase/GUITestBase.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/gui_test">
+        <file>images/open_gui_test_runner.png</file>
+    </qresource>
+</RCC>
diff --git a/src/plugins/GUITestBase/images/open_gui_test_runner.png b/src/plugins/GUITestBase/images/open_gui_test_runner.png
new file mode 100644
index 0000000..310ad6f
Binary files /dev/null and b/src/plugins/GUITestBase/images/open_gui_test_runner.png differ
diff --git a/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp b/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
index c8378b5..f93600c 100644
--- a/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
+++ b/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
@@ -26,7 +26,7 @@
 #include <U2Core/Settings.h>
 #include <U2Core/U2DbiUtils.h>
 
-#include <U2Test/GUITest.h>
+#include <core/GUITest.h>
 
 #include "GTDatabaseConfig.h"
 
@@ -48,7 +48,7 @@ const QString READ_ONLY_LOGIN = "read_only_login";
 const QString PASSWORD = "password";
 
 QVariant getSetting(const QString &key) {
-    QSettings settings(GUITest::testDir +"_common_data/database.ini", QSettings::IniFormat);
+    QSettings settings(HI::GUITest::testDir +"_common_data/database.ini", QSettings::IniFormat);
     return settings.value(SETTINGS_ROOT + key);
 }
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
index f79ac0a..c88d7a5 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
@@ -28,25 +28,26 @@
 #include <U2View/AnnotHighlightTreeItem.h>
 
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsAnnotHighlightingTreeView"
 
 const QString GTUtilsAnnotHighlightingTreeView::widgetName = "OP_ANNOT_HIGHLIGHT_TREE";
 
 #define GT_METHOD_NAME "getTreeWidget"
-QTreeWidget* GTUtilsAnnotHighlightingTreeView::getTreeWidget(U2OpStatus &os) {
+QTreeWidget* GTUtilsAnnotHighlightingTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
 
     QTreeWidget *treeWidget = qobject_cast<QTreeWidget*>(GTWidget::findWidget(os, widgetName, NULL, false));
 
@@ -61,7 +62,7 @@ QTreeWidget* GTUtilsAnnotHighlightingTreeView::getTreeWidget(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem* GTUtilsAnnotHighlightingTreeView::findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem* GTUtilsAnnotHighlightingTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
 
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", NULL);
 
@@ -81,7 +82,7 @@ QTreeWidgetItem* GTUtilsAnnotHighlightingTreeView::findItem(U2OpStatus &os, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedItem"
-QString GTUtilsAnnotHighlightingTreeView::getSelectedItem(U2OpStatus &os)
+QString GTUtilsAnnotHighlightingTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 {
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget is NULL", NULL);
@@ -98,7 +99,7 @@ QString GTUtilsAnnotHighlightingTreeView::getSelectedItem(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsAnnotHighlightingTreeView::getItemCenter(U2OpStatus &os, const QString &itemName) {
+QPoint GTUtilsAnnotHighlightingTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
 
     QTreeWidgetItem* item = findItem(os, itemName);
     GT_CHECK_RESULT(item != NULL, "Item " + itemName + " is NULL", QPoint());
@@ -107,7 +108,7 @@ QPoint GTUtilsAnnotHighlightingTreeView::getItemCenter(U2OpStatus &os, const QSt
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsAnnotHighlightingTreeView::click(U2OpStatus &os, const QString &itemName){
+void GTUtilsAnnotHighlightingTreeView::click(HI::GUITestOpStatus &os, const QString &itemName){
     QTreeWidgetItem* item = findItem(os, itemName);
     QTreeWidget* tree = getTreeWidget(os);
     tree->scrollToItem(item);
@@ -118,7 +119,7 @@ void GTUtilsAnnotHighlightingTreeView::click(U2OpStatus &os, const QString &item
 }
 
 #define GT_METHOD_NAME "getItemCenter"
-QColor GTUtilsAnnotHighlightingTreeView::getItemColor(U2OpStatus &os, const QString &itemName){
+QColor GTUtilsAnnotHighlightingTreeView::getItemColor(HI::GUITestOpStatus &os, const QString &itemName){
     QTreeWidgetItem* item = findItem(os, itemName);
     QIcon icon = item->icon(1);
     QPixmap pixmap = icon.pixmap(5, 5);
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
index 6e7d614..8279318 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
@@ -22,25 +22,26 @@
 #ifndef _U2_GUI_ANNOTATIONS_HIGHLIGHTING_TREE_VIEW_UTILS_H_
 #define _U2_GUI_ANNOTATIONS_HIGHLIGHTING_TREE_VIEW_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QTreeWidget;
 class QTreeWidgetItem;
 
 namespace U2 {
+using namespace HI;
 class GTUtilsAnnotHighlightingTreeView {
 public:
-    static QTreeWidget* getTreeWidget(U2OpStatus &os);
+    static QTreeWidget* getTreeWidget(HI::GUITestOpStatus &os);
 
     // returns center or item's rect
     // fails if the item wasn't found
-    static QPoint getItemCenter(U2OpStatus &os, const QString &itemName);
-    static void click(U2OpStatus &os, const QString &itemName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QString &itemName);
+    static void click(HI::GUITestOpStatus &os, const QString &itemName);
 
-    static QTreeWidgetItem* findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QString getSelectedItem(U2OpStatus &os);
+    static QTreeWidgetItem* findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QString getSelectedItem(HI::GUITestOpStatus &os);
 
-    static QColor getItemColor(U2OpStatus &os, const QString &itemName);
+    static QColor getItemColor(HI::GUITestOpStatus &os, const QString &itemName);
 
     static const QString widgetName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
index 13d9ecf..acd91e0 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
@@ -29,43 +29,45 @@
 #include <U2Gui/MainWindow.h>
 
 #include <U2View/AnnotationsTreeView.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsAnnotationsTreeView"
 
 const QString GTUtilsAnnotationsTreeView::widgetName = "annotations_tree_widget";
 
-QTreeWidget* GTUtilsAnnotationsTreeView::getTreeWidget(U2OpStatus &os) {
+QTreeWidget* GTUtilsAnnotationsTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
 
     QTreeWidget *treeWidget = qobject_cast<QTreeWidget*>(GTWidget::findWidget(os, widgetName, GTUtilsMdi::activeWindow(os)));
     return treeWidget;
 }
 
 #define GT_METHOD_NAME "addAnnotationsTableFromProject"
-void GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(U2OpStatus &os, const QString &tableName) {
+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));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAVItemName"
-QString GTUtilsAnnotationsTreeView::getAVItemName(U2OpStatus &os, AVItem* avItem) {
+QString GTUtilsAnnotationsTreeView::getAVItemName(HI::GUITestOpStatus &os, AVItem* avItem) {
 
     GT_CHECK_RESULT(avItem != NULL, "avItem is NULL", "");
 
@@ -107,16 +109,16 @@ QString GTUtilsAnnotationsTreeView::getAVItemName(U2OpStatus &os, AVItem* avItem
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getQualifierValue"
-QString GTUtilsAnnotationsTreeView::getQualifierValue(U2OpStatus &os, const QString &qualifierName, QTreeWidgetItem *parentItem) {
+QString GTUtilsAnnotationsTreeView::getQualifierValue(HI::GUITestOpStatus &os, const QString &qualifierName, QTreeWidgetItem *parentItem) {
     GTTreeWidget::getItemCenter(os, parentItem);
-    QTreeWidgetItem *qualifierItem = findItem(os, qualifierName);
+    QTreeWidgetItem *qualifierItem = findItem(os, qualifierName, parentItem);
     GT_CHECK_RESULT(NULL != qualifierItem, "Qualifier item not found", "");
     return qualifierItem->text(AnnotationsTreeView::COLUMN_VALUE);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getQualifierValue"
-QString GTUtilsAnnotationsTreeView::getQualifierValue(U2OpStatus &os, const QString &qualName, const QString &parentName) {
+QString GTUtilsAnnotationsTreeView::getQualifierValue(HI::GUITestOpStatus &os, const QString &qualName, const QString &parentName) {
     getItemCenter(os, parentName);
     QTreeWidgetItem* parent = findItem(os, parentName);
     GT_CHECK_RESULT(parent != NULL, "Parent item not found", "");
@@ -128,7 +130,7 @@ QString GTUtilsAnnotationsTreeView::getQualifierValue(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotatedRegions"
-QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegions(U2OpStatus &os) {
+QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegions(HI::GUITestOpStatus &os) {
     QList<U2Region> res;
 
     QTreeWidget *treeWidget = getTreeWidget(os);
@@ -147,7 +149,7 @@ QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegions(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotationRegionString"
-QString GTUtilsAnnotationsTreeView::getAnnotationRegionString(U2OpStatus &os, const QString &annotationName) {
+QString GTUtilsAnnotationsTreeView::getAnnotationRegionString(HI::GUITestOpStatus &os, const QString &annotationName) {
     QTreeWidgetItem * annotationItem = findItem(os, annotationName);
     GT_CHECK_RESULT(NULL != annotationItem, "Annotation item is NULL", "");
     return annotationItem->text(AnnotationsTreeView::COLUMN_VALUE);
@@ -155,7 +157,7 @@ QString GTUtilsAnnotationsTreeView::getAnnotationRegionString(U2OpStatus &os, co
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotationType"
-QString GTUtilsAnnotationsTreeView::getAnnotationType(U2OpStatus &os, const QString &annotationName) {
+QString GTUtilsAnnotationsTreeView::getAnnotationType(HI::GUITestOpStatus &os, const QString &annotationName) {
     QTreeWidgetItem * annotationItem = findItem(os, annotationName);
     GT_CHECK_RESULT(NULL != annotationItem, "Annotation item is NULL", "");
     return annotationItem->text(AnnotationsTreeView::COLUMN_TYPE);
@@ -163,7 +165,7 @@ QString GTUtilsAnnotationsTreeView::getAnnotationType(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findFirstAnnotation"
-QTreeWidgetItem * GTUtilsAnnotationsTreeView::findFirstAnnotation(U2OpStatus &os, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem * GTUtilsAnnotationsTreeView::findFirstAnnotation(HI::GUITestOpStatus &os, const GTGlobals::FindOptions &options) {
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget is NULL", NULL);
 
@@ -181,7 +183,7 @@ QTreeWidgetItem * GTUtilsAnnotationsTreeView::findFirstAnnotation(U2OpStatus &os
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
 
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", NULL);
 
@@ -202,7 +204,7 @@ QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(U2OpStatus &os, const QSt
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(U2OpStatus &os, const QString &itemName, QTreeWidgetItem* parentItem, const GTGlobals::FindOptions& options) {
+QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, QTreeWidgetItem* parentItem, const GTGlobals::FindOptions& options) {
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", NULL);
 
     if (parentItem == NULL) {
@@ -224,7 +226,7 @@ QTreeWidgetItem * GTUtilsAnnotationsTreeView::findItem(U2OpStatus &os, const QSt
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItems"
-QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::findItems(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::findItems(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
     QList<QTreeWidgetItem*> result;
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", result);
 
@@ -245,7 +247,7 @@ QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::findItems(U2OpStatus &os, co
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getGroupNames"
-QStringList GTUtilsAnnotationsTreeView::getGroupNames(U2OpStatus &os, const QString &annotationTableName) {
+QStringList GTUtilsAnnotationsTreeView::getGroupNames(HI::GUITestOpStatus &os, const QString &annotationTableName) {
     QList<QTreeWidgetItem *> annotationTableItems;
     if (!annotationTableName.isEmpty()) {
         annotationTableItems << findItem(os, annotationTableName);
@@ -269,7 +271,7 @@ QStringList GTUtilsAnnotationsTreeView::getGroupNames(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotationNamesOfGroup"
-QStringList GTUtilsAnnotationsTreeView::getAnnotationNamesOfGroup(U2OpStatus &os, const QString &groupName) {
+QStringList GTUtilsAnnotationsTreeView::getAnnotationNamesOfGroup(HI::GUITestOpStatus &os, const QString &groupName) {
     Q_UNUSED(os);
     QStringList names;
     QTreeWidgetItem *groupItem = findItem(os, groupName);
@@ -283,7 +285,7 @@ QStringList GTUtilsAnnotationsTreeView::getAnnotationNamesOfGroup(U2OpStatus &os
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotatedRegionsOfGroup"
-QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(U2OpStatus &os, const QString &groupName) {
+QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName) {
     Q_UNUSED(os);
     QList<U2Region> regions;
     QTreeWidgetItem *groupItem = findItem(os, groupName);
@@ -300,7 +302,7 @@ QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(U2OpStatu
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAnnotatedRegionsOfGroup"
-QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(U2OpStatus &os, const QString &groupName, const QString &parentName) {
+QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName, const QString &parentName) {
     Q_UNUSED(os);
     QList<U2Region> regions;
     QTreeWidgetItem *parentItem = findItem(os, parentName);
@@ -324,7 +326,7 @@ QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(U2OpStatu
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findRegion"
-bool GTUtilsAnnotationsTreeView::findRegion(U2OpStatus &os, const QString &itemName, const U2Region& r) {
+bool GTUtilsAnnotationsTreeView::findRegion(HI::GUITestOpStatus &os, const QString &itemName, const U2Region& r) {
     AVAnnotationItem* item = (AVAnnotationItem*)GTUtilsAnnotationsTreeView::findItem(os, itemName);
     CHECK_SET_ERR_RESULT(item != NULL, "Item " + itemName + " not found", false);
     Annotation *ann = item->annotation;
@@ -345,7 +347,7 @@ bool GTUtilsAnnotationsTreeView::findRegion(U2OpStatus &os, const QString &itemN
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedItem"
-QString GTUtilsAnnotationsTreeView::getSelectedItem(U2OpStatus &os)
+QString GTUtilsAnnotationsTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 {
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget is NULL", NULL);
@@ -362,7 +364,7 @@ QString GTUtilsAnnotationsTreeView::getSelectedItem(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAllSelectedItem"
-QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::getAllSelectedItems(U2OpStatus &os)
+QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::getAllSelectedItems(HI::GUITestOpStatus &os)
 {
     QList<QTreeWidgetItem*> res;
 
@@ -382,7 +384,7 @@ QList<QTreeWidgetItem*> GTUtilsAnnotationsTreeView::getAllSelectedItems(U2OpStat
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsAnnotationsTreeView::getItemCenter(U2OpStatus &os, const QString &itemName) {
+QPoint GTUtilsAnnotationsTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
 
     QTreeWidgetItem* item = findItem(os, itemName);
     GT_CHECK_RESULT(item != NULL, "Item " + itemName + " is NULL", QPoint());
@@ -392,7 +394,7 @@ QPoint GTUtilsAnnotationsTreeView::getItemCenter(U2OpStatus &os, const QString &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createQualifier"
-void GTUtilsAnnotationsTreeView::createQualifier(U2OpStatus &os, const QString &qualName, const QString &qualValue, const QString &parentName) {
+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));
@@ -401,7 +403,7 @@ void GTUtilsAnnotationsTreeView::createQualifier(U2OpStatus &os, const QString &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectItems"
-void GTUtilsAnnotationsTreeView::selectItems(U2OpStatus &os, const QStringList &items) {
+void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QStringList &items) {
     GT_CHECK_RESULT(items.size() != 0, "List of items to select is empty", );
     // remove previous selection
     QPoint p = getItemCenter(os, items.first());
@@ -432,7 +434,7 @@ void GTUtilsAnnotationsTreeView::selectItems(U2OpStatus &os, const QStringList &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectItems"
-void GTUtilsAnnotationsTreeView::selectItems(U2OpStatus &os, const QList<QTreeWidgetItem *> &items) {
+void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QList<QTreeWidgetItem *> &items) {
     GT_CHECK_RESULT(items.size() != 0, "List of items to select is empty", );
 
     // remove previous selection
@@ -463,7 +465,7 @@ void GTUtilsAnnotationsTreeView::selectItems(U2OpStatus &os, const QList<QTreeWi
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createAnnotation"
-void GTUtilsAnnotationsTreeView::createAnnotation(U2OpStatus &os, const QString &groupName, const QString &annotationName, const QString &location, bool createNewTable, const QString &saveTo) {
+void GTUtilsAnnotationsTreeView::createAnnotation(HI::GUITestOpStatus &os, const QString &groupName, const QString &annotationName, const QString &location, bool createNewTable, const QString &saveTo) {
     QTreeWidget *annotationsTreeView = getTreeWidget(os);
     GT_CHECK(NULL != annotationsTreeView, "No annotation tree view");
     GTWidget::click(os, annotationsTreeView);
@@ -474,13 +476,13 @@ void GTUtilsAnnotationsTreeView::createAnnotation(U2OpStatus &os, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "deleteItem"
-void GTUtilsAnnotationsTreeView::deleteItem(U2OpStatus &os, const QString &itemName) {
+void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, const QString &itemName) {
     deleteItem(os, findItem(os, itemName));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "deleteItem"
-void GTUtilsAnnotationsTreeView::deleteItem(U2OpStatus &os, QTreeWidgetItem *item) {
+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"]);
@@ -490,21 +492,21 @@ void GTUtilsAnnotationsTreeView::deleteItem(U2OpStatus &os, QTreeWidgetItem *ite
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenuOnItem"
-void GTUtilsAnnotationsTreeView::callContextMenuOnItem(U2OpStatus &os, QTreeWidgetItem *item) {
+void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item) {
     GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
     GTMouseDriver::click(os, Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenuOnItem"
-void GTUtilsAnnotationsTreeView::callContextMenuOnItem(U2OpStatus &os, const QString &itemName) {
+void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, const QString &itemName) {
     GTMouseDriver::moveTo(os, getItemCenter(os, itemName));
     GTMouseDriver::click(os, Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenuOnQualifier"
-void GTUtilsAnnotationsTreeView::callContextMenuOnQualifier(U2OpStatus &os, const QString &parentName, const QString &qualifierName) {
+void GTUtilsAnnotationsTreeView::callContextMenuOnQualifier(HI::GUITestOpStatus &os, const QString &parentName, const QString &qualifierName) {
     getItemCenter(os, parentName);
     callContextMenuOnItem(os, qualifierName);
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
index 15b5a03..b67a6cb 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
@@ -22,63 +22,64 @@
 #ifndef _U2_GUI_ANNOTATIONS_TREE_VIEW_UTILS_H_
 #define _U2_GUI_ANNOTATIONS_TREE_VIEW_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QTreeWidget;
 class QTreeWidgetItem;
 
 namespace U2 {
+using namespace HI;
 
 class AVItem;
 class U2Region;
 
 class GTUtilsAnnotationsTreeView {
 public:
-    static QTreeWidget* getTreeWidget(U2OpStatus &os);
+    static QTreeWidget* getTreeWidget(HI::GUITestOpStatus &os);
 
-    static void addAnnotationsTableFromProject(U2OpStatus &os, const QString &tableName);
+    static void addAnnotationsTableFromProject(HI::GUITestOpStatus &os, const QString &tableName);
 
     // returns center or item's rect
     // fails if the item wasn't found
-    static QPoint getItemCenter(U2OpStatus &os, const QString &itemName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QString &itemName);
 
-    static QTreeWidgetItem * findFirstAnnotation(U2OpStatus &os, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
-    static QTreeWidgetItem * findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QTreeWidgetItem * findItem(U2OpStatus &os, const QString &itemName, QTreeWidgetItem* parentItem, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QList<QTreeWidgetItem*> findItems(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QTreeWidgetItem * findFirstAnnotation(HI::GUITestOpStatus &os, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+    static QTreeWidgetItem * findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QTreeWidgetItem * findItem(HI::GUITestOpStatus &os, const QString &itemName, QTreeWidgetItem* parentItem, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QList<QTreeWidgetItem*> findItems(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
-    static QStringList getGroupNames(U2OpStatus &os, const QString &annotationTableName = "");
+    static QStringList getGroupNames(HI::GUITestOpStatus &os, const QString &annotationTableName = "");
 
-    static QStringList getAnnotationNamesOfGroup(U2OpStatus &os, const QString &groupName);
-    static QList<U2Region> getAnnotatedRegionsOfGroup(U2OpStatus &os, const QString &groupName);
-    static QList<U2Region> getAnnotatedRegionsOfGroup(U2OpStatus &os, const QString &groupName, const QString &parentName);
+    static QStringList getAnnotationNamesOfGroup(HI::GUITestOpStatus &os, const QString &groupName);
+    static QList<U2Region> getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName);
+    static QList<U2Region> getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName, const QString &parentName);
 
     // finds given region in annotation with a given name. U2Region: visible {begin, end} positions.
-    static bool findRegion(U2OpStatus &os, const QString &itemName, const U2Region& region);
+    static bool findRegion(HI::GUITestOpStatus &os, const QString &itemName, const U2Region& region);
 
-    static QString getSelectedItem(U2OpStatus &os);
-    static QList<QTreeWidgetItem*> getAllSelectedItems(U2OpStatus &os);
-    static QString getAVItemName(U2OpStatus &os, AVItem* avItem);
-    static QString getQualifierValue(U2OpStatus &os, const QString &qualifierName, QTreeWidgetItem *parentItem);
-    static QString getQualifierValue(U2OpStatus &os, const QString &qualName, const QString &parentName);
-    static QList<U2Region> getAnnotatedRegions(U2OpStatus &os);
-    static QString getAnnotationRegionString(U2OpStatus &os, const QString &annotationName);
-    static QString getAnnotationType(U2OpStatus &os, const QString &annotationName);
+    static QString getSelectedItem(HI::GUITestOpStatus &os);
+    static QList<QTreeWidgetItem*> getAllSelectedItems(HI::GUITestOpStatus &os);
+    static QString getAVItemName(HI::GUITestOpStatus &os, AVItem* avItem);
+    static QString getQualifierValue(HI::GUITestOpStatus &os, const QString &qualifierName, QTreeWidgetItem *parentItem);
+    static QString getQualifierValue(HI::GUITestOpStatus &os, const QString &qualName, const QString &parentName);
+    static QList<U2Region> getAnnotatedRegions(HI::GUITestOpStatus &os);
+    static QString getAnnotationRegionString(HI::GUITestOpStatus &os, const QString &annotationName);
+    static QString getAnnotationType(HI::GUITestOpStatus &os, const QString &annotationName);
 
-    static void createQualifier(U2OpStatus &os, const QString &qualName, const QString &qualValue, const QString &parentName);
+    static void createQualifier(HI::GUITestOpStatus &os, const QString &qualName, const QString &qualValue, const QString &parentName);
 
-    static void selectItems(U2OpStatus &os, const QStringList& items);
-    static void selectItems(U2OpStatus &os, const QList<QTreeWidgetItem *> &items);
+    static void selectItems(HI::GUITestOpStatus &os, const QStringList& items);
+    static void selectItems(HI::GUITestOpStatus &os, const QList<QTreeWidgetItem *> &items);
 
     // location string format: 1..51
-    static void createAnnotation(U2OpStatus &os, const QString &groupName, const QString &annotationName, const QString &location, bool createNewTable = true, const QString &saveTo = "");
+    static void createAnnotation(HI::GUITestOpStatus &os, const QString &groupName, const QString &annotationName, const QString &location, bool createNewTable = true, const QString &saveTo = "");
 
-    static void deleteItem(U2OpStatus &os, const QString &itemName);
-    static void deleteItem(U2OpStatus &os, QTreeWidgetItem *item);
+    static void deleteItem(HI::GUITestOpStatus &os, const QString &itemName);
+    static void deleteItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item);
 
-    static void callContextMenuOnItem(U2OpStatus &os, QTreeWidgetItem *item);
-    static void callContextMenuOnItem(U2OpStatus &os, const QString &itemName);
-    static void callContextMenuOnQualifier(U2OpStatus &os, const QString &parentName, const QString &qualifierName);
+    static void callContextMenuOnItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item);
+    static void callContextMenuOnItem(HI::GUITestOpStatus &os, const QString &itemName);
+    static void callContextMenuOnQualifier(HI::GUITestOpStatus &os, const QString &parentName, const QString &qualifierName);
 
     static const QString widgetName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
index 21825ae..e1c79dd 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
@@ -30,24 +30,26 @@
 
 #include <U2View/AssemblyBrowser.h>
 #include <U2View/AssemblyModel.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "GTUtilsAssemblyBrowser.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsOptionsPanel.h"
 #include "GTUtilsProjectTreeView.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTToolbar.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsAssemblyBrowser"
 
 #define GT_METHOD_NAME "getView"
-AssemblyBrowserUi *GTUtilsAssemblyBrowser::getView(U2OpStatus& os, const QString &viewTitle) {
+AssemblyBrowserUi *GTUtilsAssemblyBrowser::getView(HI::GUITestOpStatus& os, const QString &viewTitle) {
     Q_UNUSED(os);
 
     const QString objectName = "assembly_browser_" + viewTitle;
@@ -58,14 +60,14 @@ AssemblyBrowserUi *GTUtilsAssemblyBrowser::getView(U2OpStatus& os, const QString
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsAssemblyBrowser::addRefFromProject(U2OpStatus &os, QString docName, QModelIndex parent){
+void GTUtilsAssemblyBrowser::addRefFromProject(HI::GUITestOpStatus &os, QString docName, QModelIndex parent){
     QWidget* renderArea = GTWidget::findWidget(os, "assembly_reads_area");
     QModelIndex ref = GTUtilsProjectTreeView::findIndex(os, docName, parent);
     GTUtilsProjectTreeView::dragAndDrop(os, ref, renderArea);
 }
 
 #define GT_METHOD_NAME "hasReference"
-bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus& os, const QString &viewTitle) {
+bool GTUtilsAssemblyBrowser::hasReference(HI::GUITestOpStatus& os, const QString &viewTitle) {
     Q_UNUSED(os);
 
     AssemblyBrowserUi* view = getView(os, viewTitle);
@@ -76,9 +78,14 @@ bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus& os, const QString &viewTit
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "hasReference"
-bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus& os, QWidget* view) {
+bool GTUtilsAssemblyBrowser::hasReference(HI::GUITestOpStatus& os, QWidget* view) {
     Q_UNUSED(os);
 
+    if (NULL == view) {
+        view = GTUtilsMdi::activeWindow(os);
+    }
+    GT_CHECK_RESULT(NULL != view, "View is NULL", false);
+
     AssemblyBrowserUi* assemblyBrowser = view->findChild<AssemblyBrowserUi*>("assembly_browser_" + view->objectName());
     GT_CHECK_RESULT(NULL != assemblyBrowser, "Assembly browser wasn't found", false);
 
@@ -87,7 +94,7 @@ bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus& os, QWidget* view) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "hasReference"
-bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus &os, AssemblyBrowserUi *assemblyBrowser) {
+bool GTUtilsAssemblyBrowser::hasReference(HI::GUITestOpStatus &os, AssemblyBrowserUi *assemblyBrowser) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != assemblyBrowser, "Assembly browser is NULL", false);
 
@@ -99,7 +106,7 @@ bool GTUtilsAssemblyBrowser::hasReference(U2OpStatus &os, AssemblyBrowserUi *ass
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLength"
-qint64 GTUtilsAssemblyBrowser::getLength(U2OpStatus &os) {
+qint64 GTUtilsAssemblyBrowser::getLength(HI::GUITestOpStatus &os) {
     QWidget *mdi = GTUtilsMdi::activeWindow(os);
 
     QWidget* infoOptionsPanel = GTWidget::findWidget(os, "OP_OPTIONS_WIDGET", mdi);
@@ -124,7 +131,7 @@ qint64 GTUtilsAssemblyBrowser::getLength(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getReadsCount"
-qint64 GTUtilsAssemblyBrowser::getReadsCount(U2OpStatus &os) {
+qint64 GTUtilsAssemblyBrowser::getReadsCount(HI::GUITestOpStatus &os) {
     QWidget *mdi = GTUtilsMdi::activeWindow(os);
 
     QWidget* infoOptionsPanel = GTWidget::findWidget(os, "OP_OPTIONS_WIDGET", mdi);
@@ -148,7 +155,7 @@ qint64 GTUtilsAssemblyBrowser::getReadsCount(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isWelcomeScreenVisible"
-bool GTUtilsAssemblyBrowser::isWelcomeScreenVisible(U2OpStatus &os) {
+bool GTUtilsAssemblyBrowser::isWelcomeScreenVisible(HI::GUITestOpStatus &os) {
     QWidget *coveredRegionsLabel = GTWidget::findWidget(os, "CoveredRegionsLabel", GTUtilsMdi::activeWindow(os));
     GT_CHECK_RESULT(NULL != coveredRegionsLabel, "coveredRegionsLabel is NULL", false);
     return coveredRegionsLabel->isVisible();
@@ -156,13 +163,13 @@ bool GTUtilsAssemblyBrowser::isWelcomeScreenVisible(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "zoomIn"
-void GTUtilsAssemblyBrowser::zoomIn(U2OpStatus &os) {
+void GTUtilsAssemblyBrowser::zoomIn(HI::GUITestOpStatus &os) {
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Zoom in");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "zoomToMax"
-void GTUtilsAssemblyBrowser::zoomToMax(U2OpStatus &os) {
+void GTUtilsAssemblyBrowser::zoomToMax(HI::GUITestOpStatus &os) {
     Q_UNUSED(os);
 
     QToolBar* toolbar = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
@@ -178,7 +185,7 @@ void GTUtilsAssemblyBrowser::zoomToMax(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "zoomToMin"
-void GTUtilsAssemblyBrowser::zoomToMin(U2OpStatus &os) {
+void GTUtilsAssemblyBrowser::zoomToMin(HI::GUITestOpStatus &os) {
     Q_UNUSED(os);
 
     QToolBar* toolbar = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
@@ -194,7 +201,7 @@ void GTUtilsAssemblyBrowser::zoomToMin(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "goToPosition"
-void GTUtilsAssemblyBrowser::goToPosition(U2OpStatus &os, qint64 position) {
+void GTUtilsAssemblyBrowser::goToPosition(HI::GUITestOpStatus &os, qint64 position) {
     Q_UNUSED(os);
 
     QToolBar* toolbar = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
@@ -210,7 +217,7 @@ void GTUtilsAssemblyBrowser::goToPosition(U2OpStatus &os, qint64 position) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenu"
-void GTUtilsAssemblyBrowser::callContextMenu(U2OpStatus &os, GTUtilsAssemblyBrowser::Area area) {
+void GTUtilsAssemblyBrowser::callContextMenu(HI::GUITestOpStatus &os, GTUtilsAssemblyBrowser::Area area) {
     QString widgetName;
     switch (area) {
     case Consensus:
@@ -232,7 +239,7 @@ void GTUtilsAssemblyBrowser::callContextMenu(U2OpStatus &os, GTUtilsAssemblyBrow
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callExportCoverageDialog"
-void GTUtilsAssemblyBrowser::callExportCoverageDialog(U2OpStatus &os, Area area) {
+void GTUtilsAssemblyBrowser::callExportCoverageDialog(HI::GUITestOpStatus &os, Area area) {
     Q_UNUSED(os);
 
     switch (area) {
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
index d82ad10..5d1a50e 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
@@ -24,11 +24,12 @@
 
 #include <QtGlobal>
 #include <QModelIndex>
+#include <GTGlobals.h>
+
 namespace U2 {
 
 class AssemblyBrowserUi;
 class AssemblyModel;
-class U2OpStatus;
 
 class GTUtilsAssemblyBrowser {
 public:
@@ -38,27 +39,27 @@ public:
         Reads
     };
 
-    static AssemblyBrowserUi *getView(U2OpStatus &os, const QString& viewTitle);
+    static AssemblyBrowserUi *getView(HI::GUITestOpStatus &os, const QString& viewTitle);
 
-    static void addRefFromProject(U2OpStatus &os, QString docName, QModelIndex parent = QModelIndex());
+    static void addRefFromProject(HI::GUITestOpStatus &os, QString docName, QModelIndex parent = QModelIndex());
 
-    static bool hasReference(U2OpStatus &os, const QString &viewTitle);
-    static bool hasReference(U2OpStatus &os, QWidget *view);
-    static bool hasReference(U2OpStatus &os, AssemblyBrowserUi *assemblyBrowser);
+    static bool hasReference(HI::GUITestOpStatus &os, const QString &viewTitle);
+    static bool hasReference(HI::GUITestOpStatus &os, QWidget *view = NULL);
+    static bool hasReference(HI::GUITestOpStatus &os, AssemblyBrowserUi *assemblyBrowser);
 
-    static qint64 getLength(U2OpStatus &os);
-    static qint64 getReadsCount(U2OpStatus &os);
+    static qint64 getLength(HI::GUITestOpStatus &os);
+    static qint64 getReadsCount(HI::GUITestOpStatus &os);
 
-    static bool isWelcomeScreenVisible(U2OpStatus &os);
+    static bool isWelcomeScreenVisible(HI::GUITestOpStatus &os);
 
-    static void zoomIn(U2OpStatus& os);
-    static void zoomToMax(U2OpStatus& os);
-    static void zoomToMin(U2OpStatus& os);
+    static void zoomIn(HI::GUITestOpStatus& os);
+    static void zoomToMax(HI::GUITestOpStatus& os);
+    static void zoomToMin(HI::GUITestOpStatus& os);
 
-    static void goToPosition(U2OpStatus &os, qint64 position);
+    static void goToPosition(HI::GUITestOpStatus &os, qint64 position);
 
-    static void callContextMenu(U2OpStatus &os, Area area = Consensus);
-    static void callExportCoverageDialog(U2OpStatus &os, Area area = Consensus);
+    static void callContextMenu(HI::GUITestOpStatus &os, Area area = Consensus);
+    static void callExportCoverageDialog(HI::GUITestOpStatus &os, Area area = Consensus);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
index 225fcf1..572f2d8 100644
--- a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
@@ -36,24 +36,25 @@
 #include <U2View/AnnotationsTreeView.h>
 
 #include "GTUtilsBookmarksTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsBookmarksTreeView"
 
 const QString GTUtilsBookmarksTreeView::widgetName = ACTION_BOOKMARK_TREE_VIEW;
 
 #define GT_METHOD_NAME "getTreeWidget"
-QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(U2OpStatus &os) {
+QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
 
     QTreeWidget *treeWidget = qobject_cast<QTreeWidget*>(GTWidget::findWidget(os, widgetName, NULL, false));
 
@@ -68,7 +69,7 @@ QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
 
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", NULL);
 
@@ -96,7 +97,7 @@ QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(U2OpStatus &os, const QStrin
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedItem"
-QString GTUtilsBookmarksTreeView::getSelectedItem(U2OpStatus &os)
+QString GTUtilsBookmarksTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 {
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget is NULL", NULL);
@@ -113,7 +114,7 @@ QString GTUtilsBookmarksTreeView::getSelectedItem(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addBookmark"
-void GTUtilsBookmarksTreeView::addBookmark(U2OpStatus &os, const QString &viewName, const QString &bookmarkName) {
+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));
@@ -126,7 +127,7 @@ void GTUtilsBookmarksTreeView::addBookmark(U2OpStatus &os, const QString &viewNa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsBookmarksTreeView::getItemCenter(U2OpStatus &os, const QString &itemName) {
+QPoint GTUtilsBookmarksTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
 
     QTreeWidgetItem* item = findItem(os, itemName);
     GT_CHECK_RESULT(item != NULL, "Item " + itemName + " is NULL", QPoint());
diff --git a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
index cf55c50..30c5cc1 100644
--- a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
@@ -22,25 +22,27 @@
 #ifndef _U2_GUI_BOOKMARKS_TREE_VIEW_UTILS_H_
 #define _U2_GUI_BOOKMARKS_TREE_VIEW_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QTreeWidget;
 class QTreeWidgetItem;
 
 namespace U2 {
+using namespace HI;
+
 class GTUtilsBookmarksTreeView {
 public:
-    static QTreeWidget* getTreeWidget(U2OpStatus &os);
+    static QTreeWidget* getTreeWidget(HI::GUITestOpStatus &os);
 
     // returns center or item's rect
     // fails if the item wasn't found
-    static QPoint getItemCenter(U2OpStatus &os, const QString &itemName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QString &itemName);
 
-    static QTreeWidgetItem* findItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QString getSelectedItem(U2OpStatus &os);
-//	static QString getBookmarkItemName(U2OpStatus &os, AVItem* avItem);
+    static QTreeWidgetItem* findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QString getSelectedItem(HI::GUITestOpStatus &os);
+//	static QString getBookmarkItemName(HI::GUITestOpStatus &os, AVItem* avItem);
 
-    static void addBookmark(U2OpStatus &os, const QString &viewName, const QString &bookmarkName);
+    static void addBookmark(HI::GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName);
 
     static const QString widgetName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsCircularView.cpp b/src/plugins/GUITestBase/src/GTUtilsCircularView.cpp
index caabba4..41d95cc 100644
--- a/src/plugins/GUITestBase/src/GTUtilsCircularView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsCircularView.cpp
@@ -1,8 +1,8 @@
 #include "GTUtilsCircularView.h"
 
-#include <api/GTAction.h>
-#include <api/GTGlobals.h>
-#include <api/GTWidget.h>
+#include <primitives/GTAction.h>
+#include <GTGlobals.h>
+#include <primitives/GTWidget.h>
 
 #include <U2Core/U2SafePoints.h>
 
@@ -19,7 +19,7 @@ const QString GTUtilsCv::actionName = "CircularViewAction";
 // CV common test utils
 //////////////////////////////////////////////////////////////////////////
 #define GT_METHOD_NAME "cvBtn::isPresent"
-bool GTUtilsCv::isCvPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget) {
+bool GTUtilsCv::isCvPresent(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget) {
     CHECK_SET_ERR_RESULT(NULL != seqWidget, "NULL sequence widget!", false);
 
     QString cvWidgetName = "CV_" + seqWidget->objectName();
@@ -35,7 +35,7 @@ bool GTUtilsCv::isCvPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget)
 // GTUtilsCv::cvBtn
 //////////////////////////////////////////////////////////////////////////
 #define GT_METHOD_NAME "cvBtn::isPresent"
-bool GTUtilsCv::cvBtn::isPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget) {
+bool GTUtilsCv::cvBtn::isPresent(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget) {
     QAbstractButton *cvButton = getCvButton(os, seqWidget, false);
     CHECK_OP_SET_ERR_RESULT(os, "Error getting CV button!", false);
 
@@ -45,7 +45,7 @@ bool GTUtilsCv::cvBtn::isPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWid
 
 
 #define GT_METHOD_NAME "cvBtn::isChecked"
-bool GTUtilsCv::cvBtn::isChecked(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget) {
+bool GTUtilsCv::cvBtn::isChecked(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget) {
     QAbstractButton *cvButton = getCvButton(os, seqWidget, true /* CV button must exist */ );
 
     CHECK_OP_SET_ERR_RESULT(os, "Error getting CV button!", false);
@@ -59,7 +59,7 @@ bool GTUtilsCv::cvBtn::isChecked(U2OpStatus &os, ADVSingleSequenceWidget *seqWid
 
 
 #define GT_METHOD_NAME "cvBtn::click"
-void GTUtilsCv::cvBtn::click(U2OpStatus &os, ADVSingleSequenceWidget* seqWidget) {
+void GTUtilsCv::cvBtn::click(HI::GUITestOpStatus &os, ADVSingleSequenceWidget* seqWidget) {
     QAbstractButton *cvButton = getCvButton(os, seqWidget, true /* CV button must exist */ );
 
     CHECK_OP_SET_ERR(os, "Error getting CV button!");
@@ -75,7 +75,7 @@ void GTUtilsCv::cvBtn::click(U2OpStatus &os, ADVSingleSequenceWidget* seqWidget)
 // GTUtilsCv::commonCvBtn
 //////////////////////////////////////////////////////////////////////////
 #define GT_METHOD_NAME "commonCvBtn::mustExist"
-void GTUtilsCv::commonCvBtn::mustExist(U2OpStatus &os){
+void GTUtilsCv::commonCvBtn::mustExist(HI::GUITestOpStatus &os){
     GTWidget::findWidget(os, "globalToggleViewAction_widget");
     CHECK_OP_SET_ERR(os, "Error getting global CV button!");
 }
@@ -83,7 +83,7 @@ void GTUtilsCv::commonCvBtn::mustExist(U2OpStatus &os){
 
 
 #define GT_METHOD_NAME "commonCvBtn::click"
-void GTUtilsCv::commonCvBtn::click(U2OpStatus& os){
+void GTUtilsCv::commonCvBtn::click(HI::GUITestOpStatus& os){
     QWidget* button = GTWidget::findWidget(os, "globalToggleViewAction_widget");
     CHECK_OP_SET_ERR(os, "Error getting global CV button!");
 
@@ -104,7 +104,7 @@ void GTUtilsCv::commonCvBtn::click(U2OpStatus& os){
 ////////////////////////////////////////////////////////////////////////
 
 #define GT_METHOD_NAME "GTUtilsCv::getCvButton"
-QAbstractButton * GTUtilsCv::getCvButton(U2OpStatus& os, ADVSingleSequenceWidget* seqWidget, bool setFailedIfNotFound) {
+QAbstractButton * GTUtilsCv::getCvButton(HI::GUITestOpStatus& os, ADVSingleSequenceWidget* seqWidget, bool setFailedIfNotFound) {
     GT_CHECK_RESULT(NULL != seqWidget, "NULL sequence widget!", NULL)
 
     QAbstractButton* cvButton = GTAction::button(os, actionName, seqWidget, GTGlobals::FindOptions(setFailedIfNotFound));
diff --git a/src/plugins/GUITestBase/src/GTUtilsCircularView.h b/src/plugins/GUITestBase/src/GTUtilsCircularView.h
index 2efbc7e..c2400ce 100644
--- a/src/plugins/GUITestBase/src/GTUtilsCircularView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsCircularView.h
@@ -3,11 +3,11 @@
 
 #include <QAbstractButton>
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 
 namespace U2{
-
+using namespace HI;
 class ADVSingleSequenceWidget;
 
 class GTUtilsCv
@@ -17,43 +17,43 @@ public:
      * Returns "true", if CV widget exists in @seqWidget.
      * Returns "false", if it does not exist or in case of an error.
      */
-    static bool isCvPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget);
+    static bool isCvPresent(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget);
 
     /** Test utils for CV button on a sequence widget */
     class cvBtn {
         public:
         /** Returns "true", if there is CV button in @seqWidget */
-        static bool isPresent(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget);
+        static bool isPresent(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget);
 
         /**
          * Returns "true", if there is CV button in @seqWidget, it is checkable and checked
          * Status @os is set to error if the button does not exist on @seqWidget or it is not checkable.
          */
-        static bool isChecked(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget);
+        static bool isChecked(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget);
 
         /**
          * Clicks CV button in @seqWidget.
          * Status @os is set to error if the button does not exist.
          */
-        static void click(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget);
+        static void click(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget);
     };
 
     /** Test utils for CV button on the Sequence View toolbar (common for several sequences) */
     class commonCvBtn {
         public:
         /** Status @os is set to an error if there is no CV button on the main toolbar */
-        static void mustExist(U2OpStatus& os);
+        static void mustExist(HI::GUITestOpStatus& os);
 
         /**
          * Clicks CV button on the main toolbar.
          * Status @os is set to error if the button does not exist.
          */
-        static void click(U2OpStatus& os);
+        static void click(HI::GUITestOpStatus& os);
     };
 
 
 private:
-    static QAbstractButton * getCvButton(U2OpStatus& os, ADVSingleSequenceWidget* seqWidget, bool setFailedIfNotFound);
+    static QAbstractButton * getCvButton(HI::GUITestOpStatus& os, ADVSingleSequenceWidget* seqWidget, bool setFailedIfNotFound);
 
     static const QString actionName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp b/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
index 92f9870..1bae558 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
@@ -19,13 +19,13 @@
 * MA 02110-1301, USA.
 */
 
+#include <QTabWidget>
 #include <QWebElement>
 #include <QWebFrame>
 #include <QWebView>
 
-#include "api/GTMouseDriver.h"
-#include "api/GTWebView.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWebView.h>
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsDashboard.h"
 
@@ -42,33 +42,37 @@ QMap<QString, GTUtilsDashboard::Tabs> GTUtilsDashboard::initTabMap(){
 
 const QMap<QString, GTUtilsDashboard::Tabs> GTUtilsDashboard::tabMap = initTabMap();
 
-QWebView* GTUtilsDashboard::getDashboard(U2OpStatus &os){
+QWebView* GTUtilsDashboard::getDashboard(HI::GUITestOpStatus &os){
     return GTWidget::findExactWidget<QWebView*>(os, "Dashboard");
 }
 
-QWebElement GTUtilsDashboard::findElement(U2OpStatus &os, QString text, QString tag, bool exactMatch){
+QTabWidget* GTUtilsDashboard::getTabWidget(HI::GUITestOpStatus &os){
+    return GTWidget::findExactWidget<QTabWidget*>(os, "WorkflowTabView");
+}
+
+QWebElement GTUtilsDashboard::findElement(HI::GUITestOpStatus &os, QString text, QString tag, bool exactMatch){
     return GTWebView::findElement(os, getDashboard(os), text, tag, exactMatch);
 }
 
-QWebElement GTUtilsDashboard::findTreeElement(U2OpStatus &os, QString text){
+QWebElement GTUtilsDashboard::findTreeElement(HI::GUITestOpStatus &os, QString text){
     return GTWebView::findTreeElement(os, getDashboard(os), text);
 }
 
-QWebElement GTUtilsDashboard::findContextMenuElement(U2OpStatus &os, QString text){
+QWebElement GTUtilsDashboard::findContextMenuElement(HI::GUITestOpStatus &os, QString text){
     return GTWebView::findContextMenuElement(os, getDashboard(os), text);
 }
 
-void GTUtilsDashboard::click(U2OpStatus &os, QWebElement el, Qt::MouseButton button){
+void GTUtilsDashboard::click(HI::GUITestOpStatus &os, QWebElement el, Qt::MouseButton button){
     GTWebView::click(os, getDashboard(os), el, button);
 }
 
-bool GTUtilsDashboard::areThereProblems(U2OpStatus &os) {
+bool GTUtilsDashboard::areThereProblems(HI::GUITestOpStatus &os) {
     openTab(os, Overview);
     return GTWebView::doesElementExist(os, getDashboard(os), "Problems", "DIV", true);
 }
 
 #define GT_METHOD_NAME "openTab"
-void GTUtilsDashboard::openTab(U2OpStatus &os, Tabs tab){
+void GTUtilsDashboard::openTab(HI::GUITestOpStatus &os, Tabs tab){
     QWebElement el = GTWebView::findElement(os, getDashboard(os), tabMap.key(tab), "A");
     GTWebView::click(os, getDashboard(os), el);
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsDashboard.h b/src/plugins/GUITestBase/src/GTUtilsDashboard.h
index 20b6d3e..5c18031 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDashboard.h
+++ b/src/plugins/GUITestBase/src/GTUtilsDashboard.h
@@ -23,25 +23,28 @@
 #ifndef GTUTILSDASHBOARD_H
 #define GTUTILSDASHBOARD_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QWebView;
 class QWebElement;
+class QTabWidget;
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsDashboard
 {
 public:
     enum Tabs{Overview, Input, ExternalTools};
-    static QWebView* getDashboard(U2OpStatus &os);
-
-    static QWebElement findElement(U2OpStatus &os, QString text, QString tag = "*", bool exactMatch = false);
-    static QWebElement findTreeElement(U2OpStatus &os, QString text);
-    static QWebElement findContextMenuElement(U2OpStatus &os, QString text);
-    static void click(U2OpStatus &os, QWebElement el, Qt::MouseButton button = Qt::LeftButton);
-    static bool areThereProblems(U2OpStatus &os);
-    static void openTab(U2OpStatus &os, Tabs tab);
+    static QWebView* getDashboard(HI::GUITestOpStatus &os);
+    static QTabWidget* getTabWidget(HI::GUITestOpStatus &os);
+
+    static QWebElement findElement(HI::GUITestOpStatus &os, QString text, QString tag = "*", bool exactMatch = false);
+    static QWebElement findTreeElement(HI::GUITestOpStatus &os, QString text);
+    static QWebElement findContextMenuElement(HI::GUITestOpStatus &os, QString text);
+    static void click(HI::GUITestOpStatus &os, QWebElement el, Qt::MouseButton button = Qt::LeftButton);
+    static bool areThereProblems(HI::GUITestOpStatus &os);
+    static void openTab(HI::GUITestOpStatus &os, Tabs tab);
 
 private:
     static QMap<QString, Tabs> initTabMap();
diff --git a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
index 01857b3..cf364d6 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
@@ -20,13 +20,13 @@
  */
 
 #include "GTUtilsDocument.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
 #include "GTUtilsProjectTreeView.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Core/AppContext.h>
@@ -41,13 +41,14 @@
 
 
 namespace U2 {
+using namespace HI;
 
 const QString GTUtilsDocument::DocumentUnloaded = "Unloaded";
 
 #define GT_CLASS_NAME "GTUtilsDocument"
 
 #define GT_METHOD_NAME "getDocument"
-Document* GTUtilsDocument::getDocument(U2OpStatus &os, const QString& documentName) {
+Document* GTUtilsDocument::getDocument(HI::GUITestOpStatus &os, const QString& documentName) {
 
     Project* p = AppContext::getProject();
     GT_CHECK_RESULT(p != NULL, "Project does not exist", NULL);
@@ -64,7 +65,7 @@ Document* GTUtilsDocument::getDocument(U2OpStatus &os, const QString& documentNa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkDocument"
-void GTUtilsDocument::checkDocument(U2OpStatus &os, const QString &documentName, const GObjectViewFactoryId &id) {
+void GTUtilsDocument::checkDocument(HI::GUITestOpStatus &os, const QString &documentName, const GObjectViewFactoryId &id) {
 
     GTGlobals::sleep(1000);
 
@@ -87,15 +88,14 @@ void GTUtilsDocument::checkDocument(U2OpStatus &os, const QString &documentName,
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsDocument::removeDocument(U2OpStatus &os, const QString &documentName, GTGlobals::UseMethod method)
+void GTUtilsDocument::removeDocument(HI::GUITestOpStatus &os, const QString &documentName, GTGlobals::UseMethod method)
 {
-    Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED, method);
-
     switch (method) {
     case GTGlobals::UseMouse:
     {
+        Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED, method);
         GTUtilsDialog::waitForDialog(os, popupChooser);
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName));
+        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
 
         GTMouseDriver::click(os, Qt::RightButton);
         break;
@@ -103,7 +103,7 @@ void GTUtilsDocument::removeDocument(U2OpStatus &os, const QString &documentName
 
     default:
     case GTGlobals::UseKey:
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName));
+        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
         GTMouseDriver::click(os);
 
         GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
@@ -114,7 +114,7 @@ void GTUtilsDocument::removeDocument(U2OpStatus &os, const QString &documentName
 }
 
 #define GT_METHOD_NAME "getDocumentGObjectView"
-GObjectView* GTUtilsDocument::getDocumentGObjectView(U2OpStatus &os, Document* d) {
+GObjectView* GTUtilsDocument::getDocumentGObjectView(HI::GUITestOpStatus &os, Document* d) {
 
     GT_CHECK_RESULT(d != NULL, "Document* is NULL", NULL);
 
@@ -130,7 +130,7 @@ GObjectView* GTUtilsDocument::getDocumentGObjectView(U2OpStatus &os, Document* d
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isDocumentLoaded"
-bool GTUtilsDocument::isDocumentLoaded(U2OpStatus &os, const QString& documentName)
+bool GTUtilsDocument::isDocumentLoaded(HI::GUITestOpStatus &os, const QString& documentName)
 {
     QModelIndex index = GTUtilsProjectTreeView::findIndex(os, GTUtilsProjectTreeView::getTreeView(os), documentName);
     QString s = index.data().toString();
@@ -139,11 +139,11 @@ bool GTUtilsDocument::isDocumentLoaded(U2OpStatus &os, const QString& documentNa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "saveDocument"
-void GTUtilsDocument::saveDocument(U2OpStatus &os, const QString &documentName) {
+void GTUtilsDocument::saveDocument(HI::GUITestOpStatus &os, const QString &documentName) {
     Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__SAVE_DOCUMENT, GTGlobals::UseMouse);
 
     GTUtilsDialog::waitForDialog(os, popupChooser);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName));
+    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
     GTMouseDriver::click(os, Qt::RightButton);
 
     GTGlobals::sleep(500);
@@ -151,7 +151,7 @@ void GTUtilsDocument::saveDocument(U2OpStatus &os, const QString &documentName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "unloadDocument"
-void GTUtilsDocument::unloadDocument(U2OpStatus &os, const QString &documentName, bool waitForMessageBox) {
+void GTUtilsDocument::unloadDocument(HI::GUITestOpStatus &os, const QString &documentName, bool waitForMessageBox) {
     GT_CHECK_RESULT( isDocumentLoaded(os, documentName), "Document is not loaded", );
 
     Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__UNLOAD_SELECTED, GTGlobals::UseMouse);
@@ -162,7 +162,7 @@ void GTUtilsDocument::unloadDocument(U2OpStatus &os, const QString &documentName
     }
 
     GTUtilsDialog::waitForDialog(os, popupChooser);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName));
+    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
     GTMouseDriver::click(os, Qt::RightButton);
 
     GTGlobals::sleep(500);
@@ -170,10 +170,10 @@ void GTUtilsDocument::unloadDocument(U2OpStatus &os, const QString &documentName
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "loadDocument"
-void GTUtilsDocument::loadDocument(U2OpStatus &os, const QString &documentName) {
+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));
+    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
     GTMouseDriver::doubleClick(os);
 
     GTGlobals::sleep(500);
@@ -181,7 +181,7 @@ void GTUtilsDocument::loadDocument(U2OpStatus &os, const QString &documentName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "lockDocument"
-void GTUtilsDocument::lockDocument(U2OpStatus &os, const QString &documentName) {
+void GTUtilsDocument::lockDocument(HI::GUITestOpStatus &os, const QString &documentName) {
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Lock document for editing"));
     GTUtilsProjectTreeView::click(os, documentName, Qt::RightButton);
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsDocument.h b/src/plugins/GUITestBase/src/GTUtilsDocument.h
index d2c0fcc..f75fe1c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDocument.h
+++ b/src/plugins/GUITestBase/src/GTUtilsDocument.h
@@ -22,9 +22,11 @@
 #ifndef _U2_GUI_DOCUMENT_UTILS_H_
 #define _U2_GUI_DOCUMENT_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
+#include <U2Core/U2IdTypes.h>
 
 namespace U2 {
+using namespace HI;
 
 class GObjectView;
 class Document;
@@ -34,22 +36,22 @@ public:
     static const QString DocumentUnloaded;
 
     // checks if the document with a given name exists and loaded in a view with a given factory Id
-    static void checkDocument(U2OpStatus &os, const QString &documentName, const GObjectViewFactoryId &id = QString());
+    static void checkDocument(HI::GUITestOpStatus &os, const QString &documentName, const GObjectViewFactoryId &id = QString());
 
-    static void removeDocument(U2OpStatus &os, const QString &documentName, GTGlobals::UseMethod method = GTGlobals::UseKey);
+    static void removeDocument(HI::GUITestOpStatus &os, const QString &documentName, GTGlobals::UseMethod method = GTGlobals::UseKey);
 
-    static Document* getDocument(U2OpStatus &os, const QString& documentName);
+    static Document* getDocument(HI::GUITestOpStatus &os, const QString& documentName);
 
-    static bool isDocumentLoaded(U2OpStatus &os, const QString& documentName);
+    static bool isDocumentLoaded(HI::GUITestOpStatus &os, const QString& documentName);
 
-    static void saveDocument(U2OpStatus &os, const QString& documentName);
-    static void unloadDocument(U2OpStatus &os, const QString& documentName, bool waitForMessageBox = true);
-    static void loadDocument(U2OpStatus &os, const QString& documentName);
+    static void saveDocument(HI::GUITestOpStatus &os, const QString& documentName);
+    static void unloadDocument(HI::GUITestOpStatus &os, const QString& documentName, bool waitForMessageBox = true);
+    static void loadDocument(HI::GUITestOpStatus &os, const QString& documentName);
 
-    static void lockDocument(U2OpStatus &os, const QString& documentName);
+    static void lockDocument(HI::GUITestOpStatus &os, const QString& documentName);
 
 protected:
-    static GObjectView* getDocumentGObjectView(U2OpStatus &os, Document* d);
+    static GObjectView* getDocumentGObjectView(HI::GUITestOpStatus &os, Document* d);
 
 private:
     static QList<GObjectView*> getAllGObjectViews();
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
index 9e706b9..793fec3 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
 
 #include "GTUtilsEscClicker.h"
 
 namespace U2 {
 
-GTUtilsEscClicker::GTUtilsEscClicker( U2OpStatus &_os, const QString &menuObjectName, bool _mouse )
+GTUtilsEscClicker::GTUtilsEscClicker( HI::GUITestOpStatus &_os, const QString &menuObjectName, bool _mouse )
     : Filler( _os, GUIDialogWaiter::WaitSettings( menuObjectName, GUIDialogWaiter::Popup ) ),
     mouse( _mouse )
 {
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.h b/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
index 56ba8c1..0f9b027 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
+++ b/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
@@ -23,13 +23,14 @@ k
 #ifndef GTUTILS_ESC_CLICKER_H_
 #define GTUTILS_ESC_CLICKER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsEscClicker : public Filler {
 public:
-    GTUtilsEscClicker( U2OpStatus &_os, const QString &menuObjectName, bool _mouse = false );
+    GTUtilsEscClicker( HI::GUITestOpStatus &_os, const QString &menuObjectName, bool _mouse = false );
     virtual void run();
 
 private:
diff --git a/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp b/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
index 78a996f..52d3173 100644
--- a/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
@@ -23,9 +23,9 @@
 
 #include <U2Gui/MainWindow.h>
 
-#include "GTUtilsDialog.h"
-#include "api/GTMenu.h"
-#include "runnables/qt/PopupChooser.h"
+#include "utils/GTUtilsDialog.h"
+#include "primitives/GTMenu.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 
 #include "GTUtilsExternalTools.h"
@@ -40,7 +40,7 @@ public:
 
     }
 
-    void run(U2OpStatus &os) {
+    void run(HI::GUITestOpStatus &os) {
         AppSettingsDialogFiller::clearToolPath(os, toolName);
 
         QWidget *dialog = QApplication::activeModalWidget();
@@ -60,7 +60,7 @@ public:
 
     }
 
-    void run(U2OpStatus &os) {
+    void run(HI::GUITestOpStatus &os) {
         AppSettingsDialogFiller::setExternalToolPath(os, toolName, url);
 
         QWidget *dialog = QApplication::activeModalWidget();
@@ -76,18 +76,16 @@ private:
 #define GT_CLASS_NAME "GTUtilsExternalTools"
 
 #define GT_METHOD_NAME "removeTool"
-void GTUtilsExternalTools::removeTool(U2OpStatus &os, const QString &toolName) {
+void GTUtilsExternalTools::removeTool(HI::GUITestOpStatus &os, const QString &toolName) {
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new RemoveToolScenario(toolName)));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setToolUrl"
-void GTUtilsExternalTools::setToolUrl(U2OpStatus &os, const QString &toolName, const QString &url) {
+void GTUtilsExternalTools::setToolUrl(HI::GUITestOpStatus &os, const QString &toolName, const QString &url) {
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new SetToolUrlScenario(toolName, url)));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsExternalTools.h b/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
index 30d914a..464a0c4 100644
--- a/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
+++ b/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 class GTUtilsExternalTools {
 public:
-    static void removeTool(U2OpStatus &os, const QString &toolName);
-    static void setToolUrl(U2OpStatus &os, const QString &toolName, const QString &url);
+    static void removeTool(HI::GUITestOpStatus &os, const QString &toolName);
+    static void setToolUrl(HI::GUITestOpStatus &os, const QString &toolName, const QString &url);
 };
 
 } // U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsLog.cpp b/src/plugins/GUITestBase/src/GTUtilsLog.cpp
index bd5a1fa..0af659d 100644
--- a/src/plugins/GUITestBase/src/GTUtilsLog.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsLog.cpp
@@ -21,8 +21,10 @@
 
 #include "GTUtilsLog.h"
 #include "U2Core/LogCache.h"
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
+using namespace HI;
 
 GTLogTracer::GTLogTracer(QString _expectedMessage)
 : wasError(false), wasMessage(false), expectedMessage(_expectedMessage) {
@@ -64,7 +66,7 @@ bool GTLogTracer::checkMessage(QString s){
 
 #define GT_CLASS_NAME "GTUtilsLog"
 #define GT_METHOD_NAME "check"
-void GTUtilsLog::check(U2OpStatus &os, const GTLogTracer& logTracer) {
+void GTUtilsLog::check(HI::GUITestOpStatus &os, const GTLogTracer& logTracer) {
     Q_UNUSED(os);
     GTGlobals::sleep(500);
     GT_CHECK(!logTracer.hasError(), "There is an error in log: " + logTracer.getError());
@@ -72,7 +74,7 @@ void GTUtilsLog::check(U2OpStatus &os, const GTLogTracer& logTracer) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkContainsError"
-void GTUtilsLog::checkContainsError(U2OpStatus &os, const GTLogTracer &logTracer, const QString &messagePart) {
+void GTUtilsLog::checkContainsError(HI::GUITestOpStatus &os, const GTLogTracer &logTracer, const QString &messagePart) {
     Q_UNUSED(os);
     GTGlobals::sleep(500);
     GT_CHECK(logTracer.hasError(), "There is no errors in the log");
@@ -81,7 +83,7 @@ void GTUtilsLog::checkContainsError(U2OpStatus &os, const GTLogTracer &logTracer
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkContainsMessage"
-void GTUtilsLog::checkContainsMessage(U2OpStatus &os, const GTLogTracer &logTracer, bool expected) {
+void GTUtilsLog::checkContainsMessage(HI::GUITestOpStatus &os, const GTLogTracer &logTracer, bool expected) {
     Q_UNUSED(os);
     GT_CHECK(logTracer.getExpectedMessage() != "", "Expected message shoul be specyfied on creating GTLogtracer");
     GTGlobals::sleep(500);
@@ -94,7 +96,7 @@ void GTUtilsLog::checkContainsMessage(U2OpStatus &os, const GTLogTracer &logTrac
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getErrors"
-QStringList GTUtilsLog::getErrors(U2OpStatus &os, const GTLogTracer &logTracer) {
+QStringList GTUtilsLog::getErrors(HI::GUITestOpStatus &os, const GTLogTracer &logTracer) {
     QStringList result;
     foreach (LogMessage *message, logTracer.getMessages()) {
         if (LogLevel_ERROR == message->level) {
diff --git a/src/plugins/GUITestBase/src/GTUtilsLog.h b/src/plugins/GUITestBase/src/GTUtilsLog.h
index 7d07869..2468529 100644
--- a/src/plugins/GUITestBase/src/GTUtilsLog.h
+++ b/src/plugins/GUITestBase/src/GTUtilsLog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_LOG_UTILS_H_
 #define _U2_GUI_LOG_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <U2Core/Log.h>
 
 namespace U2 {
@@ -52,10 +52,10 @@ private:
 
 class GTUtilsLog {
 public:
-    static void check(U2OpStatus &os, const GTLogTracer &logTracer);
-    static void checkContainsError(U2OpStatus &os, const GTLogTracer& logTracer, const QString &messagePart);
-    static void checkContainsMessage(U2OpStatus &os, const GTLogTracer& logTracer, bool expected = true);
-    static QStringList getErrors(U2OpStatus &os, const GTLogTracer &logTracer);
+    static void check(HI::GUITestOpStatus &os, const GTLogTracer &logTracer);
+    static void checkContainsError(HI::GUITestOpStatus &os, const GTLogTracer& logTracer, const QString &messagePart);
+    static void checkContainsMessage(HI::GUITestOpStatus &os, const GTLogTracer& logTracer, bool expected = true);
+    static QStringList getErrors(HI::GUITestOpStatus &os, const GTLogTracer &logTracer);
 
 };
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
index c01bf12..136f708 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
@@ -19,28 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTUtilsMdi.h"
-#include <api/GTMouseDriver.h>
-#include <U2Gui/MainWindow.h>
+#include <QApplication>
+#include <QMainWindow>
+#include <QMdiSubWindow>
+#include <QMenu>
+
 #include <U2Core/AppContext.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <QtGui/QMdiSubWindow>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QMdiSubWindow>
-#include <QtWidgets/QMenu>
-#endif
+#include <U2Core/U2SafePoints.h>
+#include <U2Gui/MainWindow.h>
+
+#include "GTUtilsMdi.h"
+#include "GTGlobals.h"
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include "utils/GTThread.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsMdi"
 
 #define GT_METHOD_NAME "click"
-void GTUtilsMdi::click(U2OpStatus &os, GTGlobals::WindowAction action) {
+void GTUtilsMdi::click(HI::GUITestOpStatus &os, GTGlobals::WindowAction action) {
 
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK(mw != NULL, "MainWindow == NULL");
@@ -61,21 +62,19 @@ void GTUtilsMdi::click(U2OpStatus &os, GTGlobals::WindowAction action) {
 
     // TODO: make click on button
     switch (action) {
-    case GTGlobals::Minimize:
-        mdiWindow->showMinimized();
-        break;
     case GTGlobals::Maximize:
-        mdiWindow->showMaximized();
+        GTWidget::showMaximized(os, mdiWindow);
         break;
     case GTGlobals::Close: {
         int left = mdiWindow->rect().left();
         int top = mdiWindow->rect().top();
-        QPoint p(left+15,top-10);
+        QPoint p(left + 15,top - 10);
         GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(p));
         GTMouseDriver::click(os);
         break;
     }
     default:
+        assert(false);
         break;
     }
 #endif
@@ -83,18 +82,29 @@ void GTUtilsMdi::click(U2OpStatus &os, GTGlobals::WindowAction action) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findWindow"
-QWidget* GTUtilsMdi::findWindow(U2OpStatus &os, const QString& windowName, const GTGlobals::FindOptions& options) {
-
+QWidget * GTUtilsMdi::findWindow(HI::GUITestOpStatus &os, const QString &windowName, const GTGlobals::FindOptions &options) {
+    Q_UNUSED(os);
     GT_CHECK_RESULT(windowName.isEmpty() == false, "windowname is empty", NULL);
 
-    MainWindow* mw = AppContext::getMainWindow();
+    MainWindow *mw = AppContext::getMainWindow();
     GT_CHECK_RESULT(mw != NULL, "MainWindow == NULL", NULL);
 
-    QList<MWMDIWindow*> mdiWindows = mw->getMDIManager()->getWindows();
-    foreach (MWMDIWindow* w, mdiWindows) {
+    QList<MWMDIWindow *> mdiWindows = mw->getMDIManager()->getWindows();
+    foreach (MWMDIWindow *w, mdiWindows) {
         QString mdiTitle = w->windowTitle();
-        if (mdiTitle == windowName) {
-            return w;
+        switch (options.matchPolicy) {
+        case Qt::MatchExactly:
+            if (mdiTitle == windowName) {
+                return w;
+            }
+            break;
+        case Qt::MatchContains:
+            if (mdiTitle.contains(windowName)) {
+                return w;
+            }
+            break;
+        default:
+            GT_CHECK_RESULT(false, "Not implemented", NULL);
         }
     }
 
@@ -106,24 +116,86 @@ QWidget* GTUtilsMdi::findWindow(U2OpStatus &os, const QString& windowName, const
 }
 #undef GT_METHOD_NAME
 
-
 #define GT_METHOD_NAME "closeWindow"
-bool GTUtilsMdi::closeWindow(U2OpStatus &os, const QString &windowName, const GTGlobals::FindOptions& options) {
-    GT_CHECK_RESULT(windowName.isEmpty() == false, "windowname is empty", false);
+void GTUtilsMdi::closeWindow(HI::GUITestOpStatus &os, const QString &windowName, const GTGlobals::FindOptions& options) {
+    GT_CHECK(windowName.isEmpty() == false, "windowname is empty");
 
     MainWindow* mw = AppContext::getMainWindow();
-    GT_CHECK_RESULT(mw != NULL, "MainWindow == NULL", false);
+    GT_CHECK(mw != NULL, "MainWindow == NULL");
 
-    MWMDIManager* manager = mw->getMDIManager();
     MWMDIWindow* window = qobject_cast<MWMDIWindow*>(findWindow(os, windowName, options));
-    GT_CHECK_RESULT(window != NULL, "Cannot find MDI window", false);
-    return manager->closeMDIWindow( window );
+    GT_CHECK(window != NULL, "Cannot find MDI window");
+    GTWidget::close(os, window->parentWidget());
 }
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "closeAllWindows"
+void GTUtilsMdi::closeAllWindows(HI::GUITestOpStatus &os) {
+#ifndef Q_OS_MAC
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            const QList<QMdiSubWindow *> mdiWindows = AppContext::getMainWindow()->getQMainWindow()->findChildren<QMdiSubWindow *>();
+            foreach (QMdiSubWindow *mdiWindow, mdiWindows) {
+                GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
+                mdiWindow->close();
+                GTGlobals::sleep(100);
+            }
+        }
+    };
+
+    GTThread::runInMainThread(os, new Scenario);
+#else
+    // GUI on Mac hangs because of bug in QCocoaEventDispatcher
+    // It looks like this issue: https://bugreports.qt.io/browse/QTBUG-45389
+    // This part can be removed after Qt bug will be fixed
+    // And now: some magic!
 
+    QWidget *prevWindow = NULL;
+    QWidget *mdiWindow = NULL;
+    GTGlobals::FindOptions options(false);
+
+    while (NULL != (mdiWindow = GTUtilsMdi::activeWindow(os, options))) {
+        GT_CHECK(prevWindow != mdiWindow, "Can't close MDI window");
+        prevWindow = mdiWindow;
+
+        GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
+
+        const QPoint closeButtonPos = GTWidget::getWidgetGlobalTopLeftPoint(os, mdiWindow) + QPoint(10, 5);
+        GTMouseDriver::moveTo(os, closeButtonPos);
+        GTMouseDriver::click(os);
+        GTGlobals::sleep(100);
+        GTThread::waitForMainThread(os);
+    }
+#endif
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "waitWindowOpened"
+void GTUtilsMdi::waitWindowOpened(HI::GUITestOpStatus &os, const QString &windowNamePart, qint64 timeout) {
+    MainWindow *mainWindow = AppContext::getMainWindow();
+    GT_CHECK(mainWindow != NULL, "MainWindow == NULL");
+    MWMDIManager *mdiManager = mainWindow->getMDIManager();
+    GT_CHECK(mdiManager != NULL, "MainWindow == NULL");
+
+    bool found = false;
+    int passedTime = 0;
+    while (!found && passedTime < timeout / 1000) {
+        foreach (MWMDIWindow *window, mdiManager->getWindows()) {
+            found |= window->windowTitle().contains(windowNamePart, Qt::CaseInsensitive);
+        }
+        GTGlobals::sleep(1000);
+        passedTime++;
+    }
+
+    if (!found) {
+        os.setError(QString("Cannot find MDI window with part of name '%1', timeout").arg(windowNamePart));
+    }
+}
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "activeWindow"
-QWidget* GTUtilsMdi::activeWindow(U2OpStatus &os, const GTGlobals::FindOptions& options) {
+QWidget* GTUtilsMdi::activeWindow(HI::GUITestOpStatus &os, const GTGlobals::FindOptions& options) {
 
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK_RESULT(mw != NULL, "MainWindow == NULL", NULL);
@@ -137,7 +209,7 @@ QWidget* GTUtilsMdi::activeWindow(U2OpStatus &os, const GTGlobals::FindOptions&
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "activeWindowTitle"
-QString GTUtilsMdi::activeWindowTitle(U2OpStatus &os){
+QString GTUtilsMdi::activeWindowTitle(HI::GUITestOpStatus &os){
     QWidget* w = activeWindow(os);
     MWMDIWindow* mdi = qobject_cast<MWMDIWindow*>(w);
     GT_CHECK_RESULT(mdi, "unexpected object type", QString());
@@ -146,18 +218,24 @@ QString GTUtilsMdi::activeWindowTitle(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "activateWindow"
-void GTUtilsMdi::activateWindow(U2OpStatus &os, const QString &windowName){
+void GTUtilsMdi::activateWindow(HI::GUITestOpStatus &os, const QString &windowName){
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK(mw != NULL, "MainWindow == NULL");
 
-    MWMDIWindow* window = qobject_cast<MWMDIWindow*>(findWindow(os, windowName));
-    GT_CHECK(window != NULL, "window " + windowName + " not found")
-    mw->getMDIManager()->activateWindow(window);
+    CHECK(!activeWindowTitle(os).contains(windowName), );
+
+    GTGlobals::FindOptions options;
+    options.matchPolicy = Qt::MatchContains;
+    MWMDIWindow* window = qobject_cast<MWMDIWindow*>(findWindow(os, windowName, options));
+    GT_CHECK(window != NULL, "window " + windowName + " not found");
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "Window" << windowName, GTGlobals::UseMouse, Qt::MatchContains);
+    GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getMdiItemPosition"
-QPoint GTUtilsMdi::getMdiItemPosition(U2OpStatus &os, const QString& windowName){
+QPoint GTUtilsMdi::getMdiItemPosition(HI::GUITestOpStatus &os, const QString& windowName){
     QWidget* w = findWindow(os, windowName);
     GT_CHECK_RESULT(w != NULL, "MDI window not found", QPoint());
     const QRect r = w->rect();
@@ -166,7 +244,7 @@ QPoint GTUtilsMdi::getMdiItemPosition(U2OpStatus &os, const QString& windowName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectRandomRegion"
-void GTUtilsMdi::selectRandomRegion(U2OpStatus &os, const QString& windowName){
+void GTUtilsMdi::selectRandomRegion(HI::GUITestOpStatus &os, const QString& windowName){
     QWidget* w = findWindow(os, windowName);
     GT_CHECK(w != NULL, "MDI window not found");
     const QRect r = w->rect();
@@ -199,7 +277,7 @@ bool isWidgetPartVisible(QWidget *widget) {
 }
 
 #define GT_METHOD_NAME "isAnyPartOfWindowVisible"
-bool GTUtilsMdi::isAnyPartOfWindowVisible(U2OpStatus &os, const QString &windowName) {
+bool GTUtilsMdi::isAnyPartOfWindowVisible(HI::GUITestOpStatus &os, const QString &windowName) {
     GTGlobals::FindOptions options;
     options.failIfNull = false;
     QWidget *window = findWindow(os, windowName, options);
diff --git a/src/plugins/GUITestBase/src/GTUtilsMdi.h b/src/plugins/GUITestBase/src/GTUtilsMdi.h
index b6a79fd..500a05f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMdi.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMdi.h
@@ -22,29 +22,33 @@
 #ifndef _U2_GT_UTILS_MDI_H_
 #define _U2_GT_UTILS_MDI_H_
 
-#include "api/GTGlobals.h"
-#include "api/GTMenuBar.h"
-#include "api/GTWidget.h"
 #include <QPoint>
 
+#include "GTGlobals.h"
+#include "primitives/GTMenuBar.h"
+#include <primitives/GTWidget.h>
+
 namespace U2 {
+using namespace HI;
 class GTUtilsMdi {
 public:
-    static void click(U2OpStatus &os, GTGlobals::WindowAction action);
-    static QPoint getMdiItemPosition(U2OpStatus &os, const QString& windowName);
-    static void selectRandomRegion(U2OpStatus &os, const QString& windowName);
-    static bool isAnyPartOfWindowVisible(U2OpStatus &os, const QString& windowName);
+    static void click(HI::GUITestOpStatus &os, GTGlobals::WindowAction action);
+    static QPoint getMdiItemPosition(HI::GUITestOpStatus &os, const QString& windowName);
+    static void selectRandomRegion(HI::GUITestOpStatus &os, const QString& windowName);
+    static bool isAnyPartOfWindowVisible(HI::GUITestOpStatus &os, const QString& windowName);
 
     // fails if MainWindow is NULL or because of FindOptions settings
-    static QWidget* activeWindow(U2OpStatus &os, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QString activeWindowTitle(U2OpStatus &os);
-    static void activateWindow(U2OpStatus &os, const QString& windowName);
+    static QWidget* activeWindow(HI::GUITestOpStatus &os, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QString activeWindowTitle(HI::GUITestOpStatus &os);
+    static void activateWindow(HI::GUITestOpStatus &os, const QString& windowName);
 
     // finds a window with a given window title in MDIManager windows
     // fails if windowName is empty or because of FindOptions settings
-    static QWidget* findWindow(U2OpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QWidget* findWindow(HI::GUITestOpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
-    static bool closeWindow(U2OpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static void closeWindow(HI::GUITestOpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static void closeAllWindows(HI::GUITestOpStatus &os);
+    static void waitWindowOpened(HI::GUITestOpStatus &os, const QString &windowNamePart, qint64 timeout = 180000);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
index bfae8eb..4fd8d55 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
@@ -25,29 +25,37 @@
 #include <U2View/MSAEditorNameList.h>
 #include <U2View/MSAEditorOverviewArea.h>
 #include <U2View/MSAGraphOverview.h>
+#include <U2View/MSASimpleOverview.h>
+
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/PopupChooser.h>
 
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
 #include "api/GTMSAEditorStatusWidget.h"
-#include "api/GTToolbar.h"
-#include "runnables/qt/PopupChooser.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsMsaEditor"
 
 #define GT_METHOD_NAME "getGraphOverviewTopLeftPixelColor"
-QColor GTUtilsMsaEditor::getGraphOverviewPixelColor(U2OpStatus &os, const QPoint &point) {
+QColor GTUtilsMsaEditor::getGraphOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point) {
     return GTWidget::getColor(os, getGraphOverview(os), point);
 }
+
+QColor GTUtilsMsaEditor::getSimpleOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point) {
+    return GTWidget::getColor(os, getSimpleOverview(os), point);
+}
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getEditor"
-MSAEditor * GTUtilsMsaEditor::getEditor(U2OpStatus &os) {
+MSAEditor * GTUtilsMsaEditor::getEditor(HI::GUITestOpStatus &os) {
     MSAEditorUI *editorUi = getEditorUi(os);
     CHECK_OP(os, NULL);
     return editorUi->getEditor();
@@ -55,7 +63,7 @@ MSAEditor * GTUtilsMsaEditor::getEditor(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getEditorUi"
-MSAEditorUI * GTUtilsMsaEditor::getEditorUi(U2OpStatus &os) {
+MSAEditorUI * GTUtilsMsaEditor::getEditorUi(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
     return activeWindow->findChild<MSAEditorUI *>();
@@ -63,7 +71,7 @@ MSAEditorUI * GTUtilsMsaEditor::getEditorUi(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getGraphOverview"
-MSAGraphOverview * GTUtilsMsaEditor::getGraphOverview(U2OpStatus &os) {
+MSAGraphOverview * GTUtilsMsaEditor::getGraphOverview(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
@@ -73,8 +81,19 @@ MSAGraphOverview * GTUtilsMsaEditor::getGraphOverview(U2OpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getSimpleOverview"
+MSASimpleOverview * GTUtilsMsaEditor::getSimpleOverview(HI::GUITestOpStatus &os) {
+    QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
+    CHECK_OP(os, NULL);
+
+    MSASimpleOverview *result = GTWidget::findExactWidget<MSASimpleOverview *>(os, MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME + QString("_simple"), activeWindow);
+    GT_CHECK_RESULT(NULL != result, "MSASimpleOverview is not found", NULL);
+    return result;
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "getTreeView"
-MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(U2OpStatus &os) {
+MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
     return GTWidget::findExactWidget<MSAEditorTreeViewerUI *>(os, "treeView", activeWindow);
@@ -82,7 +101,7 @@ MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNameListArea"
-MSAEditorNameList * GTUtilsMsaEditor::getNameListArea(U2OpStatus &os) {
+MSAEditorNameList * GTUtilsMsaEditor::getNameListArea(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
@@ -93,7 +112,7 @@ MSAEditorNameList * GTUtilsMsaEditor::getNameListArea(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getConsensusArea"
-MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(U2OpStatus &os) {
+MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
     return GTWidget::findExactWidget<MSAEditorConsensusArea *>(os, "consArea", activeWindow);
@@ -101,13 +120,13 @@ MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceNameRect"
-MSAEditorSequenceArea * GTUtilsMsaEditor::getSequenceArea(U2OpStatus &os) {
+MSAEditorSequenceArea * GTUtilsMsaEditor::getSequenceArea(HI::GUITestOpStatus &os) {
     return GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceNameRect"
-QRect GTUtilsMsaEditor::getSequenceNameRect(U2OpStatus &os, const QString &sequenceName) {
+QRect GTUtilsMsaEditor::getSequenceNameRect(HI::GUITestOpStatus &os, const QString &sequenceName) {
     Q_UNUSED(os);
     MSAEditorNameList *nameList = getNameListArea(os);
     GT_CHECK_RESULT(NULL != nameList, "MSAEditorNameList not found", QRect());
@@ -122,7 +141,7 @@ QRect GTUtilsMsaEditor::getSequenceNameRect(U2OpStatus &os, const QString &seque
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getColumnHeaderRect"
-QRect GTUtilsMsaEditor::getColumnHeaderRect(U2OpStatus &os, int column) {
+QRect GTUtilsMsaEditor::getColumnHeaderRect(HI::GUITestOpStatus &os, int column) {
     MSAEditorConsensusArea *consensusArea = getConsensusArea(os);
     GT_CHECK_RESULT(NULL != consensusArea, "Consensus area is NULL", QRect());
     MSAEditorSequenceArea *sequenceArea = getSequenceArea(os);
@@ -135,7 +154,7 @@ QRect GTUtilsMsaEditor::getColumnHeaderRect(U2OpStatus &os, int column) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "replaceSequence"
-void GTUtilsMsaEditor::replaceSequence(U2OpStatus &os, const QString &sequenceToReplace, int targetPosition) {
+void GTUtilsMsaEditor::replaceSequence(HI::GUITestOpStatus &os, const QString &sequenceToReplace, int targetPosition) {
     clickSequenceName(os, sequenceToReplace);
 
     targetPosition = qMax(0, qMin(getSequencesCount(os) - 1, targetPosition));
@@ -152,14 +171,14 @@ void GTUtilsMsaEditor::replaceSequence(U2OpStatus &os, const QString &sequenceTo
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeColumn"
-void GTUtilsMsaEditor::removeColumn(U2OpStatus &os, int column) {
+void GTUtilsMsaEditor::removeColumn(HI::GUITestOpStatus &os, int column) {
     clickColumn(os, column);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickSequenceName"
-void GTUtilsMsaEditor::clickSequenceName(U2OpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton) {
+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);
@@ -167,7 +186,7 @@ void GTUtilsMsaEditor::clickSequenceName(U2OpStatus &os, const QString &sequence
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickColumn"
-void GTUtilsMsaEditor::clickColumn(U2OpStatus &os, int column, Qt::MouseButton mouseButton) {
+void GTUtilsMsaEditor::clickColumn(HI::GUITestOpStatus &os, int column, Qt::MouseButton mouseButton) {
     MSAEditorConsensusArea *consensusArea = getConsensusArea(os);
     GT_CHECK(NULL != consensusArea, "Consensus area is NULL");
 
@@ -178,20 +197,20 @@ void GTUtilsMsaEditor::clickColumn(U2OpStatus &os, int column, Qt::MouseButton m
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getReferenceSequenceName"
-QString GTUtilsMsaEditor::getReferenceSequenceName(U2OpStatus &os) {
+QString GTUtilsMsaEditor::getReferenceSequenceName(HI::GUITestOpStatus &os) {
     return GTUtilsOptionPanelMsa::getReference(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleCollapsingMode"
-void GTUtilsMsaEditor::toggleCollapsingMode(U2OpStatus &os) {
+void GTUtilsMsaEditor::toggleCollapsingMode(HI::GUITestOpStatus &os) {
     Q_UNUSED(os);
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Switch on/off collapsing"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceCollapsed"
-bool GTUtilsMsaEditor::isSequenceCollapsed(U2OpStatus &os, const QString &seqName){
+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);
@@ -201,7 +220,7 @@ bool GTUtilsMsaEditor::isSequenceCollapsed(U2OpStatus &os, const QString &seqNam
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleCollapsingMode"
-void GTUtilsMsaEditor::toggleCollapsingGroup(U2OpStatus &os, const QString &groupName) {
+void GTUtilsMsaEditor::toggleCollapsingGroup(HI::GUITestOpStatus &os, const QString &groupName) {
     Q_UNUSED(os);
 
     const QRect sequenceNameRect = getSequenceNameRect(os, groupName);
@@ -217,26 +236,33 @@ void GTUtilsMsaEditor::toggleCollapsingGroup(U2OpStatus &os, const QString &grou
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequencesCount"
-int GTUtilsMsaEditor::getSequencesCount(U2OpStatus &os) {
+int GTUtilsMsaEditor::getSequencesCount(HI::GUITestOpStatus &os) {
     QWidget *statusWidget = GTWidget::findWidget(os, "msa_editor_status_bar");
     return GTMSAEditorStatusWidget::getSequencesCount(os, statusWidget);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "undo"
-void GTUtilsMsaEditor::undo(U2OpStatus &os) {
+void GTUtilsMsaEditor::undo(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_undo"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "redo"
-void GTUtilsMsaEditor::redo(U2OpStatus &os) {
+void GTUtilsMsaEditor::redo(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_redo"));
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "buildPhylogeneticTree"
+void GTUtilsMsaEditor::buildPhylogeneticTree(HI::GUITestOpStatus &os, const QString &pathToSave) {
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, pathToSave, 0, 0, true));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "setReference"
-void GTUtilsMsaEditor::setReference(U2OpStatus &os, const QString &sequenceName) {
+void GTUtilsMsaEditor::setReference(HI::GUITestOpStatus &os, const QString &sequenceName) {
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference", GTGlobals::UseMouse));
     clickSequenceName(os, sequenceName, Qt::RightButton);
     GTGlobals::sleep(100);
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
index d2b6bd2..ef2e291 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
@@ -22,54 +22,58 @@
 #ifndef _U2_GT_UTILS_MSA_EDITOR_H_
 #define _U2_GT_UTILS_MSA_EDITOR_H_
 
-#include <QtCore/QRect>
-
-#include <QtGui/QColor>
+#include <QColor>
+#include <QRect>
+#include <GTGlobals.h>
 
 namespace U2 {
 
 class MSAEditor;
-class MSAEditorUI;
 class MSAEditorConsensusArea;
 class MSAEditorNameList;
 class MSAEditorSequenceArea;
 class MSAEditorTreeViewerUI;
+class MSAEditorUI;
 class MSAGraphOverview;
-class U2OpStatus;
+class MSASimpleOverview;
 
 // If you can't find an appropriate method check the GTUtilsMsaEditorSequenceArea class
 class GTUtilsMsaEditor {
 public:
-    static QColor getGraphOverviewPixelColor(U2OpStatus &os, const QPoint &point);
+    static QColor getGraphOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point);
+    static QColor getSimpleOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point);
+
+    static MSAEditor * getEditor(HI::GUITestOpStatus &os);
+    static MSAEditorUI * getEditorUi(HI::GUITestOpStatus &os);
+    static MSAGraphOverview * getGraphOverview(HI::GUITestOpStatus &os);
+    static MSASimpleOverview * getSimpleOverview(HI::GUITestOpStatus &os);
+    static MSAEditorTreeViewerUI * getTreeView(HI::GUITestOpStatus &os);
+    static MSAEditorNameList * getNameListArea(HI::GUITestOpStatus &os);
+    static MSAEditorConsensusArea * getConsensusArea(HI::GUITestOpStatus &os);
+    static MSAEditorSequenceArea * getSequenceArea(HI::GUITestOpStatus &os);
 
-    static MSAEditor * getEditor(U2OpStatus &os);
-    static MSAEditorUI * getEditorUi(U2OpStatus &os);
-    static MSAGraphOverview * getGraphOverview(U2OpStatus &os);
-    static MSAEditorTreeViewerUI * getTreeView(U2OpStatus &os);
-    static MSAEditorNameList * getNameListArea(U2OpStatus &os);
-    static MSAEditorConsensusArea * getConsensusArea(U2OpStatus &os);
-    static MSAEditorSequenceArea * getSequenceArea(U2OpStatus &os);
+    static QRect getSequenceNameRect(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static QRect getColumnHeaderRect(HI::GUITestOpStatus &os, int column);
 
-    static QRect getSequenceNameRect(U2OpStatus &os, const QString &sequenceName);
-    static QRect getColumnHeaderRect(U2OpStatus &os, int column);
+    static void replaceSequence(HI::GUITestOpStatus &os, const QString &sequenceToReplace, int targetPosition);
+    static void removeColumn(HI::GUITestOpStatus &os, int column);
 
-    static void replaceSequence(U2OpStatus &os, const QString &sequenceToReplace, int targetPosition);
-    static void removeColumn(U2OpStatus &os, int column);
+    static void clickSequenceName(HI::GUITestOpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton = Qt::LeftButton);
+    static void clickColumn(HI::GUITestOpStatus &os, int column, Qt::MouseButton mouseButton = Qt::LeftButton);
 
-    static void clickSequenceName(U2OpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton = Qt::LeftButton);
-    static void clickColumn(U2OpStatus &os, int column, Qt::MouseButton mouseButton = Qt::LeftButton);
+    static QString getReferenceSequenceName(HI::GUITestOpStatus &os);
+    static void setReference(HI::GUITestOpStatus &os, const QString &sequenceName);
 
-    static QString getReferenceSequenceName(U2OpStatus &os);
-    static void setReference(U2OpStatus &os, const QString &sequenceName);
+    static void toggleCollapsingMode(HI::GUITestOpStatus &os);
+    static void toggleCollapsingGroup(HI::GUITestOpStatus &os, const QString &groupName);
+    static bool isSequenceCollapsed(HI::GUITestOpStatus &os, const QString &seqName);
 
-    static void toggleCollapsingMode(U2OpStatus &os);
-    static void toggleCollapsingGroup(U2OpStatus &os, const QString &groupName);
-    static bool isSequenceCollapsed(U2OpStatus &os, const QString &seqName);
+    static int getSequencesCount(HI::GUITestOpStatus &os);
 
-    static int getSequencesCount(U2OpStatus &os);
+    static void undo(HI::GUITestOpStatus &os);
+    static void redo(HI::GUITestOpStatus &os);
 
-    static void undo(U2OpStatus &os);
-    static void redo(U2OpStatus &os);
+    static void buildPhylogeneticTree(HI::GUITestOpStatus &os, const QString &pathToSave);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
index 961cf6e..cbbe9cd 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
@@ -24,28 +24,29 @@
 #include <U2Core/AppContext.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorDataList.h>
+#include <U2View/MsaEditorSimilarityColumn.h>
 
 #include "GTUtilsMsaEditor.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
-#include "api/GTAction.h"
-#include "api/GTClipboard.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
+#include "primitives/GTAction.h"
+#include "system/GTClipboard.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
 #include "api/GTMSAEditorStatusWidget.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
 
 namespace U2 {
+using namespace HI;
 const QString GTUtilsMSAEditorSequenceArea::highlightningColorName = "#9999cc";
 
 #define GT_CLASS_NAME "GTUtilsMSAEditorSequenceArea"
 
 #define GT_METHOD_NAME "getSequenceArea"
-MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(U2OpStatus &os) {
+MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(HI::GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
@@ -56,7 +57,7 @@ MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(U2OpStatus
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenu"
-void GTUtilsMSAEditorSequenceArea::callContextMenu(U2OpStatus &os, const QPoint &innerCoords) {
+void GTUtilsMSAEditorSequenceArea::callContextMenu(HI::GUITestOpStatus &os, const QPoint &innerCoords) {
     if (innerCoords.isNull()) {
         GTWidget::click(os, getSequenceArea(os), Qt::RightButton);
     } else {
@@ -67,7 +68,7 @@ void GTUtilsMSAEditorSequenceArea::callContextMenu(U2OpStatus &os, const QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "moveTo"
-void GTUtilsMSAEditorSequenceArea::moveTo(U2OpStatus &os, const QPoint &p)
+void GTUtilsMSAEditorSequenceArea::moveTo(HI::GUITestOpStatus &os, const QPoint &p)
 {
     QPoint convP = convertCoordinates(os,p);
 
@@ -76,7 +77,7 @@ void GTUtilsMSAEditorSequenceArea::moveTo(U2OpStatus &os, const QPoint &p)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "convertCoordinates"
-QPoint GTUtilsMSAEditorSequenceArea::convertCoordinates(U2OpStatus &os, const QPoint p){
+QPoint GTUtilsMSAEditorSequenceArea::convertCoordinates(HI::GUITestOpStatus &os, const QPoint p){
     QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", activeWindow));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found",QPoint());
@@ -97,7 +98,7 @@ QPoint GTUtilsMSAEditorSequenceArea::convertCoordinates(U2OpStatus &os, const QP
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectArea"
-void GTUtilsMSAEditorSequenceArea::selectArea(U2OpStatus &os, QPoint p1, QPoint p2)
+void GTUtilsMSAEditorSequenceArea::selectArea(HI::GUITestOpStatus &os, QPoint p1, QPoint p2)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK(msaEditArea != NULL, "MsaEditorSequenceArea not found");
@@ -116,19 +117,19 @@ void GTUtilsMSAEditorSequenceArea::selectArea(U2OpStatus &os, QPoint p1, QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "cancelSelection"
-void GTUtilsMSAEditorSequenceArea::cancelSelection(U2OpStatus &os) {
+void GTUtilsMSAEditorSequenceArea::cancelSelection(HI::GUITestOpStatus &os) {
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTUtilsMSAEditorSequenceArea::click(U2OpStatus &os, QPoint p) {
+void GTUtilsMSAEditorSequenceArea::click(HI::GUITestOpStatus &os, QPoint p) {
     selectArea(os, p, p);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scrollToPosition"
-void GTUtilsMSAEditorSequenceArea::scrollToPosition(U2OpStatus &os, const QPoint &position) {
+void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, const QPoint &position) {
     MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
     GT_CHECK(msaSeqArea->isInRange(position), "Position is out of range");
@@ -168,7 +169,7 @@ void GTUtilsMSAEditorSequenceArea::scrollToPosition(U2OpStatus &os, const QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scrollToBottom"
-void GTUtilsMSAEditorSequenceArea::scrollToBottom(U2OpStatus &os) {
+void GTUtilsMSAEditorSequenceArea::scrollToBottom(HI::GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
 
@@ -194,7 +195,7 @@ void GTUtilsMSAEditorSequenceArea::scrollToBottom(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickToPosition"
-void GTUtilsMSAEditorSequenceArea::clickToPosition(U2OpStatus &os, const QPoint &position) {
+void GTUtilsMSAEditorSequenceArea::clickToPosition(HI::GUITestOpStatus &os, const QPoint &position) {
     MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
     GT_CHECK(msaSeqArea->isInRange(position), "Position is out of range");
@@ -206,7 +207,7 @@ void GTUtilsMSAEditorSequenceArea::clickToPosition(U2OpStatus &os, const QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkSelectedRect"
-void GTUtilsMSAEditorSequenceArea::checkSelectedRect(U2OpStatus &os, const QRect &expectedRect)
+void GTUtilsMSAEditorSequenceArea::checkSelectedRect(HI::GUITestOpStatus &os, const QRect &expectedRect)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(msaEditArea != NULL, "MsaEditorSequenceArea not found");
@@ -218,7 +219,7 @@ void GTUtilsMSAEditorSequenceArea::checkSelectedRect(U2OpStatus &os, const QRect
 }
 #undef GT_METHOD_NAME
 #define GT_METHOD_NAME "checkSorted"
-void GTUtilsMSAEditorSequenceArea::checkSorted(U2OpStatus &os, bool sortedState) {
+void GTUtilsMSAEditorSequenceArea::checkSorted(HI::GUITestOpStatus &os, bool sortedState) {
 
     QStringList names = getNameList(os);
 
@@ -231,7 +232,7 @@ void GTUtilsMSAEditorSequenceArea::checkSorted(U2OpStatus &os, bool sortedState)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNameList"
-QStringList GTUtilsMSAEditorSequenceArea::getNameList(U2OpStatus &os) {
+QStringList GTUtilsMSAEditorSequenceArea::getNameList(HI::GUITestOpStatus &os) {
 
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     MSAEditor* editor = mw->findChild<MSAEditor*>();
@@ -244,7 +245,7 @@ QStringList GTUtilsMSAEditorSequenceArea::getNameList(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getVisibaleNames"
-QStringList GTUtilsMSAEditorSequenceArea::getVisibaleNames(U2OpStatus &os){
+QStringList GTUtilsMSAEditorSequenceArea::getVisibaleNames(HI::GUITestOpStatus &os){
     Q_UNUSED(os);
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     MSAEditor* editor = mw->findChild<MSAEditor*>();
@@ -269,7 +270,7 @@ QStringList GTUtilsMSAEditorSequenceArea::getVisibaleNames(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeSequence"
-void GTUtilsMSAEditorSequenceArea::removeSequence(U2OpStatus &os, const QString &sequenceName) {
+void GTUtilsMSAEditorSequenceArea::removeSequence(HI::GUITestOpStatus &os, const QString &sequenceName) {
     selectSequence(os, sequenceName);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
 }
@@ -277,9 +278,9 @@ void GTUtilsMSAEditorSequenceArea::removeSequence(U2OpStatus &os, const QString
 
 
 #define GT_METHOD_NAME "getSimilarityValue"
-QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(U2OpStatus &os, int row){
+QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(HI::GUITestOpStatus &os, int row){
     //bad sulution, but better then nothing
-    MSAEditorSimilarityColumn* simCol = dynamic_cast<MSAEditorSimilarityColumn*>(GTWidget::findWidget(os, "msa_editor_similarity_column"));
+    MsaEditorSimilarityColumn* simCol = dynamic_cast<MsaEditorSimilarityColumn*>(GTWidget::findWidget(os, "msa_editor_similarity_column"));
     GT_CHECK_RESULT(simCol != NULL, "SimilarityColumn is NULL", "");
 
     return simCol->getTextForRow(row);
@@ -288,7 +289,7 @@ QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(U2OpStatus &os, int row
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickCollapceTriangle"
-void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(U2OpStatus &os, QString seqName){
+void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(HI::GUITestOpStatus &os, QString seqName){
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GT_CHECK(msaEditArea != NULL, "MsaEditorSequenceArea not found");
 
@@ -303,7 +304,7 @@ void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(U2OpStatus &os, QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isCollapsed"
-bool GTUtilsMSAEditorSequenceArea::isCollapsed(U2OpStatus &os, QString seqName){
+bool GTUtilsMSAEditorSequenceArea::isCollapsed(HI::GUITestOpStatus &os, QString seqName){
     QStringList names = getNameList(os);
     QStringList visiable = getVisibaleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), "sequence " + seqName + " not found", false);
@@ -312,7 +313,7 @@ bool GTUtilsMSAEditorSequenceArea::isCollapsed(U2OpStatus &os, QString seqName){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "collapsingMode"
-bool GTUtilsMSAEditorSequenceArea::collapsingMode(U2OpStatus &os){
+bool GTUtilsMSAEditorSequenceArea::collapsingMode(HI::GUITestOpStatus &os){
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     bool nameLists = getVisibaleNames(os)==getNameList(os);
     if(nameLists && !collapce->isChecked()){
@@ -326,7 +327,7 @@ bool GTUtilsMSAEditorSequenceArea::collapsingMode(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLeftOffset"
-int GTUtilsMSAEditorSequenceArea::getLeftOffset(U2OpStatus &os)
+int GTUtilsMSAEditorSequenceArea::getLeftOffset(HI::GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
@@ -337,7 +338,7 @@ int GTUtilsMSAEditorSequenceArea::getLeftOffset(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLeftOffset"
-int GTUtilsMSAEditorSequenceArea::getRightOffset(U2OpStatus &os)
+int GTUtilsMSAEditorSequenceArea::getRightOffset(HI::GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
@@ -347,7 +348,7 @@ int GTUtilsMSAEditorSequenceArea::getRightOffset(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLength"
-int GTUtilsMSAEditorSequenceArea::getLength(U2OpStatus &os) {
+int GTUtilsMSAEditorSequenceArea::getLength(HI::GUITestOpStatus &os) {
 
     QWidget *statusWidget = GTWidget::findWidget(os, "msa_editor_status_bar");
     return GTMSAEditorStatusWidget::length(os, statusWidget);
@@ -355,7 +356,7 @@ int GTUtilsMSAEditorSequenceArea::getLength(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNumVisibleBases"
-int GTUtilsMSAEditorSequenceArea::getNumVisibleBases(U2OpStatus &os) {
+int GTUtilsMSAEditorSequenceArea::getNumVisibleBases(HI::GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
 
@@ -364,7 +365,7 @@ int GTUtilsMSAEditorSequenceArea::getNumVisibleBases(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedRect"
-QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(U2OpStatus &os) {
+QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(HI::GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", QRect());
 
@@ -373,7 +374,7 @@ QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "offsetsVisible"
-bool GTUtilsMSAEditorSequenceArea::offsetsVisible(U2OpStatus &os) {
+bool GTUtilsMSAEditorSequenceArea::offsetsVisible(HI::GUITestOpStatus &os) {
 
     QWidget *leftOffsetWidget = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_left");
     QWidget *rightOffsetWidget = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_right");
@@ -385,7 +386,7 @@ bool GTUtilsMSAEditorSequenceArea::offsetsVisible(U2OpStatus &os) {
 }
 #undef GT_METHOD_NAME
 #define GT_METHOD_NAME "checkConsensus"
-void GTUtilsMSAEditorSequenceArea::checkConsensus(U2OpStatus &os, QString cons){
+void GTUtilsMSAEditorSequenceArea::checkConsensus(HI::GUITestOpStatus &os, QString cons){
     QWidget *consArea = GTWidget::findWidget(os,"consArea");
     CHECK_SET_ERR(consArea!=NULL,"consArea is NULL");
 
@@ -400,7 +401,7 @@ void GTUtilsMSAEditorSequenceArea::checkConsensus(U2OpStatus &os, QString cons){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectSequence"
-void GTUtilsMSAEditorSequenceArea::selectSequence(U2OpStatus &os, const QString &seqName) {
+void GTUtilsMSAEditorSequenceArea::selectSequence(HI::GUITestOpStatus &os, const QString &seqName) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
             (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(msaEditArea != NULL, "MsaEditorSequenceArea not found");
@@ -415,7 +416,7 @@ void GTUtilsMSAEditorSequenceArea::selectSequence(U2OpStatus &os, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceSelected"
-bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(U2OpStatus &os, const QString &seqName) {
+bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(HI::GUITestOpStatus &os, const QString &seqName) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
             (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", false);
@@ -437,7 +438,7 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME
-int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(U2OpStatus &os) {
+int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(HI::GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
         (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", 0);
@@ -447,14 +448,14 @@ int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceVisible"
-bool GTUtilsMSAEditorSequenceArea::isSequenceVisible(U2OpStatus &os, const QString &seqName) {
+bool GTUtilsMSAEditorSequenceArea::isSequenceVisible(HI::GUITestOpStatus &os, const QString &seqName) {
     QStringList visiableRowNames = getVisibaleNames(os);
     return visiableRowNames.contains(seqName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceData"
-QString GTUtilsMSAEditorSequenceArea::getSequenceData(U2OpStatus &os, const QString &sequenceName) {
+QString GTUtilsMSAEditorSequenceArea::getSequenceData(HI::GUITestOpStatus &os, const QString &sequenceName) {
     Q_UNUSED(os);
     MSAEditorSequenceArea *sequenceArea = getSequenceArea(os);
     GT_CHECK_RESULT(NULL != sequenceArea, "Sequence area is NULL", "");
@@ -470,7 +471,7 @@ QString GTUtilsMSAEditorSequenceArea::getSequenceData(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectColumnInConsensus"
-void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( U2OpStatus &os, int columnNumber ) {
+void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( HI::GUITestOpStatus &os, int columnNumber ) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow( os );
     const MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea *>(
         GTWidget::findWidget( os, "msa_editor_sequence_area", activeWindow ) );
@@ -497,7 +498,7 @@ void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( U2OpStatus &os, int
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "hasAminoAlphabet"
-bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(U2OpStatus &os)
+bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(HI::GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", false);
@@ -507,7 +508,7 @@ bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceHightighted"
-bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(U2OpStatus &os, const QString &seqName){
+bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(HI::GUITestOpStatus &os, const QString &seqName){
     QStringList names = getVisibaleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), QString("sequence with name %1 not found").arg(seqName), false);
 
@@ -536,7 +537,7 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(U2OpStatus &os, const Q
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getColor"
-QString GTUtilsMSAEditorSequenceArea::getColor(U2OpStatus &os, QPoint p){
+QString GTUtilsMSAEditorSequenceArea::getColor(HI::GUITestOpStatus &os, QPoint p){
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", "");
 
@@ -550,7 +551,7 @@ QString GTUtilsMSAEditorSequenceArea::getColor(U2OpStatus &os, QPoint p){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkColor"
-bool GTUtilsMSAEditorSequenceArea::checkColor(U2OpStatus &os, const QPoint &p, const QString &expectedColor){
+bool GTUtilsMSAEditorSequenceArea::checkColor(HI::GUITestOpStatus &os, const QPoint &p, const QString &expectedColor){
     QColor c = getColor(os, p);
     bool result = (expectedColor == c.name());
     GT_CHECK_RESULT(result, QString("wrong color. Expected: %1, actual: %2").arg(expectedColor).arg(c.name()), result);
@@ -559,7 +560,7 @@ bool GTUtilsMSAEditorSequenceArea::checkColor(U2OpStatus &os, const QPoint &p, c
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRowHeight"
-int GTUtilsMSAEditorSequenceArea::getRowHeight(U2OpStatus &os){
+int GTUtilsMSAEditorSequenceArea::getRowHeight(HI::GUITestOpStatus &os){
     QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(activeWindow != NULL, "active mdi window is NULL", 0);
     MSAEditorUI* ui = GTUtilsMdi::activeWindow(os)->findChild<MSAEditorUI*>();
@@ -568,7 +569,7 @@ int GTUtilsMSAEditorSequenceArea::getRowHeight(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "renameSequence"
-void GTUtilsMSAEditorSequenceArea::renameSequence(U2OpStatus &os, const QString &seqToRename, const QString &newName){
+void GTUtilsMSAEditorSequenceArea::renameSequence(HI::GUITestOpStatus &os, const QString &seqToRename, const QString &newName){
     int num = getVisibaleNames(os).indexOf(seqToRename);
     GT_CHECK(num != -1, "sequence not found");
 
@@ -580,7 +581,7 @@ void GTUtilsMSAEditorSequenceArea::renameSequence(U2OpStatus &os, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createColorScheme"
-void GTUtilsMSAEditorSequenceArea::createColorScheme(U2OpStatus &os, const QString &colorSchemeName, const NewColorSchemeCreator::alphabet al){
+void GTUtilsMSAEditorSequenceArea::createColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName, const NewColorSchemeCreator::alphabet al){
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << "Create new color scheme" ) );
@@ -590,7 +591,7 @@ void GTUtilsMSAEditorSequenceArea::createColorScheme(U2OpStatus &os, const QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "deleteColorScheme"
-void GTUtilsMSAEditorSequenceArea::deleteColorScheme(U2OpStatus &os, const QString &colorSchemeName){
+void GTUtilsMSAEditorSequenceArea::deleteColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName){
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << "Create new color scheme" ) );
@@ -601,7 +602,7 @@ void GTUtilsMSAEditorSequenceArea::deleteColorScheme(U2OpStatus &os, const QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkSelection"
-void GTUtilsMSAEditorSequenceArea::checkSelection(U2OpStatus &os, const QPoint &start, const QPoint &end, const QString &expected){
+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"]);
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
index b4b5a46..49ff9fc 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
@@ -22,7 +22,7 @@
 #ifndef GTUTILSMSAEDITORSEQUENCEAREA_H
 #define GTUTILSMSAEDITORSEQUENCEAREA_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include <U2View/MSAEditorSequenceArea.h>
 
@@ -30,67 +30,67 @@ namespace U2 {
 
 class GTUtilsMSAEditorSequenceArea {
 public:
-    static MSAEditorSequenceArea * getSequenceArea(U2OpStatus &os);
-    static void callContextMenu(U2OpStatus &os, const QPoint &innerCoords = QPoint());  // zero-based position
+    static MSAEditorSequenceArea * getSequenceArea(HI::GUITestOpStatus &os);
+    static void callContextMenu(HI::GUITestOpStatus &os, const QPoint &innerCoords = QPoint());  // zero-based position
 
-    static void checkSelectedRect(U2OpStatus &os, const QRect &expectedRect);
-    static void checkSorted(U2OpStatus &os, bool sortedState = true);
+    static void checkSelectedRect(HI::GUITestOpStatus &os, const QRect &expectedRect);
+    static void checkSorted(HI::GUITestOpStatus &os, bool sortedState = true);
 
-    static void checkConsensus(U2OpStatus &os, QString cons);
+    static void checkConsensus(HI::GUITestOpStatus &os, QString cons);
     // may be used for selecting visible columns only
-    static void selectColumnInConsensus( U2OpStatus &os, int columnNumber );
+    static void selectColumnInConsensus( HI::GUITestOpStatus &os, int columnNumber );
 
     // MSAEditorNameList
-    static QStringList getNameList(U2OpStatus &os);
-    static QStringList getVisibaleNames(U2OpStatus &os);
-    static QString getSimilarityValue(U2OpStatus &os, int row);
-    static void clickCollapceTriangle(U2OpStatus &os, QString seqName);
-    static bool isCollapsed(U2OpStatus &os, QString seqName);
-    static bool collapsingMode(U2OpStatus &os);
+    static QStringList getNameList(HI::GUITestOpStatus &os);
+    static QStringList getVisibaleNames(HI::GUITestOpStatus &os);
+    static QString getSimilarityValue(HI::GUITestOpStatus &os, int row);
+    static void clickCollapceTriangle(HI::GUITestOpStatus &os, QString seqName);
+    static bool isCollapsed(HI::GUITestOpStatus &os, QString seqName);
+    static bool collapsingMode(HI::GUITestOpStatus &os);
 
-    static int getLeftOffset(U2OpStatus &os);
-    static int getRightOffset(U2OpStatus &os);
+    static int getLeftOffset(HI::GUITestOpStatus &os);
+    static int getRightOffset(HI::GUITestOpStatus &os);
 
-    static int getLength(U2OpStatus &os);
-    static int getNumVisibleBases(U2OpStatus &os);
+    static int getLength(HI::GUITestOpStatus &os);
+    static int getNumVisibleBases(HI::GUITestOpStatus &os);
 
-    static QRect getSelectedRect(U2OpStatus &os);
+    static QRect getSelectedRect(HI::GUITestOpStatus &os);
 
-    static void moveTo(U2OpStatus &os, const QPoint &p);
+    static void moveTo(HI::GUITestOpStatus &os, const QPoint &p);
 
     // selects area in MSA coordinats, if some p coordinate less than 0, it becomes max valid coordinate
     // zero-based position
-    static void selectArea(U2OpStatus &os, QPoint p1 = QPoint(0, 0), QPoint p2 = QPoint(-1, -1));
-    static void cancelSelection(U2OpStatus &os);
-    static QPoint convertCoordinates(U2OpStatus &os, const QPoint p);
-    static void click(U2OpStatus &os, QPoint p = QPoint(0, 0));
+    static void selectArea(HI::GUITestOpStatus &os, QPoint p1 = QPoint(0, 0), QPoint p2 = QPoint(-1, -1));
+    static void cancelSelection(HI::GUITestOpStatus &os);
+    static QPoint convertCoordinates(HI::GUITestOpStatus &os, const QPoint p);
+    static void click(HI::GUITestOpStatus &os, QPoint p = QPoint(0, 0));
 
     // scrolls to the position (in the MSA zero-based coordinates)
-    static void scrollToPosition(U2OpStatus &os, const QPoint& position);
-    static void scrollToBottom(U2OpStatus &os);
-    static void clickToPosition(U2OpStatus &os, const QPoint& position);
+    static void scrollToPosition(HI::GUITestOpStatus &os, const QPoint& position);
+    static void scrollToBottom(HI::GUITestOpStatus &os);
+    static void clickToPosition(HI::GUITestOpStatus &os, const QPoint& position);
 
-    static void selectSequence(U2OpStatus &os, const QString &seqName);
-    static bool isSequenceSelected(U2OpStatus &os, const QString &seqName);
-    static void removeSequence(U2OpStatus &os, const QString &sequenceName);
-    static int getSelectedSequencesNum(U2OpStatus &os);
-    static bool isSequenceVisible(U2OpStatus &os, const QString &seqName);
-    static QString getSequenceData(U2OpStatus &os, const QString &sequenceName);
+    static void selectSequence(HI::GUITestOpStatus &os, const QString &seqName);
+    static bool isSequenceSelected(HI::GUITestOpStatus &os, const QString &seqName);
+    static void removeSequence(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static int getSelectedSequencesNum(HI::GUITestOpStatus &os);
+    static bool isSequenceVisible(HI::GUITestOpStatus &os, const QString &seqName);
+    static QString getSequenceData(HI::GUITestOpStatus &os, const QString &sequenceName);
 
-    static bool offsetsVisible(U2OpStatus &os);
+    static bool offsetsVisible(HI::GUITestOpStatus &os);
 
-    static bool hasAminoAlphabet(U2OpStatus &os);
-    static bool isSequenceHightighted(U2OpStatus &os, const QString& seqName);
-    static QString getColor(U2OpStatus &os, QPoint p);
-    static bool checkColor(U2OpStatus &os, const QPoint& p, const QString& expectedColor);
-    static int getRowHeight(U2OpStatus &os);
+    static bool hasAminoAlphabet(HI::GUITestOpStatus &os);
+    static bool isSequenceHightighted(HI::GUITestOpStatus &os, const QString& seqName);
+    static QString getColor(HI::GUITestOpStatus &os, QPoint p);
+    static bool checkColor(HI::GUITestOpStatus &os, const QPoint& p, const QString& expectedColor);
+    static int getRowHeight(HI::GUITestOpStatus &os);
 
-    static void renameSequence(U2OpStatus &os, const QString& seqToRename, const QString& newName);
+    static void renameSequence(HI::GUITestOpStatus &os, const QString& seqToRename, const QString& newName);
 
-    static void createColorScheme(U2OpStatus &os, const QString& schemeName, const NewColorSchemeCreator::alphabet al);
-    static void deleteColorScheme(U2OpStatus &os, const QString& schemeName);
+    static void createColorScheme(HI::GUITestOpStatus &os, const QString& schemeName, const NewColorSchemeCreator::alphabet al);
+    static void deleteColorScheme(HI::GUITestOpStatus &os, const QString& schemeName);
 
-    static void checkSelection(U2OpStatus &os, const QPoint& start, const QPoint& end, const QString& expected);
+    static void checkSelection(HI::GUITestOpStatus &os, const QPoint& start, const QPoint& end, const QString& expected);
 
     static const QString highlightningColorName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
index 0492296..cad8153 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
@@ -19,31 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-
-#include <QtCore/QTimer>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <QtGui/QTextBrowser>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QTextBrowser>
-#endif
+#include <QApplication>
+#include <QMainWindow>
+#include <QTextBrowser>
+#include <QTimer>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/Notification.h>
 
 #include "GTUtilsMdi.h"
-#include "api/GTWidget.h"
-
 #include "GTUtilsNotifications.h"
+#include <primitives/GTWidget.h>
+
+namespace U2 {
 
-namespace U2{
 #define GT_CLASS_NAME "NotificationChecker"
 
-NotificationChecker::NotificationChecker(U2OpStatus &_os):os(_os){
+NotificationChecker::NotificationChecker(HI::GUITestOpStatus &_os):os(_os){
     t = new QTimer(this);
     t->connect(t, SIGNAL(timeout()), this, SLOT(sl_checkNotification()));
     t->start(100);
@@ -71,8 +66,16 @@ void NotificationChecker::sl_checkNotification() {
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "NotificationDialogFiller"
-#define GT_METHOD_NAME "run"
-void NotificationDialogFiller::run(){
+
+NotificationDialogFiller::NotificationDialogFiller(HI::GUITestOpStatus &os, const QString &message) :
+    Filler(os, "NotificationDialog"),
+    message(message)
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void NotificationDialogFiller::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "active modal widget is invalid");
 
@@ -82,21 +85,31 @@ void NotificationDialogFiller::run(){
         QString actualMessage = tb->toPlainText();
         GT_CHECK(actualMessage.contains(message), "unexpected message: " + actualMessage);
     }
+
     QWidget* ok = GTWidget::findButtonByText(os, "Ok", dialog);
     GTWidget::click(os, ok);
+#ifndef Q_OS_UNIX
+    dialog = QApplication::activeModalWidget();
+    if (dialog != NULL) {
+        ok = GTWidget::findButtonByText(os, "Ok", dialog);
+        GTWidget::click(os, ok);
+    }
+#endif // !Q_OS_UNIX
+
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "NotificationChecker"
 #define GT_METHOD_NAME "waitForNotification"
-void GTUtilsNotifications::waitForNotification(U2OpStatus &os, bool dialogExpected, const QString &message){
+void GTUtilsNotifications::waitForNotification(HI::GUITestOpStatus &os, bool dialogExpected, const QString &message){
     if (dialogExpected) {
         GTUtilsDialog::waitForDialog(os, new NotificationDialogFiller(os, message));
     }
     new NotificationChecker(os);
 }
+
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-}
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.h b/src/plugins/GUITestBase/src/GTUtilsNotifications.h
index 1863bc7..cd85542 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.h
+++ b/src/plugins/GUITestBase/src/GTUtilsNotifications.h
@@ -19,32 +19,33 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _U2_GT_UTILS_NOTIFICATIONS_H_
+#define _U2_GT_UTILS_NOTIFICATIONS_H_
 
-#ifndef GTUTILSNOTIFICATIONS_H
-#define GTUTILSNOTIFICATIONS_H
-
-#include "GTUtilsDialog.h"
-#include "api/GTGlobals.h"
+#include "utils/GTUtilsDialog.h"
+#include "GTGlobals.h"
 
 namespace U2 {
+using namespace HI;
 
 class NotificationChecker : public QObject {
     Q_OBJECT
 public:
-    NotificationChecker(U2OpStatus &_os);
+    NotificationChecker(HI::GUITestOpStatus &_os);
     ~NotificationChecker();
 public slots:
     void sl_checkNotification();
 private:
     QTimer* t;
-    U2OpStatus &os;
+    HI::GUITestOpStatus &os;
 };
 
-class NotificationDialogFiller : public Filler{
+class NotificationDialogFiller : public Filler {
 public:
-    NotificationDialogFiller(U2OpStatus &os, QString _message = ""):
-        Filler(os, "NotificationDialog"), message(_message){}
-    virtual void run();
+    NotificationDialogFiller(HI::GUITestOpStatus &os, const QString &message = "");
+
+    void commonScenario();
+
 private:
     QString message;
 };
@@ -52,8 +53,9 @@ private:
 class GTUtilsNotifications
 {
 public:
-    static void waitForNotification(U2OpStatus &os, bool dialogExpected = true, const QString &message = "");
+    static void waitForNotification(HI::GUITestOpStatus &os, bool dialogExpected = true, const QString &message = "");
 };
-}
 
-#endif // GTUTILSNOTIFICATIONS_H
+}   // namespace U2
+
+#endif // _U2_GT_UTILS_NOTIFICATIONS_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
index 7757a8b..20e204d 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
@@ -25,15 +25,17 @@
 #include <QToolButton>
 #include <QTreeWidget>
 
+#include <U2Core/U2IdTypes.h>
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
 #include "api/GTBaseCompleter.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
+using namespace HI;
 
 QMap<GTUtilsOptionPanelMsa::Tabs, QString> GTUtilsOptionPanelMsa::initNames() {
     QMap<Tabs,QString> result;
@@ -62,14 +64,14 @@ const QMap<GTUtilsOptionPanelMsa::Tabs, QString> GTUtilsOptionPanelMsa::innerWid
 #define GT_CLASS_NAME "GTUtilsOptionPanelMSA"
 
 #define GT_METHOD_NAME "toggleTab"
-void GTUtilsOptionPanelMsa::toggleTab(U2OpStatus &os, GTUtilsOptionPanelMsa::Tabs tab) {
+void GTUtilsOptionPanelMsa::toggleTab(HI::GUITestOpStatus &os, GTUtilsOptionPanelMsa::Tabs tab) {
     GTWidget::click(os, GTWidget::findWidget(os, tabsNames[tab]));
     GTGlobals::sleep(200);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openTab"
-void GTUtilsOptionPanelMsa::openTab(U2OpStatus &os, Tabs tab) {
+void GTUtilsOptionPanelMsa::openTab(HI::GUITestOpStatus &os, Tabs tab) {
     if (!isTabOpened(os, tab)) {
         toggleTab(os, tab);
     }
@@ -77,7 +79,7 @@ void GTUtilsOptionPanelMsa::openTab(U2OpStatus &os, Tabs tab) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "closeTab"
-void GTUtilsOptionPanelMsa::closeTab(U2OpStatus &os, Tabs tab) {
+void GTUtilsOptionPanelMsa::closeTab(HI::GUITestOpStatus &os, Tabs tab) {
     if (isTabOpened(os, tab)) {
         toggleTab(os, tab);
     }
@@ -85,7 +87,7 @@ void GTUtilsOptionPanelMsa::closeTab(U2OpStatus &os, Tabs tab) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isTabOpened"
-bool GTUtilsOptionPanelMsa::isTabOpened(U2OpStatus &os, Tabs tab) {
+bool GTUtilsOptionPanelMsa::isTabOpened(HI::GUITestOpStatus &os, Tabs tab) {
     GTGlobals::FindOptions options;
     options.failIfNull = false;
     QWidget *innerTabWidget = GTWidget::findWidget(os, innerWidgetNames[tab], NULL, options);
@@ -94,7 +96,7 @@ bool GTUtilsOptionPanelMsa::isTabOpened(U2OpStatus &os, Tabs tab) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addReference"
-void GTUtilsOptionPanelMsa::addReference(U2OpStatus &os, QString seqName, AddRefMethod method){
+void GTUtilsOptionPanelMsa::addReference(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method){
     GT_CHECK(!seqName.isEmpty(), "sequence name is empty");
     //Option panel should be opned to use this method
     QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -121,13 +123,13 @@ void GTUtilsOptionPanelMsa::addReference(U2OpStatus &os, QString seqName, AddRef
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeReference"
-void GTUtilsOptionPanelMsa::removeReference(U2OpStatus &os){
+void GTUtilsOptionPanelMsa::removeReference(HI::GUITestOpStatus &os){
     GTWidget::click(os, GTWidget::findWidget(os, "deleteSeq"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getReference"
-QString GTUtilsOptionPanelMsa::getReference(U2OpStatus &os) {
+QString GTUtilsOptionPanelMsa::getReference(HI::GUITestOpStatus &os) {
     openTab(os, General);
     QLineEdit *leReference = GTWidget::findExactWidget<QLineEdit *>(os, "sequenceLineEdit");
     GT_CHECK_RESULT(NULL != leReference, "Reference sequence name lineedit is NULL", QString());
@@ -136,7 +138,7 @@ QString GTUtilsOptionPanelMsa::getReference(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLength"
-int GTUtilsOptionPanelMsa::getLength(U2OpStatus &os){
+int GTUtilsOptionPanelMsa::getLength(HI::GUITestOpStatus &os){
     QLabel* alignmentLengthLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "alignmentLength"));
     GT_CHECK_RESULT(alignmentLengthLabel != NULL, "alignmentLengthLabel not found", -1);
     bool ok;
@@ -147,7 +149,7 @@ int GTUtilsOptionPanelMsa::getLength(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getHeight"
-int GTUtilsOptionPanelMsa::getHeight(U2OpStatus &os){
+int GTUtilsOptionPanelMsa::getHeight(HI::GUITestOpStatus &os){
     QLabel* alignmentHeightLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "alignmentHeight"));
     GT_CHECK_RESULT(alignmentHeightLabel != NULL, "alignmentHeightLabel not found", -1);
     bool ok;
@@ -158,14 +160,14 @@ int GTUtilsOptionPanelMsa::getHeight(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setColorScheme"
-void GTUtilsOptionPanelMsa::setColorScheme(U2OpStatus &os, const QString &colorSchemeName) {
+void GTUtilsOptionPanelMsa::setColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName) {
     openTab(os, Highlighting);
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "colorScheme"), colorSchemeName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getColorScheme"
-QString GTUtilsOptionPanelMsa::getColorScheme(U2OpStatus &os) {
+QString GTUtilsOptionPanelMsa::getColorScheme(HI::GUITestOpStatus &os) {
     openTab(os, Highlighting);
     QComboBox *colorScheme = GTWidget::findExactWidget<QComboBox *>(os, "colorScheme");
     GT_CHECK_RESULT(NULL != colorScheme, "ColorSCheme combobox is NULL", "");
@@ -174,24 +176,24 @@ QString GTUtilsOptionPanelMsa::getColorScheme(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addFirstSeqToPA"
-void GTUtilsOptionPanelMsa::addFirstSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method){
+void GTUtilsOptionPanelMsa::addFirstSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method){
     addSeqToPA(os, seqName, method, 1);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addSecondSeqToPA"
-void GTUtilsOptionPanelMsa::addSecondSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method){
+void GTUtilsOptionPanelMsa::addSecondSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method){
     addSeqToPA(os, seqName, method, 2);
 }
 #undef GT_METHOD_NAME
 
-QString GTUtilsOptionPanelMsa::getSeqFromPAlineEdit(U2OpStatus &os, int num){
+QString GTUtilsOptionPanelMsa::getSeqFromPAlineEdit(HI::GUITestOpStatus &os, int num){
     QLineEdit* le = qobject_cast<QLineEdit*>(getWidget(os, "sequenceLineEdit", num));
     return le->text();
 }
 
 #define GT_METHOD_NAME "addSeqToPA"
-void GTUtilsOptionPanelMsa::addSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method, int number){
+void GTUtilsOptionPanelMsa::addSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method, int number){
     GT_CHECK(number == 1 || number == 2, "number must be 1 or 2");
     GT_CHECK(!seqName.isEmpty(), "sequence name is empty");
     //Option panel should be opned to use this method
@@ -220,7 +222,7 @@ void GTUtilsOptionPanelMsa::addSeqToPA(U2OpStatus &os, QString seqName, AddRefMe
 
 
 #define GT_METHOD_NAME "getAddButton"
-QToolButton* GTUtilsOptionPanelMsa::getAddButton(U2OpStatus &os, int number){
+QToolButton* GTUtilsOptionPanelMsa::getAddButton(HI::GUITestOpStatus &os, int number){
     QToolButton* result = qobject_cast<QToolButton*>(getWidget(os, "addSeq", number));
     GT_CHECK_RESULT(result != NULL, "toolbutton is NULL", NULL);
     return result;
@@ -228,7 +230,7 @@ QToolButton* GTUtilsOptionPanelMsa::getAddButton(U2OpStatus &os, int number){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getDeleteButton"
-QToolButton* GTUtilsOptionPanelMsa::getDeleteButton(U2OpStatus &os, int number){
+QToolButton* GTUtilsOptionPanelMsa::getDeleteButton(HI::GUITestOpStatus &os, int number){
     QToolButton* result = qobject_cast<QToolButton*>(getWidget(os, "deleteSeq", number));
     GT_CHECK_RESULT(result != NULL, "toolbutton is NULL", NULL);
     return result;
@@ -236,21 +238,21 @@ QToolButton* GTUtilsOptionPanelMsa::getDeleteButton(U2OpStatus &os, int number){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAlignButton"
-QPushButton *GTUtilsOptionPanelMsa::getAlignButton(U2OpStatus &os) {
+QPushButton *GTUtilsOptionPanelMsa::getAlignButton(HI::GUITestOpStatus &os) {
     // TODO: ensure that the Pairwise alignment" tab is opened.
     return GTWidget::findExactWidget<QPushButton *>(os, "alignButton");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setPairwiseAlignmentAlgorithm"
-void GTUtilsOptionPanelMsa::setPairwiseAlignmentAlgorithm(U2OpStatus &os, const QString &algorithm) {
+void GTUtilsOptionPanelMsa::setPairwiseAlignmentAlgorithm(HI::GUITestOpStatus &os, const QString &algorithm) {
     // TODO: ensure that the Pairwise alignment" tab is opened.
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algorithmListComboBox"), algorithm);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSeqLineEdit"
-QLineEdit* GTUtilsOptionPanelMsa::getSeqLineEdit(U2OpStatus &os, int number){
+QLineEdit* GTUtilsOptionPanelMsa::getSeqLineEdit(HI::GUITestOpStatus &os, int number){
     QLineEdit* result = qobject_cast<QLineEdit*>(getWidget(os, "sequenceLineEdit", number));
     GT_CHECK_RESULT(result != NULL, "sequenceLineEdit is NULL", NULL);
     return result;
@@ -258,7 +260,7 @@ QLineEdit* GTUtilsOptionPanelMsa::getSeqLineEdit(U2OpStatus &os, int number){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "agetWidget"
-QWidget* GTUtilsOptionPanelMsa::getWidget(U2OpStatus &os, const QString& widgetName, int number){
+QWidget* GTUtilsOptionPanelMsa::getWidget(HI::GUITestOpStatus &os, const QString& widgetName, int number){
     QWidget* sequenceContainerWidget = GTWidget::findWidget(os, "sequenceContainerWidget");
     GT_CHECK_RESULT(sequenceContainerWidget != NULL, "sequenceContainerWidget not found", NULL);
     QList<QWidget*> widgetList = sequenceContainerWidget->findChildren<QWidget*>(widgetName);
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
index 9995d81..345f70a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
@@ -22,7 +22,7 @@
 #ifndef U2_GTUTILS_OPTION_PANEL_MSA_H
 #define U2_GTUTILS_OPTION_PANEL_MSA_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QLineEdit;
 class QPushButton;
@@ -30,8 +30,6 @@ class QToolButton;
 
 namespace U2 {
 
-class U2OpStatus;
-
 class GTUtilsOptionPanelMsa{
 public:
     enum Tabs{General, Highlighting, PairwiseAlignment, TreeSettings, ExportConsensus, Statistics};
@@ -40,34 +38,34 @@ public:
     static const QMap<Tabs, QString> tabsNames;
     static const QMap<Tabs, QString> innerWidgetNames;
 
-    static void toggleTab(U2OpStatus &os, Tabs tab);
-    static void openTab(U2OpStatus &os, Tabs tab);
-    static void closeTab(U2OpStatus &os, Tabs tab);
-    static bool isTabOpened(U2OpStatus &os, Tabs tab);
+    static void toggleTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void openTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void closeTab(HI::GUITestOpStatus &os, Tabs tab);
+    static bool isTabOpened(HI::GUITestOpStatus &os, Tabs tab);
 
-    static void addReference(U2OpStatus &os, QString seqName, AddRefMethod method = Button);
-    static void addFirstSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method = Button);
-    static void addSecondSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method = Button);
-    static QString getSeqFromPAlineEdit(U2OpStatus &os, int num);
-    static void removeReference(U2OpStatus &os);
-    static QString getReference(U2OpStatus &os);
-    static int getLength(U2OpStatus &os);
-    static int getHeight(U2OpStatus &os);
+    static void addReference(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method = Button);
+    static void addFirstSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method = Button);
+    static void addSecondSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method = Button);
+    static QString getSeqFromPAlineEdit(HI::GUITestOpStatus &os, int num);
+    static void removeReference(HI::GUITestOpStatus &os);
+    static QString getReference(HI::GUITestOpStatus &os);
+    static int getLength(HI::GUITestOpStatus &os);
+    static int getHeight(HI::GUITestOpStatus &os);
 
-    static void setColorScheme(U2OpStatus &os, const QString &colorSchemeName);
-    static QString getColorScheme(U2OpStatus &os);
+    static void setColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName);
+    static QString getColorScheme(HI::GUITestOpStatus &os);
 
     //functions for accessing PA gui elements
-    static QToolButton* getAddButton(U2OpStatus &os, int number);
-    static QLineEdit* getSeqLineEdit(U2OpStatus &os, int number);
-    static QToolButton* getDeleteButton(U2OpStatus &os, int number);
-    static QPushButton *getAlignButton(U2OpStatus &os);
-    static void setPairwiseAlignmentAlgorithm(U2OpStatus &os, const QString &algorithm);
+    static QToolButton* getAddButton(HI::GUITestOpStatus &os, int number);
+    static QLineEdit* getSeqLineEdit(HI::GUITestOpStatus &os, int number);
+    static QToolButton* getDeleteButton(HI::GUITestOpStatus &os, int number);
+    static QPushButton *getAlignButton(HI::GUITestOpStatus &os);
+    static void setPairwiseAlignmentAlgorithm(HI::GUITestOpStatus &os, const QString &algorithm);
 
 private:
-    static QWidget* getWidget(U2OpStatus &os, const QString& widgetName, int number);
+    static QWidget* getWidget(HI::GUITestOpStatus &os, const QString& widgetName, int number);
 
-    static void addSeqToPA(U2OpStatus &os, QString seqName, AddRefMethod method, int number);
+    static void addSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method, int number);
 
 
 private:
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
index 5bd152b..234f4dd 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
@@ -19,27 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTUtilsOptionPanelSequenceView.h"
-
 #include <QDir>
 #include <QLabel>
 #include <QTextEdit>
 #include <QTreeWidget>
 
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTableView.h"
-#include "api/GTTextEdit.h"
-#include "api/GTWidget.h"
-
+#include <U2Core/global.h>
+#include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
+#include "GTUtilsOptionPanelSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-
-namespace U2{
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTTextEdit.h>
+#include "utils/GTThread.h"
+#include <primitives/GTWidget.h>
+
+namespace U2 {
+using namespace HI;
 
 QMap<GTUtilsOptionPanelSequenceView::Tabs, QString> GTUtilsOptionPanelSequenceView::initNames() {
     QMap<Tabs,QString> result;
@@ -48,7 +50,6 @@ QMap<GTUtilsOptionPanelSequenceView::Tabs, QString> GTUtilsOptionPanelSequenceVi
     result.insert(Statistics, "OP_SEQ_INFO");
     result.insert(InSilicoPcr, "OP_IN_SILICO_PCR");
     result.insert(CircularView, "OP_CV_SETTINGS");
-    result.insert(Das, "OP_DAS");
     return result;
 }
 
@@ -59,7 +60,6 @@ QMap<GTUtilsOptionPanelSequenceView::Tabs, QString> GTUtilsOptionPanelSequenceVi
     result.insert(Statistics, "SequenceInfo");
     result.insert(InSilicoPcr, "InSilicoPcrOptionPanelWidget");
     result.insert(CircularView, "CircularViewSettingsWidget");
-    result.insert(Das, "DasOptionsPanelWidget");
     return result;
 }
 
@@ -70,7 +70,7 @@ const QMap<GTUtilsOptionPanelSequenceView::Tabs, QString> GTUtilsOptionPanelSequ
 
 #define GT_METHOD_NAME "enterPattern"
 
-void GTUtilsOptionPanelSequenceView::enterPattern( U2OpStatus &os, QString pattern, bool useCopyPaste ){
+void GTUtilsOptionPanelSequenceView::enterPattern( HI::GUITestOpStatus &os, QString pattern, bool useCopyPaste ){
     QTextEdit *patternEdit = qobject_cast<QTextEdit*>(GTWidget::findWidget(os, "textPattern"));
     GTWidget::click(os, patternEdit);
 
@@ -88,22 +88,23 @@ void GTUtilsOptionPanelSequenceView::enterPattern( U2OpStatus &os, QString patte
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleTab"
-void GTUtilsOptionPanelSequenceView::toggleTab(U2OpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
-    GTWidget::click(os, GTWidget::findWidget(os, tabsNames[tab]));
+void GTUtilsOptionPanelSequenceView::toggleTab(HI::GUITestOpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
+    GTWidget::click(os, GTWidget::findWidget(os, tabsNames[tab], GTUtilsMdi::activeWindow(os)));
     GTGlobals::sleep(200);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openTab"
-void GTUtilsOptionPanelSequenceView::openTab(U2OpStatus &os, Tabs tab){
+void GTUtilsOptionPanelSequenceView::openTab(HI::GUITestOpStatus &os, Tabs tab){
     if (!isTabOpened(os, tab)) {
         toggleTab(os, tab);
+        GTThread::waitForMainThread(os);
     }
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "closeTab"
-void GTUtilsOptionPanelSequenceView::closeTab(U2OpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
+void GTUtilsOptionPanelSequenceView::closeTab(HI::GUITestOpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
     if (isTabOpened(os, tab)) {
         toggleTab(os, tab);
     }
@@ -111,17 +112,17 @@ void GTUtilsOptionPanelSequenceView::closeTab(U2OpStatus &os, GTUtilsOptionPanel
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isTabOpened"
-bool GTUtilsOptionPanelSequenceView::isTabOpened(U2OpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
+bool GTUtilsOptionPanelSequenceView::isTabOpened(HI::GUITestOpStatus &os, GTUtilsOptionPanelSequenceView::Tabs tab) {
     GTGlobals::FindOptions options;
     options.failIfNull = false;
-    QWidget *innerTabWidget = GTWidget::findWidget(os, innerWidgetNames[tab], NULL, options);
+    QWidget *innerTabWidget = GTWidget::findWidget(os, innerWidgetNames[tab], GTUtilsMdi::activeWindow(os), options);
     return NULL != innerTabWidget && innerTabWidget->isVisible();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkResultsText"
 
-bool GTUtilsOptionPanelSequenceView::checkResultsText(U2OpStatus &os, QString expectedText) {
+bool GTUtilsOptionPanelSequenceView::checkResultsText(HI::GUITestOpStatus &os, QString expectedText) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QLabel *label = qobject_cast<QLabel*>(GTWidget::findWidget(os, "resultLabel"));
@@ -131,14 +132,14 @@ bool GTUtilsOptionPanelSequenceView::checkResultsText(U2OpStatus &os, QString ex
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setSearchWithAmbiguousBases"
-void GTUtilsOptionPanelSequenceView::setSearchWithAmbiguousBases(U2OpStatus &os, bool searchWithAmbiguousBases) {
+void GTUtilsOptionPanelSequenceView::setSearchWithAmbiguousBases(HI::GUITestOpStatus &os, bool searchWithAmbiguousBases) {
     GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "useAmbiguousBasesBox"), searchWithAmbiguousBases);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickNext"
 
-void GTUtilsOptionPanelSequenceView::clickNext(U2OpStatus &os){
+void GTUtilsOptionPanelSequenceView::clickNext(HI::GUITestOpStatus &os){
     QPushButton *next = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "nextPushButton"));
     GTWidget::click(os, next);
 }
@@ -147,7 +148,7 @@ void GTUtilsOptionPanelSequenceView::clickNext(U2OpStatus &os){
 
 #define GT_METHOD_NAME "clickPrev"
 
-void GTUtilsOptionPanelSequenceView::clickPrev(U2OpStatus &os){
+void GTUtilsOptionPanelSequenceView::clickPrev(HI::GUITestOpStatus &os){
     QPushButton *prev = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "prevPushButton"));
     GTWidget::click(os, prev);
 }
@@ -156,7 +157,7 @@ void GTUtilsOptionPanelSequenceView::clickPrev(U2OpStatus &os){
 
 #define GT_METHOD_NAME "clickGetAnnotation"
 
-void GTUtilsOptionPanelSequenceView::clickGetAnnotation(U2OpStatus &os){
+void GTUtilsOptionPanelSequenceView::clickGetAnnotation(HI::GUITestOpStatus &os){
     QPushButton *getAnnotations = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTWidget::click(os, getAnnotations);
 }
@@ -165,7 +166,7 @@ void GTUtilsOptionPanelSequenceView::clickGetAnnotation(U2OpStatus &os){
 
 #define GT_METHOD_NAME "isPrevNextEnabled"
 
-bool GTUtilsOptionPanelSequenceView::isPrevNextEnabled(U2OpStatus &os){
+bool GTUtilsOptionPanelSequenceView::isPrevNextEnabled(HI::GUITestOpStatus &os){
     QPushButton *next = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "nextPushButton"));
     QPushButton *prev = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "prevPushButton"));
     return prev->isEnabled() && next->isEnabled();
@@ -174,28 +175,33 @@ bool GTUtilsOptionPanelSequenceView::isPrevNextEnabled(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isGetAnnotationsEnabled"
-bool GTUtilsOptionPanelSequenceView::isGetAnnotationsEnabled(U2OpStatus &os){
+bool GTUtilsOptionPanelSequenceView::isGetAnnotationsEnabled(HI::GUITestOpStatus &os){
     QPushButton *getAnnotations = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "getAnnotationsPushButton"));
     return getAnnotations->isEnabled();
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "fetchDasIds"
-void GTUtilsOptionPanelSequenceView::fetchDasIds(U2OpStatus &os) {
-    openTab(os, Das);
-    GTWidget::click(os, GTWidget::findWidget(os, "searchIdsButton"));
+#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);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setTitleFontSize"
+void GTUtilsOptionPanelSequenceView::setTitleFontSize(HI::GUITestOpStatus &os, int fontSize) {
+    GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "fontSizeSpinBox"), fontSize);
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "getDasIdsCount"
-int GTUtilsOptionPanelSequenceView::getDasIdsCount(U2OpStatus &os) {
-    openTab(os, Das);
-    return GTTableView::rowCount(os, GTWidget::findExactWidget<QTableView *>(os, "idList"));
+#define GT_METHOD_NAME "getTitleFontSize"
+int GTUtilsOptionPanelSequenceView::getTitleFontSize(HI::GUITestOpStatus &os) {
+    return GTSpinBox::getValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "fontSizeSpinBox", GTUtilsMdi::activeWindow(os)));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setForwardPrimer"
-void GTUtilsOptionPanelSequenceView::setForwardPrimer(U2OpStatus &os, const QString &primer) {
+void GTUtilsOptionPanelSequenceView::setForwardPrimer(HI::GUITestOpStatus &os, const QString &primer) {
     openTab(os, InSilicoPcr);
     QWidget *primerContainer = GTWidget::findWidget(os, "forwardPrimerBox");
     GT_CHECK(NULL != primerContainer, "Forward primer container widget is NULL");
@@ -204,7 +210,7 @@ void GTUtilsOptionPanelSequenceView::setForwardPrimer(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setReversePrimer"
-void GTUtilsOptionPanelSequenceView::setReversePrimer(U2OpStatus &os, const QString &primer) {
+void GTUtilsOptionPanelSequenceView::setReversePrimer(HI::GUITestOpStatus &os, const QString &primer) {
     openTab(os, InSilicoPcr);
     QWidget *primerContainer = GTWidget::findWidget(os, "reversePrimerBox");
     GT_CHECK(NULL != primerContainer, "Reverse primer container widget is NULL");
@@ -213,14 +219,14 @@ void GTUtilsOptionPanelSequenceView::setReversePrimer(U2OpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "showPrimersDetails"
-void GTUtilsOptionPanelSequenceView::showPrimersDetails(U2OpStatus &os) {
+void GTUtilsOptionPanelSequenceView::showPrimersDetails(HI::GUITestOpStatus &os) {
     openTab(os, InSilicoPcr);
     GTWidget::clickLabelLink(os, GTWidget::findWidget(os, "detailsLinkLabel"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSearchAlgorithmShowHideWidgetOpened"
-bool GTUtilsOptionPanelSequenceView::isSearchAlgorithmShowHideWidgetOpened(U2OpStatus &os) {
+bool GTUtilsOptionPanelSequenceView::isSearchAlgorithmShowHideWidgetOpened(HI::GUITestOpStatus &os) {
     QWidget *algorithmInnerWidget = GTWidget::findWidget(os, "widgetAlgorithm");
     GT_CHECK_RESULT(NULL != algorithmInnerWidget, "algorithmInnerWidget is NULL", false);
     return algorithmInnerWidget->isVisible();
@@ -228,7 +234,7 @@ bool GTUtilsOptionPanelSequenceView::isSearchAlgorithmShowHideWidgetOpened(U2OpS
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSearchInShowHideWidgetOpened"
-bool GTUtilsOptionPanelSequenceView::isSearchInShowHideWidgetOpened(U2OpStatus &os) {
+bool GTUtilsOptionPanelSequenceView::isSearchInShowHideWidgetOpened(HI::GUITestOpStatus &os) {
     QWidget *searchInInnerWidget = GTWidget::findWidget(os, "widgetSearchIn");
     GT_CHECK_RESULT(NULL != searchInInnerWidget, "searchInInnerWidget is NULL", false);
     return searchInInnerWidget->isVisible();
@@ -236,7 +242,7 @@ bool GTUtilsOptionPanelSequenceView::isSearchInShowHideWidgetOpened(U2OpStatus &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isOtherSettingsShowHideWidgetOpened"
-bool GTUtilsOptionPanelSequenceView::isOtherSettingsShowHideWidgetOpened(U2OpStatus &os) {
+bool GTUtilsOptionPanelSequenceView::isOtherSettingsShowHideWidgetOpened(HI::GUITestOpStatus &os) {
     QWidget *otherSettingsInnerWidget = GTWidget::findWidget(os, "widgetOther");
     GT_CHECK_RESULT(NULL != otherSettingsInnerWidget, "otherSettingsInnerWidget is NULL", false);
     return otherSettingsInnerWidget->isVisible();
@@ -244,7 +250,7 @@ bool GTUtilsOptionPanelSequenceView::isOtherSettingsShowHideWidgetOpened(U2OpSta
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSaveAnnotationToShowHideWidgetOpened"
-bool GTUtilsOptionPanelSequenceView::isSaveAnnotationToShowHideWidgetOpened(U2OpStatus &os) {
+bool GTUtilsOptionPanelSequenceView::isSaveAnnotationToShowHideWidgetOpened(HI::GUITestOpStatus &os) {
     QWidget *annotationsWidget = GTWidget::findWidget(os, "annotationsWidget");
     GT_CHECK_RESULT(NULL != annotationsWidget, "annotationsWidget is NULL", false);
     QWidget *saveAnnotationsToInnerWidget = GTWidget::findWidget(os, "saveAnnotationsInnerWidget", annotationsWidget);
@@ -254,7 +260,7 @@ bool GTUtilsOptionPanelSequenceView::isSaveAnnotationToShowHideWidgetOpened(U2Op
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isAnnotationParametersShowHideWidgetOpened"
-bool GTUtilsOptionPanelSequenceView::isAnnotationParametersShowHideWidgetOpened(U2OpStatus &os) {
+bool GTUtilsOptionPanelSequenceView::isAnnotationParametersShowHideWidgetOpened(HI::GUITestOpStatus &os) {
     QWidget *annotationsWidget = GTWidget::findWidget(os, "annotationsWidget");
     GT_CHECK_RESULT(NULL != annotationsWidget, "annotationsWidget is NULL", false);
     QWidget *annotationsParametersInnerWidget = GTWidget::findWidget(os, "annotationParametersInnerWidget", annotationsWidget);
@@ -264,35 +270,35 @@ bool GTUtilsOptionPanelSequenceView::isAnnotationParametersShowHideWidgetOpened(
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openSearchAlgorithmShowHideWidget"
-void GTUtilsOptionPanelSequenceView::openSearchAlgorithmShowHideWidget(U2OpStatus &os, bool open) {
+void GTUtilsOptionPanelSequenceView::openSearchAlgorithmShowHideWidget(HI::GUITestOpStatus &os, bool open) {
     CHECK(open != isSearchAlgorithmShowHideWidgetOpened(os), );
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search algorithm"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openSearchInShowHideWidget"
-void GTUtilsOptionPanelSequenceView::openSearchInShowHideWidget(U2OpStatus &os, bool open) {
+void GTUtilsOptionPanelSequenceView::openSearchInShowHideWidget(HI::GUITestOpStatus &os, bool open) {
     CHECK(open != isSearchInShowHideWidgetOpened(os), );
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search in"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openOtherSettingsShowHideWidget"
-void GTUtilsOptionPanelSequenceView::openOtherSettingsShowHideWidget(U2OpStatus &os, bool open) {
+void GTUtilsOptionPanelSequenceView::openOtherSettingsShowHideWidget(HI::GUITestOpStatus &os, bool open) {
     CHECK(open != isOtherSettingsShowHideWidgetOpened(os), );
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Other settings"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openSaveAnnotationToShowHideWidget"
-void GTUtilsOptionPanelSequenceView::openSaveAnnotationToShowHideWidget(U2OpStatus &os, bool open) {
+void GTUtilsOptionPanelSequenceView::openSaveAnnotationToShowHideWidget(HI::GUITestOpStatus &os, bool open) {
     CHECK(open != isSaveAnnotationToShowHideWidgetOpened(os), );
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Save annotation(s) to"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openAnnotationParametersShowHideWidget"
-void GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(U2OpStatus &os, bool open) {
+void GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(HI::GUITestOpStatus &os, bool open) {
     CHECK(open != isAnnotationParametersShowHideWidgetOpened(os), );
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Annotation parameters"));
 }
@@ -300,7 +306,7 @@ void GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(U2Op
 
 #define GT_METHOD_NAME "toggleInputFromFilePattern"
 
-void GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern( U2OpStatus &os )
+void GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern( HI::GUITestOpStatus &os )
 {
     QGroupBox *loadFromFile = qobject_cast<QGroupBox*>(GTWidget::findWidget(os, "loadFromFileGroupBox"));
     GTWidget::click(os, loadFromFile);
@@ -312,7 +318,7 @@ void GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern( U2OpStatus &os
 
 #define GT_METHOD_NAME "toggleSaveAnnotationsTo"
 
-void GTUtilsOptionPanelSequenceView::toggleSaveAnnotationsTo(U2OpStatus &os){
+void GTUtilsOptionPanelSequenceView::toggleSaveAnnotationsTo(HI::GUITestOpStatus &os){
     QLabel *obj = qobject_cast<QLabel*>(GTWidget::findWidget(os, "ArrowHeader_Save annotation(s) to"));
     GTWidget::click(os, obj);
 }
@@ -321,7 +327,7 @@ void GTUtilsOptionPanelSequenceView::toggleSaveAnnotationsTo(U2OpStatus &os){
 
 #define GT_METHOD_NAME "enterPatternFromFile"
 
-void GTUtilsOptionPanelSequenceView::enterPatternFromFile( U2OpStatus &os, QString filePathStr, QString fileName ){
+void GTUtilsOptionPanelSequenceView::enterPatternFromFile( HI::GUITestOpStatus &os, QString filePathStr, QString fileName ){
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, filePathStr, fileName, GTFileDialogUtils::Open);
     GTUtilsDialog::waitForDialog(os, ob);
 
@@ -335,7 +341,7 @@ void GTUtilsOptionPanelSequenceView::enterPatternFromFile( U2OpStatus &os, QStri
 
 #define GT_METHOD_NAME "setStrand"
 
-void GTUtilsOptionPanelSequenceView::setStrand(U2OpStatus &os, QString strandStr) {
+void GTUtilsOptionPanelSequenceView::setStrand(HI::GUITestOpStatus &os, QString strandStr) {
     QComboBox *strand = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "boxStrand", NULL, GTGlobals::FindOptions(false)));
     GT_CHECK(strand != NULL, "combobox is NULL");
 
@@ -348,14 +354,14 @@ void GTUtilsOptionPanelSequenceView::setStrand(U2OpStatus &os, QString strandStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setRegionType"
-void GTUtilsOptionPanelSequenceView::setRegionType(U2OpStatus &os, const QString &regionType) {
+void GTUtilsOptionPanelSequenceView::setRegionType(HI::GUITestOpStatus &os, const QString &regionType) {
     openSearchInShowHideWidget(os);
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "boxRegion"), regionType, false);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setRegion"
-void GTUtilsOptionPanelSequenceView::setRegion(U2OpStatus &os, int from, int to) {
+void GTUtilsOptionPanelSequenceView::setRegion(HI::GUITestOpStatus &os, int from, int to) {
     openSearchInShowHideWidget(os);
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "editStart"), QString::number(from));
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "editEnd"), QString::number(to));
@@ -363,7 +369,7 @@ void GTUtilsOptionPanelSequenceView::setRegion(U2OpStatus &os, int from, int to)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "enterFilepathForSavingAnnotations"
-void GTUtilsOptionPanelSequenceView::enterFilepathForSavingAnnotations(U2OpStatus &os, QString filepath) {
+void GTUtilsOptionPanelSequenceView::enterFilepathForSavingAnnotations(HI::GUITestOpStatus &os, QString filepath) {
     QLineEdit *leFilePath = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "leNewTablePath"));
     GT_CHECK(leFilePath != NULL, "File path line edit is NULL");
     QDir().mkpath(QFileInfo(filepath).dir().absolutePath());
@@ -373,7 +379,7 @@ void GTUtilsOptionPanelSequenceView::enterFilepathForSavingAnnotations(U2OpStatu
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setAlgorithm"
-void GTUtilsOptionPanelSequenceView::setAlgorithm( U2OpStatus &os, QString algorithm ){
+void GTUtilsOptionPanelSequenceView::setAlgorithm( HI::GUITestOpStatus &os, QString algorithm ){
     QComboBox *algoBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "boxAlgorithm"));
     GT_CHECK(algoBox != NULL, "algoBox is NULL");
 
@@ -386,7 +392,7 @@ void GTUtilsOptionPanelSequenceView::setAlgorithm( U2OpStatus &os, QString algor
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getMatchPercentage"
-int GTUtilsOptionPanelSequenceView::getMatchPercentage(U2OpStatus &os) {
+int GTUtilsOptionPanelSequenceView::getMatchPercentage(HI::GUITestOpStatus &os) {
     QSpinBox *spinMatchBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "spinBoxMatch"));
     GT_CHECK_RESULT(NULL != spinMatchBox, "Match percentage spinbox is NULL", -1);
     return spinMatchBox->value();
@@ -394,7 +400,7 @@ int GTUtilsOptionPanelSequenceView::getMatchPercentage(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRegionType"
-QString GTUtilsOptionPanelSequenceView::getRegionType(U2OpStatus &os) {
+QString GTUtilsOptionPanelSequenceView::getRegionType(HI::GUITestOpStatus &os) {
     openSearchInShowHideWidget(os);
     QComboBox *cbRegionType = GTWidget::findExactWidget<QComboBox *>(os, "boxRegion");
     GT_CHECK_RESULT(NULL != cbRegionType, "Region type combobox is NULL", "");
@@ -403,7 +409,7 @@ QString GTUtilsOptionPanelSequenceView::getRegionType(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setMatchPercentage"
-QPair<int, int> GTUtilsOptionPanelSequenceView::getRegion(U2OpStatus &os) {
+QPair<int, int> GTUtilsOptionPanelSequenceView::getRegion(HI::GUITestOpStatus &os) {
     openSearchInShowHideWidget(os);
 
     QPair<int, int> result;
@@ -423,7 +429,7 @@ QPair<int, int> GTUtilsOptionPanelSequenceView::getRegion(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getHintText"
-const QString GTUtilsOptionPanelSequenceView::getHintText(U2OpStatus &os) {
+const QString GTUtilsOptionPanelSequenceView::getHintText(HI::GUITestOpStatus &os) {
     QLabel *lblHint = GTWidget::findExactWidget<QLabel *>(os, "lblErrorMessage");
     GT_CHECK_RESULT(NULL != lblHint, "Hintlabel is NULL", "");
     CHECK(lblHint->isVisible(), "");
@@ -432,23 +438,23 @@ const QString GTUtilsOptionPanelSequenceView::getHintText(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setMatchPercentage"
-void GTUtilsOptionPanelSequenceView::setMatchPercentage( U2OpStatus &os, int percentage ){
+void GTUtilsOptionPanelSequenceView::setMatchPercentage( HI::GUITestOpStatus &os, int percentage ){
     QSpinBox *spinMatchBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "spinBoxMatch"));
 
-    GTSpinBox::setValue(os, spinMatchBox, percentage);
+    GTSpinBox::setValue(os, spinMatchBox, percentage, GTGlobals::UseKeyBoard);
     GTGlobals::sleep(2500);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setUsePatternName"
-void GTUtilsOptionPanelSequenceView::setUsePatternName(U2OpStatus &os, bool setChecked) {
+void GTUtilsOptionPanelSequenceView::setUsePatternName(HI::GUITestOpStatus &os, bool setChecked) {
     openAnnotationParametersShowHideWidget(os);
     GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "chbUsePatternNames"), setChecked);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setSearchInTranslation"
-void GTUtilsOptionPanelSequenceView::setSearchInTranslation( U2OpStatus &os, bool inTranslation /* = true*/ ){
+void GTUtilsOptionPanelSequenceView::setSearchInTranslation( HI::GUITestOpStatus &os, bool inTranslation /* = true*/ ){
     QComboBox *searchIn = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "boxSeqTransl", NULL, GTGlobals::FindOptions(false)));
     GT_CHECK(searchIn != NULL, "combobox is NULL");
 
@@ -465,7 +471,7 @@ void GTUtilsOptionPanelSequenceView::setSearchInTranslation( U2OpStatus &os, boo
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setSearchInLocation"
-void GTUtilsOptionPanelSequenceView::setSearchInLocation( U2OpStatus &os, QString locationStr ){
+void GTUtilsOptionPanelSequenceView::setSearchInLocation( HI::GUITestOpStatus &os, QString locationStr ){
     QComboBox *region = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "boxRegion", NULL, GTGlobals::FindOptions(false)));
     GT_CHECK(region != NULL, "combobox is NULL");
 
@@ -478,7 +484,7 @@ void GTUtilsOptionPanelSequenceView::setSearchInLocation( U2OpStatus &os, QStrin
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setSetMaxResults"
-void GTUtilsOptionPanelSequenceView::setSetMaxResults( U2OpStatus &os, int maxResults ){
+void GTUtilsOptionPanelSequenceView::setSetMaxResults( HI::GUITestOpStatus &os, int maxResults ){
     QSpinBox *limit = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "boxMaxResult", NULL, GTGlobals::FindOptions(false)));
     GT_CHECK(limit != NULL, "spinbox is NULL");
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
index 230f741..1aef48f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
@@ -19,25 +19,16 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _U2_GT_UTILS_OPTION_PANEL_SEQUENCE_VIEW_H_
+#define _U2_GT_UTILS_OPTION_PANEL_SEQUENCE_VIEW_H_
 
-#ifndef U2_GTUTILS_OPTION_PANEL_SEQUENCE_VIEW_H
-#define U2_GTUTILS_OPTION_PANEL_SEQUENCE_VIEW_H
+#include <QToolButton>
+#include <QLineEdit>
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolButton>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QLineEdit>
-#endif
-
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 namespace U2 {
 
-class U2OpStatus;
-
 class GTUtilsOptionPanelSequenceView{
 public:
     enum Tabs {
@@ -45,8 +36,7 @@ public:
         AnnotationsHighlighting,
         Statistics,
         InSilicoPcr,
-        CircularView,
-        Das
+        CircularView
     };
 
     enum AddRefMethod {
@@ -57,73 +47,73 @@ public:
     static const QMap<Tabs,QString> tabsNames;
     static const QMap<Tabs, QString> innerWidgetNames;
 
-    static void toggleTab(U2OpStatus &os, Tabs tab);
-    static void openTab(U2OpStatus &os, Tabs tab);
-    static void closeTab(U2OpStatus &os, Tabs tab);
-    static bool isTabOpened(U2OpStatus &os, Tabs tab);
+    static void toggleTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void openTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void closeTab(HI::GUITestOpStatus &os, Tabs tab);
+    static bool isTabOpened(HI::GUITestOpStatus &os, Tabs tab);
 
     // Find pattern options panel tab
-    static void enterPattern(U2OpStatus &os, QString pattern, bool useCopyPaste = false);
-    static void enterPatternFromFile(U2OpStatus &os, QString filepath, QString filename);
+    static void enterPattern(HI::GUITestOpStatus &os, QString pattern, bool useCopyPaste = false);
+    static void enterPatternFromFile(HI::GUITestOpStatus &os, QString filepath, QString filename);
 
-    static bool checkResultsText(U2OpStatus &os, QString expectedText);
+    static bool checkResultsText(HI::GUITestOpStatus &os, QString expectedText);
 
-    static void setSearchWithAmbiguousBases(U2OpStatus &os, bool searchWithAmbiguousBases = true);
-    static void setStrand(U2OpStatus &os, QString strandStr);
-    static void setRegionType(U2OpStatus &os, const QString &regionType);
-    static void setRegion(U2OpStatus &os, int from, int to);
-    static void setSearchInTranslation(U2OpStatus &os, bool inTranslation = true);
-    static void setSearchInLocation(U2OpStatus &os, QString strandStr);
-    static void setSetMaxResults(U2OpStatus &os, int maxResults);
-    static void setAlgorithm(U2OpStatus &os, QString algorithm);
-    static void setMatchPercentage(U2OpStatus &os, int percentage);
-    static void setUsePatternName(U2OpStatus &os, bool setChecked = true);
+    static void setSearchWithAmbiguousBases(HI::GUITestOpStatus &os, bool searchWithAmbiguousBases = true);
+    static void setStrand(HI::GUITestOpStatus &os, QString strandStr);
+    static void setRegionType(HI::GUITestOpStatus &os, const QString &regionType);
+    static void setRegion(HI::GUITestOpStatus &os, int from, int to);
+    static void setSearchInTranslation(HI::GUITestOpStatus &os, bool inTranslation = true);
+    static void setSearchInLocation(HI::GUITestOpStatus &os, QString strandStr);
+    static void setSetMaxResults(HI::GUITestOpStatus &os, int maxResults);
+    static void setAlgorithm(HI::GUITestOpStatus &os, QString algorithm);
+    static void setMatchPercentage(HI::GUITestOpStatus &os, int percentage);
+    static void setUsePatternName(HI::GUITestOpStatus &os, bool setChecked = true);
 
-    static int getMatchPercentage(U2OpStatus &os);
-    static QString getRegionType(U2OpStatus &os);
-    static QPair<int, int> getRegion(U2OpStatus &os);
-    static const QString getHintText(U2OpStatus &os);
+    static int getMatchPercentage(HI::GUITestOpStatus &os);
+    static QString getRegionType(HI::GUITestOpStatus &os);
+    static QPair<int, int> getRegion(HI::GUITestOpStatus &os);
+    static const QString getHintText(HI::GUITestOpStatus &os);
 
-    static void enterFilepathForSavingAnnotations(U2OpStatus &os, QString filepath);
+    static void enterFilepathForSavingAnnotations(HI::GUITestOpStatus &os, QString filepath);
 
-    static void toggleInputFromFilePattern(U2OpStatus &os);
+    static void toggleInputFromFilePattern(HI::GUITestOpStatus &os);
 
-    static void toggleSaveAnnotationsTo(U2OpStatus &os);
+    static void toggleSaveAnnotationsTo(HI::GUITestOpStatus &os);
 
-    static void clickNext(U2OpStatus &os);
-    static void clickPrev(U2OpStatus &os);
-    static void clickGetAnnotation(U2OpStatus &os);
-    static bool isPrevNextEnabled(U2OpStatus &os);
-    static bool isGetAnnotationsEnabled(U2OpStatus &os);
+    static void clickNext(HI::GUITestOpStatus &os);
+    static void clickPrev(HI::GUITestOpStatus &os);
+    static void clickGetAnnotation(HI::GUITestOpStatus &os);
+    static bool isPrevNextEnabled(HI::GUITestOpStatus &os);
+    static bool isGetAnnotationsEnabled(HI::GUITestOpStatus &os);
 
-    // DAS options panel tab
-    static void fetchDasIds(U2OpStatus &os);
-    static int getDasIdsCount(U2OpStatus &os);
+    // Circular view options panel tab
+    static void toggleCircularView(HI::GUITestOpStatus &os);
+    static void setTitleFontSize(HI::GUITestOpStatus &os, int fontSize);
+    static int getTitleFontSize(HI::GUITestOpStatus &os);
 
     // In Silico PCR tab
-    static void setForwardPrimer(U2OpStatus &os, const QString &primer);
-    static void setReversePrimer(U2OpStatus &os, const QString &primer);
-    static void showPrimersDetails(U2OpStatus &os);
+    static void setForwardPrimer(HI::GUITestOpStatus &os, const QString &primer);
+    static void setReversePrimer(HI::GUITestOpStatus &os, const QString &primer);
+    static void showPrimersDetails(HI::GUITestOpStatus &os);
 
     // Utility
-    static bool isSearchAlgorithmShowHideWidgetOpened(U2OpStatus &os);
-    static bool isSearchInShowHideWidgetOpened(U2OpStatus &os);
-    static bool isOtherSettingsShowHideWidgetOpened(U2OpStatus &os);
-    static bool isSaveAnnotationToShowHideWidgetOpened(U2OpStatus &os);
-    static bool isAnnotationParametersShowHideWidgetOpened(U2OpStatus &os);
-
-    static void openSearchAlgorithmShowHideWidget(U2OpStatus &os, bool open = true);
-    static void openSearchInShowHideWidget(U2OpStatus &os, bool open = true);
-    static void openOtherSettingsShowHideWidget(U2OpStatus &os, bool open = true);
-    static void openSaveAnnotationToShowHideWidget(U2OpStatus &os, bool open = true);
-    static void openAnnotationParametersShowHideWidget(U2OpStatus &os, bool open = true);
+    static bool isSearchAlgorithmShowHideWidgetOpened(HI::GUITestOpStatus &os);
+    static bool isSearchInShowHideWidgetOpened(HI::GUITestOpStatus &os);
+    static bool isOtherSettingsShowHideWidgetOpened(HI::GUITestOpStatus &os);
+    static bool isSaveAnnotationToShowHideWidgetOpened(HI::GUITestOpStatus &os);
+    static bool isAnnotationParametersShowHideWidgetOpened(HI::GUITestOpStatus &os);
+
+    static void openSearchAlgorithmShowHideWidget(HI::GUITestOpStatus &os, bool open = true);
+    static void openSearchInShowHideWidget(HI::GUITestOpStatus &os, bool open = true);
+    static void openOtherSettingsShowHideWidget(HI::GUITestOpStatus &os, bool open = true);
+    static void openSaveAnnotationToShowHideWidget(HI::GUITestOpStatus &os, bool open = true);
+    static void openAnnotationParametersShowHideWidget(HI::GUITestOpStatus &os, bool open = true);
 
 private:
     static QMap<Tabs, QString> initNames();
     static QMap<Tabs, QString> initInnerWidgetNames();
 };
 
+}   // namespace U2
 
-}
-
-#endif // GTUTILSOPTIONPANELMSA_H
+#endif // _U2_GT_UTILS_OPTION_PANEL_SEQUENCE_VIEW_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
index 1d54167..1aa3d81 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
@@ -19,14 +19,15 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/global.h>
 #include "GTUtilsOptionsPanel.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTTreeWidget.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include <U2Core/ProjectModel.h>
 #include <U2Core/U2OpStatus.h>
 #include <U2Gui/MainWindow.h>
@@ -41,12 +42,13 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsOptionsPanel"
 
 
 #define GT_METHOD_NAME "runFindPatternWithHotKey"
-void GTUtilsOptionsPanel::runFindPatternWithHotKey( const QString& pattern, U2OpStatus& os){
+void GTUtilsOptionsPanel::runFindPatternWithHotKey( const QString& pattern, HI::GUITestOpStatus& os){
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep();
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
index f9fe683..c5671d2 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
@@ -22,16 +22,14 @@
 #ifndef _U2_GUI_OPTIONS_PANEL_UTILS_H_
 #define _U2_GUI_OPTIONS_PANEL_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 namespace U2 {
 
-class U2OpStatus;
-
 class GTUtilsOptionsPanel {
 
 public:
-    static void runFindPatternWithHotKey(const QString& pattern, U2OpStatus& os);
+    static void runFindPatternWithHotKey(const QString& pattern, HI::GUITestOpStatus& os);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
index 4384f9c..7881c9f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
@@ -25,60 +25,60 @@
 #include <U2Core/AppSettings.h>
 #include <U2Core/UserApplicationsSettings.h>
 
-#include "api/GTFile.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTableView.h"
-#include "api/GTWidget.h"
+#include "system/GTFile.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsPcr.h"
 
 namespace U2 {
 
-void GTUtilsPcr::setPrimer(U2OpStatus &os, U2Strand::Direction direction, const QByteArray &primer) {
+void GTUtilsPcr::setPrimer(HI::GUITestOpStatus &os, U2Strand::Direction direction, const QByteArray &primer) {
     QLineEdit *primerEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "primerEdit", primerBox(os, direction)));
     GTLineEdit::setText(os, primerEdit, primer, true);
 }
 
-void GTUtilsPcr::setMismatches(U2OpStatus &os, U2Strand::Direction direction, int mismatches) {
+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);
 }
 
-void GTUtilsPcr::setPerfectMatch(U2OpStatus &os, int number) {
+void GTUtilsPcr::setPerfectMatch(HI::GUITestOpStatus &os, int number) {
     QSpinBox *spinBox = dynamic_cast<QSpinBox*>(GTWidget::findWidget(os, "perfectSpinBox"));
     GTSpinBox::setValue(os, spinBox, number, GTGlobals::UseKeyBoard);
 }
 
-void GTUtilsPcr::setMaxProductSize(U2OpStatus &os, int number) {
+void GTUtilsPcr::setMaxProductSize(HI::GUITestOpStatus &os, int number) {
     QSpinBox *spinBox = dynamic_cast<QSpinBox*>(GTWidget::findWidget(os, "productSizeSpinBox"));
     GTSpinBox::setValue(os, spinBox, number, GTGlobals::UseKeyBoard);
 }
 
-QWidget * GTUtilsPcr::browseButton(U2OpStatus &os, U2Strand::Direction direction) {
+QWidget * GTUtilsPcr::browseButton(HI::GUITestOpStatus &os, U2Strand::Direction direction) {
     return GTWidget::findWidget(os, "browseButton", primerBox(os, direction));
 }
 
-int GTUtilsPcr::productsCount(U2OpStatus &os) {
+int GTUtilsPcr::productsCount(HI::GUITestOpStatus &os) {
     return GTTableView::rowCount(os, table(os));
 }
 
-QString GTUtilsPcr::getResultRegion(U2OpStatus &os, int number) {
+QString GTUtilsPcr::getResultRegion(HI::GUITestOpStatus &os, int number) {
     return GTTableView::data(os, table(os), number, 0);
 }
 
-QPoint GTUtilsPcr::getResultPoint(U2OpStatus &os, int number) {
+QPoint GTUtilsPcr::getResultPoint(HI::GUITestOpStatus &os, int number) {
     return GTTableView::getCellPoint(os, table(os), number, 0);
 }
 
-QPoint GTUtilsPcr::getDetailsPoint(U2OpStatus &os) {
+QPoint GTUtilsPcr::getDetailsPoint(HI::GUITestOpStatus &os) {
     QWidget *warning = GTWidget::findWidget(os, "detailsLinkLabel");
     QPoint result = warning->geometry().center();
     result.setX(result.x()/2);
     return warning->parentWidget()->mapToGlobal(result);
 }
 
-QWidget * GTUtilsPcr::primerBox(U2OpStatus &os, U2Strand::Direction direction) {
+QWidget * GTUtilsPcr::primerBox(HI::GUITestOpStatus &os, U2Strand::Direction direction) {
     QString boxName = "forwardPrimerBox";
     if (U2Strand::Complementary == direction) {
         boxName = "reversePrimerBox";
@@ -86,11 +86,11 @@ QWidget * GTUtilsPcr::primerBox(U2OpStatus &os, U2Strand::Direction direction) {
     return GTWidget::findWidget(os, boxName);
 }
 
-QTableView * GTUtilsPcr::table(U2OpStatus &os) {
+QTableView * GTUtilsPcr::table(HI::GUITestOpStatus &os) {
     return dynamic_cast<QTableView*>(GTWidget::findWidget(os, "productsTable"));
 }
 
-void GTUtilsPcr::clearPcrDir(U2OpStatus &os){
+void GTUtilsPcr::clearPcrDir(HI::GUITestOpStatus &os){
     Q_UNUSED(os);
     QString path = AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + "/pcr";
     GTFile::removeDir(path);
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.h b/src/plugins/GUITestBase/src/GTUtilsPcr.h
index 394c33e..0a4e6a6 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.h
@@ -24,28 +24,29 @@
 
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/U2Type.h>
-
+#include <GTGlobals.h>
 
 class QTableView;
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsPcr {
 public:
-    static void setPrimer(U2OpStatus &os, U2Strand::Direction direction, const QByteArray &primer);
-    static void setMismatches(U2OpStatus &os, U2Strand::Direction direction, int mismatches);
-    static void setPerfectMatch(U2OpStatus &os, int number);
-    static void setMaxProductSize(U2OpStatus &os, int number);
-    static QWidget * browseButton(U2OpStatus &os, U2Strand::Direction direction);
-    static int productsCount(U2OpStatus &os);
-    static QString getResultRegion(U2OpStatus &os, int number);
-    static QPoint getResultPoint(U2OpStatus &os, int number);
-    static QPoint getDetailsPoint(U2OpStatus &os);
-    static QWidget * primerBox(U2OpStatus &os, U2Strand::Direction direction);
-    static void clearPcrDir(U2OpStatus &os);
+    static void setPrimer(HI::GUITestOpStatus &os, U2Strand::Direction direction, const QByteArray &primer);
+    static void setMismatches(HI::GUITestOpStatus &os, U2Strand::Direction direction, int mismatches);
+    static void setPerfectMatch(HI::GUITestOpStatus &os, int number);
+    static void setMaxProductSize(HI::GUITestOpStatus &os, int number);
+    static QWidget * browseButton(HI::GUITestOpStatus &os, U2Strand::Direction direction);
+    static int productsCount(HI::GUITestOpStatus &os);
+    static QString getResultRegion(HI::GUITestOpStatus &os, int number);
+    static QPoint getResultPoint(HI::GUITestOpStatus &os, int number);
+    static QPoint getDetailsPoint(HI::GUITestOpStatus &os);
+    static QWidget * primerBox(HI::GUITestOpStatus &os, U2Strand::Direction direction);
+    static void clearPcrDir(HI::GUITestOpStatus &os);
 
 private:
-    static QTableView * table(U2OpStatus &os);
+    static QTableView * table(HI::GUITestOpStatus &os);
 };
 
 } // U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
index 8394c04..8fb28f7 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
@@ -28,10 +28,11 @@
 
 #include "GTUtilsMdi.h"
 #include "GTUtilsPhyTree.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
+using namespace HI;
 
 const int widthMin = 7;
 const int widthMax = 9;
@@ -39,19 +40,14 @@ const int widthMax = 9;
 #define GT_CLASS_NAME "GTUtilsPhyTree"
 
 #define GT_METHOD_NAME "getNodes"
-QList<QGraphicsItem*> GTUtilsPhyTree::getNodes(U2OpStatus &os, int width){
-    QList<QGraphicsItem*> result;
-    QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
+QList<QGraphicsItem *> GTUtilsPhyTree::getNodes(HI::GUITestOpStatus &os, int width){
+    QList<QGraphicsItem *> result;
+    QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
     GT_CHECK_RESULT(treeView, "treeView not found", result);
 
-    QList<QGraphicsItem*> list = treeView->scene()->items();
-    foreach(QGraphicsItem* item, list){
-
-        qreal r = item->boundingRect().width();
-        if(r>2 && r<15){
-            uiLog.trace("for debug");
-        }
-        if(item->boundingRect().width()==width){
+    QList<QGraphicsItem *> list = treeView->scene()->items();
+    foreach (QGraphicsItem *item, list) {
+        if (qRound(item->boundingRect().width()) == width) {
             result.append(item);
         }
     }
@@ -60,19 +56,19 @@ QList<QGraphicsItem*> GTUtilsPhyTree::getNodes(U2OpStatus &os, int width){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedNodes"
-QList<QGraphicsItem*> GTUtilsPhyTree::getSelectedNodes(U2OpStatus &os){
+QList<QGraphicsItem*> GTUtilsPhyTree::getSelectedNodes(HI::GUITestOpStatus &os){
     return getNodes(os, widthMax);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getUnselectedNodes"
-QList<QGraphicsItem*> GTUtilsPhyTree::getUnselectedNodes(U2OpStatus &os){
+QList<QGraphicsItem*> GTUtilsPhyTree::getUnselectedNodes(HI::GUITestOpStatus &os){
     return getNodes(os, widthMin);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNodes"
-QList<QGraphicsItem*> GTUtilsPhyTree::getNodes(U2OpStatus &os){
+QList<QGraphicsItem*> GTUtilsPhyTree::getNodes(HI::GUITestOpStatus &os){
     QList<QGraphicsItem*> result;
     result.append(getSelectedNodes(os));
     result.append(getUnselectedNodes(os));
@@ -81,7 +77,7 @@ QList<QGraphicsItem*> GTUtilsPhyTree::getNodes(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLabels"
-QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getLabels(U2OpStatus &os, QGraphicsView *treeView){
+QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getLabels(HI::GUITestOpStatus &os, QGraphicsView *treeView){
     QList<QGraphicsSimpleTextItem*> result;
     if(treeView == NULL){
         treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
@@ -104,7 +100,7 @@ QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getLabels(U2OpStatus &os, QGraph
 }
 #undef GT_METHOD_NAME
 
-QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableLabels(U2OpStatus &os, QGraphicsView *treeView){
+QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableLabels(HI::GUITestOpStatus &os, QGraphicsView *treeView){
     QList<QGraphicsSimpleTextItem*> result;
     foreach(QGraphicsSimpleTextItem* item, getLabels(os, treeView)){
         if(item->isVisible()){
@@ -115,7 +111,7 @@ QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableLabels(U2OpStatus &os
 }
 
 #define GT_METHOD_NAME "getDistances"
-QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getDistances(U2OpStatus &os, QGraphicsView *treeView){
+QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getDistances(HI::GUITestOpStatus &os, QGraphicsView *treeView){
     QList<QGraphicsSimpleTextItem*> result;
     if(treeView == NULL){
         treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
@@ -137,7 +133,7 @@ QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getDistances(U2OpStatus &os, QGr
 }
 #undef GT_METHOD_NAME
 
-QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableDistances(U2OpStatus &os, QGraphicsView *treeView){
+QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableDistances(HI::GUITestOpStatus &os, QGraphicsView *treeView){
     QList<QGraphicsSimpleTextItem*> result;
     foreach(QGraphicsSimpleTextItem* item, getDistances(os, treeView)){
         if(item->isVisible()){
@@ -147,7 +143,7 @@ QList<QGraphicsSimpleTextItem*> GTUtilsPhyTree::getVisiableDistances(U2OpStatus
     return result;
 }
 #define GT_METHOD_NAME "getDistancesValues"
-QList<double> GTUtilsPhyTree::getDistancesValues(U2OpStatus &os){
+QList<double> GTUtilsPhyTree::getDistancesValues(HI::GUITestOpStatus &os){
     QList<double> result;
     QList<QGraphicsSimpleTextItem*> distList = getDistances(os);
 
@@ -165,7 +161,7 @@ QList<double> GTUtilsPhyTree::getDistancesValues(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLabelsText"
-QStringList GTUtilsPhyTree::getLabelsText(U2OpStatus &os){
+QStringList GTUtilsPhyTree::getLabelsText(HI::GUITestOpStatus &os){
     QStringList result;
     QList<QGraphicsSimpleTextItem*> labelList = getLabels(os);
 
@@ -178,7 +174,7 @@ QStringList GTUtilsPhyTree::getLabelsText(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getGlobalCoord"
-QPoint GTUtilsPhyTree::getGlobalCoord(U2OpStatus& os,QGraphicsItem *item){
+QPoint GTUtilsPhyTree::getGlobalCoord(HI::GUITestOpStatus& os,QGraphicsItem *item){
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     GT_CHECK_RESULT(treeView, "treeView not found", QPoint());
 
@@ -192,7 +188,7 @@ QPoint GTUtilsPhyTree::getGlobalCoord(U2OpStatus& os,QGraphicsItem *item){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickNode"
-void GTUtilsPhyTree::clickNode(U2OpStatus &os, GraphicsButtonItem *node) {
+void GTUtilsPhyTree::clickNode(HI::GUITestOpStatus &os, GraphicsButtonItem *node) {
     GT_CHECK(NULL != node, "Node to click is NULL");
     GTMouseDriver::moveTo(os, getGlobalCoord(os, node));
     GTMouseDriver::click(os);
@@ -200,7 +196,7 @@ void GTUtilsPhyTree::clickNode(U2OpStatus &os, GraphicsButtonItem *node) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNodeDistance"
-qreal GTUtilsPhyTree::getNodeDistance(U2OpStatus &os, GraphicsButtonItem *node) {
+qreal GTUtilsPhyTree::getNodeDistance(HI::GUITestOpStatus &os, GraphicsButtonItem *node) {
     GT_CHECK_RESULT(NULL != node, "Node is NULL", 0);
     GraphicsRectangularBranchItem *branch = dynamic_cast<GraphicsRectangularBranchItem *>(node->parentItem());
     GT_CHECK_RESULT(NULL != branch, "Node's branch' is NULL", 0);
@@ -209,13 +205,13 @@ qreal GTUtilsPhyTree::getNodeDistance(U2OpStatus &os, GraphicsButtonItem *node)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getTreeViewerUi"
-TreeViewerUI * GTUtilsPhyTree::getTreeViewerUi(U2OpStatus &os) {
+TreeViewerUI * GTUtilsPhyTree::getTreeViewerUi(HI::GUITestOpStatus &os) {
     return GTWidget::findExactWidget<TreeViewerUI *>(os, "treeView", GTUtilsMdi::activeWindow(os));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getOrderedRectangularNodes"
-QList<GraphicsButtonItem *> GTUtilsPhyTree::getOrderedRectangularNodes(U2OpStatus &os) {
+QList<GraphicsButtonItem *> GTUtilsPhyTree::getOrderedRectangularNodes(HI::GUITestOpStatus &os) {
     QList<GraphicsButtonItem *> orderedRectangularNodes;
     QList<GraphicsRectangularBranchItem *> graphicsRectangularBranchItems = getOrderedRectangularBranches(os);
     foreach (GraphicsRectangularBranchItem *rectangularBranch, graphicsRectangularBranchItems) {
@@ -230,13 +226,13 @@ QList<GraphicsButtonItem *> GTUtilsPhyTree::getOrderedRectangularNodes(U2OpStatu
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getOrderedRectangularBranches"
-QList<GraphicsRectangularBranchItem *> GTUtilsPhyTree::getOrderedRectangularBranches(U2OpStatus &os) {
+QList<GraphicsRectangularBranchItem *> GTUtilsPhyTree::getOrderedRectangularBranches(HI::GUITestOpStatus &os) {
     return getSubtreeOrderedRectangularBranches(os, getRootRectangularBranch(os));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRootRectangularNode"
-QList<qreal> GTUtilsPhyTree::getOrderedRectangularBranchesDistances(U2OpStatus &os) {
+QList<qreal> GTUtilsPhyTree::getOrderedRectangularBranchesDistances(HI::GUITestOpStatus &os) {
     QList<GraphicsRectangularBranchItem *> orderedBranches = getOrderedRectangularBranches(os);
     QList<qreal> orderedDistances;
     foreach (GraphicsRectangularBranchItem *branch, orderedBranches) {
@@ -248,7 +244,7 @@ QList<qreal> GTUtilsPhyTree::getOrderedRectangularBranchesDistances(U2OpStatus &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRootRectangularNode"
-GraphicsButtonItem * GTUtilsPhyTree::getRootRectangularNode(U2OpStatus &os) {
+GraphicsButtonItem * GTUtilsPhyTree::getRootRectangularNode(HI::GUITestOpStatus &os) {
     GraphicsRectangularBranchItem *rootBranch = getRootRectangularBranch(os);
     GT_CHECK_RESULT(NULL != rootBranch, "Root branch is NULL", NULL);
     return rootBranch->getButton();
@@ -256,7 +252,7 @@ GraphicsButtonItem * GTUtilsPhyTree::getRootRectangularNode(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRootRectangularBranch"
-GraphicsRectangularBranchItem * GTUtilsPhyTree::getRootRectangularBranch(U2OpStatus &os) {
+GraphicsRectangularBranchItem * GTUtilsPhyTree::getRootRectangularBranch(HI::GUITestOpStatus &os) {
     TreeViewerUI *treeViewerUi = getTreeViewerUi(os);
     GT_CHECK_RESULT(NULL != treeViewerUi, "TreeViewerUI is NULL", NULL);
 
@@ -273,7 +269,7 @@ GraphicsRectangularBranchItem * GTUtilsPhyTree::getRootRectangularBranch(U2OpSta
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSubtreeOrderedRectangularBranches"
-QList<GraphicsRectangularBranchItem *> GTUtilsPhyTree::getSubtreeOrderedRectangularBranches(U2OpStatus &os, GraphicsRectangularBranchItem *rootBranch) {
+QList<GraphicsRectangularBranchItem *> GTUtilsPhyTree::getSubtreeOrderedRectangularBranches(HI::GUITestOpStatus &os, GraphicsRectangularBranchItem *rootBranch) {
     GT_CHECK_RESULT(NULL != rootBranch, "Subtree root branch is NULL", QList<GraphicsRectangularBranchItem *>());
 
     const QList<QGraphicsItem *> childItems = rootBranch->getChildItems();
diff --git a/src/plugins/GUITestBase/src/GTUtilsPhyTree.h b/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
index 5777fa5..f9ae5a1 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
@@ -24,7 +24,7 @@
 
 #include <U2View/TreeViewer.h>
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 namespace U2 {
 
@@ -32,22 +32,22 @@ class GraphicsButtonItem;
 
 class GTUtilsPhyTree {
 public:
-    static QList<QGraphicsItem *> getSelectedNodes(U2OpStatus& os);
-    static QList<QGraphicsItem *> getUnselectedNodes(U2OpStatus& os);
-    static QList<QGraphicsItem *> getNodes(U2OpStatus& os);
+    static QList<QGraphicsItem *> getSelectedNodes(HI::GUITestOpStatus& os);
+    static QList<QGraphicsItem *> getUnselectedNodes(HI::GUITestOpStatus& os);
+    static QList<QGraphicsItem *> getNodes(HI::GUITestOpStatus& os);
 
-    static QList<QGraphicsSimpleTextItem*> getLabels(U2OpStatus& os, QGraphicsView* treeView = NULL);
-    static QList<QGraphicsSimpleTextItem*> getVisiableLabels(U2OpStatus& os, QGraphicsView* treeView = NULL);
-    static QList<QGraphicsSimpleTextItem*> getDistances(U2OpStatus& os, QGraphicsView* treeView = NULL);
-    static QList<QGraphicsSimpleTextItem*> getVisiableDistances(U2OpStatus& os, QGraphicsView* treeView = NULL);
-    static QStringList getLabelsText(U2OpStatus& os);
-    static QList<double> getDistancesValues(U2OpStatus& os);
-    static QPoint getGlobalCoord(U2OpStatus& os, QGraphicsItem* item);
+    static QList<QGraphicsSimpleTextItem*> getLabels(HI::GUITestOpStatus& os, QGraphicsView* treeView = NULL);
+    static QList<QGraphicsSimpleTextItem*> getVisiableLabels(HI::GUITestOpStatus& os, QGraphicsView* treeView = NULL);
+    static QList<QGraphicsSimpleTextItem*> getDistances(HI::GUITestOpStatus& os, QGraphicsView* treeView = NULL);
+    static QList<QGraphicsSimpleTextItem*> getVisiableDistances(HI::GUITestOpStatus& os, QGraphicsView* treeView = NULL);
+    static QStringList getLabelsText(HI::GUITestOpStatus& os);
+    static QList<double> getDistancesValues(HI::GUITestOpStatus& os);
+    static QPoint getGlobalCoord(HI::GUITestOpStatus& os, QGraphicsItem* item);
 
-    static void clickNode(U2OpStatus &os, GraphicsButtonItem *node);
-    static qreal getNodeDistance(U2OpStatus &os, GraphicsButtonItem *node);
+    static void clickNode(HI::GUITestOpStatus &os, GraphicsButtonItem *node);
+    static qreal getNodeDistance(HI::GUITestOpStatus &os, GraphicsButtonItem *node);
 
-    static TreeViewerUI * getTreeViewerUi(U2OpStatus &os);
+    static TreeViewerUI * getTreeViewerUi(HI::GUITestOpStatus &os);
 
     /**
      * Branches are enumerated:
@@ -71,17 +71,17 @@ public:
      *    |-10-
      *
      */
-    static QList<GraphicsButtonItem *> getOrderedRectangularNodes(U2OpStatus &os);
-    static QList<GraphicsRectangularBranchItem *> getOrderedRectangularBranches(U2OpStatus &os);
-    static QList<qreal> getOrderedRectangularBranchesDistances(U2OpStatus &os);
+    static QList<GraphicsButtonItem *> getOrderedRectangularNodes(HI::GUITestOpStatus &os);
+    static QList<GraphicsRectangularBranchItem *> getOrderedRectangularBranches(HI::GUITestOpStatus &os);
+    static QList<qreal> getOrderedRectangularBranchesDistances(HI::GUITestOpStatus &os);
 
-    static GraphicsButtonItem * getRootRectangularNode(U2OpStatus &os);
-    static GraphicsRectangularBranchItem * getRootRectangularBranch(U2OpStatus &os);
+    static GraphicsButtonItem * getRootRectangularNode(HI::GUITestOpStatus &os);
+    static GraphicsRectangularBranchItem * getRootRectangularBranch(HI::GUITestOpStatus &os);
 
 private:
-    static QList<GraphicsRectangularBranchItem *> getSubtreeOrderedRectangularBranches(U2OpStatus &os, GraphicsRectangularBranchItem *rootBranch);
+    static QList<GraphicsRectangularBranchItem *> getSubtreeOrderedRectangularBranches(HI::GUITestOpStatus &os, GraphicsRectangularBranchItem *rootBranch);
     static bool rectangularBranchLessThan(GraphicsRectangularBranchItem *first, GraphicsRectangularBranchItem *second);
-    static QList<QGraphicsItem *> getNodes(U2OpStatus& os, int width);
+    static QList<QGraphicsItem *> getNodes(HI::GUITestOpStatus& os, int width);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
index feffac5..964866e 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
@@ -22,31 +22,33 @@
 #include <QTableView>
 
 #include <U2Gui/MainWindow.h>
+#include <U2Core/U2SafePoints.h>
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsPrimerLibrary.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTableView.h"
-#include "api/GTWidget.h"
+#include "utils/GTKeyboardUtils.h"
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTWidget.h>
 #include "runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsPrimerLibrary"
 
-QWidget * GTUtilsPrimerLibrary::openLibrary(U2OpStatus &os) {
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << "Primer" << "Primer library");
+QWidget * GTUtilsPrimerLibrary::openLibrary(HI::GUITestOpStatus &os) {
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Primer" << "Primer library");
     return GTUtilsMdi::activeWindow(os);
 }
 
-void GTUtilsPrimerLibrary::clickButton(U2OpStatus &os, Button button) {
+void GTUtilsPrimerLibrary::clickButton(HI::GUITestOpStatus &os, Button button) {
     GTWidget::click(os, getButton(os, button));
 }
 
-QAbstractButton * GTUtilsPrimerLibrary::getButton(U2OpStatus &os, Button button) {
+QAbstractButton * GTUtilsPrimerLibrary::getButton(HI::GUITestOpStatus &os, Button button) {
     QDialogButtonBox *box = GTUtilsDialog::buttonBox(os, GTWidget::findWidget(os, "PrimerLibraryWidget"));
     switch (button) {
         case Add:
@@ -66,16 +68,16 @@ QAbstractButton * GTUtilsPrimerLibrary::getButton(U2OpStatus &os, Button button)
     }
 }
 
-int GTUtilsPrimerLibrary::librarySize(U2OpStatus &os) {
+int GTUtilsPrimerLibrary::librarySize(HI::GUITestOpStatus &os) {
     return GTTableView::rowCount(os, table(os));
 }
 
-QString GTUtilsPrimerLibrary::getPrimerSequence(U2OpStatus &os, int number) {
+QString GTUtilsPrimerLibrary::getPrimerSequence(HI::GUITestOpStatus &os, int number) {
     return GTTableView::data(os, table(os), number, 4);
 }
 
 #define GT_METHOD_NAME "getPrimerSequence"
-QString GTUtilsPrimerLibrary::getPrimerSequence(U2OpStatus &os, const QString &name) {
+QString GTUtilsPrimerLibrary::getPrimerSequence(HI::GUITestOpStatus &os, const QString &name) {
     for (int i = 0; i < GTTableView::rowCount(os, table(os)); i++) {
         if (name == GTTableView::data(os, table(os), i, 0)) {
             return getPrimerSequence(os, i);
@@ -85,16 +87,16 @@ QString GTUtilsPrimerLibrary::getPrimerSequence(U2OpStatus &os, const QString &n
 }
 #undef GT_METHOD_NAME
 
-QPoint GTUtilsPrimerLibrary::getPrimerPoint(U2OpStatus &os, int number) {
+QPoint GTUtilsPrimerLibrary::getPrimerPoint(HI::GUITestOpStatus &os, int number) {
     return GTTableView::getCellPoint(os, table(os), number, 0);
 }
 
-void GTUtilsPrimerLibrary::clickPrimer(U2OpStatus &os, int number) {
+void GTUtilsPrimerLibrary::clickPrimer(HI::GUITestOpStatus &os, int number) {
     GTMouseDriver::moveTo(os, getPrimerPoint(os, number));
     GTMouseDriver::click(os);
 }
 
-void GTUtilsPrimerLibrary::clearLibrary(U2OpStatus &os) {
+void GTUtilsPrimerLibrary::clearLibrary(HI::GUITestOpStatus &os) {
     const int size = librarySize(os);
     CHECK(size > 0, );
     GTWidget::click(os, table(os));
@@ -102,7 +104,7 @@ void GTUtilsPrimerLibrary::clearLibrary(U2OpStatus &os) {
     clickButton(os, Remove);
 }
 
-void GTUtilsPrimerLibrary::addPrimer(U2OpStatus &os, const QString &name, const QString &data) {
+void GTUtilsPrimerLibrary::addPrimer(HI::GUITestOpStatus &os, const QString &name, const QString &data) {
     AddPrimerDialogFiller::Parameters parameters;
     parameters.name = name;
     parameters.primer = data;
@@ -112,7 +114,7 @@ void GTUtilsPrimerLibrary::addPrimer(U2OpStatus &os, const QString &name, const
 }
 
 #define GT_METHOD_NAME "selectPrimers"
-void GTUtilsPrimerLibrary::selectPrimers(U2OpStatus &os, const QList<int> &numbers) {
+void GTUtilsPrimerLibrary::selectPrimers(HI::GUITestOpStatus &os, const QList<int> &numbers) {
     const int size = librarySize(os);
 
 #ifdef Q_OS_MAC
@@ -130,12 +132,12 @@ void GTUtilsPrimerLibrary::selectPrimers(U2OpStatus &os, const QList<int> &numbe
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsPrimerLibrary::selectAll(U2OpStatus &os) {
+void GTUtilsPrimerLibrary::selectAll(HI::GUITestOpStatus &os) {
     GTWidget::click(os, table(os));
     GTKeyboardUtils::selectAll(os);
 }
 
-QTableView * GTUtilsPrimerLibrary::table(U2OpStatus &os) {
+QTableView * GTUtilsPrimerLibrary::table(HI::GUITestOpStatus &os) {
     return dynamic_cast<QTableView*>(GTWidget::findWidget(os, "primerTable"));
 }
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
index 982b9b5..8e02fea 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
@@ -23,6 +23,7 @@
 #define _GTUTILS_PRIMER_LIBRARY_H_
 
 #include <U2Core/U2OpStatus.h>
+#include <GTGlobals.h>
 
 class QAbstractButton;
 class QTableView;
@@ -32,21 +33,21 @@ namespace U2 {
 class GTUtilsPrimerLibrary {
 public:
     enum Button {Add, Edit, Remove, Import, Export, Close};
-    static QWidget * openLibrary(U2OpStatus &os);
-    static void clickButton(U2OpStatus &os, Button button);
-    static QAbstractButton * getButton(U2OpStatus &os, Button button);
-    static int librarySize(U2OpStatus &os);
-    static QString getPrimerSequence(U2OpStatus &os, int number);
-    static QString getPrimerSequence(U2OpStatus &os, const QString &name);
-    static QPoint getPrimerPoint(U2OpStatus &os, int number);
-    static void clickPrimer(U2OpStatus &os, int number);
-    static void clearLibrary(U2OpStatus &os);
-    static void addPrimer(U2OpStatus &os, const QString &name, const QString &data);
-    static void selectPrimers(U2OpStatus &os, const QList<int> &numbers);
-    static void selectAll(U2OpStatus &os);
+    static QWidget * openLibrary(HI::GUITestOpStatus &os);
+    static void clickButton(HI::GUITestOpStatus &os, Button button);
+    static QAbstractButton * getButton(HI::GUITestOpStatus &os, Button button);
+    static int librarySize(HI::GUITestOpStatus &os);
+    static QString getPrimerSequence(HI::GUITestOpStatus &os, int number);
+    static QString getPrimerSequence(HI::GUITestOpStatus &os, const QString &name);
+    static QPoint getPrimerPoint(HI::GUITestOpStatus &os, int number);
+    static void clickPrimer(HI::GUITestOpStatus &os, int number);
+    static void clearLibrary(HI::GUITestOpStatus &os);
+    static void addPrimer(HI::GUITestOpStatus &os, const QString &name, const QString &data);
+    static void selectPrimers(HI::GUITestOpStatus &os, const QList<int> &numbers);
+    static void selectAll(HI::GUITestOpStatus &os);
 
 private:
-    static QTableView * table(U2OpStatus &os);
+    static QTableView * table(HI::GUITestOpStatus &os);
 };
 
 } // U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsProject.cpp b/src/plugins/GUITestBase/src/GTUtilsProject.cpp
index 70afcdd..1d06bca 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProject.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsProject.cpp
@@ -19,28 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QUrl>
-
-#include "GTUtilsProject.h"
-
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTWidget.h"
-
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
-#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-
-#include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsProjectTreeView.h"
-#include "GTUtilsSequenceView.h"
-#include "GTUtilsTaskTreeView.h"
-
-#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
+#include <QDir>
+#include <QDragEnterEvent>
+#include <QDropEvent>
+#include <QFileInfo>
+#include <QHeaderView>
+#include <QMainWindow>
+#include <QTreeView>
+#include <QUrl>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/ProjectModel.h>
@@ -50,42 +36,49 @@
 #include <U2View/ADVConstants.h>
 #include <U2View/ADVSingleSequenceWidget.h>
 
-#include <QtGui/QDragEnterEvent>
-#include <QtGui/QDropEvent>
-
-#include <QTreeView>
-
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QHeaderView>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QHeaderView>
-#endif
+#include "GTUtilsAnnotationsTreeView.h"
+#include "GTUtilsProject.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsSequenceView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
+#include "runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h"
+#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
+#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsProject"
 
-void GTUtilsProject::openFiles(U2OpStatus &os, const QList<QUrl> &urls, const OpenFileSettings& s) {
+void GTUtilsProject::openFiles(HI::GUITestOpStatus &os, const QList<QUrl> &urls, const OpenFileSettings& s) {
 
     switch (s.openMethod) {
-        case OpenFileSettings::DragDrop:
-        default:
-            openFilesDrop(os, urls);
+    case OpenFileSettings::DragDrop:
+        openFilesDrop(os, urls);
+        break;
+    case OpenFileSettings::Dialog:
+        openFilesWithDialog(os, urls);
+        break;
     }
 
     checkProject(os);
 }
 
-void GTUtilsProject::openFiles(U2OpStatus &os, const GUrl &path, const OpenFileSettings& s) {
+void GTUtilsProject::openFiles(HI::GUITestOpStatus &os, const GUrl &path, const OpenFileSettings& s) {
     openFiles(os, QList<QUrl>() << path.getURLString(), s);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 #define GT_METHOD_NAME "checkProject"
-void GTUtilsProject::checkProject(U2OpStatus &os, CheckType checkType) {
+void GTUtilsProject::checkProject(HI::GUITestOpStatus &os, CheckType checkType) {
 
     GTGlobals::sleep(500);
 
@@ -101,7 +94,7 @@ void GTUtilsProject::checkProject(U2OpStatus &os, CheckType checkType) {
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsProject::openFilesDrop(U2OpStatus &os, const QList<QUrl>& urls) {
+void GTUtilsProject::openFilesDrop(HI::GUITestOpStatus &os, const QList<QUrl>& urls) {
 
     QWidget* widget = AppContext::getMainWindow()->getQMainWindow();
     QPoint widgetPos(widget->width()/2, widget->height()/2);
@@ -109,7 +102,7 @@ void GTUtilsProject::openFilesDrop(U2OpStatus &os, const QList<QUrl>& urls) {
     QMimeData *mimeData = new QMimeData();
     mimeData->setUrls(urls);
 
-    Qt::DropActions dropActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
+    Qt::DropActions dropActions = Qt::DropActions(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction);
     Qt::MouseButtons mouseButtons = Qt::LeftButton;
 
     if (urls.size() > 1) {
@@ -123,14 +116,22 @@ void GTUtilsProject::openFilesDrop(U2OpStatus &os, const QList<QUrl>& urls) {
     GTGlobals::sendEvent(widget, dropEvent);
 }
 
+void GTUtilsProject::openFilesWithDialog(HI::GUITestOpStatus &os, const QList<QUrl> &urls) {
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new GTSequenceReadingModeDialogUtils(os));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, QUrl::toStringList(urls)));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
+    GTGlobals::sleep(2000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
 
 #define GT_METHOD_NAME "openFileExpectSequence"
-ADVSingleSequenceWidget * GTUtilsProject::openFileExpectSequence(U2OpStatus &os,
+ADVSingleSequenceWidget * GTUtilsProject::openFileExpectSequence(HI::GUITestOpStatus &os,
                                                                 const QString &path,
                                                                 const QString &fileName,
                                                                 const QString &seqName)
 {
     GTFileDialog::openFile(os, path, fileName);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GT_CHECK_OP_RESULT(os, "Error opening file!", NULL);
 
     GTGlobals::sleep(200);
@@ -154,7 +155,7 @@ ADVSingleSequenceWidget * GTUtilsProject::openFileExpectSequence(U2OpStatus &os,
 
 
 #define GT_METHOD_NAME "openFileExpectRawSequence"
-ADVSingleSequenceWidget * GTUtilsProject::openFileExpectRawSequence(U2OpStatus &os,
+ADVSingleSequenceWidget * GTUtilsProject::openFileExpectRawSequence(HI::GUITestOpStatus &os,
                                                                  const QString &path,
                                                                  const QString &fileName,
                                                                  const QString &seqName)
@@ -166,7 +167,7 @@ ADVSingleSequenceWidget * GTUtilsProject::openFileExpectRawSequence(U2OpStatus &
 
 
 #define GT_METHOD_NAME "openFileExpectSequences"
-QList<ADVSingleSequenceWidget*> GTUtilsProject::openFileExpectSequences(U2OpStatus &os,
+QList<ADVSingleSequenceWidget*> GTUtilsProject::openFileExpectSequences(HI::GUITestOpStatus &os,
                                                                         const QString &path,
                                                                         const QString &fileName,
                                                                         const QList<QString> &seqNames)
@@ -174,6 +175,7 @@ QList<ADVSingleSequenceWidget*> GTUtilsProject::openFileExpectSequences(U2OpStat
     QList<ADVSingleSequenceWidget*> result;
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, path, fileName);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GT_CHECK_OP_RESULT(os, "Error opening file!", QList<ADVSingleSequenceWidget*>());
 
     GTGlobals::sleep(200);
@@ -201,46 +203,63 @@ QList<ADVSingleSequenceWidget*> GTUtilsProject::openFileExpectSequences(U2OpStat
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openMultiSequenceFileAsSequences"
-void GTUtilsProject::openMultiSequenceFileAsSequences(U2OpStatus &os, const QString &path, const QString &fileName) {
+void GTUtilsProject::openMultiSequenceFileAsSequences(HI::GUITestOpStatus &os, const QString &path, const QString &fileName) {
     openMultiSequenceFileAsSequences(os, path + "/" + fileName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openMultiSequenceFileAsSequences"
-void GTUtilsProject::openMultiSequenceFileAsSequences(U2OpStatus &os, const QString &filePath) {
+void GTUtilsProject::openMultiSequenceFileAsSequences(HI::GUITestOpStatus &os, const QString &filePath) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openMultiSequenceFileAsMergedSequence"
-void GTUtilsProject::openMultiSequenceFileAsMergedSequence(U2OpStatus &os, const QString &filePath) {
+void GTUtilsProject::openMultiSequenceFileAsMergedSequence(HI::GUITestOpStatus &os, const QString &filePath) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openMultiSequenceFileAsMalignment"
-void GTUtilsProject::openMultiSequenceFileAsMalignment(U2OpStatus &os, const QString &dirPath, const QString &fileName) {
+void GTUtilsProject::openMultiSequenceFileAsMalignment(HI::GUITestOpStatus &os, const QString &dirPath, const QString &fileName) {
     openMultiSequenceFileAsMalignment(os, dirPath + "/" + fileName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openMultiSequenceFileAsMalignment"
-void GTUtilsProject::openMultiSequenceFileAsMalignment(U2OpStatus &os, const QString &filePath) {
+void GTUtilsProject::openMultiSequenceFileAsMalignment(HI::GUITestOpStatus &os, const QString &filePath) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "saveProjectAs"
+void GTUtilsProject::saveProjectAs(HI::GUITestOpStatus &os, const QString &path) {
+    const QFileInfo info(path);
+    GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "New Project", info.dir().path(), info.fileName()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "closeProject"
-void GTUtilsProject::closeProject(U2OpStatus &os){
+void GTUtilsProject::closeProject(HI::GUITestOpStatus &os){
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new AppCloseMessageBoxDialogFiller(os));
     GTGlobals::sleep(500);
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-    GTMenu::clickMenuItem(os, menu, ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 }
+
+GTUtilsProject::OpenFileSettings::OpenFileSettings() :
+    openMethod(Dialog)
+{
+
+}
+
 #undef GT_METHOD_NAME
 
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsProject.h b/src/plugins/GUITestBase/src/GTUtilsProject.h
index 7bb6e88..cdbe43a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProject.h
+++ b/src/plugins/GUITestBase/src/GTUtilsProject.h
@@ -22,20 +22,17 @@
 #ifndef _U2_PROJECT_UTILS_H_
 #define _U2_PROJECT_UTILS_H_
 
-#include "api/GTGlobals.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsDocument.h"
+#include <QMessageBox>
 
 #include <U2Core/GUrl.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+
+#include <GTGlobals.h>
+#include <utils/GTUtilsApp.h>
+
+#include "GTUtilsDocument.h"
 
 namespace U2 {
 
-class GUITest;
 class Document;
 class ADVSingleSequenceWidget;
 
@@ -43,17 +40,21 @@ class GTUtilsProject {
 public:
     class OpenFileSettings {
     public:
-        enum OpenMethod {DragDrop} openMethod;
+        enum OpenMethod {Dialog, DragDrop};
+
+        OpenFileSettings();
+
+        OpenMethod openMethod;
     };
 
     /*
         opens files using settings, checks if the document is loaded
     */
-    static void openFiles(U2OpStatus &os, const QList<QUrl> &urls, const OpenFileSettings& s = OpenFileSettings());
-    static void openFiles(U2OpStatus &os, const GUrl &path, const OpenFileSettings& s = OpenFileSettings());
+    static void openFiles(HI::GUITestOpStatus &os, const QList<QUrl> &urls, const OpenFileSettings& s = OpenFileSettings());
+    static void openFiles(HI::GUITestOpStatus &os, const GUrl &path, const OpenFileSettings& s = OpenFileSettings());
 
     enum CheckType {Exists, Empty, NotExists};
-    static void checkProject(U2OpStatus &os, CheckType checkType = Exists);
+    static void checkProject(HI::GUITestOpStatus &os, CheckType checkType = Exists);
 
 
     /**
@@ -62,7 +63,7 @@ public:
      * Verifies that the sequence name is @seqName.
      * Returns the sequence widget.
      */
-    static ADVSingleSequenceWidget * openFileExpectSequence(U2OpStatus &os, const QString &path, const QString &fileName,
+    static ADVSingleSequenceWidget * openFileExpectSequence(HI::GUITestOpStatus &os, const QString &path, const QString &fileName,
         const QString &seqName);
 
      /**
@@ -71,7 +72,7 @@ public:
      * Verifies that the sequence name is @seqName.
      * Returns the sequence widget.
      */
-    static ADVSingleSequenceWidget * openFileExpectRawSequence(U2OpStatus &os, const QString &path, const QString &fileName,
+    static ADVSingleSequenceWidget * openFileExpectRawSequence(HI::GUITestOpStatus &os, const QString &path, const QString &fileName,
         const QString &seqName);
 
     /**
@@ -80,20 +81,21 @@ public:
      * the order specified in the list).
      * Returns the sequences widgets (in the same order).
      */
-    static QList<ADVSingleSequenceWidget *> openFileExpectSequences(U2OpStatus &os, const QString &path, const QString &fileName,
+    static QList<ADVSingleSequenceWidget *> openFileExpectSequences(HI::GUITestOpStatus &os, const QString &path, const QString &fileName,
         const QList<QString> &seqNames);
 
-    static void openMultiSequenceFileAsSequences(U2OpStatus &os, const QString &path, const QString &fileName);
-    static void openMultiSequenceFileAsSequences(U2OpStatus &os, const QString &filePath);
-    static void openMultiSequenceFileAsMergedSequence(U2OpStatus &os, const QString &filePath);
-    static void openMultiSequenceFileAsMalignment(U2OpStatus &os, const QString &dirPath, const QString &fileName);
-    static void openMultiSequenceFileAsMalignment(U2OpStatus &os, const QString &filePath);
-
-    static void closeProject(U2OpStatus &os);
+    static void openMultiSequenceFileAsSequences(HI::GUITestOpStatus &os, const QString &path, const QString &fileName);
+    static void openMultiSequenceFileAsSequences(HI::GUITestOpStatus &os, const QString &filePath);
+    static void openMultiSequenceFileAsMergedSequence(HI::GUITestOpStatus &os, const QString &filePath);
+    static void openMultiSequenceFileAsMalignment(HI::GUITestOpStatus &os, const QString &dirPath, const QString &fileName);
+    static void openMultiSequenceFileAsMalignment(HI::GUITestOpStatus &os, const QString &filePath);
 
+    static void saveProjectAs(HI::GUITestOpStatus &os, const QString &path);
+    static void closeProject(HI::GUITestOpStatus &os);
 
 protected:
-    static void openFilesDrop(U2OpStatus &os, const QList<QUrl>& urls);
+    static void openFilesDrop(HI::GUITestOpStatus &os, const QList<QUrl>& urls);
+    static void openFilesWithDialog(HI::GUITestOpStatus &os, const QList<QUrl> &filePaths);
 };
 
 } // U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
index cecbf69..0e42fe9 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
@@ -27,27 +27,30 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/ProjectViewModel.h>
 
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
-#include "GTUtilsProjectTreeView.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <utils/GTThread.h>
 
+#include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsProjectTreeView"
 
 const QString GTUtilsProjectTreeView::widgetName = "documentTreeWidget";
 
 #define GT_METHOD_NAME "openView"
-void GTUtilsProjectTreeView::openView(U2OpStatus& os) {
+void GTUtilsProjectTreeView::openView(HI::GUITestOpStatus& os) {
 
     GTGlobals::FindOptions options;
     options.failIfNull = false;
@@ -57,6 +60,7 @@ void GTUtilsProjectTreeView::openView(U2OpStatus& os) {
         toggleView(os);
     }
     GTGlobals::sleep(100);
+    GTThread::waitForMainThread(os);
 
     documentTreeWidget = GTWidget::findWidget(os, widgetName, NULL, options);
     GT_CHECK(documentTreeWidget != NULL, "Can't open document tree widget view, findWidget returned NULL");
@@ -64,21 +68,23 @@ void GTUtilsProjectTreeView::openView(U2OpStatus& os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleView"
-void GTUtilsProjectTreeView::toggleView(U2OpStatus& os) {
+void GTUtilsProjectTreeView::toggleView(HI::GUITestOpStatus& os) {
 
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK(mw != NULL, "MainWindow is NULL");
     QMainWindow *qmw = mw->getQMainWindow();
     GT_CHECK(qmw != NULL, "QMainWindow is NULL");
 
-    qmw->setFocus();
+    //qmw->setFocus();
 
     GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+    GTGlobals::sleep(100);
+    GTThread::waitForMainThread(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, const QModelIndex &itemIndex) {
+QPoint GTUtilsProjectTreeView::getItemCenter(HI::GUITestOpStatus &os, const QModelIndex &itemIndex) {
     GT_CHECK_RESULT(itemIndex.isValid(), "Item index is invalid", QPoint());
 
     QTreeView *treeView = getTreeView(os);
@@ -87,7 +93,7 @@ QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, const QModelIndex &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, QTreeView *treeView, const QModelIndex &itemIndex) {
+QPoint GTUtilsProjectTreeView::getItemCenter(HI::GUITestOpStatus &os, QTreeView *treeView, const QModelIndex &itemIndex) {
     GT_CHECK_RESULT(itemIndex.isValid(), "Item index is invalid", QPoint());
     GT_CHECK_RESULT(NULL != treeView, "treeView is NULL", QPoint());
 
@@ -99,11 +105,15 @@ QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, QTreeView *treeView
 
 namespace {
 
-void editItemName(U2OpStatus &os, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
+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
         break;
     case GTGlobals::UseMouse:
         GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Edit" << "Rename...", GTGlobals::UseMouse));
@@ -123,21 +133,21 @@ void editItemName(U2OpStatus &os, const QString &newItemName, GTGlobals::UseMeth
 }
 
 #define GT_METHOD_NAME "rename"
-void GTUtilsProjectTreeView::rename(U2OpStatus &os, const QString &itemName, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
+void GTUtilsProjectTreeView::rename(HI::GUITestOpStatus &os, const QString &itemName, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
     GTMouseDriver::moveTo(os, getItemCenter(os, itemName));
     editItemName(os, newItemName, invokeMethod);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "rename"
-void GTUtilsProjectTreeView::rename(U2OpStatus &os, const QModelIndex& itemIndex, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
+void GTUtilsProjectTreeView::rename(HI::GUITestOpStatus &os, const QModelIndex& itemIndex, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
     GTMouseDriver::moveTo(os, getItemCenter(os, itemIndex));
     editItemName(os, newItemName, invokeMethod);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, const QString &itemName) {
+QPoint GTUtilsProjectTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
     return getItemCenter(os, findIndex(os, itemName));
 }
 #undef GT_METHOD_NAME
@@ -145,7 +155,7 @@ QPoint GTUtilsProjectTreeView::getItemCenter(U2OpStatus &os, const QString &item
 
 
 #define GT_METHOD_NAME "scrollTo"
-void GTUtilsProjectTreeView::scrollTo(U2OpStatus &os, const QString &itemName)
+void GTUtilsProjectTreeView::scrollTo(HI::GUITestOpStatus &os, const QString &itemName)
 {
     QTreeView* treeView = getTreeView(os);
     GT_CHECK(treeView != NULL, "tree view not found");
@@ -156,7 +166,7 @@ void GTUtilsProjectTreeView::scrollTo(U2OpStatus &os, const QString &itemName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doubleClickItem"
-void GTUtilsProjectTreeView::doubleClickItem(U2OpStatus &os, const QModelIndex &itemIndex) {
+void GTUtilsProjectTreeView::doubleClickItem(HI::GUITestOpStatus &os, const QModelIndex &itemIndex) {
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
 
@@ -166,13 +176,13 @@ void GTUtilsProjectTreeView::doubleClickItem(U2OpStatus &os, const QModelIndex &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doubleClickItem"
-void GTUtilsProjectTreeView::doubleClickItem(U2OpStatus &os, const QString &itemName) {
+void GTUtilsProjectTreeView::doubleClickItem(HI::GUITestOpStatus &os, const QString &itemName) {
     doubleClickItem(os, findIndex(os, itemName));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTUtilsProjectTreeView::click(U2OpStatus &os, const QString &itemName, Qt::MouseButton button) {
+void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton button) {
     QModelIndex itemIndex = findIndex(os, itemName);
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
@@ -183,7 +193,7 @@ void GTUtilsProjectTreeView::click(U2OpStatus &os, const QString &itemName, Qt::
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTUtilsProjectTreeView::click(U2OpStatus &os, const QString& itemName, const QString &parentName, Qt::MouseButton button) {
+void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString& itemName, const QString &parentName, Qt::MouseButton button) {
     QModelIndex parentIndex = findIndex(os, parentName);
     GT_CHECK(parentIndex.isValid(), "Parent item index is invalid");
     QModelIndex itemIndex = findIndex(os, itemName, parentIndex);
@@ -196,7 +206,7 @@ void GTUtilsProjectTreeView::click(U2OpStatus &os, const QString& itemName, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getTreeWidget"
-QTreeView* GTUtilsProjectTreeView::getTreeView(U2OpStatus &os) {
+QTreeView* GTUtilsProjectTreeView::getTreeView(HI::GUITestOpStatus &os) {
 
     openView(os);
 
@@ -206,21 +216,21 @@ QTreeView* GTUtilsProjectTreeView::getTreeView(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QModelIndex GTUtilsProjectTreeView::findIndex(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", QModelIndex());
     return findIndex(os, treeView, itemName, QModelIndex(), options);
 }
 
 #define GT_METHOD_NAME "findItem"
-QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions &options) {
+QModelIndex GTUtilsProjectTreeView::findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions &options) {
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", QModelIndex());
     return findIndex(os, treeView, itemName, QModelIndex(), options);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions &options) {
+QModelIndex GTUtilsProjectTreeView::findIndex(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", QModelIndex());
     return findIndex(os, treeView, itemName, parent, options);
@@ -228,7 +238,7 @@ QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, const QString &ite
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
+QModelIndex GTUtilsProjectTreeView::findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", QModelIndex());
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", QModelIndex());
 
@@ -249,7 +259,7 @@ QModelIndex GTUtilsProjectTreeView::findIndex(U2OpStatus &os, QTreeView *treeVie
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findIndecies"
-QModelIndexList GTUtilsProjectTreeView::findIndecies(U2OpStatus &os, const QString &itemName, const QModelIndex &parent, int parentDepth, const GTGlobals::FindOptions &options) {
+QModelIndexList GTUtilsProjectTreeView::findIndecies(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex &parent, int parentDepth, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "Tree widget is NULL", QModelIndexList());
 
@@ -258,7 +268,7 @@ QModelIndexList GTUtilsProjectTreeView::findIndecies(U2OpStatus &os, const QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findIndecies"
-QModelIndexList GTUtilsProjectTreeView::findIndecies(U2OpStatus &os,
+QModelIndexList GTUtilsProjectTreeView::findIndecies(HI::GUITestOpStatus &os,
                                                      QTreeView* treeView,
                                                     const QString &itemName,
                                                     const QModelIndex& parent,
@@ -312,7 +322,7 @@ QModelIndexList GTUtilsProjectTreeView::findIndecies(U2OpStatus &os,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "filterProject"
-void GTUtilsProjectTreeView::filterProject(U2OpStatus &os, const QString &searchField) {
+void GTUtilsProjectTreeView::filterProject(HI::GUITestOpStatus &os, const QString &searchField) {
     openView(os);
     QLineEdit *nameFilterEdit = GTWidget::findExactWidget<QLineEdit *>(os, "nameFilterEdit");
     GTLineEdit::setText(os, nameFilterEdit, searchField);
@@ -322,7 +332,7 @@ void GTUtilsProjectTreeView::filterProject(U2OpStatus &os, const QString &search
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findFilteredIndexes"
-QModelIndexList GTUtilsProjectTreeView::findFilteredIndexes(U2OpStatus &os, const QString &substring, const QModelIndex &parentIndex) {
+QModelIndexList GTUtilsProjectTreeView::findFilteredIndexes(HI::GUITestOpStatus &os, const QString &substring, const QModelIndex &parentIndex) {
     QModelIndexList result;
 
     QTreeView *treeView = getTreeView(os);
@@ -344,7 +354,7 @@ QModelIndexList GTUtilsProjectTreeView::findFilteredIndexes(U2OpStatus &os, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkFilteredGroup"
-void GTUtilsProjectTreeView::checkFilteredGroup(U2OpStatus &os, const QString &groupName, const QStringList &namesToCheck,
+void GTUtilsProjectTreeView::checkFilteredGroup(HI::GUITestOpStatus &os, const QString &groupName, const QStringList &namesToCheck,
     const QStringList &alternativeNamesToCheck, const QStringList &excludedNames)
 {
     const QModelIndexList groupIndexes = findFilteredIndexes(os, groupName);
@@ -377,7 +387,7 @@ void GTUtilsProjectTreeView::checkFilteredGroup(U2OpStatus &os, const QString &g
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+bool GTUtilsProjectTreeView::checkItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", false);
     return checkItem(os, treeView, itemName, QModelIndex(), options);
@@ -385,7 +395,7 @@ bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, const QString &itemName,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
+bool GTUtilsProjectTreeView::checkItem(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", false);
     return checkItem(os, treeView, itemName, parent, options);
@@ -393,14 +403,14 @@ bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, const QString &itemName,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions &options) {
+bool GTUtilsProjectTreeView::checkItem(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions &options) {
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", false);
     return checkItem(os, treeView, itemName, QModelIndex(), options);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkItem"
-bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
+bool GTUtilsProjectTreeView::checkItem(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex &parent, const GTGlobals::FindOptions &options) {
     GT_CHECK_RESULT(treeView != NULL, "Tree view is NULL", false);
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", false);
 
@@ -410,13 +420,13 @@ bool GTUtilsProjectTreeView::checkItem(U2OpStatus &os, QTreeView *treeView, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkObjectTypes"
-void GTUtilsProjectTreeView::checkObjectTypes(U2OpStatus &os, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent) {
+void GTUtilsProjectTreeView::checkObjectTypes(HI::GUITestOpStatus &os, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent) {
     checkObjectTypes(os, getTreeView(os),  acceptableTypes, parent);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkObjectTypes"
-void GTUtilsProjectTreeView::checkObjectTypes(U2OpStatus &os, QTreeView *treeView, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent) {
+void GTUtilsProjectTreeView::checkObjectTypes(HI::GUITestOpStatus &os, QTreeView *treeView, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent) {
     CHECK_SET_ERR(NULL != treeView, "Invalid tree view detected");
     CHECK(!acceptableTypes.isEmpty(), );
 
@@ -441,7 +451,7 @@ void GTUtilsProjectTreeView::checkObjectTypes(U2OpStatus &os, QTreeView *treeVie
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedItem"
-QString GTUtilsProjectTreeView::getSelectedItem(U2OpStatus &os)
+QString GTUtilsProjectTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 {
     QTreeView* treeView = getTreeView(os);
     GT_CHECK_RESULT(treeView != NULL, "tree view is NULL", NULL);
@@ -459,7 +469,7 @@ QString GTUtilsProjectTreeView::getSelectedItem(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getFont"
-QFont GTUtilsProjectTreeView::getFont(U2OpStatus &os, QModelIndex index){
+QFont GTUtilsProjectTreeView::getFont(HI::GUITestOpStatus &os, QModelIndex index){
     QTreeView* treeView = getTreeView(os);
     QAbstractItemModel* model = treeView->model();
     QFont result = qvariant_cast<QFont>(model->data(index, Qt::FontRole));
@@ -468,7 +478,7 @@ QFont GTUtilsProjectTreeView::getFont(U2OpStatus &os, QModelIndex index){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getIcon"
-QIcon GTUtilsProjectTreeView::getIcon(U2OpStatus &os, QModelIndex index){
+QIcon GTUtilsProjectTreeView::getIcon(HI::GUITestOpStatus &os, QModelIndex index){
     QTreeView* treeView = getTreeView(os);
     QAbstractItemModel* model = treeView->model();
     QIcon result = qvariant_cast<QIcon>(model->data(index, Qt::DecorationRole));
@@ -476,9 +486,14 @@ QIcon GTUtilsProjectTreeView::getIcon(U2OpStatus &os, QModelIndex index){
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "itemModificationCheck"
+void GTUtilsProjectTreeView::itemModificationCheck(HI::GUITestOpStatus &os, const QString &itemName, bool modified) {
+    itemModificationCheck(os, findIndex(os, itemName), modified);
+}
+#undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "itemModificationCheck"
-void GTUtilsProjectTreeView::itemModificationCheck(U2OpStatus &os, QModelIndex index, bool modified ){
+void GTUtilsProjectTreeView::itemModificationCheck(HI::GUITestOpStatus &os, QModelIndex index, bool modified ){
     GT_CHECK(index.isValid(), "item is valid");
     QVariant data = index.data(Qt::TextColorRole);
     bool modState = !(QVariant() == data);
@@ -487,7 +502,7 @@ void GTUtilsProjectTreeView::itemModificationCheck(U2OpStatus &os, QModelIndex i
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "itemActiveCheck"
-void GTUtilsProjectTreeView::itemActiveCheck(U2OpStatus &os, QModelIndex index, bool active) {
+void GTUtilsProjectTreeView::itemActiveCheck(HI::GUITestOpStatus &os, QModelIndex index, bool active) {
     GT_CHECK(index.isValid(), "item is NULL");
     QVariant data = index.data(Qt::FontRole);
 
@@ -497,7 +512,7 @@ void GTUtilsProjectTreeView::itemActiveCheck(U2OpStatus &os, QModelIndex index,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isVisible"
-bool GTUtilsProjectTreeView::isVisible( U2OpStatus &os ){
+bool GTUtilsProjectTreeView::isVisible( HI::GUITestOpStatus &os ){
     GTGlobals::FindOptions options;
     options.failIfNull = false;
     QWidget *documentTreeWidget = GTWidget::findWidget(os, widgetName, NULL, options);
@@ -509,27 +524,15 @@ bool GTUtilsProjectTreeView::isVisible( U2OpStatus &os ){
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsProjectTreeView::dragAndDrop(U2OpStatus &os, QModelIndex from, QModelIndex to){
-    QTreeView* tree = getTreeView(os);
-    QAbstractItemModel *model = tree->model();
-    QMimeData *mimeData = model->mimeData(QModelIndexList()<<from);
-
-    QPoint enterPos = getItemCenter(os, from);
-    QPoint dropPos = getItemCenter(os, to);
-
-    sendDragAndDrop(os, mimeData, enterPos, dropPos);
+void GTUtilsProjectTreeView::dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, const QModelIndex &to) {
+    sendDragAndDrop(os, getItemCenter(os, from), getItemCenter(os, to));
 }
 
-void GTUtilsProjectTreeView::dragAndDrop(U2OpStatus &os, QModelIndex from, QWidget *to){
-    QAbstractItemModel *model = getTreeView(os)->model();
-    QMimeData *mimeData = model->mimeData(QModelIndexList()<<from);
-
-    QPoint enterPos = getItemCenter(os, from);
-
-    sendDragAndDrop(os, mimeData, enterPos, to);
+void GTUtilsProjectTreeView::dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, QWidget *to) {
+    sendDragAndDrop(os, getItemCenter(os, from), to);
 }
 
-void GTUtilsProjectTreeView::dragAndDropSeveralElements(U2OpStatus &os, QModelIndexList from, QModelIndex to){
+void GTUtilsProjectTreeView::dragAndDropSeveralElements(HI::GUITestOpStatus &os, QModelIndexList from, QModelIndex to) {
     QTreeView *treeView = getTreeView(os);
 #ifdef Q_OS_MAC
     int key = GTKeyboardDriver::key["cmd"];
@@ -544,82 +547,27 @@ void GTUtilsProjectTreeView::dragAndDropSeveralElements(U2OpStatus &os, QModelIn
     }
     GTKeyboardDriver::keyRelease(os, key);
 
-    QModelIndexList selected = treeView->selectionModel()->selectedIndexes();
-    QMimeData* mimeData = treeView->model()->mimeData(selected);
-
     QPoint enterPos = getItemCenter(os, from.at(0));
     QPoint dropPos = getItemCenter(os, to);
 
-    sendDragAndDrop(os, mimeData, enterPos, dropPos);
+    sendDragAndDrop(os, enterPos, dropPos);
 }
 
-void GTUtilsProjectTreeView::sendDragAndDrop(U2OpStatus &os, QMimeData * /*mimeData*/, QPoint enterPos, QPoint dropPos){
-//    QTreeView *treeView = getTreeView(os);
-//    QAbstractItemModel *model = treeView->model();
-//    QString s = model->metaObject()->className();
-//    QWidget* veiwPort = treeView->viewport();//treeView->findChild<QWidget*>("qt_scrollarea_viewport");
-
-//    QPoint localEnterPos = treeView->mapFromGlobal(enterPos);
-//    QPoint localDropPos = treeView->mapFromGlobal(dropPos);
-
-/**
-*OLD CODE IS COMMENTED 05.12.14. IF EVERYTHING WORKS FINE AND YOU ARE THINKING ABOUT REMOVING IT, DO IT
-*/
-
-    GTMouseDriver::dragAndDrop(os, enterPos, dropPos, QPoint(100, -100));
-    //GTGlobals::sleep(20000);
-
-    /*GTMouseDriver::moveTo(os, enterPos);
-    GTMouseDriver::click(os);
-    Qt::DropActions dropActions = model->supportedDropActions();
-
-    QDragEnterEvent* dragEnterEvent = new QDragEnterEvent(localEnterPos, dropActions, mimeData, Qt::LeftButton, 0);
-    //GTGlobals::sendEvent(veiwPort, dragEnterEvent);
-
-
-    GTMouseDriver::moveTo(os, dropPos);
-
-
-    QDragMoveEvent* dragmoveEvent = new QDragMoveEvent(localDropPos, dropActions, mimeData, Qt::LeftButton, 0);
-    //GTGlobals::sendEvent(veiwPort, dragmoveEvent );
-
-    QDropEvent* dropEvent = new QDropEvent(localDropPos, dropActions, mimeData, Qt::LeftButton, 0);
-    //dropEvent->
-    GTGlobals::sendEvent(veiwPort, dropEvent);
-    //model->dropMimeData(mimeData, dropActions,)
-    GTGlobals::sleep();*/
+void GTUtilsProjectTreeView::sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, const QPoint &dropPos) {
+    GTMouseDriver::dragAndDrop(os, enterPos, dropPos);
 }
 
-void GTUtilsProjectTreeView::sendDragAndDrop(U2OpStatus &os, QMimeData *mimeData, QPoint enterPos, QWidget *dropWidget){
-    QTreeView *treeView = getTreeView(os);
-    QAbstractItemModel *model = treeView->model();
-    treeView->findChild<QWidget*>("qt_scrollarea_viewport");
-
-    treeView->mapFromGlobal(enterPos);
-
-    GTMouseDriver::moveTo(os, enterPos);
-    Qt::DropActions dropActions = model->supportedDropActions();
-
-    QDragEnterEvent* dragEnterEvent = new QDragEnterEvent(dropWidget->geometry().center(), dropActions, mimeData, Qt::LeftButton, 0);
-    GTGlobals::sendEvent(dropWidget, dragEnterEvent);
-
-
-    GTMouseDriver::moveTo(os, dropWidget->mapToGlobal(dropWidget->geometry().center()));
-
-    QDragMoveEvent* dragmoveEvent = new QDragMoveEvent(dropWidget->geometry().center(), dropActions, mimeData, Qt::LeftButton, 0);
-    GTGlobals::sendEvent(dropWidget, dragmoveEvent );
-
-    QDropEvent* dropEvent = new QDropEvent(dropWidget->geometry().center(), dropActions, mimeData, Qt::LeftButton, 0);
-    GTGlobals::sendEvent(dropWidget, dropEvent);
+void GTUtilsProjectTreeView::sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, QWidget *dropWidget) {
+    sendDragAndDrop(os, enterPos, GTWidget::getWidgetCenter(os, dropWidget));
 }
 
-void GTUtilsProjectTreeView::expandProjectView(U2OpStatus &os){
+void GTUtilsProjectTreeView::expandProjectView(HI::GUITestOpStatus &os){
     QSplitter* splitter = GTWidget::findExactWidget<QSplitter*>(os, "splitter", GTWidget::findWidget(os, "project_view"));
     splitter->setSizes(QList<int>()<<splitter->height()<<0);
 }
 
 #define GT_METHOD_NAME "markSequenceAsCircular"
-void GTUtilsProjectTreeView::markSequenceAsCircular(U2OpStatus &os, const QString &sequenceObjectName) {
+void GTUtilsProjectTreeView::markSequenceAsCircular(HI::GUITestOpStatus &os, const QString &sequenceObjectName) {
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Mark as circular"));
     click(os, sequenceObjectName, Qt::RightButton);
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
index bb7b470..db94f3f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
@@ -24,94 +24,97 @@
 
 #include <QAbstractItemModel>
 
-#include "api/GTGlobals.h"
 #include <U2Gui/ProjectTreeController.h>
 
+#include <GTGlobals.h>
+
 class QTreeView;
 class QTreeWidget;
 class QTreeWidgetItem;
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsProjectTreeView {
 public:
     // clicks on item by mouse, renames item by keyboard
-    static void rename(U2OpStatus &os, const QString &itemName, const QString &newItemName, GTGlobals::UseMethod invokeMethod = GTGlobals::UseKey);
-    static void rename(U2OpStatus &os, const QModelIndex& itemIndex, const QString &newItemName, GTGlobals::UseMethod invokeMethod = GTGlobals::UseKey);
+    static void rename(HI::GUITestOpStatus &os, const QString &itemName, const QString &newItemName, GTGlobals::UseMethod invokeMethod = GTGlobals::UseKey);
+    static void rename(HI::GUITestOpStatus &os, const QModelIndex& itemIndex, const QString &newItemName, GTGlobals::UseMethod invokeMethod = GTGlobals::UseKey);
 
-    static void openView(U2OpStatus& os);
-    static void toggleView(U2OpStatus& os);
+    static void openView(HI::GUITestOpStatus& os);
+    static void toggleView(HI::GUITestOpStatus& os);
 
     // returns center or item's rect
     // fails if the item wasn't found
-    static QPoint getItemCenter(U2OpStatus &os, const QModelIndex& itemIndex);
-    static QPoint getItemCenter(U2OpStatus &os, QTreeView *treeView, const QModelIndex& itemIndex);
-    static QPoint getItemCenter(U2OpStatus &os, const QString &itemName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QModelIndex& itemIndex);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, QTreeView *treeView, const QModelIndex& itemIndex);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QString &itemName);
 
     // if item is not visible, scroll until item is not visible
-    static void scrollTo(U2OpStatus &os, const QString &itemName);
-
-    static void doubleClickItem(U2OpStatus &os, const QModelIndex& itemIndex);
-    static void doubleClickItem(U2OpStatus &os, const QString& itemName);
-    static void click(U2OpStatus &os, const QString& itemName, Qt::MouseButton button = Qt::LeftButton);
-    static void click(U2OpStatus &os, const QString& itemName, const QString &parentName, Qt::MouseButton button = Qt::LeftButton);
-
-    static QTreeView* getTreeView(U2OpStatus &os);
-    static QModelIndex findIndex(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static QModelIndex findIndex(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static QModelIndex findIndex(U2OpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static QModelIndex findIndex(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static QModelIndexList findIndecies(U2OpStatus &os,
+    static void scrollTo(HI::GUITestOpStatus &os, const QString &itemName);
+
+    static void doubleClickItem(HI::GUITestOpStatus &os, const QModelIndex& itemIndex);
+    static void doubleClickItem(HI::GUITestOpStatus &os, const QString& itemName);
+    static void click(HI::GUITestOpStatus &os, const QString& itemName, Qt::MouseButton button = Qt::LeftButton);
+    static void click(HI::GUITestOpStatus &os, const QString& itemName, const QString &parentName, Qt::MouseButton button = Qt::LeftButton);
+
+    static QTreeView* getTreeView(HI::GUITestOpStatus &os);
+    static QModelIndex findIndex(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static QModelIndex findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static QModelIndex findIndex(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static QModelIndex findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static QModelIndexList findIndecies(HI::GUITestOpStatus &os,
                                         const QString &itemName,
                                         const QModelIndex &parent = QModelIndex(),
                                         int parentDepth = 0,
                                         const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static QModelIndexList findIndecies(U2OpStatus &os,
+    static QModelIndexList findIndecies(HI::GUITestOpStatus &os,
                                         QTreeView *treeView,
                                         const QString &itemName,
                                         const QModelIndex &parent = QModelIndex(),
                                         int parentDepth = 0,
                                         const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
 
-    static void filterProject(U2OpStatus &os, const QString &searchField);
-    static QModelIndexList findFilteredIndexes(U2OpStatus &os, const QString &substring, const QModelIndex &parentIndex = QModelIndex());
-    static void checkFilteredGroup(U2OpStatus &os, const QString &groupName, const QStringList &namesToCheck, const QStringList &alternativeNamesToCheck,
+    static void filterProject(HI::GUITestOpStatus &os, const QString &searchField);
+    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);
 
     // returns true if the item exists, does not set error unlike findIndex method
-    static bool checkItem(U2OpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static bool checkItem(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static bool checkItem(U2OpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
-    static bool checkItem(U2OpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static bool checkItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static bool checkItem(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static bool checkItem(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static bool checkItem(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
 
     // the method does nothing if `acceptableTypes` is an empty set
-    static void checkObjectTypes(U2OpStatus &os, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent = QModelIndex());
-    static void checkObjectTypes(U2OpStatus &os, QTreeView *treeView, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent = QModelIndex());
+    static void checkObjectTypes(HI::GUITestOpStatus &os, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent = QModelIndex());
+    static void checkObjectTypes(HI::GUITestOpStatus &os, QTreeView *treeView, const QSet<GObjectType> &acceptableTypes, const QModelIndex &parent = QModelIndex());
 
-    static QString getSelectedItem(U2OpStatus &os);
+    static QString getSelectedItem(HI::GUITestOpStatus &os);
 
-    static QFont getFont(U2OpStatus &os, QModelIndex index);
-    static QIcon getIcon(U2OpStatus &os, QModelIndex index);
+    static QFont getFont(HI::GUITestOpStatus &os, QModelIndex index);
+    static QIcon getIcon(HI::GUITestOpStatus &os, QModelIndex index);
 
-    static void itemModificationCheck(U2OpStatus &os, QModelIndex index, bool modified = true);
+    static void itemModificationCheck(HI::GUITestOpStatus &os, const QString &itemName, bool modified = true);
+    static void itemModificationCheck(HI::GUITestOpStatus &os, QModelIndex index, bool modified = true);
 
-    static void itemActiveCheck(U2OpStatus &os, QModelIndex index, bool active = true);
+    static void itemActiveCheck(HI::GUITestOpStatus &os, QModelIndex index, bool active = true);
 
-    static bool isVisible(U2OpStatus &os);
+    static bool isVisible(HI::GUITestOpStatus &os);
 
-    static void dragAndDrop(U2OpStatus &os, QModelIndex from, QModelIndex to);
-    static void dragAndDrop(U2OpStatus &os, QModelIndex from, QWidget* to);
-    static void dragAndDropSeveralElements(U2OpStatus &os, QModelIndexList from, QModelIndex to);
+    static void dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, const QModelIndex &to);
+    static void dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, QWidget* to);
+    static void dragAndDropSeveralElements(HI::GUITestOpStatus &os, QModelIndexList from, QModelIndex to);
 
-    static void expandProjectView(U2OpStatus &os);
+    static void expandProjectView(HI::GUITestOpStatus &os);
 
-    static void markSequenceAsCircular(U2OpStatus &os, const QString &sequenceObjectName);
+    static void markSequenceAsCircular(HI::GUITestOpStatus &os, const QString &sequenceObjectName);
 
     static const QString widgetName;
 
 private:
-    static void sendDragAndDrop(U2OpStatus &os, QMimeData* mimeData, QPoint enterPos, QPoint dropPos);
-    static void sendDragAndDrop(U2OpStatus &os, QMimeData* mimeData, QPoint enterPos, QWidget* dropWidget);
+    static void sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, const QPoint &dropPos);
+    static void sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, QWidget* dropWidget);
 
 
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
index cadfff1..fe732e2 100644
--- a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
@@ -19,12 +19,14 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2IdTypes.h>
 #include "GTUtilsQueryDesigner.h"
 #include "api/GTGraphicsItem.h"
-#include "api/GTWidget.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
+#include "primitives/GTMenu.h"
+#include <primitives/GTWidget.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsMdi.h"
 
 #include <U2View/MSAEditor.h>
@@ -39,10 +41,18 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 #define GT_CLASS_NAME "GTUtilsQueryDesigner"
 
 #define GT_METHOD_NAME "findTreeItem"
-QTreeWidgetItem* GTUtilsQueryDesigner::findAlgorithm(U2OpStatus &os,QString itemName){
+void GTUtilsQueryDesigner::openQueryDesigner(HI::GUITestOpStatus &os) {
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Query Designer...");
+    GTGlobals::sleep(500);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "findTreeItem"
+QTreeWidgetItem* GTUtilsQueryDesigner::findAlgorithm(HI::GUITestOpStatus &os,QString itemName){
     QTreeWidgetItem* foundItem = NULL;
     QTreeWidget *w=qobject_cast<QTreeWidget*>(GTWidget::findWidget(os,"palette"));
 
@@ -66,7 +76,7 @@ QTreeWidgetItem* GTUtilsQueryDesigner::findAlgorithm(U2OpStatus &os,QString item
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsQueryDesigner::addAlgorithm(U2OpStatus &os, QString algName){
+void GTUtilsQueryDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algName){
     QTreeWidgetItem *w = findAlgorithm(os, algName);
     GTGlobals::sleep(100);
     CHECK_SET_ERR(w!=NULL,"algorithm is NULL");
@@ -76,37 +86,37 @@ void GTUtilsQueryDesigner::addAlgorithm(U2OpStatus &os, QString algName){
     GTWidget::click(os, GTWidget::findWidget(os,"sceneView"));
 }
 
-QPoint GTUtilsQueryDesigner::getItemCenter(U2OpStatus &os,QString itemName){
+QPoint GTUtilsQueryDesigner::getItemCenter(HI::GUITestOpStatus &os,QString itemName){
     QRect r = getItemRect(os, itemName);
     QPoint p = r.center();
     return p;
 }
 
-int GTUtilsQueryDesigner::getItemLeft(U2OpStatus &os, QString itemName){
+int GTUtilsQueryDesigner::getItemLeft(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.left();
     return i;
 }
 
-int GTUtilsQueryDesigner::getItemRight(U2OpStatus &os, QString itemName){
+int GTUtilsQueryDesigner::getItemRight(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.right() - 1;
     return i;
 }
 
-int GTUtilsQueryDesigner::getItemTop(U2OpStatus &os, QString itemName){
+int GTUtilsQueryDesigner::getItemTop(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.top();
     return i;
 }
 
-int GTUtilsQueryDesigner::getItemBottom(U2OpStatus &os, QString itemName){
+int GTUtilsQueryDesigner::getItemBottom(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.bottom();
     return i;
 }
 
-QRect GTUtilsQueryDesigner::getItemRect(U2OpStatus &os,QString itemName){
+QRect GTUtilsQueryDesigner::getItemRect(HI::GUITestOpStatus &os,QString itemName){
 
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     QList<QGraphicsItem *> items = sceneView->items();
diff --git a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
index c5244c1..60356df 100644
--- a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
+++ b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
@@ -22,7 +22,7 @@
 #ifndef GT_UTILS_QUERY_DESIGNER_H
 #define GT_UTILS_QUERY_DESIGNER_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <U2View/MSAEditorSequenceArea.h>
 
 #include <QTreeWidget>
@@ -32,15 +32,17 @@ namespace U2 {
 
 class GTUtilsQueryDesigner {
 public:
-    static QTreeWidgetItem* findAlgorithm(U2OpStatus &os, QString itemName);
-    static void addAlgorithm(U2OpStatus &os, QString algName);
-    static QPoint getItemCenter(U2OpStatus &os,QString itemName);
-    static QRect getItemRect(U2OpStatus &os,QString itemName);
-
-    static int getItemLeft(U2OpStatus &os, QString itemName);
-    static int getItemRight(U2OpStatus &os, QString itemName);
-    static int getItemTop(U2OpStatus &os, QString itemName);
-    static int getItemBottom(U2OpStatus &os, QString itemName);
+    static void openQueryDesigner(HI::GUITestOpStatus &os);
+
+    static QTreeWidgetItem* findAlgorithm(HI::GUITestOpStatus &os, QString itemName);
+    static void addAlgorithm(HI::GUITestOpStatus &os, QString algName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os,QString itemName);
+    static QRect getItemRect(HI::GUITestOpStatus &os,QString itemName);
+
+    static int getItemLeft(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemRight(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemTop(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemBottom(HI::GUITestOpStatus &os, QString itemName);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
index c857319..87e1df0 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
@@ -50,29 +50,30 @@
 #include <U2View/GSequenceGraphView.h>
 #include <U2View/Overview.h>
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 
-#include "api/GTClipboard.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTToolbar.h"
+#include "system/GTClipboard.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTToolbar.h>
 
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTSequenceReader"
 #define GT_METHOD_NAME "run"
 class GTSequenceReader : public Filler {
 public:
-    GTSequenceReader(U2OpStatus &_os, QString *_str):Filler(_os, "EditSequenceDialog"), str(_str){}
+    GTSequenceReader(HI::GUITestOpStatus &_os, QString *_str):Filler(_os, "EditSequenceDialog"), str(_str){}
     void run()
     {
         QWidget *widget = QApplication::activeModalWidget();
@@ -99,7 +100,7 @@ private:
 #define GT_CLASS_NAME "GTUtilsSequenceView"
 
 #define GT_METHOD_NAME "getSequenceAsString"
-void GTUtilsSequenceView::getSequenceAsString(U2OpStatus &os, QString &sequence)
+void GTUtilsSequenceView::getSequenceAsString(HI::GUITestOpStatus &os, QString &sequence)
 {
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK(mdiWindow != NULL, "MDI window == NULL");
@@ -125,7 +126,7 @@ void GTUtilsSequenceView::getSequenceAsString(U2OpStatus &os, QString &sequence)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceAsString"
-QString GTUtilsSequenceView::getSequenceAsString(U2OpStatus &os, int number) {
+QString GTUtilsSequenceView::getSequenceAsString(HI::GUITestOpStatus &os, int number) {
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(mdiWindow != NULL, "MDI window == NULL", "");
 
@@ -133,6 +134,7 @@ QString GTUtilsSequenceView::getSequenceAsString(U2OpStatus &os, int number) {
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
     GTKeyboardUtils::selectAll(os);
+    GTGlobals::sleep(500);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_COPY << "Copy sequence"));
     GTWidget::click(os, getSeqWidgetByNumber(os, number), Qt::RightButton);
     QString result = GTClipboard::text(os);
@@ -142,7 +144,7 @@ QString GTUtilsSequenceView::getSequenceAsString(U2OpStatus &os, int number) {
 
 #define GT_METHOD_NAME "getBeginOfSequenceAsString"
 
-QString GTUtilsSequenceView::getBeginOfSequenceAsString(U2OpStatus &os, int length)
+QString GTUtilsSequenceView::getBeginOfSequenceAsString(HI::GUITestOpStatus &os, int length)
 {
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(mdiWindow != NULL, "MDI window == NULL", NULL);
@@ -170,7 +172,7 @@ QString GTUtilsSequenceView::getBeginOfSequenceAsString(U2OpStatus &os, int leng
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getEndOfSequenceAsString"
-QString GTUtilsSequenceView::getEndOfSequenceAsString(U2OpStatus &os, int length)
+QString GTUtilsSequenceView::getEndOfSequenceAsString(HI::GUITestOpStatus &os, int length)
 {
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(mdiWindow != NULL, "MDI window == NULL", NULL);
@@ -199,7 +201,7 @@ QString GTUtilsSequenceView::getEndOfSequenceAsString(U2OpStatus &os, int length
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLengthOfSequence"
-int GTUtilsSequenceView::getLengthOfSequence(U2OpStatus &os)
+int GTUtilsSequenceView::getLengthOfSequence(HI::GUITestOpStatus &os)
 {
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK_RESULT(mw != NULL, "MainWindow == NULL", 0);
@@ -221,12 +223,20 @@ int GTUtilsSequenceView::getLengthOfSequence(U2OpStatus &os)
 }
 #undef GT_METHOD_NAME
 
-int GTUtilsSequenceView::getVisiableStart(U2OpStatus &os, int widgetNumber){
+int GTUtilsSequenceView::getVisiableStart(HI::GUITestOpStatus &os, int widgetNumber){
     return getSeqWidgetByNumber(os, widgetNumber)->getDetView()->getVisibleRange().startPos;
 }
 
+#define GT_METHOD_NAME "getVisibleRange"
+U2Region GTUtilsSequenceView::getVisibleRange(HI::GUITestOpStatus &os, int widgetNumber) {
+    ADVSingleSequenceWidget* seqWgt = getSeqWidgetByNumber(os, widgetNumber);
+    GT_CHECK_RESULT(seqWgt != NULL, "Cannot find sequence view", U2Region());
+    return seqWgt->getDetView()->getVisibleRange();
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "checkSequence"
-void GTUtilsSequenceView::checkSequence(U2OpStatus &os, const QString &expectedSequence)
+void GTUtilsSequenceView::checkSequence(HI::GUITestOpStatus &os, const QString &expectedSequence)
 {
     QString actualSequence;
     getSequenceAsString(os, actualSequence);
@@ -236,7 +246,7 @@ void GTUtilsSequenceView::checkSequence(U2OpStatus &os, const QString &expectedS
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectSequenceRegion"
-void GTUtilsSequenceView::selectSequenceRegion(U2OpStatus &os, int from, int to)
+void GTUtilsSequenceView::selectSequenceRegion(HI::GUITestOpStatus &os, int from, int to)
 {
     MainWindow* mw = AppContext::getMainWindow();
     GT_CHECK(mw != NULL, "MainWindow == NULL");
@@ -255,7 +265,7 @@ void GTUtilsSequenceView::selectSequenceRegion(U2OpStatus &os, int from, int to)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openSequenceView"
-void GTUtilsSequenceView::openSequenceView(U2OpStatus &os, const QString &sequenceName){
+void GTUtilsSequenceView::openSequenceView(HI::GUITestOpStatus &os, const QString &sequenceName){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view", GTGlobals::UseMouse));
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, sequenceName);
@@ -265,7 +275,7 @@ void GTUtilsSequenceView::openSequenceView(U2OpStatus &os, const QString &sequen
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addSequenceView"
-void GTUtilsSequenceView::addSequenceView(U2OpStatus &os, const QString &sequenceName){
+void GTUtilsSequenceView::addSequenceView(HI::GUITestOpStatus &os, const QString &sequenceName){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "submenu_add_view" << "action_add_view", GTGlobals::UseMouse));
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, sequenceName);
@@ -275,7 +285,7 @@ void GTUtilsSequenceView::addSequenceView(U2OpStatus &os, const QString &sequenc
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "goToPosition"
-void GTUtilsSequenceView::goToPosition(U2OpStatus &os, int position) {
+void GTUtilsSequenceView::goToPosition(HI::GUITestOpStatus &os, int position) {
     QToolBar* toolbar = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
     GT_CHECK(NULL != toolbar, "Can't find the toolbar");
 
@@ -289,7 +299,7 @@ void GTUtilsSequenceView::goToPosition(U2OpStatus &os, int position) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSeqWidgetByNumber"
-ADVSingleSequenceWidget* GTUtilsSequenceView::getSeqWidgetByNumber(U2OpStatus &os, int number, const GTGlobals::FindOptions &options){
+ADVSingleSequenceWidget* GTUtilsSequenceView::getSeqWidgetByNumber(HI::GUITestOpStatus &os, int number, const GTGlobals::FindOptions &options){
     QWidget *widget = GTWidget::findWidget(os,
         QString("ADV_single_sequence_widget_%1").arg(number),
         GTUtilsMdi::activeWindow(os), options);
@@ -305,7 +315,7 @@ ADVSingleSequenceWidget* GTUtilsSequenceView::getSeqWidgetByNumber(U2OpStatus &o
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPanViewByNumber"
-PanView* GTUtilsSequenceView::getPanViewByNumber(U2OpStatus &os, int number, const GTGlobals::FindOptions &options){
+PanView* GTUtilsSequenceView::getPanViewByNumber(HI::GUITestOpStatus &os, int number, const GTGlobals::FindOptions &options){
     ADVSingleSequenceWidget* seq = getSeqWidgetByNumber(os, number, options);
     if(options.failIfNull){
         GT_CHECK_RESULT(seq != NULL, QString("sequence view with num %1 not found").arg(number), NULL);
@@ -323,7 +333,7 @@ PanView* GTUtilsSequenceView::getPanViewByNumber(U2OpStatus &os, int number, con
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getOverViewByNumber"
-Overview* GTUtilsSequenceView::getOverviewByNumber(U2OpStatus &os, int number, const GTGlobals::FindOptions &options){
+Overview* GTUtilsSequenceView::getOverviewByNumber(HI::GUITestOpStatus &os, int number, const GTGlobals::FindOptions &options){
     ADVSingleSequenceWidget* seq = getSeqWidgetByNumber(os, number, options);
     if(options.failIfNull){
         GT_CHECK_RESULT(seq != NULL, QString("sequence view with num %1 not found").arg(number), NULL);
@@ -341,26 +351,26 @@ Overview* GTUtilsSequenceView::getOverviewByNumber(U2OpStatus &os, int number, c
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSeqWidgetsNumber"
-int GTUtilsSequenceView::getSeqWidgetsNumber(U2OpStatus &os) {
+int GTUtilsSequenceView::getSeqWidgetsNumber(HI::GUITestOpStatus &os) {
     QList<ADVSingleSequenceWidget*> seqWidgets = GTUtilsMdi::activeWindow(os)->findChildren<ADVSingleSequenceWidget*>();
     return seqWidgets.size();
 }
 #undef GT_METHOD_NAME
 
-QVector<U2Region> GTUtilsSequenceView::getSelection(U2OpStatus &os, int number){
+QVector<U2Region> GTUtilsSequenceView::getSelection(HI::GUITestOpStatus &os, int number){
     PanView* panView = getPanViewByNumber(os, number);
     QVector<U2Region> result = panView->getSequenceContext()->getSequenceSelection()->getSelectedRegions();
     return result;
 }
 
 #define GT_METHOD_NAME "getSeqName"
-QString GTUtilsSequenceView::getSeqName(U2OpStatus &os, int number) {
+QString GTUtilsSequenceView::getSeqName(HI::GUITestOpStatus &os, int number) {
     return getSeqName(os, getSeqWidgetByNumber(os, number));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSeqName"
-QString GTUtilsSequenceView::getSeqName(U2OpStatus &os, ADVSingleSequenceWidget* seqWidget){
+QString GTUtilsSequenceView::getSeqName(HI::GUITestOpStatus &os, ADVSingleSequenceWidget* seqWidget){
     GT_CHECK_RESULT(NULL != seqWidget, "Sequence widget is NULL!", "");
     QLabel *nameLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "nameLabel", seqWidget));
     GT_CHECK_RESULT(NULL != nameLabel, "Name label is NULL!", "");
@@ -374,7 +384,7 @@ QString GTUtilsSequenceView::getSeqName(U2OpStatus &os, ADVSingleSequenceWidget*
 #define MIN_ANNOTATION_WIDTH 5
 
 #define GT_METHOD_NAME "clickAnnotation"
-void GTUtilsSequenceView::clickAnnotationDet(U2OpStatus &os, QString name, int startpos, int number, Qt::MouseButton button){
+void GTUtilsSequenceView::clickAnnotationDet(HI::GUITestOpStatus &os, QString name, int startpos, int number, Qt::MouseButton button){
     ADVSingleSequenceWidget* seq = getSeqWidgetByNumber(os, number);
     GSequenceLineViewRenderArea* area = seq->getDetView()->getRenderArea();
     DetViewRenderArea* det = dynamic_cast<DetViewRenderArea*>(area);
@@ -414,6 +424,9 @@ void GTUtilsSequenceView::clickAnnotationDet(U2OpStatus &os, QString name, int s
 
     float start = visibleLocation.startPos;
     float end = visibleLocation.endPos();
+    if (seq->getDetView()->isWrapMode()) {
+        end = visibleLocation.startPos + seq->getDetView()->getSymbolsPerLine();
+    }
     float x1f = (float)(start - vr.startPos) * det->getCharWidth();
     float x2f = (float)(end - vr.startPos) * det->getCharWidth();
 
@@ -427,27 +440,27 @@ void GTUtilsSequenceView::clickAnnotationDet(U2OpStatus &os, QString name, int s
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getGraphView"
-GSequenceGraphView *GTUtilsSequenceView::getGraphView(U2OpStatus &os){
+GSequenceGraphView *GTUtilsSequenceView::getGraphView(HI::GUITestOpStatus &os){
     GSequenceGraphView* graph = getSeqWidgetByNumber(os)->findChild<GSequenceGraphView*>();
     GT_CHECK_RESULT(graph != NULL, "Graph view is NULL", NULL);
     return graph;
 }
 #undef GT_METHOD_NAME
 
-QList<QVariant> GTUtilsSequenceView::getLabelPositions(U2OpStatus &os, GSequenceGraphView *graph){
+QList<QVariant> GTUtilsSequenceView::getLabelPositions(HI::GUITestOpStatus &os, GSequenceGraphView *graph){
     Q_UNUSED(os);
     QList<QVariant> list;
     graph->getLabelPositions(list);
     return list;
 }
 
-QList<TextLabel *> GTUtilsSequenceView::getGraphLabels(U2OpStatus &os, GSequenceGraphView *graph){
+QList<TextLabel *> GTUtilsSequenceView::getGraphLabels(HI::GUITestOpStatus &os, GSequenceGraphView *graph){
     Q_UNUSED(os);
     QList<TextLabel*> result = graph->findChildren<TextLabel*>();
     return result;
 }
 
-QColor GTUtilsSequenceView::getGraphColor(U2OpStatus &os, GSequenceGraphView *graph){
+QColor GTUtilsSequenceView::getGraphColor(HI::GUITestOpStatus &os, GSequenceGraphView *graph){
     ColorMap map = graph->getGSequenceGraphDrawer()->getColors();
     QColor result = map.value("Default color");
     return result;
diff --git a/src/plugins/GUITestBase/src/GTUtilsSequenceView.h b/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
index 8842b63..8a58854 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
@@ -23,11 +23,10 @@
 #define _U2_GT_UTILS_SEQUENCE_VIEW_H
 
 #include <QString>
-#include <api/GTGlobals.h>
+#include <GTGlobals.h>
 
 namespace U2 {
 
-class U2OpStatus;
 class ADVSingleSequenceWidget;
 class PanView;
 class U2Region;
@@ -37,36 +36,37 @@ class TextLabel;
 
 class GTUtilsSequenceView {
 public:
-    static void getSequenceAsString(U2OpStatus &os, QString &sequence);
-    static QString getSequenceAsString(U2OpStatus &os, int number = 0);
-    static QString getBeginOfSequenceAsString(U2OpStatus &os, int length);
-    static QString getEndOfSequenceAsString(U2OpStatus &os, int length);
-    static int getLengthOfSequence(U2OpStatus &os);
-    static int getVisiableStart(U2OpStatus &os, int widgetNumber = 0);
-    static void checkSequence(U2OpStatus &os, const QString &expectedSequence);
-    static void selectSequenceRegion(U2OpStatus &os, int from, int to);
+    static void getSequenceAsString(HI::GUITestOpStatus &os, QString &sequence);
+    static QString getSequenceAsString(HI::GUITestOpStatus &os, int number = 0);
+    static QString getBeginOfSequenceAsString(HI::GUITestOpStatus &os, int length);
+    static QString getEndOfSequenceAsString(HI::GUITestOpStatus &os, int length);
+    static int getLengthOfSequence(HI::GUITestOpStatus &os);
+    static int getVisiableStart(HI::GUITestOpStatus &os, int widgetNumber = 0);
+    static U2Region getVisibleRange(HI::GUITestOpStatus &os, int widgetNumber = 0);
+    static void checkSequence(HI::GUITestOpStatus &os, const QString &expectedSequence);
+    static void selectSequenceRegion(HI::GUITestOpStatus &os, int from, int to);
 
-  	static void openSequenceView(U2OpStatus &os, const QString &sequenceName);
-    static void addSequenceView(U2OpStatus &os, const QString &sequenceName);
+    static void openSequenceView(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static void addSequenceView(HI::GUITestOpStatus &os, const QString &sequenceName);
 
-    static void goToPosition(U2OpStatus &os, int position);
+    static void goToPosition(HI::GUITestOpStatus &os, int position);
 
-    static ADVSingleSequenceWidget * getSeqWidgetByNumber(U2OpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static PanView * getPanViewByNumber(U2OpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static Overview* getOverviewByNumber(U2OpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static int getSeqWidgetsNumber(U2OpStatus &os);
-    static QVector<U2Region> getSelection(U2OpStatus &os, int number = 0);
-    static QString getSeqName(U2OpStatus &os, int number = 0);
-    static QString getSeqName(U2OpStatus &os, ADVSingleSequenceWidget *seqWidget);
+    static ADVSingleSequenceWidget * getSeqWidgetByNumber(HI::GUITestOpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static PanView * getPanViewByNumber(HI::GUITestOpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static Overview* getOverviewByNumber(HI::GUITestOpStatus &os, int number = 0, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static int getSeqWidgetsNumber(HI::GUITestOpStatus &os);
+    static QVector<U2Region> getSelection(HI::GUITestOpStatus &os, int number = 0);
+    static QString getSeqName(HI::GUITestOpStatus &os, int number = 0);
+    static QString getSeqName(HI::GUITestOpStatus &os, ADVSingleSequenceWidget *seqWidget);
 
     //clicks on simple annotation on sequence view
-    static void clickAnnotationDet(U2OpStatus &os, QString name, int startpos, int number = 0, Qt::MouseButton button = Qt::LeftButton);
-    static void clickAnnotationPan(U2OpStatus &os, QString name, int startpos, int number = 0, Qt::MouseButton button = Qt::LeftButton);
+    static void clickAnnotationDet(HI::GUITestOpStatus &os, QString name, int startpos, int number = 0, Qt::MouseButton button = Qt::LeftButton);
+    static void clickAnnotationPan(HI::GUITestOpStatus &os, QString name, int startpos, int number = 0, Qt::MouseButton button = Qt::LeftButton);
 
-    static GSequenceGraphView* getGraphView(U2OpStatus &os);
-    static QList<QVariant> getLabelPositions(U2OpStatus &os, GSequenceGraphView* graph);
-    static QList<TextLabel*> getGraphLabels(U2OpStatus &os, GSequenceGraphView* graph);
-    static QColor getGraphColor(U2OpStatus &os, GSequenceGraphView* graph);
+    static GSequenceGraphView* getGraphView(HI::GUITestOpStatus &os);
+    static QList<QVariant> getLabelPositions(HI::GUITestOpStatus &os, GSequenceGraphView* graph);
+    static QList<TextLabel*> getGraphLabels(HI::GUITestOpStatus &os, GSequenceGraphView* graph);
+    static QColor getGraphColor(HI::GUITestOpStatus &os, GSequenceGraphView* graph);
 };
 
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
index 8ad048c..87bee2f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
@@ -22,31 +22,33 @@
 #include <QTreeView>
 
 #include <U2Core/U2ObjectDbi.h>
-
+#include <U2Core/U2SafePoints.h>
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/ProjectViewModel.h>
 
 #include "GTDatabaseConfig.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsSharedDatabaseDocument"
 
 #define GT_METHOD_NAME "connectToTestDatabase"
-Document* GTUtilsSharedDatabaseDocument::connectToTestDatabase(U2OpStatus &os) {
+Document* GTUtilsSharedDatabaseDocument::connectToTestDatabase(HI::GUITestOpStatus &os) {
     GTLogTracer lt;
     QString conName = "ugene_gui_test";
     GTDatabaseConfig::initTestConnectionInfo(conName);
@@ -56,7 +58,10 @@ Document* GTUtilsSharedDatabaseDocument::connectToTestDatabase(U2OpStatus &os) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTThread::waitForMainThread(os);
 
     CHECK_SET_ERR_RESULT(!lt.hasError(), "errors in log", NULL);
 
@@ -65,7 +70,7 @@ Document* GTUtilsSharedDatabaseDocument::connectToTestDatabase(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "connectToUgenePublicDatabase"
-Document *GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(U2OpStatus &os) {
+Document *GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(HI::GUITestOpStatus &os) {
     GTLogTracer lt;
     QString conName = "UGENE public database";
     {
@@ -74,16 +79,16 @@ Document *GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(U2OpStatus
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     CHECK_SET_ERR_RESULT(!lt.hasError(), "errors in log", NULL);
-
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     return GTUtilsSharedDatabaseDocument::getDatabaseDocumentByName(os, conName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getDatabaseDocumentByName"
-Document *GTUtilsSharedDatabaseDocument::getDatabaseDocumentByName(U2OpStatus &os, const QString &name) {
+Document *GTUtilsSharedDatabaseDocument::getDatabaseDocumentByName(HI::GUITestOpStatus &os, const QString &name) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(!name.isEmpty(), "Name is empty", NULL);
 
@@ -95,7 +100,7 @@ Document *GTUtilsSharedDatabaseDocument::getDatabaseDocumentByName(U2OpStatus &o
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "disconnectDatabase"
-void GTUtilsSharedDatabaseDocument::disconnectDatabase(U2OpStatus &os, Document *databaseDoc) {
+void GTUtilsSharedDatabaseDocument::disconnectDatabase(HI::GUITestOpStatus &os, Document *databaseDoc) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     disconnectDatabase(os, databaseDoc->getName());
@@ -103,14 +108,14 @@ void GTUtilsSharedDatabaseDocument::disconnectDatabase(U2OpStatus &os, Document
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "disconnectDatabase"
-void GTUtilsSharedDatabaseDocument::disconnectDatabase(U2OpStatus &os, const QString &name) {
+void GTUtilsSharedDatabaseDocument::disconnectDatabase(HI::GUITestOpStatus &os, const QString &name) {
     Q_UNUSED(os);
     GTUtilsDocument::removeDocument(os, name);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getFolderItem"
-QModelIndex GTUtilsSharedDatabaseDocument::getItemIndex(U2OpStatus &os, Document *databaseDoc, const QString &itemPath, bool mustExist) {
+QModelIndex GTUtilsSharedDatabaseDocument::getItemIndex(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath, bool mustExist) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(NULL != databaseDoc, "databaseDoc is NULL", QModelIndex());
     GT_CHECK_RESULT(!itemPath.isEmpty(), "Folder path is empty", QModelIndex());
@@ -134,7 +139,7 @@ QModelIndex GTUtilsSharedDatabaseDocument::getItemIndex(U2OpStatus &os, Document
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createFolder"
-void GTUtilsSharedDatabaseDocument::createFolder(U2OpStatus &os, Document *databaseDoc, const QString &parentFolderPath, const QString &newFolderName) {
+void GTUtilsSharedDatabaseDocument::createFolder(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &parentFolderPath, const QString &newFolderName) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!parentFolderPath.isEmpty(), "Parent folder path is empty");
@@ -143,7 +148,7 @@ void GTUtilsSharedDatabaseDocument::createFolder(U2OpStatus &os, Document *datab
 
     QModelIndex parentFolderIndex = getItemIndex(os, databaseDoc, parentFolderPath);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__ADD_MENU << ACTION_PROJECT__CREATE_FOLDER, GTGlobals::UseMouse));
+    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));
@@ -153,7 +158,7 @@ void GTUtilsSharedDatabaseDocument::createFolder(U2OpStatus &os, Document *datab
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createPath"
-void GTUtilsSharedDatabaseDocument::createPath(U2OpStatus &os, Document *databaseDoc, const QString &path) {
+void GTUtilsSharedDatabaseDocument::createPath(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &path) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(path.startsWith(U2ObjectDbi::ROOT_FOLDER), "Path is not in the canonical form");
@@ -171,7 +176,7 @@ void GTUtilsSharedDatabaseDocument::createPath(U2OpStatus &os, Document *databas
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemPath"
-QString GTUtilsSharedDatabaseDocument::getItemPath(U2OpStatus &os, const QModelIndex &itemIndex) {
+QString GTUtilsSharedDatabaseDocument::getItemPath(HI::GUITestOpStatus &os, const QModelIndex &itemIndex) {
     Q_UNUSED(os);
     GT_CHECK_RESULT(itemIndex.isValid(), "Item index is invalid", QString());
 
@@ -214,7 +219,7 @@ QString GTUtilsSharedDatabaseDocument::getItemPath(U2OpStatus &os, const QModelI
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "expantToItem"
-void GTUtilsSharedDatabaseDocument::expantToItem(U2OpStatus &os, Document *databaseDoc, const QString &itemPath) {
+void GTUtilsSharedDatabaseDocument::expantToItem(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!itemPath.isEmpty(), "Item path is empty");
@@ -241,7 +246,7 @@ void GTUtilsSharedDatabaseDocument::expantToItem(U2OpStatus &os, Document *datab
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "expantToItem"
-void GTUtilsSharedDatabaseDocument::expantToItem(U2OpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
+void GTUtilsSharedDatabaseDocument::expantToItem(HI::GUITestOpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
@@ -252,7 +257,7 @@ void GTUtilsSharedDatabaseDocument::expantToItem(U2OpStatus &os, Document *datab
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doubleClickItem"
-void GTUtilsSharedDatabaseDocument::doubleClickItem(U2OpStatus &os, Document *databaseDoc, const QString &itemPath) {
+void GTUtilsSharedDatabaseDocument::doubleClickItem(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!itemPath.isEmpty(), "Item path is empty");
@@ -264,7 +269,7 @@ void GTUtilsSharedDatabaseDocument::doubleClickItem(U2OpStatus &os, Document *da
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "doubleClickItem"
-void GTUtilsSharedDatabaseDocument::doubleClickItem(U2OpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
+void GTUtilsSharedDatabaseDocument::doubleClickItem(HI::GUITestOpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
@@ -275,7 +280,7 @@ void GTUtilsSharedDatabaseDocument::doubleClickItem(U2OpStatus &os, Document *da
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openView"
-void GTUtilsSharedDatabaseDocument::openView(U2OpStatus &os, Document *databaseDoc, const QString &itemPath) {
+void GTUtilsSharedDatabaseDocument::openView(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!itemPath.isEmpty(), "Item path is empty");
@@ -288,7 +293,7 @@ void GTUtilsSharedDatabaseDocument::openView(U2OpStatus &os, Document *databaseD
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openView"
-void GTUtilsSharedDatabaseDocument::openView(U2OpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
+void GTUtilsSharedDatabaseDocument::openView(HI::GUITestOpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
@@ -301,7 +306,7 @@ void GTUtilsSharedDatabaseDocument::openView(U2OpStatus &os, Document *databaseD
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callImportDialog"
-void GTUtilsSharedDatabaseDocument::callImportDialog(U2OpStatus &os, Document *databaseDoc, const QString &itemPath) {
+void GTUtilsSharedDatabaseDocument::callImportDialog(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!itemPath.isEmpty(), "Item path is empty");
@@ -312,7 +317,7 @@ void GTUtilsSharedDatabaseDocument::callImportDialog(U2OpStatus &os, Document *d
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callImportDialog"
-void GTUtilsSharedDatabaseDocument::callImportDialog(U2OpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
+void GTUtilsSharedDatabaseDocument::callImportDialog(HI::GUITestOpStatus &os, Document *databaseDoc, const QModelIndex &itemIndex) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
@@ -329,7 +334,7 @@ void GTUtilsSharedDatabaseDocument::callImportDialog(U2OpStatus &os, Document *d
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "ensureItemExists"
-void GTUtilsSharedDatabaseDocument::ensureItemExists(U2OpStatus &os, Document *databaseDoc, const QString &itemPath) {
+void GTUtilsSharedDatabaseDocument::ensureItemExists(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &itemPath) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
 
@@ -339,7 +344,7 @@ void GTUtilsSharedDatabaseDocument::ensureItemExists(U2OpStatus &os, Document *d
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "ensureItemsExist"
-void GTUtilsSharedDatabaseDocument::ensureItemsExist(U2OpStatus &os, Document *databaseDoc, const QStringList &itemsPaths) {
+void GTUtilsSharedDatabaseDocument::ensureItemsExist(HI::GUITestOpStatus &os, Document *databaseDoc, const QStringList &itemsPaths) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
 
@@ -351,7 +356,7 @@ void GTUtilsSharedDatabaseDocument::ensureItemsExist(U2OpStatus &os, Document *d
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "ensureThereAraNoItemsExceptListed"
-void GTUtilsSharedDatabaseDocument::ensureThereAreNoItemsExceptListed(U2OpStatus &os, Document *databaseDoc, const QString& parentPath, const QStringList &itemsPaths) {
+void GTUtilsSharedDatabaseDocument::ensureThereAreNoItemsExceptListed(HI::GUITestOpStatus &os, Document *databaseDoc, const QString& parentPath, const QStringList &itemsPaths) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
 
@@ -365,7 +370,7 @@ void GTUtilsSharedDatabaseDocument::ensureThereAreNoItemsExceptListed(U2OpStatus
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "importFiles"
-void GTUtilsSharedDatabaseDocument::importFiles(U2OpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QStringList &filesPaths, const QVariantMap& options) {
+void GTUtilsSharedDatabaseDocument::importFiles(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QStringList &filesPaths, const QVariantMap& options) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!filesPaths.isEmpty(), "Files paths are not provided");
@@ -385,6 +390,7 @@ void GTUtilsSharedDatabaseDocument::importFiles(U2OpStatus &os, Document *databa
     GTUtilsDialog::waitForDialog(os, new ImportToDatabaseDialogFiller(os, actions));
 
     createPath(os, databaseDoc, dstFolderPath);
+    GTGlobals::sleep();
     callImportDialog(os, databaseDoc, dstFolderPath);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -393,7 +399,7 @@ void GTUtilsSharedDatabaseDocument::importFiles(U2OpStatus &os, Document *databa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "importDirs"
-void GTUtilsSharedDatabaseDocument::importDirs(U2OpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QStringList &dirsPaths, const QVariantMap& options) {
+void GTUtilsSharedDatabaseDocument::importDirs(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QStringList &dirsPaths, const QVariantMap& options) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!dirsPaths.isEmpty(), "Dirs paths are not provided");
@@ -421,7 +427,7 @@ void GTUtilsSharedDatabaseDocument::importDirs(U2OpStatus &os, Document *databas
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "importProjectItems"
-void GTUtilsSharedDatabaseDocument::importProjectItems(U2OpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QMap<QString, QStringList> &projectItems, const QVariantMap &options) {
+void GTUtilsSharedDatabaseDocument::importProjectItems(HI::GUITestOpStatus &os, Document *databaseDoc, const QString &dstFolderPath, const QMap<QString, QStringList> &projectItems, const QVariantMap &options) {
     Q_UNUSED(os);
     GT_CHECK(NULL != databaseDoc, "databaseDoc is NULL");
     GT_CHECK(!projectItems.isEmpty(), "Project items are not provided");
diff --git a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
index 41c5aaa..1d45d6e 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
+++ b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
@@ -24,7 +24,7 @@
 
 #include <QtCore/QModelIndex>
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 namespace U2 {
 
@@ -32,39 +32,39 @@ class Document;
 
 class GTUtilsSharedDatabaseDocument {
 public:
-    static U2::Document *connectToTestDatabase(U2OpStatus &os);
-    static U2::Document *connectToUgenePublicDatabase(U2OpStatus &os);
-    static Document* getDatabaseDocumentByName(U2OpStatus &os, const QString& name);
+    static U2::Document *connectToTestDatabase(HI::GUITestOpStatus &os);
+    static U2::Document *connectToUgenePublicDatabase(HI::GUITestOpStatus &os);
+    static Document* getDatabaseDocumentByName(HI::GUITestOpStatus &os, const QString& name);
 
-    static void disconnectDatabase(U2OpStatus& os, Document* databaseDoc);
-    static void disconnectDatabase(U2OpStatus& os, const QString& name);
+    static void disconnectDatabase(HI::GUITestOpStatus& os, Document* databaseDoc);
+    static void disconnectDatabase(HI::GUITestOpStatus& os, const QString& name);
 
-    static QModelIndex getItemIndex(U2OpStatus &os, Document* databaseDoc, const QString& itemPath, bool mustExist = true);
+    static QModelIndex getItemIndex(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath, bool mustExist = true);
 
-    static void createFolder(U2OpStatus &os, Document* databaseDoc, const QString& parentFolderPath, const QString& newFolderName);
-    static void createPath(U2OpStatus &os, Document* databaseDoc, const QString& path);
+    static void createFolder(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& parentFolderPath, const QString& newFolderName);
+    static void createPath(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& path);
 
-    static QString getItemPath(U2OpStatus &os, const QModelIndex& itemIndex);
+    static QString getItemPath(HI::GUITestOpStatus &os, const QModelIndex& itemIndex);
 
-    static void expantToItem(U2OpStatus &os, Document* databaseDoc, const QString& itemPath);
-    static void expantToItem(U2OpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
+    static void expantToItem(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath);
+    static void expantToItem(HI::GUITestOpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
 
-    static void doubleClickItem(U2OpStatus &os, Document* databaseDoc, const QString& itemPath);
-    static void doubleClickItem(U2OpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
+    static void doubleClickItem(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath);
+    static void doubleClickItem(HI::GUITestOpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
 
-    static void openView(U2OpStatus &os, Document* databaseDoc, const QString& itemPath);
-    static void openView(U2OpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
+    static void openView(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath);
+    static void openView(HI::GUITestOpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
 
-    static void callImportDialog(U2OpStatus &os, Document* databaseDoc, const QString& itemPath);
-    static void callImportDialog(U2OpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
+    static void callImportDialog(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath);
+    static void callImportDialog(HI::GUITestOpStatus &os, Document* databaseDoc, const QModelIndex& itemIndex);
 
-    static void ensureItemExists(U2OpStatus &os, Document* databaseDoc, const QString& itemPath);
-    static void ensureItemsExist(U2OpStatus &os, Document* databaseDoc, const QStringList& itemsPaths);
-    static void ensureThereAreNoItemsExceptListed(U2OpStatus &os, Document* databaseDoc, const QString &parentPath, const QStringList& itemsPaths);
+    static void ensureItemExists(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& itemPath);
+    static void ensureItemsExist(HI::GUITestOpStatus &os, Document* databaseDoc, const QStringList& itemsPaths);
+    static void ensureThereAreNoItemsExceptListed(HI::GUITestOpStatus &os, Document* databaseDoc, const QString &parentPath, const QStringList& itemsPaths);
 
-    static void importFiles(U2OpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QStringList& filesPaths, const QVariantMap& options = QVariantMap());
-    static void importDirs(U2OpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QStringList& dirsPaths, const QVariantMap& options = QVariantMap());
-    static void importProjectItems(U2OpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QMap<QString, QStringList>& projectItems, const QVariantMap& options = QVariantMap());
+    static void importFiles(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QStringList& filesPaths, const QVariantMap& options = QVariantMap());
+    static void importDirs(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QStringList& dirsPaths, const QVariantMap& options = QVariantMap());
+    static void importProjectItems(HI::GUITestOpStatus &os, Document* databaseDoc, const QString& dstFolderPath, const QMap<QString, QStringList>& projectItems, const QVariantMap& options = QVariantMap());
 
 private:
     static const QVariant convertProjectItemsPaths(const QMap<QString, QStringList>& projectItems);
diff --git a/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp b/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
index f762feb..3beb1f3 100644
--- a/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
@@ -22,8 +22,8 @@
 #include <QWebView>
 #include <QWebElement>
 
-#include "api/GTWebView.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWebView.h>
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsMdi.h"
 
@@ -31,50 +31,51 @@
 
 namespace U2 {
 
-void GTUtilsStartPage::openStartPage(U2OpStatus &os){
+#define GT_CLASS_NAME "GTUtilsStartPage"
+
+void GTUtilsStartPage::openStartPage(HI::GUITestOpStatus &os){
     GTUtilsMdi::activateWindow(os, "Start Page");
 }
 
-QWebView* GTUtilsStartPage::getStartPage(U2OpStatus &os){
+QWebView* GTUtilsStartPage::getStartPage(HI::GUITestOpStatus &os){
     QWidget* startPageWidget = GTWidget::findWidget(os, "Start Page");
     QWebView* result = GTWidget::findExactWidget<QWebView*>(os, "webView", startPageWidget);
     return result;
 }
 
-QWebElement GTUtilsStartPage::getButton(U2OpStatus &os, Buttons button){
-    QWebElement result;
+#define GT_METHOD_NAME "getButton"
+QWebElement GTUtilsStartPage::getButton(HI::GUITestOpStatus &os, Buttons button) {
     switch (button) {
     case OpenFile:
-        result = GTWebView::findElement(os, getStartPage(os), "Open File(s)", "DIV");
-        break;
+        return GTWebView::findElement(os, getStartPage(os), "Open File(s)", "DIV");
     case CreateSequence:
-        result = GTWebView::findElement(os, getStartPage(os), "Create Sequence", "DIV");
-        break;
+        return GTWebView::findElement(os, getStartPage(os), "Create Sequence", "DIV");
     case CreateWorkflow:
-        result = GTWebView::findElement(os, getStartPage(os), "Create Workflow", "DIV");
-        break;
+        return GTWebView::findElement(os, getStartPage(os), "Create Workflow", "DIV");
     case QuickStartGuide:
-        //You do not need this button
+         // You do not need this button
+        GT_CHECK_RESULT(false, "Not implemented", QWebElement());
     default:
-        break;
+        GT_CHECK_RESULT(false, "Not implemented", QWebElement());
     }
-
-    return result;
 }
+#undef GT_METHOD_NAME
 
-void GTUtilsStartPage::clickButton(U2OpStatus &os, Buttons b){
+void GTUtilsStartPage::clickButton(HI::GUITestOpStatus &os, Buttons b) {
     QWebElement but = getButton(os, b);
     QWebView* start = getStartPage(os);
     GTWebView::click(os, start, but);
 }
 
-void GTUtilsStartPage::clickResentDocument(U2OpStatus &os, QString text){
+void GTUtilsStartPage::clickResentDocument(HI::GUITestOpStatus &os, QString text){
     QWebElement el = GTWebView::findElement(os, getStartPage(os), "- " + text, "A");
     GTWebView::click(os, getStartPage(os), el);
 }
 
-void GTUtilsStartPage::clickResentProject(U2OpStatus &os, QString text){
+void GTUtilsStartPage::clickResentProject(HI::GUITestOpStatus &os, QString text){
     clickResentDocument(os, text);
 }
 
+#undef GT_CLASS_NAME
+
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsStartPage.h b/src/plugins/GUITestBase/src/GTUtilsStartPage.h
index cbe1e7c..94f1037 100644
--- a/src/plugins/GUITestBase/src/GTUtilsStartPage.h
+++ b/src/plugins/GUITestBase/src/GTUtilsStartPage.h
@@ -23,23 +23,24 @@
 #ifndef _U2_GT_UTILS_START_PAGE_
 #define _U2_GT_UTILS_START_PAGE_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QWebView;
 class QWebElement;
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsStartPage
 {
 public:
     enum Buttons{OpenFile, CreateSequence, CreateWorkflow, QuickStartGuide};
-    static void openStartPage(U2OpStatus &os);
-    static QWebView* getStartPage(U2OpStatus &os);
-    static QWebElement getButton(U2OpStatus &os, Buttons button);
-    static void clickButton(U2OpStatus &os, Buttons button);
-    static void clickResentDocument(U2OpStatus &os, QString text);
-    static void clickResentProject(U2OpStatus &os, QString text);
+    static void openStartPage(HI::GUITestOpStatus &os);
+    static QWebView* getStartPage(HI::GUITestOpStatus &os);
+    static QWebElement getButton(HI::GUITestOpStatus &os, Buttons button);
+    static void clickButton(HI::GUITestOpStatus &os, Buttons button);
+    static void clickResentDocument(HI::GUITestOpStatus &os, QString text);
+    static void clickResentProject(HI::GUITestOpStatus &os, QString text);
 };
 
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsTask.cpp b/src/plugins/GUITestBase/src/GTUtilsTask.cpp
index 814c266..713f3c5 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTask.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsTask.cpp
@@ -21,7 +21,7 @@
 
 #include <U2Core/Task.h>
 
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 #include "GTUtilsTaskTreeView.h"
 
 #include "GTUtilsTask.h"
@@ -32,7 +32,7 @@ namespace U2 {
 #define GT_CLASS_NAME "GTUtilsTask"
 
 #define GT_METHOD_NAME "getTopLevelTasks"
-QList<Task*> GTUtilsTask::getTopLevelTasks(U2OpStatus &os){
+QList<Task*> GTUtilsTask::getTopLevelTasks(HI::GUITestOpStatus &os){
     Q_UNUSED(os);
     TaskScheduler* scheduller = AppContext::getTaskScheduler();
     GT_CHECK_RESULT(scheduller != NULL, "task scheduler is NULL", QList<Task*>());
@@ -41,7 +41,7 @@ QList<Task*> GTUtilsTask::getTopLevelTasks(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSubTaskByName"
-Task* GTUtilsTask::getSubTaskByName(U2OpStatus &os, QString taskName, GTGlobals::FindOptions options){
+Task* GTUtilsTask::getSubTaskByName(HI::GUITestOpStatus &os, QString taskName, GTGlobals::FindOptions options){
     Task* result;
     QList<Task*> tasks = getTopLevelTasks(os);
     foreach (Task* t, tasks) {
@@ -55,7 +55,7 @@ Task* GTUtilsTask::getSubTaskByName(U2OpStatus &os, QString taskName, GTGlobals:
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSubTaskByName"
-Task* GTUtilsTask::getSubTaskByName(U2OpStatus &os, Task *parent, QString taskName, GTGlobals::FindOptions options){
+Task* GTUtilsTask::getSubTaskByName(HI::GUITestOpStatus &os, Task *parent, QString taskName, GTGlobals::FindOptions options){
     Task* result;
     foreach (Task* t, parent->getSubtasks()) {
         if(t->getTaskName() == taskName){
@@ -73,7 +73,7 @@ Task* GTUtilsTask::getSubTaskByName(U2OpStatus &os, Task *parent, QString taskNa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getTaskByName"
-Task* GTUtilsTask::getTaskByName(U2OpStatus &os, QString taskName, GTGlobals::FindOptions options){
+Task* GTUtilsTask::getTaskByName(HI::GUITestOpStatus &os, QString taskName, GTGlobals::FindOptions options){
     QList<Task*> tasks = getTopLevelTasks(os);
     foreach (Task* t, tasks) {
         QString name = t->getTaskName();
@@ -89,34 +89,34 @@ Task* GTUtilsTask::getTaskByName(U2OpStatus &os, QString taskName, GTGlobals::Fi
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkTask"
-void GTUtilsTask::checkTask(U2OpStatus &os, QString taskName){
+void GTUtilsTask::checkTask(HI::GUITestOpStatus &os, QString taskName){
     getTaskByName(os, taskName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkNoTask"
-void GTUtilsTask::checkNoTask(U2OpStatus &os, QString taskName){
+void GTUtilsTask::checkNoTask(HI::GUITestOpStatus &os, QString taskName){
     Task* t = getTaskByName(os, taskName, GTGlobals::FindOptions(false));
     GT_CHECK(t == NULL, "tast " + taskName + " unexpectidly found");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "cancelTask"
-void GTUtilsTask::cancelTask(U2OpStatus &os, QString taskName){
+void GTUtilsTask::cancelTask(HI::GUITestOpStatus &os, QString taskName){
     Task* t = getTaskByName(os, taskName);
     t->cancel();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "cancelSubTask"
-void GTUtilsTask::cancelSubTask(U2OpStatus &os, QString taskName){
+void GTUtilsTask::cancelSubTask(HI::GUITestOpStatus &os, QString taskName){
     Task* t = getSubTaskByName(os, taskName);
     t->cancel();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "waitTaskStart"
-void GTUtilsTask::waitTaskStart(U2OpStatus &os, QString taskName, int timeOut){
+void GTUtilsTask::waitTaskStart(HI::GUITestOpStatus &os, QString taskName, int timeOut){
     int i = 0;
     while(getTaskByName(os, taskName, GTGlobals::FindOptions(false)) == NULL){
        GTGlobals::sleep(100);
diff --git a/src/plugins/GUITestBase/src/GTUtilsTask.h b/src/plugins/GUITestBase/src/GTUtilsTask.h
index 01637ca..3c4aff8 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTask.h
+++ b/src/plugins/GUITestBase/src/GTUtilsTask.h
@@ -22,24 +22,25 @@
 #ifndef GTUTILSTASK_H
 #define GTUTILSTASK_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class Task;
 
 namespace U2 {
+using namespace HI;
 
 class GTUtilsTask
 {
 public:
-    static QList<Task*> getTopLevelTasks(U2OpStatus &os);
-    static Task* getTaskByName(U2OpStatus &os, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
-    static Task* getSubTaskByName(U2OpStatus &os, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
-    static Task* getSubTaskByName(U2OpStatus &os, Task* parent, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
-    static void checkTask(U2OpStatus &os, QString taskName);
-    static void checkNoTask(U2OpStatus &os, QString taskName);
-    static void cancelTask(U2OpStatus &os, QString taskName);
-    static void cancelSubTask(U2OpStatus &os, QString taskName);
-    static void waitTaskStart(U2OpStatus &os, QString taskName, int timeOut = 180000);
+    static QList<Task*> getTopLevelTasks(HI::GUITestOpStatus &os);
+    static Task* getTaskByName(HI::GUITestOpStatus &os, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
+    static Task* getSubTaskByName(HI::GUITestOpStatus &os, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
+    static Task* getSubTaskByName(HI::GUITestOpStatus &os, Task* parent, QString taskName, GTGlobals::FindOptions options = GTGlobals::FindOptions(true));
+    static void checkTask(HI::GUITestOpStatus &os, QString taskName);
+    static void checkNoTask(HI::GUITestOpStatus &os, QString taskName);
+    static void cancelTask(HI::GUITestOpStatus &os, QString taskName);
+    static void cancelSubTask(HI::GUITestOpStatus &os, QString taskName);
+    static void waitTaskStart(HI::GUITestOpStatus &os, QString taskName, int timeOut = 180000);
 
 };
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
index 4a94b3b..1ab8c48 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
@@ -19,11 +19,12 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/global.h>
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 
 #include <U2Core/Task.h>
 #include <U2Gui/MainWindow.h>
@@ -37,15 +38,15 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsTaskTreeView"
 
 const QString GTUtilsTaskTreeView::widgetName = DOCK_TASK_TREE_VIEW;
 
 
-void GTUtilsTaskTreeView::waitTaskFinished(U2OpStatus &os, long timeout){
-
-
+void GTUtilsTaskTreeView::waitTaskFinished(HI::GUITestOpStatus &os, long timeout) {
+    GTGlobals::sleep(500);
     TaskScheduler* scheduller = AppContext::getTaskScheduler();
     int i = 0;
     while(!scheduller->getTopLevelTasks().isEmpty()){
@@ -74,7 +75,7 @@ QString GTUtilsTaskTreeView::getTasksInfo(QList<Task *> tasks, int level){
     }
     return result;
 }
-void GTUtilsTaskTreeView::openView(U2OpStatus& os) {
+void GTUtilsTaskTreeView::openView(HI::GUITestOpStatus& os) {
     GTGlobals::FindOptions options;
     options.failIfNull = false;
 
@@ -85,12 +86,12 @@ void GTUtilsTaskTreeView::openView(U2OpStatus& os) {
     }
 }
 
-void GTUtilsTaskTreeView::toggleView(U2OpStatus& os) {
+void GTUtilsTaskTreeView::toggleView(HI::GUITestOpStatus& os) {
     GTKeyboardDriver::keyClick(os, '2', GTKeyboardDriver::key["alt"]);
 }
 
 #define GT_METHOD_NAME "getTreeWidgetItem"
-QTreeWidgetItem* GTUtilsTaskTreeView::getTreeWidgetItem( U2OpStatus &os, const QString &itemName, bool failOnNull){
+QTreeWidgetItem* GTUtilsTaskTreeView::getTreeWidgetItem( HI::GUITestOpStatus &os, const QString &itemName, bool failOnNull){
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget not found", NULL);
 
@@ -119,7 +120,7 @@ QTreeWidgetItem* GTUtilsTaskTreeView::getTreeWidgetItem( QTreeWidget* tree, cons
     return NULL;
 }
 
-QTreeWidget* GTUtilsTaskTreeView::getTreeWidget(U2OpStatus &os) {
+QTreeWidget* GTUtilsTaskTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
     GTGlobals::FindOptions options;
     options.failIfNull = false;
 
@@ -141,25 +142,25 @@ QList<QTreeWidgetItem*> GTUtilsTaskTreeView::getTaskTreeViewItems(QTreeWidgetIte
     return treeItems;
 }
 
-void GTUtilsTaskTreeView::cancelTask( U2OpStatus& os, const QString &itemName ){
+void GTUtilsTaskTreeView::cancelTask( HI::GUITestOpStatus& os, const QString &itemName ){
     Runnable *popupChooser = new PopupChooser(os, QStringList() << "Cancel task", GTGlobals::UseMouse);
     GTUtilsDialog::waitForDialog(os, popupChooser);
     click(os, itemName, Qt::RightButton);
     GTGlobals::sleep(3000);
 }
 
-void GTUtilsTaskTreeView::click( U2OpStatus &os, const QString &itemName, Qt::MouseButton b ){
+void GTUtilsTaskTreeView::click( HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton b ){
     moveTo(os, itemName);
     GTMouseDriver::click(os, b);
 }
 
-void GTUtilsTaskTreeView::moveTo(U2OpStatus &os,const QString &itemName) {
+void GTUtilsTaskTreeView::moveTo(HI::GUITestOpStatus &os,const QString &itemName) {
     openView(os);
     moveToOpenedView(os, itemName);
 }
 
 #define GT_METHOD_NAME "getTopLevelTasksCount"
-int GTUtilsTaskTreeView::getTopLevelTasksCount(U2OpStatus &os) {
+int GTUtilsTaskTreeView::getTopLevelTasksCount(HI::GUITestOpStatus &os) {
     openView(os);
 
     QTreeWidget *treeWidget = getTreeWidget(os);
@@ -169,13 +170,13 @@ int GTUtilsTaskTreeView::getTopLevelTasksCount(U2OpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsTaskTreeView::moveToOpenedView( U2OpStatus& os, const QString &itemName ){
+void GTUtilsTaskTreeView::moveToOpenedView( HI::GUITestOpStatus& os, const QString &itemName ){
     QPoint p = getTreeViewItemPosition(os, itemName);
     GTMouseDriver::moveTo(os, p);
 }
 
 #define GT_METHOD_NAME "getTreeViewItemPosition"
-QPoint GTUtilsTaskTreeView::getTreeViewItemPosition( U2OpStatus &os, const QString &itemName ){
+QPoint GTUtilsTaskTreeView::getTreeViewItemPosition( HI::GUITestOpStatus &os, const QString &itemName ){
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "treeWidget is NULL", QPoint());
     QTreeWidgetItem *item = getTreeWidgetItem(os, itemName);
@@ -191,7 +192,7 @@ QPoint GTUtilsTaskTreeView::getTreeViewItemPosition( U2OpStatus &os, const QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkTask"
-bool GTUtilsTaskTreeView::checkTask(U2OpStatus &os, const QString &itemName){
+bool GTUtilsTaskTreeView::checkTask(HI::GUITestOpStatus &os, const QString &itemName){
     openView(os);
     QTreeWidgetItem* item = getTreeWidgetItem(os, itemName, false);
     return item != NULL;
@@ -199,7 +200,7 @@ bool GTUtilsTaskTreeView::checkTask(U2OpStatus &os, const QString &itemName){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "countTasks"
-int GTUtilsTaskTreeView::countTasks(U2OpStatus &os, const QString &itemName){
+int GTUtilsTaskTreeView::countTasks(HI::GUITestOpStatus &os, const QString &itemName){
     openView(os);
     int result = 0;
     QList<QTreeWidgetItem*> treeItems = getTaskTreeViewItems(getTreeWidget(os)->invisibleRootItem());
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
index 8069d53..56c2b19 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_TASK_TREE_VIEW_UTILS_H_
 #define _U2_GUI_TASK_TREE_VIEW_UTILS_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QTreeWidget;
 class QTreeWidgetItem;
@@ -47,19 +47,19 @@ private:
 
 class GTUtilsTaskTreeView {
 public:
-    static void waitTaskFinished(U2OpStatus &os, long timeout=180000);
-    static void click(U2OpStatus &os, const QString &itemName, Qt::MouseButton b = Qt::LeftButton);
-    static void openView(U2OpStatus& os);
-    static void toggleView(U2OpStatus& os);
-    static void cancelTask(U2OpStatus& os, const QString &itemName);
-    static QTreeWidgetItem* getTreeWidgetItem(U2OpStatus &os, const QString &itemName, bool failOnNull = true);
-    static QTreeWidget* getTreeWidget(U2OpStatus &os);
-    static void moveToOpenedView(U2OpStatus& os, const QString &itemName);
-    static QPoint getTreeViewItemPosition(U2OpStatus &os, const QString &itemName);
-    static void moveTo(U2OpStatus &os,const QString &itemName);
-    static int getTopLevelTasksCount(U2OpStatus &os);
-    static bool checkTask(U2OpStatus& os, const QString &itemName);
-    static int countTasks(U2OpStatus& os, const QString &itemName);
+    static void waitTaskFinished(HI::GUITestOpStatus &os, long timeout=180000);
+    static void click(HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton b = Qt::LeftButton);
+    static void openView(HI::GUITestOpStatus& os);
+    static void toggleView(HI::GUITestOpStatus& os);
+    static void cancelTask(HI::GUITestOpStatus& os, const QString &itemName);
+    static QTreeWidgetItem* getTreeWidgetItem(HI::GUITestOpStatus &os, const QString &itemName, bool failOnNull = true);
+    static QTreeWidget* getTreeWidget(HI::GUITestOpStatus &os);
+    static void moveToOpenedView(HI::GUITestOpStatus& os, const QString &itemName);
+    static QPoint getTreeViewItemPosition(HI::GUITestOpStatus &os, const QString &itemName);
+    static void moveTo(HI::GUITestOpStatus &os,const QString &itemName);
+    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 const QString widgetName;
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsWizard.cpp b/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
index 755c15e..7e533fb 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
@@ -26,13 +26,13 @@
 #include <QToolButton>
 #include <QWizard>
 
-#include "api/GTComboBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsWizard.h"
 
@@ -53,7 +53,7 @@ const QMap<QString, GTUtilsWizard::WizardButton> GTUtilsWizard::buttonMap = GTUt
 #define GT_CLASS_NAME "GTUtilsWizard"
 
 #define GT_METHOD_NAME "setInputFiles"
-void GTUtilsWizard::setInputFiles(U2OpStatus &os, QList<QStringList> inputFiles){
+void GTUtilsWizard::setInputFiles(HI::GUITestOpStatus &os, QList<QStringList> inputFiles){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "wizard not found");
     int i = 0;
@@ -80,7 +80,7 @@ void GTUtilsWizard::setInputFiles(U2OpStatus &os, QList<QStringList> inputFiles)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setAllParameters"
-void GTUtilsWizard::setAllParameters(U2OpStatus &os, QMap<QString, QVariant> map){
+void GTUtilsWizard::setAllParameters(HI::GUITestOpStatus &os, QMap<QString, QVariant> map){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
     QWizard* wizard = qobject_cast<QWizard*>(dialog);
@@ -119,7 +119,7 @@ void GTUtilsWizard::setAllParameters(U2OpStatus &os, QMap<QString, QVariant> map
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setParameter"
-void GTUtilsWizard::setParameter(U2OpStatus &os, QString parName, QVariant parValue){
+void GTUtilsWizard::setParameter(HI::GUITestOpStatus &os, QString parName, QVariant parValue){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
     QWizard* wizard = qobject_cast<QWizard*>(dialog);
@@ -142,7 +142,7 @@ void GTUtilsWizard::setParameter(U2OpStatus &os, QString parName, QVariant parVa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setParameter"
-QVariant GTUtilsWizard::getParameter(U2OpStatus &os, QString parName){
+QVariant GTUtilsWizard::getParameter(HI::GUITestOpStatus &os, QString parName){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", QVariant());
     QWizard* wizard = qobject_cast<QWizard*>(dialog);
@@ -177,7 +177,7 @@ QVariant GTUtilsWizard::getParameter(U2OpStatus &os, QString parName){
 
 
 #define GT_METHOD_NAME "setValue"
-void GTUtilsWizard::setValue(U2OpStatus &os, QWidget *w, QVariant value){
+void GTUtilsWizard::setValue(HI::GUITestOpStatus &os, QWidget *w, QVariant value){
     QComboBox* combo = qobject_cast<QComboBox*>(w);
     if(combo != NULL){
         GTComboBox::setIndexWithText(os, combo, value.toString());
@@ -209,7 +209,7 @@ void GTUtilsWizard::setValue(U2OpStatus &os, QWidget *w, QVariant value){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickButton"
-void GTUtilsWizard::clickButton(U2OpStatus &os, WizardButton button){
+void GTUtilsWizard::clickButton(HI::GUITestOpStatus &os, WizardButton button){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog!=NULL, "activeModalWidget is NULL");
 
@@ -221,7 +221,7 @@ void GTUtilsWizard::clickButton(U2OpStatus &os, WizardButton button){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPageTitle"
-QString GTUtilsWizard::getPageTitle(U2OpStatus &os){
+QString GTUtilsWizard::getPageTitle(HI::GUITestOpStatus &os){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog!=NULL, "activeModalWidget is NULL", QString());
     QWizard* wizard = qobject_cast<QWizard*>(dialog);
diff --git a/src/plugins/GUITestBase/src/GTUtilsWizard.h b/src/plugins/GUITestBase/src/GTUtilsWizard.h
index acfd1e1..34a51ce 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWizard.h
+++ b/src/plugins/GUITestBase/src/GTUtilsWizard.h
@@ -23,20 +23,21 @@
 #ifndef GTUTILSWIZARD_H
 #define GTUTILSWIZARD_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 //class QVariant;
 namespace U2 {
+using namespace HI;
 
 class GTUtilsWizard{
 public:
     enum WizardButton{Next, Back, Apply, Run, Cancel, Defaults, Setup};
-    static void setInputFiles(U2OpStatus &os, QList<QStringList >  list);
-    static void setAllParameters(U2OpStatus &os, QMap<QString, QVariant> map);
-    static void setParameter(U2OpStatus &os, QString parName, QVariant parValue);
-    static QVariant getParameter(U2OpStatus &os, QString parName);
-    static void setValue(U2OpStatus &os, QWidget* w, QVariant value);
-    static void clickButton(U2OpStatus &os, WizardButton button);
-    static QString getPageTitle(U2OpStatus &os);
+    static void setInputFiles(HI::GUITestOpStatus &os, QList<QStringList >  list);
+    static void setAllParameters(HI::GUITestOpStatus &os, QMap<QString, QVariant> map);
+    static void setParameter(HI::GUITestOpStatus &os, QString parName, QVariant parValue);
+    static QVariant getParameter(HI::GUITestOpStatus &os, QString parName);
+    static void setValue(HI::GUITestOpStatus &os, QWidget* w, QVariant value);
+    static void clickButton(HI::GUITestOpStatus &os, WizardButton button);
+    static QString getPageTitle(HI::GUITestOpStatus &os);
 private:
     static const QMap<QString, WizardButton> buttonMap;
     static QMap<QString, WizardButton> initButtonMap();
@@ -44,8 +45,8 @@ private:
 
 class TuxedoWizardFiller: public Filler{
 public:
-    TuxedoWizardFiller(U2OpStatus &os):Filler(os, "Tuxedo Wizard"){}
-    TuxedoWizardFiller(U2OpStatus &os, CustomScenario* c):Filler(os, "Tuxedo Wizard", c){}
+    TuxedoWizardFiller(HI::GUITestOpStatus &os):Filler(os, "Tuxedo Wizard"){}
+    TuxedoWizardFiller(HI::GUITestOpStatus &os, CustomScenario* c):Filler(os, "Tuxedo Wizard", c){}
     void commonScenario();
 };
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
index 3d6dcbe..a75647f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
@@ -38,48 +38,46 @@
 #include "../../workflow_designer/src/WorkflowViewItems.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTFileDialog.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <base_dialogs/GTFileDialog.h>
 #include "api/GTGraphicsItem.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
-
-#include <U2Gui/ToolsMenu.h>
+#include "utils/GTThread.h"
 
 namespace U2 {
+using namespace HI;
 
 const int GTUtilsWorkflowDesigner::verticalShift = 35;
 #define GT_CLASS_NAME "GTUtilsWorkflowDesigner"
 
 #define GT_METHOD_NAME "openWorkflowDesigner"
-void GTUtilsWorkflowDesigner::openWorkflowDesigner(U2OpStatus &os){
+void GTUtilsWorkflowDesigner::openWorkflowDesigner(HI::GUITestOpStatus &os){
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
-
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
-    GTGlobals::sleep(500);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
+    GTUtilsMdi::waitWindowOpened(os, "Workflow Designer");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "currentTab"
-GTUtilsWorkflowDesigner::tab GTUtilsWorkflowDesigner::currentTab(U2OpStatus &os) {
+GTUtilsWorkflowDesigner::tab GTUtilsWorkflowDesigner::currentTab(HI::GUITestOpStatus &os) {
     QTabWidget *tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os, "tabs"));
     GT_CHECK_RESULT(NULL != tabs, "tabs widget is not found", algoriths);
     return tab(tabs->currentIndex());
@@ -87,7 +85,7 @@ GTUtilsWorkflowDesigner::tab GTUtilsWorkflowDesigner::currentTab(U2OpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setCurrentTab"
-void GTUtilsWorkflowDesigner::setCurrentTab(U2OpStatus &os, tab t) {
+void GTUtilsWorkflowDesigner::setCurrentTab(HI::GUITestOpStatus &os, tab t) {
     QTabWidget *tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os, "tabs"));
     GT_CHECK(NULL != tabs, "tabs widget is not found");
     GTTabWidget::setCurrentIndex(os, tabs, int(t));
@@ -95,7 +93,7 @@ void GTUtilsWorkflowDesigner::setCurrentTab(U2OpStatus &os, tab t) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "loadWorkflow"
-void GTUtilsWorkflowDesigner::loadWorkflow(U2OpStatus &os, const QString &fileUrl) {
+void GTUtilsWorkflowDesigner::loadWorkflow(HI::GUITestOpStatus &os, const QString &fileUrl) {
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, fileUrl));
     QToolBar *wdToolbar = GTToolbar::getToolbar(os, "mwtoolbar_activemdi");
     GT_CHECK(wdToolbar, "Toolbar is not found");
@@ -107,26 +105,26 @@ void GTUtilsWorkflowDesigner::loadWorkflow(U2OpStatus &os, const QString &fileUr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "saveWorkflow"
-void GTUtilsWorkflowDesigner::saveWorkflow(U2OpStatus &os) {
+void GTUtilsWorkflowDesigner::saveWorkflow(HI::GUITestOpStatus &os) {
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Save workflow");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "saveWorkflowAs"
-void GTUtilsWorkflowDesigner::saveWorkflowAs(U2OpStatus &os, const QString &fileUrl, const QString &workflowName) {
+void GTUtilsWorkflowDesigner::saveWorkflowAs(HI::GUITestOpStatus &os, const QString &fileUrl, const QString &workflowName) {
     GTUtilsDialog::waitForDialog(os, new WorkflowMetaDialogFiller(os, fileUrl, workflowName));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Save workflow as");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "runWorkflow"
-void GTUtilsWorkflowDesigner::runWorkflow(U2OpStatus &os) {
+void GTUtilsWorkflowDesigner::runWorkflow(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTAction::button(os, "Run workflow"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "returnToWorkflow"
-void GTUtilsWorkflowDesigner::returnToWorkflow(U2OpStatus &os) {
+void GTUtilsWorkflowDesigner::returnToWorkflow(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTAction::button(os, GTAction::findActionByText(os, "To Workflow Designer")));
 }
 #undef GT_METHOD_NAME
@@ -142,7 +140,7 @@ bool compare(QString s1, QString s2, bool exactMatch){
 }
 
 #define GT_METHOD_NAME "findTreeItem"
-QTreeWidgetItem* GTUtilsWorkflowDesigner::findTreeItem(U2OpStatus &os,QString itemName, tab t, bool exactMatch, bool failIfNULL){
+QTreeWidgetItem* GTUtilsWorkflowDesigner::findTreeItem(HI::GUITestOpStatus &os,QString itemName, tab t, bool exactMatch, bool failIfNULL){
 
     QTreeWidgetItem* foundItem=NULL;
     QTreeWidget *w;
@@ -188,7 +186,7 @@ QTreeWidgetItem* GTUtilsWorkflowDesigner::findTreeItem(U2OpStatus &os,QString it
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getVisibleSamples"
-QList<QTreeWidgetItem*> GTUtilsWorkflowDesigner::getVisibleSamples(U2OpStatus &os){
+QList<QTreeWidgetItem*> GTUtilsWorkflowDesigner::getVisibleSamples(HI::GUITestOpStatus &os){
     QTreeWidget* w=qobject_cast<QTreeWidget*>(GTWidget::findWidget(os,"samples"));
     GT_CHECK_RESULT(w!=NULL,"WorkflowPaletteElements is null", QList<QTreeWidgetItem*>());
 
@@ -212,7 +210,7 @@ QList<QTreeWidgetItem*> GTUtilsWorkflowDesigner::getVisibleSamples(U2OpStatus &o
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addAlgorithm"
-void GTUtilsWorkflowDesigner::addAlgorithm(U2OpStatus &os, QString algName, bool exactMatch){
+void GTUtilsWorkflowDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch){
     expandTabs(os);
     QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os,"tabs"));
     GT_CHECK(tabs!=NULL, "tabs widget not found");
@@ -229,12 +227,12 @@ void GTUtilsWorkflowDesigner::addAlgorithm(U2OpStatus &os, QString algName, bool
     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);
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addElement"
-WorkflowProcessItem * GTUtilsWorkflowDesigner::addElement(U2OpStatus &os, const QString &algName, bool exactMatch) {
+WorkflowProcessItem * GTUtilsWorkflowDesigner::addElement(HI::GUITestOpStatus &os, const QString &algName, bool exactMatch) {
     addAlgorithm(os, algName, exactMatch);
     CHECK_OP(os, NULL);
     return getWorker(os, algName);
@@ -242,58 +240,47 @@ WorkflowProcessItem * GTUtilsWorkflowDesigner::addElement(U2OpStatus &os, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectAlgorithm"
-void GTUtilsWorkflowDesigner::selectAlgorithm(U2OpStatus &os, QTreeWidgetItem* algorithm){
+void GTUtilsWorkflowDesigner::selectAlgorithm(HI::GUITestOpStatus &os, QTreeWidgetItem* algorithm){
     GT_CHECK(algorithm!=NULL, "algorithm is NULL");
     GTGlobals::sleep(500);
 
-    QTreeWidget *w=qobject_cast<QTreeWidget*>(GTWidget::findWidget(os,"WorkflowPaletteElements"));
-    QList<QTreeWidgetItem*> childrenList = w->findItems("",Qt::MatchContains);
-    foreach(QTreeWidgetItem* child,childrenList){
-        child->setExpanded(false);
-    }
-
-    algorithm->parent()->setExpanded(true);
     algorithm->treeWidget()->scrollToItem(algorithm, QAbstractItemView::PositionAtCenter);
     GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,algorithm));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addSample"
-void GTUtilsWorkflowDesigner::addSample(U2OpStatus &os, QString sampName){
+void GTUtilsWorkflowDesigner::addSample(HI::GUITestOpStatus &os, const QString &sampName) {
     expandTabs(os);
-    QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os,"tabs"));
-    GT_CHECK(tabs!=NULL, "tabs widget not found");
+    QTabWidget *tabs = qobject_cast<QTabWidget *>(GTWidget::findWidget(os, "tabs"));
+    GT_CHECK(tabs != NULL, "tabs widget not found");
 
-    GTTabWidget::setCurrentIndex(os,tabs,1);
+    GTTabWidget::setCurrentIndex(os, tabs, 1);
 
-    QTreeWidgetItem *samp = findTreeItem(os, sampName,samples);
+    QTreeWidgetItem *samp = findTreeItem(os, sampName, samples);
     GTGlobals::sleep(100);
-    GT_CHECK(samp!=NULL,"sample is NULL");
+    GT_CHECK(samp != NULL,"sample is NULL");
 
-    selectSample(os,samp);
+    selectSample(os, samp);
+    GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
 
-
 #define GT_METHOD_NAME "selectSample"
-void GTUtilsWorkflowDesigner::selectSample(U2OpStatus &os, QTreeWidgetItem* sample){
-    GT_CHECK(sample!=NULL, "sample is NULL");
+void GTUtilsWorkflowDesigner::selectSample(HI::GUITestOpStatus &os, QTreeWidgetItem *sample) {
+    GT_CHECK(sample != NULL, "sample is NULL");
     GTGlobals::sleep(500);
 
-    QTreeWidget *w=qobject_cast<QTreeWidget*>(GTWidget::findWidget(os,"samples"));
-    QList<QTreeWidgetItem*> childrenList = w->findItems("",Qt::MatchContains);
-    foreach(QTreeWidgetItem* child,childrenList){
-        child->setExpanded(false);
-    }
-
-    sample->parent()->setExpanded(true);
-    GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,sample));
+    QTreeWidget *paletteTree = qobject_cast<QTreeWidget *>(GTWidget::findWidget(os,"samples"));
+    paletteTree->scrollToItem(sample);
+    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, sample));
     GTMouseDriver::doubleClick(os);
+    GTThread::waitForMainThread(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "expandTabs"
-void GTUtilsWorkflowDesigner::expandTabs(U2OpStatus &os){
+void GTUtilsWorkflowDesigner::expandTabs(HI::GUITestOpStatus &os){
     QSplitter* splitter = qobject_cast<QSplitter*>(GTWidget::findWidget(os,"splitter"));
     GT_CHECK(splitter, "splitter not found");
     QList<int> s;
@@ -314,14 +301,14 @@ void GTUtilsWorkflowDesigner::expandTabs(U2OpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickOnPalette"
-void GTUtilsWorkflowDesigner::clickOnPalette(U2OpStatus &os, const QString &itemName, Qt::MouseButton mouseButton) {
+void GTUtilsWorkflowDesigner::clickOnPalette(HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton mouseButton) {
     selectAlgorithm(os, findTreeItem(os, itemName, algoriths, true));
     GTMouseDriver::click(os, mouseButton);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPaletteGroup"
-QTreeWidgetItem * GTUtilsWorkflowDesigner::getPaletteGroup(U2OpStatus &os, const QString &groupName) {
+QTreeWidgetItem * GTUtilsWorkflowDesigner::getPaletteGroup(HI::GUITestOpStatus &os, const QString &groupName) {
 
     QTreeWidget *tree = getCurrentTabTreeWidget(os);
     GT_CHECK_RESULT(NULL != tree, "WorkflowPaletteElements is NULL", NULL);
@@ -335,7 +322,7 @@ QTreeWidgetItem * GTUtilsWorkflowDesigner::getPaletteGroup(U2OpStatus &os, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPaletteGroups"
-QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroups(U2OpStatus &os) {
+QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroups(HI::GUITestOpStatus &os) {
     QList<QTreeWidgetItem *> groupItems;
 
     QTreeWidget *tree = getCurrentTabTreeWidget(os);
@@ -350,7 +337,7 @@ QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroups(U2OpStatus &o
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPaletteGroupNames"
-QStringList GTUtilsWorkflowDesigner::getPaletteGroupNames(U2OpStatus &os) {
+QStringList GTUtilsWorkflowDesigner::getPaletteGroupNames(HI::GUITestOpStatus &os) {
     QStringList groupNames;
     const QList<QTreeWidgetItem *> groupItems = getPaletteGroups(os);
     foreach (QTreeWidgetItem *groupItem, groupItems) {
@@ -361,7 +348,7 @@ QStringList GTUtilsWorkflowDesigner::getPaletteGroupNames(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPaletteGroupEntries"
-QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroupEntries(U2OpStatus &os, QTreeWidgetItem *groupItem) {
+QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroupEntries(HI::GUITestOpStatus &os, QTreeWidgetItem *groupItem) {
     QList<QTreeWidgetItem *> items;
 
     GT_CHECK_RESULT(NULL != groupItem, "Group item is NULL", items);
@@ -378,49 +365,49 @@ QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroupEntries(U2OpSta
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPaletteGroupEntries"
-QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroupEntries(U2OpStatus &os, const QString &groupName) {
+QList<QTreeWidgetItem *> GTUtilsWorkflowDesigner::getPaletteGroupEntries(HI::GUITestOpStatus &os, const QString &groupName) {
     return getPaletteGroupEntries(os, getPaletteGroup(os, groupName));
 }
 #undef GT_METHOD_NAME
 
-QPoint GTUtilsWorkflowDesigner::getItemCenter(U2OpStatus &os,QString itemName){
+QPoint GTUtilsWorkflowDesigner::getItemCenter(HI::GUITestOpStatus &os,QString itemName){
     QRect r = getItemRect(os, itemName);
     QPoint p = r.center();
     return p;
 }
 
 #define GT_METHOD_NAME "removeItem"
-void GTUtilsWorkflowDesigner::removeItem(U2OpStatus &os, QString itemName) {
+void GTUtilsWorkflowDesigner::removeItem(HI::GUITestOpStatus &os, QString itemName) {
     click(os, itemName);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
 }
 #undef GT_METHOD_NAME
 
-int GTUtilsWorkflowDesigner::getItemLeft(U2OpStatus &os, QString itemName){
+int GTUtilsWorkflowDesigner::getItemLeft(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.left();
     return i;
 }
 
-int GTUtilsWorkflowDesigner::getItemRight(U2OpStatus &os, QString itemName){
+int GTUtilsWorkflowDesigner::getItemRight(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.right();
     return i;
 }
 
-int GTUtilsWorkflowDesigner::getItemTop(U2OpStatus &os, QString itemName){
+int GTUtilsWorkflowDesigner::getItemTop(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.top();
     return i;
 }
 
-int GTUtilsWorkflowDesigner::getItemBottom(U2OpStatus &os, QString itemName){
+int GTUtilsWorkflowDesigner::getItemBottom(HI::GUITestOpStatus &os, QString itemName){
     QRect r = getItemRect(os, itemName);
     int i = r.bottom();
     return i;
 }
 #define GT_METHOD_NAME "click"
-void GTUtilsWorkflowDesigner::click(U2OpStatus &os, QString itemName, QPoint p, Qt::MouseButton button){
+void GTUtilsWorkflowDesigner::click(HI::GUITestOpStatus &os, QString itemName, QPoint p, Qt::MouseButton button){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK(sceneView!=NULL, "scene view is NULL");
     sceneView->ensureVisible(getWorker(os, itemName));
@@ -434,7 +421,7 @@ void GTUtilsWorkflowDesigner::click(U2OpStatus &os, QString itemName, QPoint p,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTUtilsWorkflowDesigner::click(U2OpStatus &os, QGraphicsItem* item, QPoint p, Qt::MouseButton button){
+void GTUtilsWorkflowDesigner::click(HI::GUITestOpStatus &os, QGraphicsItem* item, QPoint p, Qt::MouseButton button){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK(sceneView!=NULL, "scene view is NULL");
     sceneView->ensureVisible(item);
@@ -449,7 +436,7 @@ void GTUtilsWorkflowDesigner::click(U2OpStatus &os, QGraphicsItem* item, QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getWorker"
-WorkflowProcessItem* GTUtilsWorkflowDesigner::getWorker(U2OpStatus &os,QString itemName,const GTGlobals::FindOptions &options){
+WorkflowProcessItem* GTUtilsWorkflowDesigner::getWorker(HI::GUITestOpStatus &os,QString itemName,const GTGlobals::FindOptions &options){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK_RESULT(sceneView, "sceneView not found", NULL);
     QList<QGraphicsItem *> items = sceneView->items();
@@ -473,14 +460,14 @@ WorkflowProcessItem* GTUtilsWorkflowDesigner::getWorker(U2OpStatus &os,QString i
             }
         }
     }
-    GT_CHECK_RESULT(options.failIfNull == false, "Item " + itemName + " not found at scene", NULL);
+    GT_CHECK_RESULT(options.failIfNull == false, "Item '" + itemName + "' not found at scene", NULL);
 
     return NULL;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getWorkerText"
-QString GTUtilsWorkflowDesigner::getWorkerText(U2OpStatus &os, QString itemName, const GTGlobals::FindOptions &options) {
+QString GTUtilsWorkflowDesigner::getWorkerText(HI::GUITestOpStatus &os, QString itemName, const GTGlobals::FindOptions &options) {
     WorkflowProcessItem *worker = getWorker(os, itemName, options);
     foreach (QGraphicsItem *child, worker->childItems()) {
         foreach (QGraphicsItem *subchild, child->childItems()) {
@@ -495,7 +482,7 @@ QString GTUtilsWorkflowDesigner::getWorkerText(U2OpStatus &os, QString itemName,
 }
 #undef GT_METHOD_NAME
 
-void GTUtilsWorkflowDesigner::clickLink(U2OpStatus &os, QString itemName, Qt::MouseButton button, int step){
+void GTUtilsWorkflowDesigner::clickLink(HI::GUITestOpStatus &os, QString itemName, Qt::MouseButton button, int step){
     WorkflowProcessItem* worker = getWorker(os, itemName);
 
     int left = GTUtilsWorkflowDesigner::getItemLeft(os, itemName);
@@ -514,13 +501,13 @@ void GTUtilsWorkflowDesigner::clickLink(U2OpStatus &os, QString itemName, Qt::Mo
 }
 
 #define GT_METHOD_NAME "isWorkerExtended"
-bool GTUtilsWorkflowDesigner::isWorkerExtended(U2OpStatus &os, const QString &itemName) {
+bool GTUtilsWorkflowDesigner::isWorkerExtended(HI::GUITestOpStatus &os, const QString &itemName) {
     return "ext" == getWorker(os,itemName)->getStyle();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPortById"
-WorkflowPortItem* GTUtilsWorkflowDesigner::getPortById(U2OpStatus &os, WorkflowProcessItem *worker, QString id){
+WorkflowPortItem* GTUtilsWorkflowDesigner::getPortById(HI::GUITestOpStatus &os, WorkflowProcessItem *worker, QString id){
     QList<WorkflowPortItem*> list = getPorts(os, worker);
     foreach(WorkflowPortItem* p, list){
         if(p&&p->getPort()->getId()==id){
@@ -532,7 +519,7 @@ WorkflowPortItem* GTUtilsWorkflowDesigner::getPortById(U2OpStatus &os, WorkflowP
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getPorts"
-QList<WorkflowPortItem*> GTUtilsWorkflowDesigner::getPorts(U2OpStatus &os, WorkflowProcessItem *worker){
+QList<WorkflowPortItem*> GTUtilsWorkflowDesigner::getPorts(HI::GUITestOpStatus &os, WorkflowProcessItem *worker){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK_RESULT(sceneView,"sceneView not found", QList<WorkflowPortItem*>())
     return worker->getPortItems();
@@ -540,7 +527,7 @@ QList<WorkflowPortItem*> GTUtilsWorkflowDesigner::getPorts(U2OpStatus &os, Workf
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getItemRect"
-QRect GTUtilsWorkflowDesigner::getItemRect(U2OpStatus &os,QString itemName){
+QRect GTUtilsWorkflowDesigner::getItemRect(HI::GUITestOpStatus &os,QString itemName){
 //TODO: support finding items when there are several similar workers in scheme
     WorkflowProcessItem* w = getWorker(os, itemName);
     QRect result = GTGraphicsItem::getGraphicsItemRect(os, w);
@@ -550,7 +537,7 @@ QRect GTUtilsWorkflowDesigner::getItemRect(U2OpStatus &os,QString itemName){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getCurrentTabTreeWidget"
-QTreeWidget *GTUtilsWorkflowDesigner::getCurrentTabTreeWidget(U2OpStatus &os) {
+QTreeWidget *GTUtilsWorkflowDesigner::getCurrentTabTreeWidget(HI::GUITestOpStatus &os) {
     switch (currentTab(os)) {
     case algoriths:
         return GTWidget::findExactWidget<QTreeWidget *>(os, "WorkflowPaletteElements");
@@ -564,7 +551,7 @@ QTreeWidget *GTUtilsWorkflowDesigner::getCurrentTabTreeWidget(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleDebugMode"
-void GTUtilsWorkflowDesigner::toggleDebugMode(U2OpStatus &os, bool enable) {
+void GTUtilsWorkflowDesigner::toggleDebugMode(HI::GUITestOpStatus &os, bool enable) {
     class DebugModeToggleScenario : public CustomScenario {
     public:
         DebugModeToggleScenario(bool enable) :
@@ -572,7 +559,7 @@ void GTUtilsWorkflowDesigner::toggleDebugMode(U2OpStatus &os, bool enable) {
         {
         }
 
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             GT_CHECK(dialog, "activeModalWidget is NULL");
 
@@ -587,31 +574,31 @@ void GTUtilsWorkflowDesigner::toggleDebugMode(U2OpStatus &os, bool enable) {
     };
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new DebugModeToggleScenario(enable)));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_SETTINGS), QStringList() << "action__settings");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleBreakpointManager"
-void GTUtilsWorkflowDesigner::toggleBreakpointManager(U2OpStatus &os) {
+void GTUtilsWorkflowDesigner::toggleBreakpointManager(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Show or hide breakpoint manager"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setBreakpoint"
-void GTUtilsWorkflowDesigner::setBreakpoint(U2OpStatus &os, const QString &itemName) {
+void GTUtilsWorkflowDesigner::setBreakpoint(HI::GUITestOpStatus &os, const QString &itemName) {
     click(os, itemName);
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Break at element"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getBreakpointList"
-QStringList GTUtilsWorkflowDesigner::getBreakpointList(U2OpStatus &os) {
+QStringList GTUtilsWorkflowDesigner::getBreakpointList(HI::GUITestOpStatus &os) {
     return GTTreeWidget::getItemNames(os, GTWidget::findExactWidget<QTreeWidget *>(os, "breakpoints list"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAllConnectionArrows"
-QList<WorkflowBusItem*> GTUtilsWorkflowDesigner::getAllConnectionArrows(U2OpStatus &os){
+QList<WorkflowBusItem*> GTUtilsWorkflowDesigner::getAllConnectionArrows(HI::GUITestOpStatus &os){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK_RESULT(sceneView,"sceneView not found", QList<WorkflowBusItem*>());
 
@@ -629,7 +616,7 @@ QList<WorkflowBusItem*> GTUtilsWorkflowDesigner::getAllConnectionArrows(U2OpStat
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeCmdlineWorkerFromPalette"
-void GTUtilsWorkflowDesigner::removeCmdlineWorkerFromPalette(U2OpStatus &os, const QString &workerName) {
+void GTUtilsWorkflowDesigner::removeCmdlineWorkerFromPalette(HI::GUITestOpStatus &os, const QString &workerName) {
     QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os, "tabs"));
     GT_CHECK(tabs != NULL, "tabs widget not found");
 
@@ -663,7 +650,7 @@ void GTUtilsWorkflowDesigner::removeCmdlineWorkerFromPalette(U2OpStatus &os, con
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "connect"
-void GTUtilsWorkflowDesigner::connect(U2OpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
+void GTUtilsWorkflowDesigner::connect(HI::GUITestOpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(from->scene()->views().at(0));
     GT_CHECK(sceneView,"sceneView not found")
     QList<WorkflowPortItem*> fromList = from->getPortItems();
@@ -687,7 +674,7 @@ void GTUtilsWorkflowDesigner::connect(U2OpStatus &os, WorkflowProcessItem * from
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "disconnect"
-void GTUtilsWorkflowDesigner::disconect(U2OpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
+void GTUtilsWorkflowDesigner::disconect(HI::GUITestOpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(from->scene()->views().at(0));
     GT_CHECK(sceneView,"sceneView not found");
 
@@ -701,7 +688,7 @@ void GTUtilsWorkflowDesigner::disconect(U2OpStatus &os, WorkflowProcessItem * fr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getConnectionArrow"
-WorkflowBusItem *GTUtilsWorkflowDesigner::getConnectionArrow(U2OpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
+WorkflowBusItem *GTUtilsWorkflowDesigner::getConnectionArrow(HI::GUITestOpStatus &os, WorkflowProcessItem * from , WorkflowProcessItem * to){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(from->scene()->views().at(0));
     GT_CHECK_RESULT(sceneView,"sceneView not found", NULL)
     QList<WorkflowPortItem*> fromList = from->getPortItems();
@@ -724,7 +711,7 @@ WorkflowBusItem *GTUtilsWorkflowDesigner::getConnectionArrow(U2OpStatus &os, Wor
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getArrowHint"
-QGraphicsTextItem* GTUtilsWorkflowDesigner::getArrowHint(U2OpStatus &os, WorkflowBusItem *arrow){
+QGraphicsTextItem* GTUtilsWorkflowDesigner::getArrowHint(HI::GUITestOpStatus &os, WorkflowBusItem *arrow){
     GT_CHECK_RESULT(arrow != NULL, "arrow item is NULL", NULL);
 
     foreach (QGraphicsItem* item, arrow->childItems()) {
@@ -738,7 +725,7 @@ QGraphicsTextItem* GTUtilsWorkflowDesigner::getArrowHint(U2OpStatus &os, Workflo
 }
 #undef GT_METHOD_NAME
 
-QList<WorkflowProcessItem*> GTUtilsWorkflowDesigner::getWorkers(U2OpStatus &os){
+QList<WorkflowProcessItem*> GTUtilsWorkflowDesigner::getWorkers(HI::GUITestOpStatus &os){
     QList<WorkflowProcessItem*> result;
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     QList<QGraphicsItem *> items = sceneView->items();
@@ -751,7 +738,7 @@ QList<WorkflowProcessItem*> GTUtilsWorkflowDesigner::getWorkers(U2OpStatus &os){
 }
 
 #define GT_METHOD_NAME "setDatasetInputFile"
-void GTUtilsWorkflowDesigner::setDatasetInputFile(U2OpStatus &os, QString filePath, QString fileName){
+void GTUtilsWorkflowDesigner::setDatasetInputFile(HI::GUITestOpStatus &os, QString filePath, QString fileName){
     GTGlobals::sleep(200);
     QWidget* DatasetWidget = GTWidget::findWidget(os, "DatasetWidget");
     GT_CHECK(DatasetWidget, "DatasetWidget not found");
@@ -763,11 +750,12 @@ void GTUtilsWorkflowDesigner::setDatasetInputFile(U2OpStatus &os, QString filePa
     GTUtilsDialog::waitForDialog(os, ob);
 
     GTWidget::click(os, addFileButton);
+    GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addInputFile"
-void GTUtilsWorkflowDesigner::addInputFile(U2OpStatus &os, const QString &elementName, const QString &url) {
+void GTUtilsWorkflowDesigner::addInputFile(HI::GUITestOpStatus &os, const QString &elementName, const QString &url) {
     click(os, elementName);
     CHECK_OP(os, );
     QFileInfo info(url);
@@ -776,7 +764,7 @@ void GTUtilsWorkflowDesigner::addInputFile(U2OpStatus &os, const QString &elemen
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "createDataset"
-void GTUtilsWorkflowDesigner::createDataset(U2OpStatus &os, QString datasetName){
+void GTUtilsWorkflowDesigner::createDataset(HI::GUITestOpStatus &os, QString datasetName){
     QWidget* DatasetWidget = GTWidget::findWidget(os, "DatasetWidget");
     GT_CHECK(DatasetWidget, "DatasetWidget not found");
 
@@ -790,7 +778,7 @@ void GTUtilsWorkflowDesigner::createDataset(U2OpStatus &os, QString datasetName)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setDatasetInputFolder"
-void GTUtilsWorkflowDesigner::setDatasetInputFolder(U2OpStatus &os, QString filePath){
+void GTUtilsWorkflowDesigner::setDatasetInputFolder(HI::GUITestOpStatus &os, QString filePath){
     QWidget* DatasetWidget = GTWidget::findWidget(os, "DatasetWidget");
     GT_CHECK(DatasetWidget, "DatasetWidget not found");
 
@@ -805,7 +793,7 @@ void GTUtilsWorkflowDesigner::setDatasetInputFolder(U2OpStatus &os, QString file
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setParameter"
-void GTUtilsWorkflowDesigner::setParameter(U2OpStatus &os, QString parameter, QVariant value, valueType type, GTGlobals::UseMethod method){
+void GTUtilsWorkflowDesigner::setParameter(HI::GUITestOpStatus &os, QString parameter, QVariant value, valueType type, GTGlobals::UseMethod method){
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     CHECK_SET_ERR(table,"tableView not found");
 
@@ -833,7 +821,7 @@ void GTUtilsWorkflowDesigner::setParameter(U2OpStatus &os, QString parameter, QV
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setTableValue"
-void GTUtilsWorkflowDesigner::setTableValue(U2OpStatus &os,  QString parameter, QVariant value, valueType type, QTableWidget *table, GTGlobals::UseMethod method){
+void GTUtilsWorkflowDesigner::setTableValue(HI::GUITestOpStatus &os,  QString parameter, QVariant value, valueType type, QTableWidget *table, GTGlobals::UseMethod method){
     int row = -1;
     for(int i = 0; i<table->rowCount(); i++){
         QString s = table->item(i,0)->text();
@@ -857,7 +845,7 @@ void GTUtilsWorkflowDesigner::setTableValue(U2OpStatus &os,  QString parameter,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setCellValue"
-void GTUtilsWorkflowDesigner::setCellValue(U2OpStatus &os, QWidget* parent, QVariant value, valueType type, GTGlobals::UseMethod method){
+void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* parent, QVariant value, valueType type, GTGlobals::UseMethod method){
     bool ok = true;
     switch(type){
     case(comboWithFileSelector) : {
@@ -870,12 +858,8 @@ void GTUtilsWorkflowDesigner::setCellValue(U2OpStatus &os, QWidget* parent, QVar
         break;
     }
     case(lineEditWithFileSelector) : {
-        GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, value.toString()));
-        GTWidget::click(os, GTWidget::findButtonByText(os, "...", parent));
-#ifdef Q_OS_WIN
-        //added to fix UGENE-3597
+        GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "mainWidget", parent), value.toString());
         GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
-#endif
         break;
     }
     case(spinValue):{
@@ -934,7 +918,7 @@ void GTUtilsWorkflowDesigner::setCellValue(U2OpStatus &os, QWidget* parent, QVar
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getCellValue"
-QString GTUtilsWorkflowDesigner::getCellValue(U2OpStatus &os, QString parameter, QTableWidget *table){
+QString GTUtilsWorkflowDesigner::getCellValue(HI::GUITestOpStatus &os, QString parameter, QTableWidget *table){
     Q_UNUSED(os);
     int row = -1;
     for(int i = 0; i<table->rowCount(); i++){
@@ -952,7 +936,7 @@ QString GTUtilsWorkflowDesigner::getCellValue(U2OpStatus &os, QString parameter,
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getInputPortsTable"
-QTableWidget* GTUtilsWorkflowDesigner::getInputPortsTable(U2OpStatus &os, int index){
+QTableWidget* GTUtilsWorkflowDesigner::getInputPortsTable(HI::GUITestOpStatus &os, int index){
     QWidget* inputPortBox = GTWidget::findWidget(os, "inputPortBox");
     QList<QTableWidget*> tables= inputPortBox->findChildren<QTableWidget*>();
     foreach (QTableWidget* w, tables) {
@@ -967,7 +951,7 @@ QTableWidget* GTUtilsWorkflowDesigner::getInputPortsTable(U2OpStatus &os, int in
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getAllParameters"
-QStringList GTUtilsWorkflowDesigner::getAllParameters(U2OpStatus &os){
+QStringList GTUtilsWorkflowDesigner::getAllParameters(HI::GUITestOpStatus &os){
     QStringList result;
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     GT_CHECK_RESULT(table,"tableView not found", result);
@@ -994,7 +978,7 @@ namespace {
 
 
 #define GT_METHOD_NAME "getParameter"
-QString GTUtilsWorkflowDesigner::getParameter(U2OpStatus &os, QString parameter, bool exactMatch){
+QString GTUtilsWorkflowDesigner::getParameter(HI::GUITestOpStatus &os, QString parameter, bool exactMatch){
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     GT_CHECK_RESULT(table,"tableView not found", "");
 
@@ -1010,14 +994,32 @@ QString GTUtilsWorkflowDesigner::getParameter(U2OpStatus &os, QString parameter,
         }
     }
     GT_CHECK_RESULT(row != -1, "parameter " + parameter + " not found","");
+    QModelIndex idx = model->index(row, 1);
+
+    QVariant var;
+
+    class Scenario : public CustomScenario {
+    public:
+        Scenario(QAbstractItemModel* _model, QModelIndex _idx, QVariant &_result) :
+            model(_model), idx(_idx), result(_result){}
+        void run(HI::GUITestOpStatus &os) {
+            Q_UNUSED(os);
+            result = model->data(idx);
+            GTGlobals::sleep(100);
+        }
+    private:
+        QAbstractItemModel* model;
+        QModelIndex idx;
+        QVariant &result;
+    };
 
-    QVariant var = model->data(model->index(row,1));
+    GTThread::runInMainThread(os, new Scenario(model, idx, var));
     return var.toString();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isParameterEnabled"
-bool GTUtilsWorkflowDesigner::isParameterEnabled(U2OpStatus &os, QString parameter){
+bool GTUtilsWorkflowDesigner::isParameterEnabled(HI::GUITestOpStatus &os, QString parameter){
     clickParameter(os, parameter);
     QWidget *w = QApplication::widgetAt(GTMouseDriver::getMousePosition());
     QString s =  w->metaObject()->className();
@@ -1028,7 +1030,7 @@ bool GTUtilsWorkflowDesigner::isParameterEnabled(U2OpStatus &os, QString paramet
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isParameterRequired"
-bool GTUtilsWorkflowDesigner::isParameterRequired(U2OpStatus &os, const QString &parameter) {
+bool GTUtilsWorkflowDesigner::isParameterRequired(HI::GUITestOpStatus &os, const QString &parameter) {
     QTableView *table = qobject_cast<QTableView *>(GTWidget::findWidget(os, "table"));
     GT_CHECK_RESULT(table, "tableView not found", false);
 
@@ -1067,7 +1069,7 @@ int getParameterRow(QTableView *table, const QString &parameter) {
 }
 
 #define GT_METHOD_NAME "clickParameter"
-void GTUtilsWorkflowDesigner::clickParameter(U2OpStatus &os, const QString &parameter) {
+void GTUtilsWorkflowDesigner::clickParameter(HI::GUITestOpStatus &os, const QString &parameter) {
     QTableView *table = qobject_cast<QTableView *>(GTWidget::findWidget(os, "table"));
     GT_CHECK_RESULT(table, "tableView not found", );
 
@@ -1084,7 +1086,7 @@ void GTUtilsWorkflowDesigner::clickParameter(U2OpStatus &os, const QString &para
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isParameterVisible"
-bool GTUtilsWorkflowDesigner::isParameterVisible(U2OpStatus &os, const QString &parameter) {
+bool GTUtilsWorkflowDesigner::isParameterVisible(HI::GUITestOpStatus &os, const QString &parameter) {
     QTableView *table = qobject_cast<QTableView *>(GTWidget::findWidget(os, "table"));
     GT_CHECK_RESULT(table, "tableView not found", false);
     return -1 != getParameterRow(table, parameter);
@@ -1092,13 +1094,13 @@ bool GTUtilsWorkflowDesigner::isParameterVisible(U2OpStatus &os, const QString &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getParametersTable"
-QTableView *GTUtilsWorkflowDesigner::getParametersTable(U2OpStatus &os){
+QTableView *GTUtilsWorkflowDesigner::getParametersTable(HI::GUITestOpStatus &os){
     return qobject_cast<QTableView *>(GTWidget::findWidget(os, "table"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setParameterScripting"
-void GTUtilsWorkflowDesigner::setParameterScripting(U2OpStatus &os, QString parameter, QString scriptMode, bool exactMatch){
+void GTUtilsWorkflowDesigner::setParameterScripting(HI::GUITestOpStatus &os, QString parameter, QString scriptMode, bool exactMatch){
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     CHECK_SET_ERR(table,"tableView not found");
 
@@ -1125,7 +1127,7 @@ void GTUtilsWorkflowDesigner::setParameterScripting(U2OpStatus &os, QString para
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkErrorList"
-int GTUtilsWorkflowDesigner::checkErrorList(U2OpStatus &os, QString error){
+int GTUtilsWorkflowDesigner::checkErrorList(HI::GUITestOpStatus &os, QString error){
     QListWidget* w = qobject_cast<QListWidget*>(GTWidget::findWidget(os,"infoList"));
     GT_CHECK_RESULT(w, "ErrorList widget not found", 0);
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
index 9ee8d32..13709f1 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
@@ -22,7 +22,7 @@
 #ifndef GT_UTILS_WORKFLOW_DESIGNER_H
 #define GT_UTILS_WORKFLOW_DESIGNER_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QTreeWidget>
@@ -36,6 +36,7 @@ class QTableView;
 class QTableWidget;
 
 namespace U2 {
+using namespace HI;
 class WorkflowProcessItem;
 class WorkflowPortItem;
 class WorkflowBusItem;
@@ -46,130 +47,130 @@ public:
     enum valueType { spinValue, doubleSpinValue, comboValue, textValue, ComboChecks, comboWithFileSelector, lineEditWithFileSelector };
 
     //returns algoriths or samples
-    static tab currentTab(U2OpStatus &os);
+    static tab currentTab(HI::GUITestOpStatus &os);
 
     //activates the tab t
-    static void setCurrentTab(U2OpStatus &os, tab t);
+    static void setCurrentTab(HI::GUITestOpStatus &os, tab t);
 
     //opens WorkflowDesigner
-    static void openWorkflowDesigner(U2OpStatus &os);
+    static void openWorkflowDesigner(HI::GUITestOpStatus &os);
 
-    static void loadWorkflow(U2OpStatus &os, const QString &fileUrl);
-    static void saveWorkflow(U2OpStatus &os);
-    static void saveWorkflowAs(U2OpStatus &os, const QString &fileUrl, const QString &workflowName);
+    static void loadWorkflow(HI::GUITestOpStatus &os, const QString &fileUrl);
+    static void saveWorkflow(HI::GUITestOpStatus &os);
+    static void saveWorkflowAs(HI::GUITestOpStatus &os, const QString &fileUrl, const QString &workflowName);
 
-    static void runWorkflow(U2OpStatus &os);
-    static void returnToWorkflow(U2OpStatus &os);
+    static void runWorkflow(HI::GUITestOpStatus &os);
+    static void returnToWorkflow(HI::GUITestOpStatus &os);
 
     //returns item from samples or algorithms tab
-    static QTreeWidgetItem* findTreeItem(U2OpStatus &os, QString itemName, tab t, bool exactMatch = false, bool failIfNULL = true);
+    static QTreeWidgetItem* findTreeItem(HI::GUITestOpStatus &os, QString itemName, tab t, bool exactMatch = false, bool failIfNULL = true);
 
     //returns item from samples tab
-    static QTreeWidgetItem* findSamplesTreeItem(U2OpStatus &os, QString itemName);
+    static QTreeWidgetItem* findSamplesTreeItem(HI::GUITestOpStatus &os, QString itemName);
 
     //returns item from samples or algorithms tab
-    static QList<QTreeWidgetItem*> getVisibleSamples(U2OpStatus &os);
+    static QList<QTreeWidgetItem*> getVisibleSamples(HI::GUITestOpStatus &os);
 
     //expands samples/Elements tabwidget if collapsed
-    static void expandTabs(U2OpStatus &os);
+    static void expandTabs(HI::GUITestOpStatus &os);
 
-    static void clickOnPalette(U2OpStatus &os, const QString &itemName, Qt::MouseButton mouseButton = Qt::LeftButton);
+    static void clickOnPalette(HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton mouseButton = Qt::LeftButton);
 
-    static QTreeWidgetItem * getPaletteGroup(U2OpStatus &os, const QString &groupName);
-    static QList<QTreeWidgetItem *> getPaletteGroups(U2OpStatus &os);
-    static QStringList getPaletteGroupNames(U2OpStatus &os);
-    static QList<QTreeWidgetItem *> getPaletteGroupEntries(U2OpStatus &os, QTreeWidgetItem *groupItem);
-    static QList<QTreeWidgetItem *> getPaletteGroupEntries(U2OpStatus &os, const QString &groupName);
+    static QTreeWidgetItem * getPaletteGroup(HI::GUITestOpStatus &os, const QString &groupName);
+    static QList<QTreeWidgetItem *> getPaletteGroups(HI::GUITestOpStatus &os);
+    static QStringList getPaletteGroupNames(HI::GUITestOpStatus &os);
+    static QList<QTreeWidgetItem *> getPaletteGroupEntries(HI::GUITestOpStatus &os, QTreeWidgetItem *groupItem);
+    static QList<QTreeWidgetItem *> getPaletteGroupEntries(HI::GUITestOpStatus &os, const QString &groupName);
 
     //add to scene
-    static void addSample(U2OpStatus &os, QString sampName);
-    static void addAlgorithm(U2OpStatus &os, QString algName, bool exactMatch = false);
-    static WorkflowProcessItem * addElement(U2OpStatus &os, const QString &algName, bool exactMatch = false);
+    static void addSample(HI::GUITestOpStatus &os, const QString &sampName);
+    static void addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch = false);
+    static WorkflowProcessItem * addElement(HI::GUITestOpStatus &os, const QString &algName, bool exactMatch = false);
 
     //returns center of worker on workflow scene in global coordinates
-    static QPoint getItemCenter(U2OpStatus &os,QString itemName);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os,QString itemName);
 
-    static void removeItem(U2OpStatus &os,QString itemName);
+    static void removeItem(HI::GUITestOpStatus &os,QString itemName);
 
-    static void click(U2OpStatus &os, QString itemName,  QPoint p = QPoint(0,0), Qt::MouseButton button = Qt::LeftButton);
-    static void click(U2OpStatus &os, QGraphicsItem *item,  QPoint p = QPoint(0,0), Qt::MouseButton button = Qt::LeftButton);
+    static void click(HI::GUITestOpStatus &os, QString itemName,  QPoint p = QPoint(0,0), Qt::MouseButton button = Qt::LeftButton);
+    static void click(HI::GUITestOpStatus &os, QGraphicsItem *item,  QPoint p = QPoint(0,0), Qt::MouseButton button = Qt::LeftButton);
 
     //returs worker placed on workflow scene which contains item name
-    static WorkflowProcessItem* getWorker(U2OpStatus &os, QString itemName,const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+    static WorkflowProcessItem* getWorker(HI::GUITestOpStatus &os, QString itemName,const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
 
-    static QString getWorkerText(U2OpStatus &os, QString itemName, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
+    static QString getWorkerText(HI::GUITestOpStatus &os, QString itemName, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
 
-    static void clickLink(U2OpStatus &os, QString itemName, Qt::MouseButton button = Qt::LeftButton, int step = 10);
+    static void clickLink(HI::GUITestOpStatus &os, QString itemName, Qt::MouseButton button = Qt::LeftButton, int step = 10);
 
-    static bool isWorkerExtended(U2OpStatus &os, const QString &itemName);
+    static bool isWorkerExtended(HI::GUITestOpStatus &os, const QString &itemName);
 
     //returns WorkflowPortItem of worker which with ID "id"
-    static WorkflowPortItem* getPortById(U2OpStatus &os,WorkflowProcessItem* worker, QString id);
+    static WorkflowPortItem* getPortById(HI::GUITestOpStatus &os,WorkflowProcessItem* worker, QString id);
 
-    static QList<WorkflowPortItem*> getPorts(U2OpStatus &os,WorkflowProcessItem* worker);
+    static QList<WorkflowPortItem*> getPorts(HI::GUITestOpStatus &os,WorkflowProcessItem* worker);
 
     //connects worker "from" with worker "to"
-    static void connect(U2OpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
-    static void disconect(U2OpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
+    static void connect(HI::GUITestOpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
+    static void disconect(HI::GUITestOpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
 
-    static QList<WorkflowBusItem*> getAllConnectionArrows(U2OpStatus &os);
+    static QList<WorkflowBusItem*> getAllConnectionArrows(HI::GUITestOpStatus &os);
 
-    static WorkflowBusItem* getConnectionArrow(U2OpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
-    static QGraphicsTextItem* getArrowHint(U2OpStatus &os, WorkflowBusItem* arrow);
+    static WorkflowBusItem* getConnectionArrow(HI::GUITestOpStatus &os, WorkflowProcessItem* from, WorkflowProcessItem* to);
+    static QGraphicsTextItem* getArrowHint(HI::GUITestOpStatus &os, WorkflowBusItem* arrow);
 
     //returns all workers placed on workflow scene
-    static QList<WorkflowProcessItem*> getWorkers(U2OpStatus &os);
+    static QList<WorkflowProcessItem*> getWorkers(HI::GUITestOpStatus &os);
 
-    static void createDataset(U2OpStatus& os, QString datasetName = "");
+    static void createDataset(HI::GUITestOpStatus& os, QString datasetName = "");
     //sets input file with path "filePath" and name "filename" dataset
     //this method should be called after selecting worker which contains dataset on scene
-    static void setDatasetInputFile(U2OpStatus &os, QString filePath, QString fileName);
+    static void setDatasetInputFile(HI::GUITestOpStatus &os, QString filePath, QString fileName);
 
-    static void addInputFile(U2OpStatus &os, const QString &elementName, const QString &url);
+    static void addInputFile(HI::GUITestOpStatus &os, const QString &elementName, const QString &url);
 
     //sets input folder with path "filePath" to dataset
-    static void setDatasetInputFolder(U2OpStatus &os, QString filePath);
+    static void setDatasetInputFolder(HI::GUITestOpStatus &os, QString filePath);
 
     //sets oneparameter worker parameter
-    static void setParameter(U2OpStatus& os, QString parameter, QVariant value, valueType type, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-    static void setTableValue(U2OpStatus& os, QString parameter, QVariant value, valueType type, QTableWidget* table, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-    static QString getCellValue(U2OpStatus& os, QString parameter, QTableWidget* table);
-    static void setCellValue(U2OpStatus& os, QWidget* parent, QVariant value, valueType type, GTGlobals::UseMethod method);
-    static QStringList getAllParameters(U2OpStatus& os);
+    static void setParameter(HI::GUITestOpStatus& os, QString parameter, QVariant value, valueType type, GTGlobals::UseMethod method = GTGlobals::UseMouse);
+    static void setTableValue(HI::GUITestOpStatus& os, QString parameter, QVariant value, valueType type, QTableWidget* table, GTGlobals::UseMethod method = GTGlobals::UseMouse);
+    static QString getCellValue(HI::GUITestOpStatus& os, QString parameter, QTableWidget* table);
+    static void setCellValue(HI::GUITestOpStatus& os, QWidget* parent, QVariant value, valueType type, GTGlobals::UseMethod method);
+    static QStringList getAllParameters(HI::GUITestOpStatus& os);
 
-    static QTableWidget* getInputPortsTable(U2OpStatus &os, int index);
+    static QTableWidget* getInputPortsTable(HI::GUITestOpStatus &os, int index);
 
     //gets oneparameter worker parameter
-    static QString getParameter(U2OpStatus& os, QString parameter, bool exactMatch = false);
-    static bool isParameterEnabled(U2OpStatus& os, QString parameter);
-    static bool isParameterRequired(U2OpStatus &os, const QString &parameter);
-    static bool isParameterVisible(U2OpStatus &os, const QString &parameter);
-    static void clickParameter(U2OpStatus &os, const QString &parameter);
-    static QTableView *getParametersTable(U2OpStatus &os);
+    static QString getParameter(HI::GUITestOpStatus& os, QString parameter, bool exactMatch = false);
+    static bool isParameterEnabled(HI::GUITestOpStatus& os, QString parameter);
+    static bool isParameterRequired(HI::GUITestOpStatus &os, const QString &parameter);
+    static bool isParameterVisible(HI::GUITestOpStatus &os, const QString &parameter);
+    static void clickParameter(HI::GUITestOpStatus &os, const QString &parameter);
+    static QTableView *getParametersTable(HI::GUITestOpStatus &os);
 
-    static void setParameterScripting(U2OpStatus& os, QString parameter, QString scriptMode, bool exactMatch = false);
+    static void setParameterScripting(HI::GUITestOpStatus& os, QString parameter, QString scriptMode, bool exactMatch = false);
 
     //returns number of items in error list which contain "error"
-    static int checkErrorList(U2OpStatus &os, QString error);
+    static int checkErrorList(HI::GUITestOpStatus &os, QString error);
 
-    static int getItemLeft(U2OpStatus &os, QString itemName);
-    static int getItemRight(U2OpStatus &os, QString itemName);
-    static int getItemTop(U2OpStatus &os, QString itemName);
-    static int getItemBottom(U2OpStatus &os, QString itemName);
+    static int getItemLeft(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemRight(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemTop(HI::GUITestOpStatus &os, QString itemName);
+    static int getItemBottom(HI::GUITestOpStatus &os, QString itemName);
 
     // breakpoints
-    static void toggleDebugMode(U2OpStatus &os, bool enable = true);
-    static void toggleBreakpointManager(U2OpStatus &os);
-    static void setBreakpoint(U2OpStatus &os, const QString &itemName);
-    static QStringList getBreakpointList(U2OpStatus &os);
+    static void toggleDebugMode(HI::GUITestOpStatus &os, bool enable = true);
+    static void toggleBreakpointManager(HI::GUITestOpStatus &os);
+    static void setBreakpoint(HI::GUITestOpStatus &os, const QString &itemName);
+    static QStringList getBreakpointList(HI::GUITestOpStatus &os);
 
-    static void removeCmdlineWorkerFromPalette(U2OpStatus &os, const QString &workerName);
+    static void removeCmdlineWorkerFromPalette(HI::GUITestOpStatus &os, const QString &workerName);
 
 private:
-    static void selectAlgorithm(U2OpStatus &os, QTreeWidgetItem *algorithm);
-    static void selectSample(U2OpStatus &os, QTreeWidgetItem *sample);
-    static QRect getItemRect(U2OpStatus &os,QString itemName);
-    static QTreeWidget * getCurrentTabTreeWidget(U2OpStatus &os);
+    static void selectAlgorithm(HI::GUITestOpStatus &os, QTreeWidgetItem *algorithm);
+    static void selectSample(HI::GUITestOpStatus &os, QTreeWidgetItem *sample);
+    static QRect getItemRect(HI::GUITestOpStatus &os,QString itemName);
+    static QTreeWidget * getCurrentTabTreeWidget(HI::GUITestOpStatus &os);
 
     static const int verticalShift;
 };
diff --git a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
index 22def2e..e3c323d 100644
--- a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
+++ b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
@@ -19,69 +19,72 @@
  * MA 02110-1301, USA.
  */
 
-#include "GUITestBasePlugin.h"
 #include <U2Core/AppContext.h>
+
 #include <U2Test/GUITestBase.h>
+#include <U2Gui/ToolsMenu.h>
 
+#include "GUITestBasePlugin.h"
 #include "tests/GUIInitialChecks.h"
+#include "tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h"
+#include "tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h"
+#include "tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h"
+#include "tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h"
+#include "tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h"
+#include "tests/common_scenarios/Assembling/sam/GTTestsSAM.h"
+#include "tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h"
+#include "tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h"
+#include "tests/common_scenarios/annotations/GTTestsAnnotations.h"
+#include "tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h"
+#include "tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h"
+#include "tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h"
+#include "tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h"
+#include "tests/common_scenarios/circular_view/GTTestsCvGeneral.h"
 #include "tests/common_scenarios/cloning/GTTestsCloning.h"
+#include "tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h"
+#include "tests/common_scenarios/dp_view/GTTestsDpView.h"
+#include "tests/common_scenarios/msa_editor/GTTestsMsaEditor.h"
+#include "tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h"
+#include "tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h"
+#include "tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h"
+#include "tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h"
+#include "tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h"
+#include "tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h"
+#include "tests/common_scenarios/options_panel/GTTestsOptionPanel.h"
+#include "tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h"
+#include "tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h"
 #include "tests/common_scenarios/pcr/GTTestsInSilicoPcr.h"
 #include "tests/common_scenarios/pcr/GTTestsPrimerLibrary.h"
 #include "tests/common_scenarios/project/GTTestsProject.h"
+#include "tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h"
 #include "tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h"
+#include "tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h"
+#include "tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h"
+#include "tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h"
 #include "tests/common_scenarios/project/relations/GTTestsProjectRelations.h"
-#include "tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h"
-#include "tests/common_scenarios/sequence_view/GTTestsSequenceView.h"
-#include "tests/common_scenarios/toggle_view/GTTestsToggleView.h"
-#include "tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h"
 #include "tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h"
 #include "tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h"
-#include "tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h"
-#include "tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h"
 #include "tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h"
-#include "tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h"
-#include "tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h"
-#include "tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h"
-#include "tests/common_scenarios/msa_editor/GTTestsMsaEditor.h"
-#include "tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h"
-#include "tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h"
-#include "tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h"
-#include "tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h"
-#include "tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h"
-#include "tests/common_scenarios/annotations/GTTestsAnnotations.h"
-#include "tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h"
-#include "tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h"
-#include "tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h"
-#include "tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h"
-#include "tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h"
+#include "tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h"
+#include "tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h"
+#include "tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h"
+#include "tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h"
+#include "tests/common_scenarios/sequence_view/GTTestsSequenceView.h"
+#include "tests/common_scenarios/shared_database/GTTestsSharedDatabase.h"
 #include "tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h"
-#include "tests/common_scenarios/options_panel/GTTestsOptionPanel.h"
-#include "tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h"
-#include "tests/common_scenarios/dp_view/GTTestsDpView.h"
-#include "tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h"
-#include "tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h"
-#include "tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h"
-#include "tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h"
-#include "tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h"
-#include "tests/common_scenarios/Assembling/sam/GTTestsSAM.h"
-#include "tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h"
+#include "tests/common_scenarios/start_page/GTTestsStartPage.h"
+#include "tests/common_scenarios/toggle_view/GTTestsToggleView.h"
+#include "tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h"
+#include "tests/common_scenarios/undo_redo/GTTestsUndoRedo.h"
 #include "tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h"
 #include "tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h"
 #include "tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h"
 #include "tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h"
 #include "tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h"
 #include "tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h"
-#include "tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h"
-#include "tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h"
-#include "tests/common_scenarios/undo_redo/GTTestsUndoRedo.h"
-#include "tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h"
-#include "tests/common_scenarios/shared_database/GTTestsSharedDatabase.h"
-#include "tests/common_scenarios/circular_view/GTTestsCvGeneral.h"
-#include "tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h"
-#include "tests/common_scenarios/start_page/GTTestsStartPage.h"
 #include "tests/crazy_user/GUICrazyUserTest.h"
-#include "tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h"
 #include "tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h"
+#include "tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h"
 #include "tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h"
 #include "tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h"
 #include "tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h"
@@ -89,42 +92,44 @@
 #define REGISTER_TEST(X) if (guiTestBase) guiTestBase->registerTest(new X())
 #define REGISTER_TEST_WITH_TIMEOUT(X, TIMEOUT) \
     if (guiTestBase) { \
-        GUITest *test = new X(); \
+        HI::GUITest *test = new X(); \
         test->setTimeout(TIMEOUT); \
         guiTestBase->registerTest(test); \
     }
 #define REGISTER_TEST_IGNORED_BY(X, BY, MESSAGE, reason) \
     if (guiTestBase) { \
-        GUITest *test = new X(); \
+        HI::GUITest *test = new X(); \
         test->setIgnored(BY, MESSAGE); \
         test->setReason(reason); \
         guiTestBase->registerTest(test); \
     }
 
-#define REGISTER_TEST_IGNORED(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::Ignored, MESSAGE, GUITest::Bug)
-#define REGISTER_TEST_IGNORED_LINUX(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredLinux, MESSAGE, GUITest::Bug)
-#define REGISTER_TEST_IGNORED_WINDOWS(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows, MESSAGE, GUITest::Bug)
-#define REGISTER_TEST_IGNORED_MAC(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredMac, MESSAGE, GUITest::Bug)
+#define REGISTER_TEST_IGNORED(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::Ignored, MESSAGE, HI::GUITest::Bug)
+#define REGISTER_TEST_IGNORED_LINUX(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredLinux, MESSAGE, HI::GUITest::Bug)
+#define REGISTER_TEST_IGNORED_WINDOWS(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows, MESSAGE, HI::GUITest::Bug)
+#define REGISTER_TEST_IGNORED_MAC(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredMac, MESSAGE, HI::GUITest::Bug)
 
-#define REGISTER_TEST_NOT_FOR_LINUX(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredLinux, "not for Linux", GUITest::System)
-#define REGISTER_TEST_NOT_FOR_WINDOWS(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows, "not for Windows", GUITest::System)
-#define REGISTER_TEST_NOT_FOR_MAC(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredMac, "not for Mac", GUITest::System)
+#define REGISTER_TEST_NOT_FOR_LINUX(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredLinux, "not for Linux", HI::GUITest::System)
+#define REGISTER_TEST_NOT_FOR_WINDOWS(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows, "not for Windows", HI::GUITest::System)
+#define REGISTER_TEST_NOT_FOR_MAC(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredMac, "not for Mac", HI::GUITest::System)
 
-#define REGISTER_TEST_LINUX(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows|GUITest::IgnoredMac, MESSAGE, GUITest::Bug)
-#define REGISTER_TEST_WINDOWS(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredMac|GUITest::IgnoredLinux, MESSAGE, GUITest::Bug)
-#define REGISTER_TEST_MAC(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows|GUITest::IgnoredLinux, MESSAGE, GUITest::Bug)
+#define REGISTER_TEST_LINUX(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows|HI::GUITest::IgnoredMac, MESSAGE, HI::GUITest::Bug)
+#define REGISTER_TEST_WINDOWS(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredMac|HI::GUITest::IgnoredLinux, MESSAGE, HI::GUITest::Bug)
+#define REGISTER_TEST_MAC(X, MESSAGE) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows|HI::GUITest::IgnoredLinux, MESSAGE, HI::GUITest::Bug)
 
-#define REGISTER_TEST_ONLY_LINUX(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows|GUITest::IgnoredMac, "only for Linux", GUITest::System)
-#define REGISTER_TEST_ONLY_WINDOWS(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredMac|GUITest::IgnoredLinux, "only for Windows", GUITest::System)
-#define REGISTER_TEST_ONLY_MAC(X) REGISTER_TEST_IGNORED_BY(X, GUITest::IgnoredWindows|GUITest::IgnoredLinux, "only for Mac", GUITest::System)
+#define REGISTER_TEST_ONLY_LINUX(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows|HI::GUITest::IgnoredMac, "only for Linux", HI::GUITest::System)
+#define REGISTER_TEST_ONLY_WINDOWS(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredMac|HI::GUITest::IgnoredLinux, "only for Windows", HI::GUITest::System)
+#define REGISTER_TEST_ONLY_MAC(X) REGISTER_TEST_IGNORED_BY(X, HI::GUITest::IgnoredWindows|HI::GUITest::IgnoredLinux, "only for Mac", HI::GUITest::System)
 
 
 namespace U2 {
 
 extern "C" Q_DECL_EXPORT Plugin* U2_PLUGIN_INIT_FUNC() {
-
-    GUITestBasePlugin* plug = new GUITestBasePlugin();
-    return plug;
+    if (AppContext::getMainWindow()) {
+        GUITestBasePlugin* plug = new GUITestBasePlugin();
+        return plug;
+    }
+    return NULL;
 }
 
 GUITestBasePlugin::GUITestBasePlugin() : Plugin(tr("GUITestBase"), tr("GUI Test Base")) {
@@ -133,6 +138,20 @@ GUITestBasePlugin::GUITestBasePlugin() : Plugin(tr("GUITestBase"), tr("GUI Test
 
     registerTests(guiTestBase);
     registerAdditionalChecks(guiTestBase);
+
+    openGUITestRunnerAction = new QAction(tr("GUI Test runner"), this);
+    openGUITestRunnerAction->setObjectName("GUI_TEST_RUNNER");
+    openGUITestRunnerAction->setIcon(QIcon(":gui_test/images/open_gui_test_runner.png"));
+    view = NULL;
+    connect(openGUITestRunnerAction, SIGNAL(triggered()), SLOT(sl_showWindow()));
+    ToolsMenu::addAction(ToolsMenu::TOOLS, openGUITestRunnerAction);
+}
+
+void GUITestBasePlugin::sl_showWindow() {
+    if (view == NULL) {
+        view = new GUITestRunner(AppContext::getGUITestBase());
+    }
+    view->show();
 }
 
 void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
@@ -159,13 +178,13 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_0574);
     REGISTER_TEST(GUITest_regression_scenarios::test_0587);
     REGISTER_TEST(GUITest_regression_scenarios::test_0597);
+    REGISTER_TEST(GUITest_regression_scenarios::test_0598);
 
     REGISTER_TEST(GUITest_regression_scenarios::test_0605);
     REGISTER_TEST(GUITest_regression_scenarios::test_0610);
     REGISTER_TEST(GUITest_regression_scenarios::test_0627);
     REGISTER_TEST(GUITest_regression_scenarios::test_0652);
     REGISTER_TEST(GUITest_regression_scenarios::test_0659);
-    REGISTER_TEST(GUITest_regression_scenarios::test_0663);
     REGISTER_TEST(GUITest_regression_scenarios::test_0666);
     REGISTER_TEST(GUITest_regression_scenarios::test_0677);
     REGISTER_TEST(GUITest_regression_scenarios::test_0678);
@@ -351,7 +370,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1219);
     REGISTER_TEST(GUITest_regression_scenarios::test_1220);
     REGISTER_TEST(GUITest_regression_scenarios::test_1229);
-    REGISTER_TEST(GUITest_regression_scenarios::test_1232);
     REGISTER_TEST(GUITest_regression_scenarios::test_1234);
     REGISTER_TEST(GUITest_regression_scenarios::test_1241);
     REGISTER_TEST(GUITest_regression_scenarios::test_1245);
@@ -495,7 +513,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1631);
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1640);
     REGISTER_TEST(GUITest_regression_scenarios::test_1643);
-    REGISTER_TEST(GUITest_regression_scenarios::test_1644);
     REGISTER_TEST(GUITest_regression_scenarios::test_1645);
     REGISTER_TEST(GUITest_regression_scenarios::test_1651);
     REGISTER_TEST(GUITest_regression_scenarios::test_1653);
@@ -546,14 +563,11 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1764);
     REGISTER_TEST(GUITest_regression_scenarios::test_1771);
     REGISTER_TEST(GUITest_regression_scenarios::test_1784);
-    REGISTER_TEST(GUITest_regression_scenarios::test_1786);
     REGISTER_TEST(GUITest_regression_scenarios::test_1797);
     REGISTER_TEST(GUITest_regression_scenarios::test_1798);
 
-    REGISTER_TEST(GUITest_regression_scenarios::test_1807);
     REGISTER_TEST(GUITest_regression_scenarios::test_1808);
     REGISTER_TEST(GUITest_regression_scenarios::test_1811_1);
-    REGISTER_TEST(GUITest_regression_scenarios::test_1813);
     REGISTER_TEST(GUITest_regression_scenarios::test_1821);
     REGISTER_TEST(GUITest_regression_scenarios::test_1831);
     REGISTER_TEST(GUITest_regression_scenarios::test_1834);
@@ -594,7 +608,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2032);
     REGISTER_TEST(GUITest_regression_scenarios::test_2049);
     REGISTER_TEST(GUITest_regression_scenarios::test_2053);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2070);
     REGISTER_TEST(GUITest_regression_scenarios::test_2076);
     REGISTER_TEST(GUITest_regression_scenarios::test_2077);
     REGISTER_TEST(GUITest_regression_scenarios::test_2078);
@@ -605,7 +618,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2100_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_2100_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_2100_3);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2122);
     REGISTER_TEST(GUITest_regression_scenarios::test_2124);
     REGISTER_TEST(GUITest_regression_scenarios::test_2128);
     REGISTER_TEST(GUITest_regression_scenarios::test_2128_1);
@@ -617,15 +629,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2156);
     REGISTER_TEST(GUITest_regression_scenarios::test_2157);
     REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_2160, "UGENE-4528");
-    REGISTER_TEST(GUITest_regression_scenarios::test_2163);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2164);
     REGISTER_TEST(GUITest_regression_scenarios::test_2165);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2167);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2169);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2171);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2172);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2174);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2186);
     REGISTER_TEST(GUITest_regression_scenarios::test_2187);
     REGISTER_TEST(GUITest_regression_scenarios::test_2188);
     REGISTER_TEST(GUITest_regression_scenarios::test_2192);
@@ -637,7 +641,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_2266_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_2267_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_2267_2);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2268);
+    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_2268, "UGENE-4948");
     REGISTER_TEST(GUITest_regression_scenarios::test_2269);
     REGISTER_TEST(GUITest_regression_scenarios::test_2270);
     REGISTER_TEST(GUITest_regression_scenarios::test_2281);
@@ -701,14 +705,12 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2513);
     REGISTER_TEST(GUITest_regression_scenarios::test_2519);
     REGISTER_TEST(GUITest_regression_scenarios::test_2538);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2540);
+    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_2540, "UGENE-4948");
     REGISTER_TEST(GUITest_regression_scenarios::test_2542);
     REGISTER_TEST(GUITest_regression_scenarios::test_2543);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2544);
+    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_2544, "UGENE-4948");
     REGISTER_TEST(GUITest_regression_scenarios::test_2545);
     REGISTER_TEST(GUITest_regression_scenarios::test_2549);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2562);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2562_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_2565);
     REGISTER_TEST(GUITest_regression_scenarios::test_2566);
     REGISTER_TEST(GUITest_regression_scenarios::test_2567);
@@ -817,7 +819,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3086);
     REGISTER_TEST(GUITest_regression_scenarios::test_3092);
     REGISTER_TEST(GUITest_regression_scenarios::test_3101);
-    REGISTER_TEST(GUITest_regression_scenarios::test_3102);
+    REGISTER_TEST_IGNORED_WINDOWS(GUITest_regression_scenarios::test_3102, "UGENE-4962");
     REGISTER_TEST(GUITest_regression_scenarios::test_3103);
     REGISTER_TEST(GUITest_regression_scenarios::test_3112);
     REGISTER_TEST(GUITest_regression_scenarios::test_3124);
@@ -841,7 +843,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3175);
     REGISTER_TEST(GUITest_regression_scenarios::test_3180);
     REGISTER_TEST(GUITest_regression_scenarios::test_3187);
-    REGISTER_TEST(GUITest_regression_scenarios::test_3207);
     REGISTER_TEST(GUITest_regression_scenarios::test_3209_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_3209_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_3211);
@@ -932,7 +933,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3563_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_3571_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_3571_2);
-    REGISTER_TEST(GUITest_regression_scenarios::test_3585);
     REGISTER_TEST(GUITest_regression_scenarios::test_3589);
 
     REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_3603, "UGENE-3830");
@@ -1007,7 +1007,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3869);
     REGISTER_TEST(GUITest_regression_scenarios::test_3870);
     REGISTER_TEST(GUITest_regression_scenarios::test_3886);
-    REGISTER_TEST(GUITest_regression_scenarios::test_3891);
     REGISTER_TEST(GUITest_regression_scenarios::test_3895);
 
     REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_3901, "https://ugene.unipro.ru/tracker/browse/UGENE-3955");
@@ -1117,6 +1116,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4323_3);
     REGISTER_TEST(GUITest_regression_scenarios::test_4323_4);
     REGISTER_TEST(GUITest_regression_scenarios::test_4325);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4334);
     REGISTER_TEST(GUITest_regression_scenarios::test_4345);
     REGISTER_TEST(GUITest_regression_scenarios::test_4352);
     REGISTER_TEST(GUITest_regression_scenarios::test_4359);
@@ -1152,22 +1152,65 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4620);
     REGISTER_TEST(GUITest_regression_scenarios::test_4621);
     REGISTER_TEST(GUITest_regression_scenarios::test_4624);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4628);
     REGISTER_TEST(GUITest_regression_scenarios::test_4674);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4674_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4674_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_4687);
     REGISTER_TEST(GUITest_regression_scenarios::test_4689_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4689_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_4694);
 
-    REGISTER_TEST(GUITest_regression_scenarios::test_4702);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4702_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4702_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4702_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4702_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4702_5);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4710);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4710_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4714_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4714_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4718);
     REGISTER_TEST(GUITest_regression_scenarios::test_4719_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4719_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4719_3);
     REGISTER_TEST(GUITest_regression_scenarios::test_4728);
     REGISTER_TEST(GUITest_regression_scenarios::test_4732);
     REGISTER_TEST(GUITest_regression_scenarios::test_4734);
     REGISTER_TEST(GUITest_regression_scenarios::test_4735);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4784_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4784_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4784_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4784_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4785);
     REGISTER_TEST(GUITest_regression_scenarios::test_4795);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4803_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4803_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4803_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4803_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_5);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4804_6);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_5);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_6);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_7);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4833_8);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4885_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4885_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4885_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4886);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4908);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_4913);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4918);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4918_1);
 
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/project/
@@ -1203,25 +1246,25 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     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_0039);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0040);
-    REGISTER_TEST_NOT_FOR_MAC(GUITest_common_scenarios_project::test_0041);
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0040, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0041, "UGENE-4595");
     REGISTER_TEST(GUITest_common_scenarios_project::test_0042);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0043);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0044);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0045);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0046);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0047);
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0047, "UGENE-4595");
     REGISTER_TEST(GUITest_common_scenarios_project::test_0048);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0049);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0050);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0051);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0052);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0053);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0054);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0055);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0056);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0057);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0058);
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0049, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0050, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0051, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0052, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0053, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0054, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0055, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0056, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0057, "UGENE-4595");
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0058, "UGENE-4595");
 
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/project/bookmarks/
@@ -1342,6 +1385,20 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0059);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0059_1);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0060);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0061_1);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0061_2);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0061_3);
+
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0062);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0063);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0064);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0065);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0066);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0067);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0068);
+    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);
 
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/sequence edit/
@@ -1779,6 +1836,30 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_edit::test_0015);
 
 /////////////////////////////////////////////////////////////////////////
+// Common scenarios/msa_editor/replace_character
+/////////////////////////////////////////////////////////////////////////
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0001);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0002);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0003);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0004);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0005);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0005_1);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0006);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0006_1);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0007);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0008);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0009);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0010);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0011);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0012);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0013);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0014);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0015);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0016);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0017);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_replace_character::test_0018);
+
+/////////////////////////////////////////////////////////////////////////
 // Common scenarios/msa_editor/overview
 /////////////////////////////////////////////////////////////////////////
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0001);
@@ -1798,6 +1879,9 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0015);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0017);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0019);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0020);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0021);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0022);
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/document_from_text/
 //////////////////////////////////////////////////////////////////////////
@@ -1916,7 +2000,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
 
     REGISTER_TEST(GUITest_common_scenarios_annotations::test_0002);
     REGISTER_TEST(GUITest_common_scenarios_annotations::test_0002_1);
-    REGISTER_TEST_IGNORED(GUITest_common_scenarios_annotations::test_0002_2, "UGENE-4434");
+    REGISTER_TEST(GUITest_common_scenarios_annotations::test_0002_2);
 
     REGISTER_TEST(GUITest_common_scenarios_annotations::test_0004);
     REGISTER_TEST(GUITest_common_scenarios_annotations::test_0004_1);
@@ -2025,7 +2109,7 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
 
     REGISTER_TEST(GUITest_common_scenarios_annotations_qualifiers::test_0004);
     REGISTER_TEST(GUITest_common_scenarios_annotations_qualifiers::test_0004_1);
-    REGISTER_TEST_IGNORED(GUITest_common_scenarios_annotations_qualifiers::test_0004_2, "UGENE-4434");
+    REGISTER_TEST(GUITest_common_scenarios_annotations_qualifiers::test_0004_2);
 
     REGISTER_TEST(GUITest_common_scenarios_annotations_qualifiers::test_0005);
     REGISTER_TEST(GUITest_common_scenarios_annotations_qualifiers::test_0005_1);
@@ -2182,7 +2266,6 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
 /////////////////////////////////////////////////////////////////////////
     REGISTER_TEST(GUITest_Assembly_browser::test_0001);
     REGISTER_TEST(GUITest_Assembly_browser::test_0002);
-    REGISTER_TEST(GUITest_Assembly_browser::test_0004);
     REGISTER_TEST(GUITest_Assembly_browser::test_0010);
     REGISTER_TEST(GUITest_Assembly_browser::test_0011);
     REGISTER_TEST_IGNORED_WINDOWS(GUITest_Assembly_browser::test_0012, "permission setter issue");
@@ -2196,6 +2279,9 @@ void GUITestBasePlugin::registerTests(GUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_Assembly_browser::test_0020);
     REGISTER_TEST(GUITest_Assembly_browser::test_0021);
     REGISTER_TEST(GUITest_Assembly_browser::test_0022);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0023);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0024);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0025);
 
 /////////////////////////////////////////////////////////////////////////
 // Common scenarios/Assembling/bowtie2
@@ -2463,7 +2549,6 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
     REGISTER_TEST(GUITest_common_scenarios_options_panel_sequence_view::test_0008);
     REGISTER_TEST(GUITest_common_scenarios_options_panel_sequence_view::test_0009);
     REGISTER_TEST(GUITest_common_scenarios_options_panel_sequence_view::test_0010);
-    REGISTER_TEST(GUITest_common_scenarios_options_panel_sequence_view::test_0011);
 
 /////////////////////////////////////////////////////////////////////////
 // common_scenarios/workflow_designer/shared_db
@@ -2546,23 +2631,23 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
 }
 
 void GUITestBasePlugin::registerAdditionalChecks(GUITestBase *guiTestBase) {
-
     if (guiTestBase) {
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0000, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0001, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0002, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0003, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0004, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0005, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0006, GUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::test_0007, GUITestBase::PreAdditional);
-
-        guiTestBase->registerTest(new GUITest_initial_checks::post_test_0000, GUITestBase::PostAdditionalChecks);
-
-        guiTestBase->registerTest(new GUITest_initial_checks::post_test_0001, GUITestBase::PostAdditionalActions);
-        guiTestBase->registerTest(new GUITest_initial_checks::post_test_0002, GUITestBase::PostAdditionalActions);
-        guiTestBase->registerTest(new GUITest_initial_checks::post_test_0003, GUITestBase::PostAdditionalActions);
-        //guiTestBase->registerTest(new GUITest_initial_checks::post_test_0004, GUITestBase::PostAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0000, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0001, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0002, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0003, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0004, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0005, GUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0006, GUITestBase::PreAdditional);
+
+        guiTestBase->registerTest(new GUITest_initial_checks::post_check_0000, GUITestBase::PostAdditionalChecks);
+        //guiTestBase->registerTest(new GUITest_initial_checks::post_check_0001, GUITestBase::PostAdditionalChecks);
+        //temporary ignored. Causes problems on mac
+
+        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0000, GUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0001, GUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0002, GUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0003, GUITestBase::PostAdditionalActions);
     }
 }
 
diff --git a/src/plugins/GUITestBase/src/GUITestBasePlugin.h b/src/plugins/GUITestBase/src/GUITestBasePlugin.h
index e99ae40..d283d08 100644
--- a/src/plugins/GUITestBase/src/GUITestBasePlugin.h
+++ b/src/plugins/GUITestBase/src/GUITestBasePlugin.h
@@ -23,6 +23,8 @@
 #define _U2_GUITESTBASE_PLUGIN_H_
 
 #include <U2Core/PluginModel.h>
+#include "test_runner/GUITestRunner.h"
+#include <QAction>
 
 namespace U2 {
 
@@ -32,10 +34,14 @@ class GUITestBasePlugin : public Plugin {
     Q_OBJECT
 public:
     GUITestBasePlugin();
-
+private slots:
+    void sl_showWindow();
 private:
     void registerTests(GUITestBase *guiTestBase);
     void registerAdditionalChecks(GUITestBase *guiTestBase);
+
+    QAction*        openGUITestRunnerAction;
+    GUITestRunner*  view;
 };
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
index 9be874b..5e0d53a 100644
--- a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
+++ b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
@@ -26,17 +26,18 @@
 #include <QtWidgets/QTreeWidget>
 #endif
 
-#include "api/GTTreeWidget.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <primitives/GTTreeWidget.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 
 #include "GTBaseCompleter.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTBaseCompleter"
 #define GT_METHOD_NAME "click"
-void GTBaseCompleter::click(U2OpStatus &os, QTreeWidget* tree, const QString &seqName){
+void GTBaseCompleter::click(HI::GUITestOpStatus &os, QTreeWidget* tree, const QString &seqName){
     GT_CHECK(tree != NULL, "tree widget is NULL");
     QTreeWidgetItem* item = GTTreeWidget::findItem(os, tree, seqName);
     GT_CHECK(item != NULL, "item not found");
@@ -49,7 +50,7 @@ void GTBaseCompleter::click(U2OpStatus &os, QTreeWidget* tree, const QString &se
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNames"
-QStringList GTBaseCompleter::getNames(U2OpStatus &os, QTreeWidget *tree){
+QStringList GTBaseCompleter::getNames(HI::GUITestOpStatus &os, QTreeWidget *tree){
     if(tree == NULL){
         tree = getCompleter(os);
     }
@@ -63,7 +64,7 @@ QStringList GTBaseCompleter::getNames(U2OpStatus &os, QTreeWidget *tree){
 }
 #undef GT_METHOD_NAME
 
-bool GTBaseCompleter::isEmpty(U2OpStatus &os, QTreeWidget *tree){
+bool GTBaseCompleter::isEmpty(HI::GUITestOpStatus &os, QTreeWidget *tree){
     if(tree == NULL){
         tree = getCompleter(os);
     }
@@ -73,7 +74,7 @@ bool GTBaseCompleter::isEmpty(U2OpStatus &os, QTreeWidget *tree){
 }
 
 #define GT_METHOD_NAME "getCompleter"
-QTreeWidget* GTBaseCompleter::getCompleter(U2OpStatus &os){
+QTreeWidget* GTBaseCompleter::getCompleter(HI::GUITestOpStatus &os){
     QWidget* sequenceLineEdit = GTWidget::findWidget(os, "sequenceLineEdit");
     GT_CHECK_RESULT(sequenceLineEdit != NULL, "sequenceLineEdit not found", NULL);
     QTreeWidget* completer = sequenceLineEdit->findChild<QTreeWidget*>();
diff --git a/src/plugins/GUITestBase/src/api/GTBaseCompleter.h b/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
index e2263cb..aeadcfb 100644
--- a/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
+++ b/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
@@ -23,19 +23,20 @@
 #ifndef U2_GT_BASECOMPLETER_H
 #define U2_GT_BASECOMPLETER_H
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 class QTreeWidget;
 
 namespace U2 {
+using namespace HI;
 
 class GTBaseCompleter
 {
 public:
-    static void click(U2OpStatus &os, QTreeWidget* tree, const QString &seqName);
-    static QStringList getNames(U2OpStatus &os, QTreeWidget* tree = NULL);
-    static bool isEmpty(U2OpStatus &os, QTreeWidget* tree = NULL);
-    static QTreeWidget* getCompleter(U2OpStatus &os);
+    static void click(HI::GUITestOpStatus &os, QTreeWidget* tree, const QString &seqName);
+    static QStringList getNames(HI::GUITestOpStatus &os, QTreeWidget* tree = NULL);
+    static bool isEmpty(HI::GUITestOpStatus &os, QTreeWidget* tree = NULL);
+    static QTreeWidget* getCompleter(HI::GUITestOpStatus &os);
 };
 
 }
diff --git a/src/plugins/GUITestBase/src/api/GTClipboard.cpp b/src/plugins/GUITestBase/src/api/GTClipboard.cpp
deleted file mode 100644
index b30b69c..0000000
--- a/src/plugins/GUITestBase/src/api/GTClipboard.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "GTClipboard.h"
-
-#include <QtCore/QMimeData>
-#include <QtGui/QClipboard>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
-
-namespace U2 {
-
-#define GT_CLASS_NAME "GTClipboard"
-
-#define GT_METHOD_NAME "text"
-QString GTClipboard::text(U2OpStatus &os) {
-    GTGlobals::sleep(300);
-// check that clipboard contains text
-    QClipboard *clipboard = QApplication::clipboard();
-    GT_CHECK_RESULT(clipboard != NULL, "Clipboard is NULL", "");
-    const QMimeData *mimeData = clipboard->mimeData();
-    GT_CHECK_RESULT(mimeData != NULL, "Clipboard MimeData is NULL", "");
-
-    GT_CHECK_RESULT(mimeData->hasText() == true, "Clipboard doesn't contain text data", "");
-    QString clipboardText = mimeData->text();
-// need to clear clipboard, UGENE will crash on close otherwise because of Qt assert
-    clipboard->clear();
-
-    return clipboardText;
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "setText"
-void GTClipboard::setText( U2OpStatus &os, QString text ){
-    Q_UNUSED(os);
-    QClipboard *clipboard = QApplication::clipboard();
-    clipboard->clear();
-    clipboard->setText(text);
-}
-
-#undef GT_METHOD_NAME
-
-#undef GT_CLASS_NAME
-
-} //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTDoubleSpinBox.h b/src/plugins/GUITestBase/src/api/GTDoubleSpinBox.h
deleted file mode 100644
index 953f2cb..0000000
--- a/src/plugins/GUITestBase/src/api/GTDoubleSpinBox.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef GTDOUBLESPINBOX_H
-#define GTDOUBLESPINBOX_H
-
-#include "GTSpinBox.h"
-#include "api/GTGlobals.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QSpinBox>
-#endif
-
-namespace U2 {
-
-class GTDoubleSpinbox
-{
-public:
-    static void setValue(U2OpStatus& os, QDoubleSpinBox *spinBox, double v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse);
-    static void checkLimits(U2OpStatus &os, QDoubleSpinBox *spinBox, double min, double max);
-};
-}
-#endif // GTDOUBLESPINBOX_H
diff --git a/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp b/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
index 81d1846..f89daa6 100644
--- a/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
+++ b/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
@@ -30,7 +30,7 @@
 namespace U2 {
 #define GT_CLASS_NAME "GTGraphicsItem"
 #define GT_METHOD_NAME "getGraphicsItemRect"
-QRect GTGraphicsItem::getGraphicsItemRect(U2OpStatus &os, QGraphicsItem* it){
+QRect GTGraphicsItem::getGraphicsItemRect(HI::GUITestOpStatus &os, QGraphicsItem* it){
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(it->scene()->views().at(0));
     GT_CHECK_RESULT(sceneView,"sceneView not found", QRect());
 
@@ -48,7 +48,7 @@ QRect GTGraphicsItem::getGraphicsItemRect(U2OpStatus &os, QGraphicsItem* it){
 }
 #undef GT_METHOD_NAME
 
-QPoint GTGraphicsItem::getItemCenter(U2OpStatus &os, QGraphicsItem *it){
+QPoint GTGraphicsItem::getItemCenter(HI::GUITestOpStatus &os, QGraphicsItem *it){
     QRect r = getGraphicsItemRect(os, it);
     QPoint p = r.center();
     return p;
diff --git a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h b/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
index a90d7a5..4f58b13 100644
--- a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
+++ b/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
@@ -31,11 +31,12 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 class GTGraphicsItem {
 public:
-    static QRect getGraphicsItemRect(U2OpStatus &os, QGraphicsItem *it);
-    static QPoint getItemCenter(U2OpStatus &os, QGraphicsItem *it);
+    static QRect getGraphicsItemRect(HI::GUITestOpStatus &os, QGraphicsItem *it);
+    static QPoint getItemCenter(HI::GUITestOpStatus &os, QGraphicsItem *it);
 };
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTListWidget.h b/src/plugins/GUITestBase/src/api/GTListWidget.h
deleted file mode 100644
index 90bcb26..0000000
--- a/src/plugins/GUITestBase/src/api/GTListWidget.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-
-#ifndef _U2_GT_LISTWIDGET_H_
-#define _U2_GT_LISTWIDGET_H_
-
-#include "api/GTGlobals.h"
-
-class QListWidget;
-
-namespace U2{
-
-class GTListWidget
-{
-public:
-    static void click(U2OpStatus &os, QListWidget *listWidget, const QString &text, Qt::MouseButton button = Qt::LeftButton);
-    static bool isItemChecked(U2OpStatus &os, QListWidget *listWidget, const QString &text);
-    static void checkItem(U2OpStatus &os, QListWidget *listWidget, const QString &text, bool newState);
-    static void checkAllItems(U2OpStatus &os, QListWidget *listWidget, bool newState);
-    static void checkOnlyItems(U2OpStatus &os, QListWidget *listWidget, const QStringList &itemTexts, bool newState = true);
-    static QStringList getItems(U2OpStatus &os, QListWidget *listWidget);
-};
-
-}
-
-#endif // GTLISTWIDGET_H
diff --git a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
index a850eb0..28c7cb8 100644
--- a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
+++ b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
@@ -20,14 +20,14 @@
  */
 
 #include "GTMSAEditorStatusWidget.h"
-#include "GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTMSAEditorStatusWidget"
 
 #define GT_METHOD_NAME "length"
-int GTMSAEditorStatusWidget::length(U2OpStatus& os, QWidget* w) {
+int GTMSAEditorStatusWidget::length(HI::GUITestOpStatus& os, QWidget* w) {
 
     QLabel* label = qobject_cast<QLabel*>(GTWidget::findWidget(os, "Column", w));
     GT_CHECK_RESULT(label != NULL, "label is NULL", -1);
@@ -44,7 +44,7 @@ int GTMSAEditorStatusWidget::length(U2OpStatus& os, QWidget* w) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "count"
-int GTMSAEditorStatusWidget::getSequencesCount(U2OpStatus &os, QWidget *w) {
+int GTMSAEditorStatusWidget::getSequencesCount(HI::GUITestOpStatus &os, QWidget *w) {
     QLabel* label = GTWidget::findExactWidget<QLabel *>(os, "Line", w);
     GT_CHECK_RESULT(label != NULL, "label is NULL", -1);
 
diff --git a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
index f4d3be7..d13dd5f 100644
--- a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
+++ b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
@@ -22,16 +22,17 @@
 #ifndef _U2_GT_MSAEDITOR_STATUSWIDGET_H_
 #define _U2_GT_MSAEDITOR_STATUSWIDGET_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <U2View/MSAEditorStatusBar.h>
 
 namespace U2 {
+using namespace HI;
 
 class GTMSAEditorStatusWidget {
 public:
     // fails if the widget is NULL or can't get length
-    static int length(U2OpStatus& os, QWidget* w);
-    static int getSequencesCount(U2OpStatus &os, QWidget *w);
+    static int length(HI::GUITestOpStatus& os, QWidget* w);
+    static int getSequencesCount(HI::GUITestOpStatus &os, QWidget *w);
 };
 
 }
diff --git a/src/plugins/GUITestBase/src/api/GTMenu.h b/src/plugins/GUITestBase/src/api/GTMenu.h
deleted file mode 100644
index b563d16..0000000
--- a/src/plugins/GUITestBase/src/api/GTMenu.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 GTMENU_H
-#define GTMENU_H
-
-#include "GTGlobals.h"
-
-class QMenu;
-class QAction;
-
-namespace U2 {
-
-class GTMenu {
-public:
-    static QMenu* showMainMenu(U2OpStatus &os, const QString &menuName, GTGlobals::UseMethod m = GTGlobals::UseMouse);  // should be removed in Qt5, use clickMainMenuItem instead
-    static void clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-    static QMenu* showContextMenu(U2OpStatus &os, QWidget *ground, GTGlobals::UseMethod m = GTGlobals::UseMouse);
-
-    static void clickMenuItemByName(U2OpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m = GTGlobals::UseMouse);
-    static void clickMenuItemByText(U2OpStatus &os, const QMenu *menu, const QStringList &itemPath, GTGlobals::UseMethod m = GTGlobals::UseMouse);
-
-    // moves cursor to menu item, clicks on menu item;
-
-    static QAction* clickMenuItem(U2OpStatus &os, const QMenu *menu, const QString &itemName, GTGlobals::UseMethod m = GTGlobals::UseMouse, bool byText = false);
-
-    static QAction* getMenuItem(U2OpStatus &os, const QMenu* menu, const QString &itemName, bool byText = false);
-
-    // global position of menu action's center
-    static QPoint actionPos(U2OpStatus &os, const QMenu* menu, QAction* action);
-
-    static const QString FILE;
-    static const QString ACTIONS;
-    static const QString SETTINGS;
-    static const QString TOOLS;
-    static const QString WINDOW;
-    static const QString HELP;
-
-private:
-    static void clickMenuItemPrivate(U2OpStatus &os, const QMenu *menu, const QStringList &itemName, GTGlobals::UseMethod m = GTGlobals::UseMouse, bool byText = false);
-};
-
-}
-#endif // GTMENU_H
diff --git a/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp b/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
index 3ae8eb0..c47a6f9 100644
--- a/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
+++ b/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
@@ -20,15 +20,17 @@
  */
 
 #include "GTRegionSelector.h"
-#include "GTWidget.h"
-#include "GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <U2Core/Log.h>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTRegionSelector"
 
 #define GT_METHOD_NAME "setRegion"
-void GTRegionSelector::setRegion(U2OpStatus& os, RegionSelector *regionSelector, const RegionSelectorSettings& s) {
+void GTRegionSelector::setRegion(HI::GUITestOpStatus& os, RegionSelector *regionSelector, const RegionSelectorSettings& s) {
 
     GT_CHECK(regionSelector != NULL, "RegionSelector is NULL");
 
diff --git a/src/plugins/GUITestBase/src/api/GTRegionSelector.h b/src/plugins/GUITestBase/src/api/GTRegionSelector.h
index b0c92f0..0f4795e 100644
--- a/src/plugins/GUITestBase/src/api/GTRegionSelector.h
+++ b/src/plugins/GUITestBase/src/api/GTRegionSelector.h
@@ -22,10 +22,11 @@
 #ifndef _U2_GT_REGIONSELECTOR_H_
 #define _U2_GT_REGIONSELECTOR_H_
 
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 #include <U2Gui/RegionSelector.h>
 
 namespace U2 {
+using namespace HI;
 
 class GTRegionSelector {
 public:
@@ -40,7 +41,7 @@ public:
         bool unset;
     };
 
-    static void setRegion(U2OpStatus& os, RegionSelector *regionSelector, const RegionSelectorSettings& s);
+    static void setRegion(HI::GUITestOpStatus& os, RegionSelector *regionSelector, const RegionSelectorSettings& s);
 };
 
 }
diff --git a/src/plugins/GUITestBase/src/api/GTScrollBar.h b/src/plugins/GUITestBase/src/api/GTScrollBar.h
deleted file mode 100644
index dce3a0d..0000000
--- a/src/plugins/GUITestBase/src/api/GTScrollBar.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GUI_GTSCROLLBAR_H_
-#define _U2_GUI_GTSCROLLBAR_H_
-
-#include <U2Core/U2OpStatus.h>
-#include <QtCore/QPoint>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QScrollBar>
-#include <QtGui/QStyleOptionSlider>
-#else
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QStyleOptionSlider>
-#endif
-#include "GTMouseDriver.h"
-#include "GTKeyboardDriver.h"
-
-
-namespace U2 {
-
-class GTScrollBar {
-public:
-    static QScrollBar* getScrollBar(U2OpStatus &os, const QString &scrollBarSysName);
-
-    static void pageUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod);
-    static void pageDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod);
-
-    static void lineUp(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod); //does not necessarily move one line up (for example, moves cursor in text editors)
-    static void lineDown(U2OpStatus &os, QScrollBar *scrollbar, GTGlobals::UseMethod useMethod); //does not necessarily move one line down (for example, moves cursor in text editors)
-
-    static void moveSliderWithMouseUp(U2OpStatus &os, QScrollBar *scrollbar, int nPix);
-    static void moveSliderWithMouseDown(U2OpStatus &os, QScrollBar *scrollbar, int nPix);
-
-    static void moveSliderWithMouseWheelUp(U2OpStatus &os, QScrollBar *scrollbar, int nScrolls); //first moves the cursor to the slider and clicks it, then starts scrolling
-    static void moveSliderWithMouseWheelDown(U2OpStatus &os, QScrollBar *scrollbar, int nScrolls); //first moves the cursor to the slider and clicks it, then starts scrolling
-
-    static QPoint getSliderPosition(U2OpStatus &os, QScrollBar *scrollbar);
-    static QPoint getUpArrowPosition(U2OpStatus &os, QScrollBar *scrollbar);
-    static QPoint getDownArrowPosition(U2OpStatus &os, QScrollBar *scrollbar);
-    static QPoint getAreaUnderSliderPosition(U2OpStatus &os, QScrollBar *scrollbar);
-    static QPoint getAreaOverSliderPosition(U2OpStatus &os, QScrollBar *scrollbar);
-
-private:
-    static QStyleOptionSlider initScrollbarOptions(U2OpStatus &os, QScrollBar *scrollbar);
-};
-
-} //namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
index 955248c..08238cf 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
@@ -30,9 +30,10 @@
 #endif
 
 #include <QString>
-#include "api/GTGlobals.h"
+#include "GTGlobals.h"
 
 namespace U2 {
+using namespace HI;
 
 class GTSequenceReadingModeDialog {
 public:
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
index 6e4a29f..a6f65e2 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
@@ -21,11 +21,11 @@
 
 #include "api/GTSequenceReadingModeDialogUtils.h"
 #include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
 #include <QtGui/QWidget>
@@ -39,7 +39,7 @@
 #include <QtWidgets/QLineEdit>
 #include <QtWidgets/QPushButton>
 #endif
-#include "api/GTRadioButton.h"
+#include <primitives/GTRadioButton.h>
 
 #define SEPARATE_MODE "separateMode"
 #define MERGE_MODE "mergeMode"
@@ -51,10 +51,11 @@
 
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTSequenceReadingModeDialogUtils"
 
-GTSequenceReadingModeDialogUtils::GTSequenceReadingModeDialogUtils(U2OpStatus &os, CustomScenario *scenario) : Filler(os, "MultipleDocumentsReadingModeSelectorController", scenario), dialog(NULL)
+GTSequenceReadingModeDialogUtils::GTSequenceReadingModeDialogUtils(HI::GUITestOpStatus &os, CustomScenario *scenario) : Filler(os, "MultipleDocumentsReadingModeSelectorController", scenario), dialog(NULL)
 {
 }
 
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
index b4e3b67..9c08ffb 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
@@ -22,7 +22,7 @@
 #ifndef GTSEQUENCEREADINGMODEDIALOGUTILS_H
 #define GTSEQUENCEREADINGMODEDIALOGUTILS_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QSpinBox>
@@ -31,13 +31,14 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 class GTSequenceReadingModeDialogUtils : public Filler {
 public:
     enum sequenceMode {Separate, Merge};
     enum Button {Ok, Cancel};
 
-    GTSequenceReadingModeDialogUtils(U2OpStatus &os, CustomScenario *scenario = NULL);
+    GTSequenceReadingModeDialogUtils(HI::GUITestOpStatus &os, CustomScenario *scenario = NULL);
     virtual void commonScenario();
 private:
     void selectMode();
diff --git a/src/plugins/GUITestBase/src/api/GTSlider.h b/src/plugins/GUITestBase/src/api/GTSlider.h
deleted file mode 100644
index 72cb807..0000000
--- a/src/plugins/GUITestBase/src/api/GTSlider.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GT_SLIDER_H_
-#define _U2_GT_SLIDER_H_
-
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSlider>
-#else
-#include <QtWidgets/QSlider>
-#endif
-
-#include "api/GTGlobals.h"
-
-namespace U2 {
-
-class GTSlider
-{
-public:
-    static void setValue(U2OpStatus &os, QSlider* slider, int value);
-};
-
-}
-
-#endif // GTSLIDER_H
diff --git a/src/plugins/GUITestBase/src/api/GTSpinBox.h b/src/plugins/GUITestBase/src/api/GTSpinBox.h
deleted file mode 100644
index ea4379d..0000000
--- a/src/plugins/GUITestBase/src/api/GTSpinBox.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GT_SPINBOX_H_
-#define _U2_GT_SPINBOX_H_
-
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QSpinBox>
-#endif
-
-
-namespace U2 {
-
-class GTSpinBox {
-public:
-    // fails if the spinBox is NULL or can't set value
-    static void setValue(U2OpStatus& os, QSpinBox *spinBox, int v, GTGlobals::UseMethod useMethod = GTGlobals::UseMouse);
-    static void checkLimits(U2OpStatus &os, QSpinBox *spinBox, int min, int max);
-};
-
-}
-#endif // _U2_GT_SPINBOX_H_
-
diff --git a/src/plugins/GUITestBase/src/api/GTSystem.h b/src/plugins/GUITestBase/src/api/GTSystem.h
deleted file mode 100644
index 88cd5bc..0000000
--- a/src/plugins/GUITestBase/src/api/GTSystem.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GUI_GTSYSTEM_H_
-#define _U2_GUI_GTSYSTEM_H_
-
-#include "api/GTGlobals.h"
-
-namespace U2 {
-
-class GTSystem {
-public:
-
-    static void wait(U2OpStatus &os, int msec);
-    static void fail(U2OpStatus &os);  //this method is used for safely exiting the application after some error. should it write in the log?
-
-protected:
-
-
-};
-
-} //namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/api/GTTabWidget.h b/src/plugins/GUITestBase/src/api/GTTabWidget.h
deleted file mode 100644
index 511b19d..0000000
--- a/src/plugins/GUITestBase/src/api/GTTabWidget.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GT_TABWIDGET_H_
-#define _U2_GT_TABWIDGET_H_
-
-#include "api/GTGlobals.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTabWidget>
-#else
-#include <QtWidgets/QTabWidget>
-#endif
-
-namespace U2 {
-
-class GTTabWidget {
-public:
-    // fails if the tabwidget is NULL, index is not in a tabwidget's range
-    // or a tabwidget's index differs from a given index in the end of method's execution
-    static void setCurrentIndex(U2OpStatus& os, QTabWidget *tabWidget, int index);
-    static QTabBar* getTabBar(U2OpStatus &os, QTabWidget* tabWidget);
-    static void clickTab(U2OpStatus &os, QTabWidget* tabWidget, int idx, Qt::MouseButton button = Qt::LeftButton);
-    static void clickTab(U2OpStatus &os, QTabWidget* tabWidget, QString tabName, Qt::MouseButton button = Qt::LeftButton);
-    static QString getTabName(U2OpStatus &os, QTabWidget* tabWidget, int idx);
-
-
-};
-
-}
-#endif // _U2_GT_TABWIDGET_H_
diff --git a/src/plugins/GUITestBase/src/api/GTToolbar.h b/src/plugins/GUITestBase/src/api/GTToolbar.h
deleted file mode 100644
index bdebbed..0000000
--- a/src/plugins/GUITestBase/src/api/GTToolbar.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GUI_GTTOOLBAR_H_
-#define _U2_GUI_GTTOOLBAR_H_
-
-#include "api/GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolBar>
-#else
-#include <QtWidgets/QToolBar>
-#endif
-
-namespace U2 {
-
-class GTToolbar {
-public:
-
-    static QToolBar* getToolbar(U2OpStatus &os, const QString &toolbarSysName);
-
-    static QWidget* getWidgetForAction(U2OpStatus &os, const QToolBar *toolbar, QAction *action);
-    static QWidget* getWidgetForActionName(U2OpStatus &os, const QToolBar *toolbar, const QString &actionName);
-    static QWidget* getWidgetForActionTooltip(U2OpStatus &os, const QToolBar *toolbar, const QString &tooltip);
-
-    static void clickButtonByTooltipOnToolbar(U2OpStatus &os, const QString &toolbarSysName, const QString &tooltip);
-
-private:
-
-    static QAction* getToolbarAction(U2OpStatus &os, const QString &actionName, const QToolBar *toolbar);
-
-
-};
-
-} // namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/api/GTTreeWidget.h b/src/plugins/GUITestBase/src/api/GTTreeWidget.h
deleted file mode 100644
index ded9e61..0000000
--- a/src/plugins/GUITestBase/src/api/GTTreeWidget.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GT_TREE_WIDGET_H_
-#define _U2_GT_TREE_WIDGET_H_
-
-#include "api/GTGlobals.h"
-
-class QTreeWidget;
-class QTreeWidgetItem;
-
-namespace U2 {
-
-class GTTreeWidget {
-public:
-    // expands treeWidget to the item and returns item's rect
-    static QRect getItemRect(U2OpStatus &os, QTreeWidgetItem* item);
-
-    static QPoint getItemCenter(U2OpStatus &os, QTreeWidgetItem* item);
-
-    // recursively expands the tree making the given item visible
-    // fails if item is NULL, item is hidden or item wasn't expanded
-    static void expand(U2OpStatus &os, QTreeWidgetItem* item);
-
-    // Checks the tree item or unchecks it if it is already checked
-    static void checkItem(U2OpStatus &os, QTreeWidgetItem *item, int column = 0, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-
-    // gets all items under root recursively and returns a list of them
-    static QList<QTreeWidgetItem*> getItems(QTreeWidgetItem* root);
-    static QList<QTreeWidgetItem*> getItems(U2OpStatus &os, QTreeWidget *treeWidget);
-    static QStringList getItemNames(U2OpStatus &os, QTreeWidget *treeWidget);
-
-    static QTreeWidgetItem * findItem(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
-
-    static QList<QTreeWidgetItem *> findItems(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
-
-    static void click(U2OpStatus &os, QTreeWidgetItem* item, int column = -1);  //  column == -1 - item center
-
-    // Returns item level, 0 - top level item
-    static int getItemLevel(U2OpStatus &os, QTreeWidgetItem *item);
-private:
-    static QTreeWidgetItem * findItemPrivate(U2OpStatus &os, QTreeWidget *tree, const QString &text, QTreeWidgetItem *parent = NULL, int column = 0, const GTGlobals::FindOptions &options = GTGlobals::FindOptions());
-};
-
-} // namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/api/GTWebView.h b/src/plugins/GUITestBase/src/api/GTWebView.h
deleted file mode 100644
index 156483d..0000000
--- a/src/plugins/GUITestBase/src/api/GTWebView.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
-* http://ugene.unipro.ru
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public 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 GTWEBVIEW_H
-#define GTWEBVIEW_H
-
-#include "api/GTGlobals.h"
-
-class QWebView;
-class QWebElement;
-
-namespace U2 {
-
-class GTWebView{
-public:
-    static QWebElement findElement(U2OpStatus &os, QWebView *view, QString text, QString tag = "*", bool exactMatch = false);
-    static void checkElement(U2OpStatus &os, QWebView *view, QString text, QString tag = "*", bool exists = true, bool exactMatch = false);
-    static bool doesElementExist(U2OpStatus &os, QWebView *view, const QString &text, const QString &tag = "*", bool exactMatch = false);
-
-    static void click(U2OpStatus &os, QWebView *view, QWebElement el, Qt::MouseButton button = Qt::LeftButton);
-    static void selectElementText(U2OpStatus &os, QWebView *view, QWebElement el);
-    static QWebElement findTreeElement(U2OpStatus &os, QWebView *view, QString text);
-    static QWebElement findContextMenuElement(U2OpStatus &os, QWebView *view, QString text);
-
-    static void traceAllWebElements(U2OpStatus &os, QWebView *view);
-
-};
-
-}
-
-#endif // GTWEBVIEW_H
diff --git a/src/plugins/GUITestBase/src/api/GTWidget.cpp b/src/plugins/GUITestBase/src/api/GTWidget.cpp
deleted file mode 100644
index 24e921b..0000000
--- a/src/plugins/GUITestBase/src/api/GTWidget.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "GTWidget.h"
-#include "GTMouseDriver.h"
-#include <U2Core/AppContext.h>
-#include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QMainWindow>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QComboBox>
-#endif
-
-// TODO: this is a fast fix
-#include <U2View/ADVSingleSequenceWidget.h>
-
-namespace U2 {
-
-#define GT_CLASS_NAME "GTWidget"
-
-#define GT_METHOD_NAME "click"
-void GTWidget::click(U2OpStatus &os, QWidget *w, Qt::MouseButton mouseButton, QPoint p, bool safe) {
-
-    GTGlobals::sleep(100);
-    GT_CHECK(w != NULL, "widget is NULL");
-    GT_CHECK(w->isEnabled() == true, "widget " + w->objectName() + "is not enabled");
-
-    if (p.isNull()) {
-        p = w->rect().center();
-
-        // TODO: this is a fast fix
-        QWidget *adv = qobject_cast<ADVSingleSequenceWidget*>(w);
-        if (adv) {
-            p += QPoint(0, 8);
-        }
-    }
-    GTMouseDriver::moveTo(os, w->mapToGlobal(p));
-    if(safe){
-        GTMouseDriver::click(os, mouseButton);
-    }else{
-        //sometimes GTGlobals::sleep(os) should not be used after clicking
-        GTMouseDriver::press(os, mouseButton);
-        GTMouseDriver::release(os, mouseButton);
-    }
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "setFocus"
-void GTWidget::setFocus(U2OpStatus &os, QWidget *w) {
-
-    GT_CHECK(w != NULL, "widget is NULL");
-
-    GTWidget::click(os, w);
-    GTGlobals::sleep(1000);
-
-    if(!qobject_cast<QComboBox*>(w)){
-        GT_CHECK(w->hasFocus(), "Can't set focus on widget " + w->objectName());
-    }
-
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "findWidget"
-QWidget* GTWidget::findWidget(U2OpStatus &os, const QString &widgetName, QWidget *parentWidget, const GTGlobals::FindOptions& options) {
-    Q_UNUSED(os);
-
-    if (parentWidget == NULL) {
-        parentWidget = AppContext::getMainWindow()->getQMainWindow();
-    }
-    QWidget* widget = parentWidget->findChild<QWidget*>(widgetName);
-
-    if (options.failIfNull) {
-        GT_CHECK_RESULT(widget != NULL, "Widget " + widgetName + " not found", NULL);
-    }
-
-    return widget;
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "getWidgetCenter"
-QPoint GTWidget::getWidgetCenter(U2OpStatus &os, QWidget *w){
-    Q_UNUSED(os)
-    return w->mapToGlobal(w->rect().center());
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "findButtonByText"
-QAbstractButton* GTWidget::findButtonByText(U2OpStatus &os, const QString &text, QWidget *parentWidget, const GTGlobals::FindOptions& options) {
-
-    if (parentWidget == NULL) {
-        parentWidget = AppContext::getMainWindow()->getQMainWindow();
-    }
-    QList<QAbstractButton*> buttonList = parentWidget->findChildren<QAbstractButton*>();
-    QList<QAbstractButton*> foundButtonList;
-    QStringList sL;
-
-    foreach(QAbstractButton* but, buttonList){
-        sL.append(but->text());
-        if (but->text().contains(text, Qt::CaseInsensitive)){
-            foundButtonList << but;
-        }
-    }
-
-    GT_CHECK_RESULT(foundButtonList.count()<=1, QString("there are %1 buttons with such text").arg(foundButtonList.count()), NULL);
-
-    if (options.failIfNull) {
-        GT_CHECK_RESULT(foundButtonList.count() != 0, QString("button with this text <%1> not found").arg(text), NULL);
-    }
-
-    return foundButtonList.takeFirst();
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "findWidget"
-void GTWidget::getAllWidgetsInfo(U2OpStatus &os, QWidget *parent){
-
-    if(parent == NULL){
-        parent = qobject_cast<QWidget*>(AppContext::getMainWindow()->getQMainWindow());
-    }
-
-    QList<QObject*> list= parent->findChildren<QObject*>();
-    QString actStr;
-    actStr.append("Getting all info about widget\n");
-
-    foreach(QObject* act, list){
-        actStr.append(act->objectName()+ "  " + act->metaObject()->className() + "  " + /*QString("%1").arg(act->isVisible()) + " " + QString("%1").arg(act->geometry().width()) +*/ "\n");
-    }
-    CHECK_SET_ERR(false, actStr);
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "getColor"
-QColor GTWidget::getColor(U2OpStatus &os, QWidget *w, const QPoint &p) {
-    Q_UNUSED(os);
-    GT_CHECK_RESULT(NULL != w, "Widget is NULL", QColor());
-    QPixmap pixmap = w->grab(w->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(p);
-    QColor result = QColor(rgb);
-    return result;
-}
-#undef GT_METHOD_NAME
-
-QImage GTWidget::getImage(U2OpStatus &os, QWidget *w){
-    Q_UNUSED(os);
-    QPixmap pixmap = QPixmap::grabWidget(w, w->rect());
-    QImage img = pixmap.toImage();
-    return img;
-}
-
-#define GT_METHOD_NAME "clickLabelLink"
-void GTWidget::clickLabelLink(U2OpStatus &os, QWidget *label, int step){
-
-    QRect r = label->rect();
-
-    int left = r.left();
-    int right = r.right();
-    int top = r.top();
-    int bottom = r.bottom();
-    for(int i = left; i < right; i+=step){
-        for(int j = top; j < bottom; j+=step){
-            GTMouseDriver::moveTo(os, label->mapToGlobal(QPoint(i,j)));
-            if(label->cursor().shape() == Qt::PointingHandCursor){
-                GTGlobals::sleep(500);
-                GTMouseDriver::click(os);
-                return;
-            }
-        }
-    }
-    GT_CHECK(false, "label does not contain link");
-}
-#undef GT_METHOD_NAME
-
-#undef GT_CLASS_NAME
-
-} //namespace
diff --git a/src/plugins/GUITestBase/src/api/GTWidget.h b/src/plugins/GUITestBase/src/api/GTWidget.h
deleted file mode 100644
index 9d4b41d..0000000
--- a/src/plugins/GUITestBase/src/api/GTWidget.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GUI_GTWIDGET_H_
-#define _U2_GUI_GTWIDGET_H_
-
-#include "api/GTGlobals.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAbstractButton>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QPushButton>
-#endif
-
-namespace U2 {
-
-class GTWidget {
-public:
-    // fails if widget is NULL, not visible or not enabled; if p isNull, clicks on the center of widget
-    static void click(U2OpStatus &os, QWidget *w, Qt::MouseButton mouseButton = Qt::LeftButton, QPoint p = QPoint(), bool safe = true);
-
-    // fails if widget is NULL, GTWidget::click fails or widget hasn't got focus
-    static void setFocus(U2OpStatus &os, QWidget *w);
-
-    // finds widget with the given object name using given FindOptions. Parent widget is QMainWindow, if not set
-    static QWidget *findWidget(U2OpStatus &os, const QString &widgetName, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QPoint getWidgetCenter(U2OpStatus &os, QWidget* w);
-
-    static QAbstractButton *findButtonByText(U2OpStatus &os, const QString &text, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-
-    //returns color of point p in widget w coordinates
-    static QColor getColor(U2OpStatus &os, QWidget* w, const QPoint &p);
-    static QImage getImage(U2OpStatus &os, QWidget* w);
-
-    //this method writes info about all widgets to opStatus
-    static void getAllWidgetsInfo(U2OpStatus &os, QWidget* parent=NULL);
-
-    static void clickLabelLink(U2OpStatus &os, QWidget* label, int step = 10);
-
-    #define GT_CLASS_NAME "GTWidget"
-    #define GT_METHOD_NAME "findWidget"
-    template<class T>
-    static T findExactWidget(U2OpStatus &os, const QString &widgetName, QWidget *parentWidget = NULL, const GTGlobals::FindOptions& options= GTGlobals::FindOptions()){
-        T result = NULL;
-        QWidget* w = findWidget(os, widgetName, parentWidget, options);
-        result = qobject_cast<T>(w);
-        if(options.failIfNull == true){
-            GT_CHECK_RESULT(w != NULL, "widget " + widgetName + " not found", result);
-            GT_CHECK_RESULT(result != NULL, "widget of specefied class not found, but there is another widget with the same name, its class is: " + QString(w->metaObject()->className()), result);
-        }
-        return result;
-    }
-    #undef GT_METHOD_NAME
-    #undef GT_CLASS_NAME
-};
-
-} //namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.mm b/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.mm
deleted file mode 100644
index 3eab95c..0000000
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.mm
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "GTMenuPrivateMac.h"
-
-namespace U2 {
-
-#ifdef __OBJC__
-
-#define GT_CLASS_NAME "GTMenuPrivateMac"
-
-namespace {
-
-inline NSString *qStringToNSString(const QString &qstr) {
-    CFStringRef cfStringRef = CFStringCreateWithCharacters(0, reinterpret_cast<const UniChar *>(qstr.unicode()), qstr.length());
-    return [const_cast<NSString *>(reinterpret_cast<const NSString *>(cfStringRef)) autorelease];
-}
-}
-
-#define GT_METHOD_NAME "clickMainMenuItem"
-void GTMenuPrivateMac::clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath) {
-    NSMenu *menu = [NSApp mainMenu];
-    foreach (const QString &itemTitle, itemPath) {
-        GT_CHECK(NULL != menu, QString("Menu not found: '%1'").arg(itemTitle));
-        menu = clickMenuItem(os, menu, itemTitle);
-    }
-}
-#undef GT_METHOD_NAME
-
-#define GT_METHOD_NAME "clickMenuItem"
-NSMenu * GTMenuPrivateMac::clickMenuItem(U2OpStatus &os, NSMenu *menu, const QString &itemTitle) {
-    NSMenuItem *item = [menu itemWithTitle:qStringToNSString(itemTitle)];
-    GT_CHECK_RESULT(NULL != item, QString("Menu item not found: '%1'").arg(itemTitle), NULL);
-    NSMenu *submenu = [item submenu];
-    [menu performActionForItemAtIndex:[menu indexOfItem:item]];
-    return submenu;
-}
-#undef GT_METHOD_NAME
-
-#undef GT_CLASS_NAME
-
-}   // namespace U2
-
-#endif // __OBJC__
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
index 0394334..ab2f9c2 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
+++ b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
@@ -19,13 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTKeyboardDriver.h"
+#include <drivers/GTKeyboardDriver.h>
 
 #include "EscapeClicker.h"
 
 namespace U2 {
+using namespace HI;
 
-EscapeClicker::EscapeClicker(U2OpStatus &os, const QString &name, CustomScenario *scenario)
+EscapeClicker::EscapeClicker(HI::GUITestOpStatus &os, const QString &name, CustomScenario *scenario)
     : Filler(os, name, scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
index 9b7cb7a..eb75a51 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
+++ b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
@@ -22,14 +22,14 @@
 #ifndef ESCAPECLICKER_H
 #define ESCAPECLICKER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class EscapeClicker: public Filler
 {
 public:
-    EscapeClicker(U2OpStatus &os, const QString &name = "", CustomScenario *scenario = NULL);
+    EscapeClicker(HI::GUITestOpStatus &os, const QString &name = "", CustomScenario *scenario = NULL);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.h b/src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.h
deleted file mode 100644
index 48b5ac5..0000000
--- a/src/plugins/GUITestBase/src/runnables/qt/MessageBoxFiller.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GT_RUNNABLES_MESSAGE_BOX_FILLER_H_
-#define _U2_GT_RUNNABLES_MESSAGE_BOX_FILLER_H_
-
-#include "GTUtilsDialog.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-
-namespace U2 {
-
-    class MessageBoxDialogFiller : public Filler {
-    public:
-        MessageBoxDialogFiller(U2OpStatus &_os, QMessageBox::StandardButton _b, QString _message = "", const QString &objectName = "")
-            :Filler(_os, objectName), b(_b),buttonText(""), message(_message){}
-        MessageBoxDialogFiller(U2OpStatus &_os, QString _buttonText, QString _message = "")
-        :Filler(_os, ""), b(QMessageBox::NoButton),buttonText(_buttonText), message(_message){}
-        virtual void run();
-    protected:
-        QMessageBox::StandardButton b;
-        QString buttonText,message;
-    };
-
-    class AppCloseMessageBoxDialogFiller : public Filler {
-    public:
-        AppCloseMessageBoxDialogFiller(U2OpStatus &_os) : Filler(_os, "") {}
-        void run();
-    };
-
-    class MessageBoxNoToAllOrNo : public Filler {
-    public:
-        MessageBoxNoToAllOrNo(U2OpStatus &_os) : Filler(_os, ""){}
-        virtual void run();
-    };
-
-    class MessageBoxOpenAnotherProject : public Filler {
-    public:
-        MessageBoxOpenAnotherProject(U2OpStatus &_os) : Filler(_os, ""){}
-        virtual void run();
-    };
-
-    class InputIntFiller : public Filler {
-    public:
-        InputIntFiller(U2OpStatus &os, int value);
-        void commonScenario();
-    private:
-        int value;
-    };
-}
-
-#endif
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 564bbbf..a04eaef 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
@@ -26,15 +26,16 @@
 #include <QtWidgets/QApplication>
 #endif
 
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 #include "AddFolderDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
-AddFolderDialogFiller::AddFolderDialogFiller(U2OpStatus &os, const QString &folderName, GTGlobals::UseMethod acceptMethod)
+AddFolderDialogFiller::AddFolderDialogFiller(HI::GUITestOpStatus &os, const QString &folderName, GTGlobals::UseMethod acceptMethod)
     : Filler(os, "FolderNameDialog"), folderName(folderName), acceptMethod(acceptMethod)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
index d58811f..d6acb7a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _ADD_FOLDER_DIALOG_FILLER_H_
 #define _ADD_FOLDER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class AddFolderDialogFiller : public Filler {
 public:
-    AddFolderDialogFiller(U2OpStatus &os, const QString &folderName, GTGlobals::UseMethod acceptMethod);
+    AddFolderDialogFiller(HI::GUITestOpStatus &os, const QString &folderName, GTGlobals::UseMethod acceptMethod);
     void run();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
index b7bd8b0..22b89b7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
@@ -22,15 +22,16 @@
 #include <QApplication>
 
 #include "AddNewDocumentDialogFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::AlignShortReadsFiller"
 
-AddNewDocumentDialogFiller::AddNewDocumentDialogFiller(U2OpStatus &os, const QString &format, const QString &path) :
+AddNewDocumentDialogFiller::AddNewDocumentDialogFiller(HI::GUITestOpStatus &os, const QString &format, const QString &path) :
     Filler(os, "AddNewDocumentDialog"),
     format(format),
     path(path)
@@ -38,7 +39,7 @@ AddNewDocumentDialogFiller::AddNewDocumentDialogFiller(U2OpStatus &os, const QSt
 
 }
 
-AddNewDocumentDialogFiller::AddNewDocumentDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+AddNewDocumentDialogFiller::AddNewDocumentDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "AddNewDocumentDialog", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
index 3670a2b..db7c0fd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_ADD_NEW_DOCUMENT_DIALOG_FILLER_H_
 #define _U2_GT_ADD_NEW_DOCUMENT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class AddNewDocumentDialogFiller : public Filler {
 public:
-    AddNewDocumentDialogFiller(U2OpStatus &os, const QString &format, const QString &path);
-    AddNewDocumentDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    AddNewDocumentDialogFiller(HI::GUITestOpStatus &os, const QString &format, const QString &path);
+    AddNewDocumentDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
index 578c541..7815bb2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
@@ -27,13 +27,15 @@
 #include <QPushButton>
 
 #include "AlignShortReadsDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTGroupBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
@@ -72,20 +74,7 @@ void AlignShortReadsFiller::commonScenario() {
 
     GTGlobals::sleep(500);
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "ok button is NULL");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep(5000);
-    if (!dialog->isVisible()){
-        return;
-    }
-
-    button = box->button(QDialogButtonBox::Cancel);
-    GT_CHECK(button !=NULL, "cancel button is NULL");
-    GTWidget::click(os, button);
-
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 
@@ -272,9 +261,9 @@ void AlignShortReadsFiller::setBowtie2AdditionalParameters(Bowtie2Parameters* bo
 
 #define GT_METHOD_NAME "setUgaAdditionalParameters"
 void AlignShortReadsFiller::setUgaAdditionalParameters(UgeneGenomeAlignerParams *ugaParameters, QWidget* dialog) {
-    QGroupBox *mismatchesGroupbox = qobject_cast<QGroupBox *>(GTWidget::findWidget(os, "groupBox_mismatches", dialog));
-    mismatchesGroupbox->setChecked(ugaParameters->mismatchesAllowed);
-
+    if(ugaParameters->mismatchesAllowed){
+        GTGroupBox::setChecked(os, "groupBox_mismatches", dialog);
+    }
     GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "firstMatchBox", dialog), ugaParameters->useBestMode);
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
index 3b9496a..3a5b0b4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
@@ -22,10 +22,11 @@
 #ifndef _U2_GT_ALIGN_SHORT_READS_DIALOG_FILLER_H_
 #define _U2_GT_ALIGN_SHORT_READS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 // Copy file with reference sequence into sandbox: test can create an index for it in the same dir.
 // Also, result file will be created in the same dir.
@@ -197,12 +198,12 @@ public:
         static const QMap<IndexAlgorithm, QString> indexAlgorithmMap;
     };
 
-    AlignShortReadsFiller(U2OpStatus &os, Parameters* parameters) :
+    AlignShortReadsFiller(HI::GUITestOpStatus &os, Parameters* parameters) :
         Filler(os, "AssemblyToRefDialog"),
         parameters(parameters) {
         CHECK_SET_ERR(parameters, "Invalid filler parameters: NULL pointer");
     }
-    AlignShortReadsFiller(U2OpStatus &os, CustomScenario* c): Filler(os, "AssemblyToRefDialog", c), parameters(NULL) {}
+    AlignShortReadsFiller(HI::GUITestOpStatus &os, CustomScenario* c): Filler(os, "AssemblyToRefDialog", c), parameters(NULL) {}
 
     virtual void commonScenario();
 
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 df6c2b9..607ec7d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
@@ -20,14 +20,16 @@
  */
 #include "AppSettingsDialogFiller.h"
 
-#include "runnables/qt/ColorDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTListWidget.h"
+#include <base_dialogs/ColorDialogFiller.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTTreeWidget.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTListWidget.h>
+
+#include <U2Core/Log.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -50,6 +52,7 @@
 #include <QTextBrowser>
 
 namespace U2{
+using namespace HI;
 
 #define GT_CLASS_NAME "AppSettingsDialogFiller"
 QMap<AppSettingsDialogFiller::Tabs, QString> AppSettingsDialogFiller::initMap(){
@@ -70,7 +73,7 @@ QMap<AppSettingsDialogFiller::Tabs, QString> AppSettingsDialogFiller::initMap(){
 
 const QMap<AppSettingsDialogFiller::Tabs, QString> AppSettingsDialogFiller::tabMap = initMap();
 
-AppSettingsDialogFiller::AppSettingsDialogFiller(U2OpStatus &os, CustomScenario *customScenario) :
+AppSettingsDialogFiller::AppSettingsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario) :
     Filler(os, "AppSettingsDialog", customScenario),
     itemStyle(none),
     r(-1),
@@ -106,16 +109,12 @@ void AppSettingsDialogFiller::commonScenario(){
         GTWidget::click(os,colorWidget);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setExternalToolPath"
-void AppSettingsDialogFiller::setExternalToolPath(U2OpStatus &os, const QString &toolName, const QString &toolPath){
+void AppSettingsDialogFiller::setExternalToolPath(HI::GUITestOpStatus &os, const QString &toolName, const QString &toolPath){
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
@@ -124,14 +123,13 @@ void AppSettingsDialogFiller::setExternalToolPath(U2OpStatus &os, const QString
     QTreeWidget* treeWidget = GTWidget::findExactWidget<QTreeWidget*>(os, "treeWidget", dialog);
     QList<QTreeWidgetItem*> listOfItems = treeWidget->findItems("", Qt::MatchContains | Qt::MatchRecursive);
     bool set = false;
-    foreach (QTreeWidgetItem* item, listOfItems){
-        if(item->text(0) == toolName){
-            QWidget* itemWid = treeWidget->itemWidget(item, 1);
-            QLineEdit* lineEdit = itemWid->findChild<QLineEdit*>("PathLineEdit");
+    foreach (QTreeWidgetItem* item, listOfItems) {
+        if (item->text(0) == toolName) {
+            QWidget *itemWid = treeWidget->itemWidget(item, 1);
+            QLineEdit *lineEdit = itemWid->findChild<QLineEdit*>("PathLineEdit");
             treeWidget->scrollToItem(item);
             GTLineEdit::setText(os, lineEdit, toolPath);
-            GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(0, -30));
-            GTMouseDriver::click(os);
+            GTTreeWidget::click(os, item, 0);
             set = true;
         }
     }
@@ -140,7 +138,7 @@ void AppSettingsDialogFiller::setExternalToolPath(U2OpStatus &os, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getExternalToolPath"
-QString AppSettingsDialogFiller::getExternalToolPath(U2OpStatus &os, const QString &toolName){
+QString AppSettingsDialogFiller::getExternalToolPath(HI::GUITestOpStatus &os, const QString &toolName){
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", "");
 
@@ -161,7 +159,7 @@ QString AppSettingsDialogFiller::getExternalToolPath(U2OpStatus &os, const QStri
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isExternalToolValid"
-bool AppSettingsDialogFiller::isExternalToolValid(U2OpStatus &os, const QString &toolName){
+bool AppSettingsDialogFiller::isExternalToolValid(HI::GUITestOpStatus &os, const QString &toolName){
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", false);
 
@@ -182,7 +180,7 @@ bool AppSettingsDialogFiller::isExternalToolValid(U2OpStatus &os, const QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clearToolPath"
-void AppSettingsDialogFiller::clearToolPath(U2OpStatus &os, const QString &toolName) {
+void AppSettingsDialogFiller::clearToolPath(HI::GUITestOpStatus &os, const QString &toolName) {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
@@ -205,7 +203,7 @@ void AppSettingsDialogFiller::clearToolPath(U2OpStatus &os, const QString &toolN
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "OpenTab"
-void AppSettingsDialogFiller::openTab(U2OpStatus &os, Tabs tab){
+void AppSettingsDialogFiller::openTab(HI::GUITestOpStatus &os, Tabs tab){
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
@@ -222,13 +220,13 @@ void AppSettingsDialogFiller::openTab(U2OpStatus &os, Tabs tab){
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-NewColorSchemeCreator::NewColorSchemeCreator(U2OpStatus &_os, QString _schemeName, alphabet _al, Action _act, bool cancel)
+NewColorSchemeCreator::NewColorSchemeCreator(HI::GUITestOpStatus &_os, QString _schemeName, alphabet _al, Action _act, bool cancel)
     : Filler(_os, "AppSettingsDialog"), schemeName(_schemeName), al(_al), act(_act), cancel(cancel)
 {
 
 }
 
-NewColorSchemeCreator::NewColorSchemeCreator(U2OpStatus &os, CustomScenario *c): Filler(os, "AppSettingsDialog", c){}
+NewColorSchemeCreator::NewColorSchemeCreator(HI::GUITestOpStatus &os, CustomScenario *c): Filler(os, "AppSettingsDialog", c){}
 
 #define GT_CLASS_NAME "NewColorSchemeCreator"
 #define GT_METHOD_NAME "commonScenario"
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 aceef9f..816379d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
@@ -21,9 +21,10 @@
 #ifndef APPSETTINGSDIALOGFILLER_H
 #define APPSETTINGSDIALOGFILLER_H
 
-#include "api/GTFileDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2{
+using namespace HI;
 
 class AppSettingsDialogFiller: public Filler
 {
@@ -31,18 +32,18 @@ public:
     enum style{minimal,extended,none};
     enum Tabs{General, Resourses, Network, FileFormat, Directories, Logging, AlignmentColorScheme, GenomeAligner,
              WorkflowDesigner, ExternalTools, OpenCL};
-    AppSettingsDialogFiller(U2OpStatus &_os, style _itemStyle=extended):Filler(_os,"AppSettingsDialog"),
+    AppSettingsDialogFiller(HI::GUITestOpStatus &_os, style _itemStyle=extended):Filler(_os,"AppSettingsDialog"),
         itemStyle(_itemStyle),r(-1),g(-1),b(-1){}
-    AppSettingsDialogFiller(U2OpStatus &_os, int _r,int _g, int _b):Filler(_os,"AppSettingsDialog"),
+    AppSettingsDialogFiller(HI::GUITestOpStatus &_os, int _r,int _g, int _b):Filler(_os,"AppSettingsDialog"),
         itemStyle(none),r(_r),g(_g),b(_b){}
-    AppSettingsDialogFiller(U2OpStatus &os, CustomScenario *customScenario);
+    AppSettingsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario);
     void commonScenario();
 
-    static void setExternalToolPath(U2OpStatus &os, const QString& toolName, const QString& toolPath);
-    static QString getExternalToolPath(U2OpStatus &os, const QString& toolName);
-    static void openTab(U2OpStatus &os, Tabs tab);
-    static bool isExternalToolValid(U2OpStatus &os, const QString& toolName);
-    static void clearToolPath(U2OpStatus &os, const QString& toolName);
+    static void setExternalToolPath(HI::GUITestOpStatus &os, const QString& toolName, const QString& toolPath);
+    static QString getExternalToolPath(HI::GUITestOpStatus &os, const QString& toolName);
+    static void openTab(HI::GUITestOpStatus &os, Tabs tab);
+    static bool isExternalToolValid(HI::GUITestOpStatus &os, const QString& toolName);
+    static void clearToolPath(HI::GUITestOpStatus &os, const QString& toolName);
 private:
     style itemStyle;
     int r,g,b;
@@ -54,8 +55,8 @@ class NewColorSchemeCreator: public Filler{
 public:
     enum alphabet{amino,nucl};
     enum Action{Create, Delete};
-    NewColorSchemeCreator(U2OpStatus &_os, QString _schemeName, alphabet _al, Action _act = Create, bool cancel = false);
-    NewColorSchemeCreator(U2OpStatus &os, CustomScenario* c);
+    NewColorSchemeCreator(HI::GUITestOpStatus &_os, QString _schemeName, alphabet _al, Action _act = Create, bool cancel = false);
+    NewColorSchemeCreator(HI::GUITestOpStatus &os, CustomScenario* c);
     virtual void commonScenario();
 
 private:
@@ -68,9 +69,9 @@ private:
 class CreateAlignmentColorSchemeDialogFiller: public Filler{
 public:
 
-    CreateAlignmentColorSchemeDialogFiller(U2OpStatus &os, QString _schemeName, NewColorSchemeCreator::alphabet _al):
+    CreateAlignmentColorSchemeDialogFiller(HI::GUITestOpStatus &os, QString _schemeName, NewColorSchemeCreator::alphabet _al):
         Filler(os, "CreateMSAScheme"), schemeName(_schemeName), al(_al){}
-    CreateAlignmentColorSchemeDialogFiller(U2OpStatus &os, CustomScenario *c): Filler(os, "CreateMSAScheme", c){}
+    CreateAlignmentColorSchemeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c): Filler(os, "CreateMSAScheme", c){}
     virtual void commonScenario();
 private:
     QString schemeName;
@@ -79,8 +80,8 @@ private:
 
 class ColorSchemeDialogFiller: public Filler{
 public:
-    ColorSchemeDialogFiller(U2OpStatus &os): Filler(os, "ColorSchemaDialog"){}
-    ColorSchemeDialogFiller(U2OpStatus &os, CustomScenario *c): Filler(os, "ColorSchemaDialog", c){}
+    ColorSchemeDialogFiller(HI::GUITestOpStatus &os): Filler(os, "ColorSchemaDialog"){}
+    ColorSchemeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c): Filler(os, "ColorSchemaDialog", c){}
     virtual void commonScenario();
 };
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
index 29f3230..0f48671 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
@@ -1,9 +1,9 @@
 #include "BuildIndexDialogFiller.h"
 
-#include "api/GTFileDialog.h"
-#include "api/GTComboBox.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
 #include <QtGui/QPushButton>
@@ -44,10 +44,7 @@ void BuildIndexDialogFiller::run() {
         indexFileNameEdit->setText(indPath + indFileName);
     }
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "ok button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
index 020120f..a90ab1f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_BUILD_INDEX_DIALOG_FILLER_H_
 #define _U2_GT_BUILD_INDEX_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class BuildIndexDialogFiller : public Filler {
 public:
-    BuildIndexDialogFiller(U2OpStatus &os,
+    BuildIndexDialogFiller(HI::GUITestOpStatus &os,
                            const QString &_refPath,
                            const QString &_refFileName,
                            const QString &_method = "UGENE Genome Aligner",
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
index 43cb40e..4907b10 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
@@ -30,13 +30,13 @@
 
 #include "CommonImportOptionsDialogFiller.h"
 #include "ImportOptionsWidgetFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
-
+using namespace HI;
 #define GT_CLASS_NAME "GTUtilsDialog::CommonImportOptionsDialogFiller"
 
-CommonImportOptionsDialogFiller::CommonImportOptionsDialogFiller(U2OpStatus& os, const QVariantMap& data) :
+CommonImportOptionsDialogFiller::CommonImportOptionsDialogFiller(HI::GUITestOpStatus& os, const QVariantMap& data) :
     Filler(os, "CommonImportOptionsDialog"),
     data(data)
 {
@@ -46,6 +46,7 @@ CommonImportOptionsDialogFiller::CommonImportOptionsDialogFiller(U2OpStatus& os,
 void CommonImportOptionsDialogFiller::run() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(NULL != dialog, "activeModalWidget is NULL");
+    GTWidget::clickWindowTitle(os, dialog);
 
     ImportOptionsWidget* optionsWidget = qobject_cast<ImportOptionsWidget*>(GTWidget::findWidget(os, "optionsWidget", dialog));
     GT_CHECK(NULL != optionsWidget, "optionsWidget is NULL");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
index 9587664..b92ec13 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
@@ -22,13 +22,13 @@
 #ifndef _U2_COMMON_IMPORT_OPTIONS_DIALOG_FILLER_H_
 #define _U2_COMMON_IMPORT_OPTIONS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class CommonImportOptionsDialogFiller : public Filler {
 public:
-    CommonImportOptionsDialogFiller(U2OpStatus& os, const QVariantMap& data);
+    CommonImportOptionsDialogFiller(HI::GUITestOpStatus& os, const QVariantMap& data);
 
     void run();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
index 878ecf8..91ba6a0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
@@ -20,7 +20,7 @@
  */
 
 #include "ConvertAssemblyToSAMDialogFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
 #include <QtGui/QPushButton>
@@ -44,11 +44,7 @@ void ConvertAssemblyToSAMDialogFiller::run() {
     GTUtilsDialog::waitForDialog(os, ob);
     GTWidget::click(os, GTWidget::findWidget(os,"setDbPathButton",dialog));
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
index 0465533..6588acf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_CONVERT_ASSEMBLY_TO_SAM_DIALOG_FILLER_H
 #define _U2_GT_CONVERT_ASSEMBLY_TO_SAM_DIALOG_FILLER_H
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
     class ConvertAssemblyToSAMDialogFiller : public Filler {
     public:
-        ConvertAssemblyToSAMDialogFiller(U2OpStatus &_os,
+        ConvertAssemblyToSAMDialogFiller(HI::GUITestOpStatus &_os,
                                          const QString &_dbPath, const QString &_dbFileName):
             Filler(_os, "AssemblyToSamDialog"),
             databasePath(_dbPath),
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 6937450..4f093e5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
@@ -27,17 +27,17 @@
 #include <QRadioButton>
 
 #include "CreateAnnotationWidgetFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::CreateAnnotationDialogFiller"
 
-CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(U2OpStatus &os,
+CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(HI::GUITestOpStatus &os,
                                                            bool newTableRB,
                                                            const QString &groupName,
                                                            const QString &annotationName,
@@ -55,7 +55,7 @@ CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(U2OpStatus &os,
 
 }
 
-CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(U2OpStatus &os, CustomScenario *scenario) :
+CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "CreateAnnotationDialog", scenario),
     newTableRB(false)
 {
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
index 9559d31..87fdb27 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
@@ -22,20 +22,21 @@
 #ifndef _U2_GT_RUNNABLES_CREATE_ANNOTATIONS_WIDGET_FILLER_H_
 #define _U2_GT_RUNNABLES_CREATE_ANNOTATIONS_WIDGET_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class CreateAnnotationWidgetFiller : public Filler {
 public:
-    CreateAnnotationWidgetFiller(U2OpStatus &os,
+    CreateAnnotationWidgetFiller(HI::GUITestOpStatus &os,
                                  bool newTableRB,
                                  const QString &groupName,
                                  const QString &annotationName,
                                  const QString &location,
                                  const QString &saveTo = "",
                                  const QString &description = "");
-    CreateAnnotationWidgetFiller(U2OpStatus &os, CustomScenario *scenario);
+    CreateAnnotationWidgetFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
 
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 0a2e51a..6660248 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
@@ -20,11 +20,14 @@
  */
 
 #include "CreateDocumentFromTextDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTGroupBox.h>
+
+#include <U2Core/Log.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -44,7 +47,7 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::createDocumentFiller"
-CreateDocumentFiller::CreateDocumentFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool _customSettings = false, documentAlphabet _alphabet = StandardDNA, 
+CreateDocumentFiller::CreateDocumentFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool _customSettings = false, documentAlphabet _alphabet = StandardDNA,
                                            bool _skipUnknownSymbols = true, bool _replaceUnknownSymbols = false, const QString _symbol = "", 
                                            const QString &_documentLocation = QString(),
                                            documentFormat _format = FASTA, const QString &_sequenceName = QString(), 
@@ -63,10 +66,10 @@ Filler(_os, "CreateDocumentFromTextDialog"), customSettings(_customSettings), al
     comboBoxAlphabetItems[ExtendedDNA] = "Extended DNA";
     comboBoxAlphabetItems[ExtendedRNA] = "Extended RNA";
     comboBoxAlphabetItems[StandardAmino] = "Standard amino";
-    comboBoxAlphabetItems[AllSymbols] = "All symbols";
+    comboBoxAlphabetItems[AllSymbols] = "Raw";
 }
 
-CreateDocumentFiller::CreateDocumentFiller(U2OpStatus &os, CustomScenario *scenario)
+CreateDocumentFiller::CreateDocumentFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
 : Filler(os, "CreateDocumentFromTextDialog", scenario)
 {
 
@@ -84,7 +87,7 @@ void CreateDocumentFiller::commonScenario()
 
     if (customSettings){
         QGroupBox* customSettingsCheckBox = qobject_cast<QGroupBox*>(GTWidget::findWidget(os, "groupBox", dialog));
-        customSettingsCheckBox->setChecked(true);
+        GTGroupBox::setChecked(os, customSettingsCheckBox, true);
 
         QComboBox *alphabetComboBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "alphabetBox", dialog));
         GT_CHECK(alphabetComboBox != NULL, "ComboBox not found");
@@ -136,11 +139,7 @@ void CreateDocumentFiller::commonScenario()
         GTCheckBox::setChecked(os, saveFileCheckBox);
         }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
@@ -148,7 +147,7 @@ void CreateDocumentFiller::commonScenario()
 
 
 #define GT_CLASS_NAME "GTUtilsDialog::cancelCreateDocumentFiller"
-CancelCreateDocumentFiller::CancelCreateDocumentFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool _customSettings = false, documentAlphabet _alphabet = StandardDNA, 
+CancelCreateDocumentFiller::CancelCreateDocumentFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool _customSettings = false, documentAlphabet _alphabet = StandardDNA,
                                            bool _skipUnknownSymbols = true, bool _replaceUnknownSymbols = false, const QString _symbol = "", 
                                            const QString &_documentLocation = QString(),
                                            documentFormat _format = FASTA, const QString &_sequenceName = QString(), 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
index c7afeff..6bf2efe 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
@@ -22,19 +22,20 @@
 #ifndef _U2_GT_RUNNABLES_CREATE_DOCUMENT_FROM_TEST_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_CREATE_DOCUMENT_FROM_TEST_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class CreateDocumentFiller : public Filler {
     public:
         enum documentFormat {FASTA, Genbank};
         enum documentAlphabet {StandardDNA, StandardRNA, ExtendedDNA, ExtendedRNA, StandardAmino, AllSymbols};
 
-        CreateDocumentFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool customSettings, documentAlphabet _alphabet, bool skipUnknownSymbols,
+        CreateDocumentFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool customSettings, documentAlphabet _alphabet, bool skipUnknownSymbols,
                              bool replaceUnknownSymbols, const QString symbol, const QString &_documentLocation,
                              documentFormat _format, const QString &_sequenceName, bool saveFile, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-        CreateDocumentFiller(U2OpStatus &os, CustomScenario *scenario);
+        CreateDocumentFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
         void commonScenario();
     private:
 
@@ -58,7 +59,7 @@ namespace U2 {
         enum documentFormat {FASTA, Genbank};
         enum documentAlphabet {StandardDNA, StandardRNA, ExtendedDNA, ExtendedRNA, StandardAmino, AllSymbols};
 
-        CancelCreateDocumentFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool customSettings, documentAlphabet _alphabet, bool skipUnknownSymbols,
+        CancelCreateDocumentFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool customSettings, documentAlphabet _alphabet, bool skipUnknownSymbols,
             bool replaceUnknownSymbols, const QString symbol, const QString &_documentLocation,
             documentFormat _format, const QString &_sequenceName, bool saveFile, GTGlobals::UseMethod method = GTGlobals::UseMouse);
         virtual void run();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
index de6fc2c..577a0f3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
@@ -19,24 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
 
 #include "CreateObjectRelationDialogFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::FindRepeatsDialogFiller"
 #define GT_METHOD_NAME "run"
 
-CreateObjectRelationDialogFiller::CreateObjectRelationDialogFiller(U2OpStatus& os) :
+CreateObjectRelationDialogFiller::CreateObjectRelationDialogFiller(HI::GUITestOpStatus& os) :
     Filler(os, "CreateObjectRelationDialog")
 {
 }
@@ -45,13 +40,10 @@ void CreateObjectRelationDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(NULL != dialog, "activeModalWidget is NULL");
 
-    QDialogButtonBox *buttonBox = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    GT_CHECK(NULL != buttonBox, "buttonBox is NULL");
-    QAbstractButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
-    GT_CHECK(NULL != okButton, "okButton is NULL");
-    GTWidget::click(os, okButton);
-
-    GTGlobals::sleep(200);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+    if (NULL != QApplication::activeModalWidget()) {
+        GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+    }
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
index 711ab01..7b9aa6c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_RUNNABLES_CREATE_OBJECT_RELATION_DIALOG_H_
 #define _U2_GT_RUNNABLES_CREATE_OBJECT_RELATION_DIALOG_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class CreateObjectRelationDialogFiller : public Filler {
 public:
-    CreateObjectRelationDialogFiller(U2OpStatus &os);
-    CreateObjectRelationDialogFiller(U2OpStatus &os, CustomScenario* sc):
+    CreateObjectRelationDialogFiller(HI::GUITestOpStatus &os);
+    CreateObjectRelationDialogFiller(HI::GUITestOpStatus &os, CustomScenario* sc):
         Filler(os, "CreateObjectRelationDialog", sc){}
 
     virtual void commonScenario();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
index 46eec15..b99bfcd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
@@ -21,9 +21,9 @@
 
 #include <QApplication>
 
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #include "CreateRulerDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
index 8d1a06a..4c1f6b6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
@@ -23,16 +23,16 @@
 #ifndef _U2_CREATE_RULER_DIALOG_FILLER_H_
 #define _U2_CREATE_RULER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class CreateRulerDialogFiller: public Filler
 {
 public:
-    CreateRulerDialogFiller(U2OpStatus &os, QString _rulerName, int _startPos): Filler(os, "CreateRulerDialog"),
+    CreateRulerDialogFiller(HI::GUITestOpStatus &os, QString _rulerName, int _startPos): Filler(os, "CreateRulerDialog"),
     rulerName(_rulerName), startPos(_startPos){}
-    CreateRulerDialogFiller(U2OpStatus &os, CustomScenario* c): Filler(os, "CreateRulerDialog", c){}
+    CreateRulerDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c): Filler(os, "CreateRulerDialog", c){}
     virtual void commonScenario();
 private:
     QString rulerName;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
index 80e2e3f..e8c0701 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
@@ -23,12 +23,13 @@
 #include <QtCore/QFileInfo>
 
 #include "DownloadRemoteFileDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include <primitives/GTWidget.h>
+#include <U2Core/U2SafePoints.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -47,14 +48,14 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "DownloadRemoteFileDialogFiller"
-DownloadRemoteFileDialogFiller::DownloadRemoteFileDialogFiller(U2OpStatus &os, const QList<DownloadRemoteFileDialogFiller::Action> &actions) :
+DownloadRemoteFileDialogFiller::DownloadRemoteFileDialogFiller(HI::GUITestOpStatus &os, const QList<DownloadRemoteFileDialogFiller::Action> &actions) :
     Filler(os, "DownloadRemoteFileDialog"),
     actions(actions),
     dialog(NULL)
 {
 }
 
-DownloadRemoteFileDialogFiller::DownloadRemoteFileDialogFiller(U2OpStatus &os, CustomScenario *c):
+DownloadRemoteFileDialogFiller::DownloadRemoteFileDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c):
     Filler(os, "DownloadRemoteFileDialog", c){}
 
 #define GT_METHOD_NAME "commonScenario"
@@ -82,9 +83,6 @@ void DownloadRemoteFileDialogFiller::commonScenario() {
         case SetForceSequenceDownload:
             setForceSequenceDownload(action.second);
             break;
-        case SetDasFeatures:
-            setDasFeatures(action.second);
-            break;
         case CheckDatabase:
             checkDatabase(action.second);
             break;
@@ -103,9 +101,6 @@ void DownloadRemoteFileDialogFiller::commonScenario() {
         case CheckForceSequenceDownload:
             checkForceSequenceDownload(action.second);
             break;
-        case CheckDasFeaturesVisibility:
-            checkDasFeaturesVisibility(action.second);
-            break;
         case ClickOk:
             clickOk();
             break;
@@ -172,18 +167,6 @@ void DownloadRemoteFileDialogFiller::setForceSequenceDownload(const QVariant &ac
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "setDasFeatures"
-void DownloadRemoteFileDialogFiller::setDasFeatures(const QVariant &actionData) {
-    CHECK_OP(os, );
-    GT_CHECK(actionData.canConvert<QStringList>(), "Can't get DAS features sources from the action data");
-    const QStringList dasFeaturesSources = actionData.toStringList();
-    QListWidget *dasFeaturesWidget = GTWidget::findExactWidget<QListWidget *>(os, "dasfeaturesWidget", dialog);
-    GT_CHECK(NULL != dasFeaturesWidget, "DAS features sources widget wasn't found");
-    GT_CHECK(dasFeaturesWidget->isVisible(), "DAS features sources widget is invisible");
-    GTListWidget::checkOnlyItems(os, dasFeaturesWidget, dasFeaturesSources);
-}
-#undef GT_METHOD_NAME
-
 #define GT_METHOD_NAME "checkDatabase"
 void DownloadRemoteFileDialogFiller::checkDatabase(const QVariant &actionData) {
     CHECK_OP(os, );
@@ -245,16 +228,6 @@ void DownloadRemoteFileDialogFiller::checkForceSequenceDownload(const QVariant &
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "checkDasFeaturesVisibility"
-void DownloadRemoteFileDialogFiller::checkDasFeaturesVisibility(const QVariant &actionData) {
-    CHECK_OP(os, );
-    GT_CHECK(actionData.canConvert<bool>(), "Can't get expected visibility state from the action data");
-    QListWidget *dasFeaturesWidget = GTWidget::findExactWidget<QListWidget *>(os, "dasfeaturesWidget", dialog);
-    GT_CHECK(NULL != dasFeaturesWidget, "DAS features sources widget wasn't found");
-    GT_CHECK(actionData.toBool() == dasFeaturesWidget->isVisible(), "DAS features sources widget has incorrect visibility state");
-}
-#undef GT_METHOD_NAME
-
 #define GT_METHOD_NAME "clickOk"
 void DownloadRemoteFileDialogFiller::clickOk() {
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
index 0058af6..d39d3ad 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_DOWNLOAD_REMOTE_FILE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_DOWNLOAD_REMOTE_FILE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DownloadRemoteFileDialogFiller : public Filler {
 public:
@@ -35,22 +36,20 @@ public:
         SelectSaveToDirectoryPath,              // QString with path
         SetOutputFormat,                        // QString with format
         SetForceSequenceDownload,               // bool value
-        SetDasFeatures,                         // QStringList with items to be checked
         CheckDatabase,                          // QString with expected database name
         CheckDatabasesCount,                    // int with expected databases count
         CheckOutputFormatVisibility,            // bool expected state (is visible)
         CheckOutputFormat,                      // QString with expected format name
         CheckForceSequenceDownloadVisibility,   // bool expected state (is visible)
         CheckForceSequenceDownload,             // bool expected state (is checked)
-        CheckDasFeaturesVisibility,             // bool expected state (is visible)
         ClickOk,                                // ignored
         ClickCancel                             // ignored
     };
 
     typedef QPair<ActionType, QVariant> Action;
 
-    DownloadRemoteFileDialogFiller(U2OpStatus &os, const QList<Action> &actions);
-    DownloadRemoteFileDialogFiller(U2OpStatus &os, CustomScenario* c);
+    DownloadRemoteFileDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
+    DownloadRemoteFileDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c);
 
     void commonScenario();
 
@@ -61,14 +60,12 @@ private:
     void selectSaveToDirectoryPath(const QVariant &actionData);
     void setOutputFormat(const QVariant &actionData);
     void setForceSequenceDownload(const QVariant &actionData);
-    void setDasFeatures(const QVariant &actionData);
     void checkDatabase(const QVariant &actionData);
     void checkDatabasesCount(const QVariant &actionData);
     void checkOutputFormatVisibility(const QVariant &actionData);
     void checkOutputFormat(const QVariant &actionData);
     void checkForceSequenceDownloadVisibility(const QVariant &actionData);
     void checkForceSequenceDownload(const QVariant &actionData);
-    void checkDasFeaturesVisibility(const QVariant &actionData);
     void clickOk();
     void clickCancel();
 
@@ -79,7 +76,7 @@ private:
 // Use DownloadRemoteFileDialogFiller instead
 class RemoteDBDialogFillerDeprecated : public Filler {
 public:
-    RemoteDBDialogFillerDeprecated(U2OpStatus &_os, const QString _resID, int _DBItemNum, bool forceGetSequence = true, bool _pressCancel = false, const QString _saveDirPath = QString(),
+    RemoteDBDialogFillerDeprecated(HI::GUITestOpStatus &_os, const QString _resID, int _DBItemNum, bool forceGetSequence = true, bool _pressCancel = false, const QString _saveDirPath = QString(),
                          GTGlobals::UseMethod _useMethod = GTGlobals::UseMouse, int _outFormatVal = -1)
         :Filler(_os, "DownloadRemoteFileDialog"),
           resID(_resID),
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 62a9d77..a985cbf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
@@ -19,26 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "EditAnnotationDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QPushButton>
+#include <QToolButton>
 
+#include "EditAnnotationDialogFiller.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
@@ -63,19 +55,15 @@ void EditAnnotationFiller::commonScenario()
         GTWidget::click(os, complementStrand);
         }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "GTUtilsDialog::EditAnnotationChecker"
-#define GT_METHOD_NAME "run"
-void EditAnnotationChecker::commonScenario()
-    {
+
+#define GT_METHOD_NAME "commonScenario"
+void EditAnnotationChecker::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog != NULL, "dialog not found");
 
@@ -84,12 +72,6 @@ void EditAnnotationChecker::commonScenario()
         GT_CHECK(lineEdit != NULL, "line edit not found");
         QString text = lineEdit->text();
 
-        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");
-        GTWidget::click(os, button);
-
         GT_CHECK (text == annotationName, "This name is not expected name");
     }
 
@@ -99,21 +81,13 @@ void EditAnnotationChecker::commonScenario()
 
         QString text = lineEdit1->text();
 
-        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");
-        GTWidget::click(os, button);
-
         GT_CHECK (text == location, "This name is not expected name");
     }
 
-    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");
-    GTWidget::click(os, button);
-    }
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+}
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
-}
+
+}   // namespace U2
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 c974ef0..8343673 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
@@ -22,15 +22,15 @@
 #ifndef _U2_GT_RUNNABLES_EDIT_ANNOTATIONS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EDIT_ANNOTATIONS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
     class EditAnnotationFiller : public Filler {
     public:
-        EditAnnotationFiller(U2OpStatus &_os, const QString &_annotationName, const QString &_location, bool _complementStrand = false)
+        EditAnnotationFiller(HI::GUITestOpStatus &_os, const QString &_annotationName, const QString &_location, bool _complementStrand = false)
             :Filler(_os, "EditAnnotationDialog"), annotationName(_annotationName), location(_location), complementStrand(_complementStrand) {}
-        EditAnnotationFiller(U2OpStatus &_os, CustomScenario* c): Filler(_os, "EditAnnotationDialog", c), annotationName(""), location(""), complementStrand(false) {}
+        EditAnnotationFiller(HI::GUITestOpStatus &_os, CustomScenario* c): Filler(_os, "EditAnnotationDialog", c), annotationName(""), location(""), complementStrand(false) {}
         virtual void commonScenario();
     private:
         QString annotationName;
@@ -40,7 +40,7 @@ namespace U2 {
 
     class EditAnnotationChecker : public Filler {
     public:
-        EditAnnotationChecker(U2OpStatus &_os, const QString &_annotationName, const QString &_location)
+        EditAnnotationChecker(HI::GUITestOpStatus &_os, const QString &_annotationName, const QString &_location)
             :Filler(_os, "EditAnnotationDialog"), annotationName(_annotationName), location(_location){}
         virtual void commonScenario();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
index 0cf5720..a22ac57 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
@@ -10,20 +10,20 @@
 #endif
 
 #include "GTDatabaseConfig.h"
-#include "api/GTAction.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
 
 #include "EditConnectionDialogFiller.h"
 
 namespace U2 {
 
-EditConnectionDialogFiller::EditConnectionDialogFiller(U2OpStatus &os, const Parameters &parameters, ConnectionType type)
+EditConnectionDialogFiller::EditConnectionDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters, ConnectionType type)
 : Filler(os, "EditConnectionDialog"), parameters(parameters)
 {
     if (FROM_SETTINGS == type) {
@@ -35,7 +35,7 @@ EditConnectionDialogFiller::EditConnectionDialogFiller(U2OpStatus &os, const Par
     }
 }
 
-EditConnectionDialogFiller::EditConnectionDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+EditConnectionDialogFiller::EditConnectionDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "EditConnectionDialog", scenario)
 {
 }
@@ -80,7 +80,7 @@ void EditConnectionDialogFiller::commonScenario() {
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-AuthenticationDialogFiller::AuthenticationDialogFiller(U2OpStatus &os, const QString &login, const QString &password)
+AuthenticationDialogFiller::AuthenticationDialogFiller(HI::GUITestOpStatus &os, const QString &login, const QString &password)
 : Filler(os, "AuthenticationDialog"), login(login), password(password)
 {
 
@@ -107,7 +107,7 @@ void AuthenticationDialogFiller::run() {
     GT_CHECK(cbRemember, "cbRemember is NULL");
     GTCheckBox::setChecked(os, cbRemember, false);
 
-    GTWidget::click(os, GTWidget::findButtonByText(os, "OK", dialog));
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h
index 99dfad2..8d3f2ab 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h
@@ -1,7 +1,8 @@
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class EditConnectionDialogFiller : public Filler {
 public:
@@ -31,8 +32,8 @@ public:
 
 
     enum ConnectionType {FROM_SETTINGS, MANUAL};
-    EditConnectionDialogFiller(U2OpStatus &os, const Parameters &parameters, ConnectionType type);
-    EditConnectionDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    EditConnectionDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters, ConnectionType type);
+    EditConnectionDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
     void commonScenario();
 
 private:
@@ -41,7 +42,7 @@ private:
 
 class AuthenticationDialogFiller : public Filler {
 public:
-    AuthenticationDialogFiller(U2OpStatus &os, const QString &login, const QString &password);
+    AuthenticationDialogFiller(HI::GUITestOpStatus &os, const QString &login, const QString &password);
     void run();
 
 private:
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 9d42ed8..127e790 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
@@ -20,13 +20,13 @@
  */
 
 #include "EditGroupAnnotationsDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -41,6 +41,7 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::EditGroupAnnotationsFiller"
 #define GT_METHOD_NAME "run"
@@ -54,7 +55,6 @@ void EditGroupAnnotationsFiller::run()
     GTLineEdit::setText(os, lineEdit, groupName);
 
     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/EditGroupAnnotationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
index d13e738..a13c7ae 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
@@ -22,13 +22,13 @@
 #ifndef _U2_GT_RUNNABLES_EDIT_GROUP_ANNOTATIONS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EDIT_GROUP_ANNOTATIONS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
     class EditGroupAnnotationsFiller : public Filler {
     public:
-        EditGroupAnnotationsFiller(U2OpStatus &_os, const QString &_groupName):
+        EditGroupAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_groupName):
           Filler(_os, ""), groupName(_groupName) {}
 
         virtual void run();
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 80f80cf..d30a8fe 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
@@ -20,15 +20,15 @@
  */
 
 #include "EditQualifierDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTTextEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTTextEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -45,6 +45,7 @@
 
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::EditQualifierFiller"
 #define GT_METHOD_NAME "run"
@@ -74,10 +75,8 @@ void EditQualifierFiller::run()
 
         GTLineEdit::setText(os, nameEdit, "nice_name", noCheck);
         GTTextEdit::setText(os, valueEdit, "nice_val");
-        GTWidget::click(os, button);
-    }else{
-        GTWidget::click(os, button);
     }
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
     
 }
 #undef GT_METHOD_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 5a54d20..6557b30 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
@@ -22,13 +22,13 @@
 #ifndef _U2_GT_RUNNABLES_EDIT_QUALIFIER_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EDIT_QUALIFIER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class EditQualifierFiller : public Filler {
 public:
-    EditQualifierFiller(U2OpStatus &_os, const QString &_qualifierName, const QString &_valueName, bool _noCheck = false, bool _closeErrorMessageBox = false)
+    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){}
     virtual void run();
 private:
@@ -40,7 +40,7 @@ private:
 
 class RenameQualifierFiller : public Filler {
 public:
-    RenameQualifierFiller(U2OpStatus &_os, const QString &_newName)
+    RenameQualifierFiller(HI::GUITestOpStatus &_os, const QString &_newName)
         :Filler(_os, ""), newName(_newName) {}
     virtual void run();
 private:
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 512596c..31f6bcf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
@@ -20,17 +20,17 @@
  */
 
 #include "EditSequenceDialogFiller.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTSpinBox.h"
-
-#include "runnables/qt/MessageBoxFiller.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTSpinBox.h>
+
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include <QtCore/QDir>
 #include <QApplication>
@@ -39,9 +39,10 @@
 #include <QGroupBox>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::insertSequenceFiller"
-InsertSequenceFiller::InsertSequenceFiller(U2OpStatus &_os, const QString &_pasteDataHere, RegionResolvingMode _regionResolvingMode, int _insertPosition,
+InsertSequenceFiller::InsertSequenceFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, RegionResolvingMode _regionResolvingMode, int _insertPosition,
     const QString &_documentLocation, documentFormat _format, bool _saveToNewFile, bool _mergeAnnotations, GTGlobals::UseMethod method,
     bool _wrongInput, bool recalculateQuals)
     : Filler(_os, "EditSequenceDialog"), pasteDataHere(_pasteDataHere), regionResolvingMode(_regionResolvingMode), insertPosition(_insertPosition),
@@ -134,14 +135,10 @@ void InsertSequenceFiller::run()
         }
     }
 
-    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, "cancel button is NULL");
     if(wrongInput){
         GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     }
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
 }
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
index e4ebcde..56a111b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
@@ -22,16 +22,17 @@
 #ifndef _U2_GT_RUNNABLES_EDIT_SEQUENCE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EDIT_SEQUENCE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class InsertSequenceFiller : public Filler {
 public:
     enum documentFormat {FASTA, Genbank};
     enum RegionResolvingMode {Resize, Remove, SplitJoin, SplitSeparate};
 
-    InsertSequenceFiller(U2OpStatus &_os, const QString &_pasteDataHere, RegionResolvingMode _regionResolvingMode = Resize, int _insertPosition = 1,
+    InsertSequenceFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, RegionResolvingMode _regionResolvingMode = Resize, int _insertPosition = 1,
         const QString &_documentLocation = "",  documentFormat _format = FASTA, bool _saveToNewFile = false, bool _mergeAnnotations = false,
         GTGlobals::UseMethod method = GTGlobals::UseMouse, bool _wrongInput = false, bool recalculateQuals = false);
     void run();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
index 453ba55..13af04a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
@@ -20,10 +20,10 @@
  */
 
 #include "ExportChromatogramFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -37,9 +37,10 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportChromatogramFiller"
-ExportChromatogramFiller::ExportChromatogramFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+ExportChromatogramFiller::ExportChromatogramFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
                                 ExportChromatogramFiller::FormatToUse _format,  bool reversed, bool complement, 
                                 bool addDocumentToProject,GTGlobals::UseMethod method):
 Filler(_os, "ExportChromatogramDialog"), name(_name), useMethod(method), format(_format), reversed(reversed), 
@@ -84,11 +85,7 @@ void ExportChromatogramFiller::run()
         GTCheckBox::setChecked(os, checkBoxComplement, complement);
       }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
index 9938135..a84275f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_CHROMATOGRAM_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_CHROMATOGRAM_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportChromatogramFiller : public Filler {
     public:
         enum FormatToUse {SCF};
-        ExportChromatogramFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+        ExportChromatogramFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
                                         ExportChromatogramFiller::FormatToUse _format, bool reversed, bool complement, 
                                         bool addDocumentToProject, GTGlobals::UseMethod method = GTGlobals::UseMouse);
         virtual void run();
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 273ffed..7758085 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
@@ -20,10 +20,10 @@
  */
 
 #include "ExportDocumentDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -41,7 +41,7 @@ namespace U2 {
 QString ExportDocumentDialogFiller::defaultExportString = "";
 
 #define GT_CLASS_NAME "ExportDocumentDialogFiller"
-ExportDocumentDialogFiller::ExportDocumentDialogFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+ExportDocumentDialogFiller::ExportDocumentDialogFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
                          ExportDocumentDialogFiller::FormatToUse _format, bool compressFile,
                          bool addToProject, GTGlobals::UseMethod method):
 Filler(_os, "ExportDocumentDialog"),
@@ -96,11 +96,7 @@ void ExportDocumentDialogFiller::run()
         GTCheckBox::setChecked(os, addCheckBox, addToProject);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
index 7081394..e28e306 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_RUNNABLES_COPY_DOCUMENT_FILLER_H_
 #define _U2_GT_RUNNABLES_COPY_DOCUMENT_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportDocumentDialogFiller : public Filler {
     public:
         enum FormatToUse {Genbank, GFF, CLUSTALW, BAM, VCF, TEXT, NWK, FASTA, VectorNTI};
-        ExportDocumentDialogFiller(U2OpStatus &_os, const QString &_path = "", const QString &_name = "", 
+        ExportDocumentDialogFiller(HI::GUITestOpStatus &_os, const QString &_path = "", const QString &_name = "",
             ExportDocumentDialogFiller::FormatToUse _format = ExportDocumentDialogFiller::Genbank, bool compressFile = false,
                                  bool addToProject = false, GTGlobals::UseMethod method = GTGlobals::UseMouse);
         virtual void run();
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 f5305ae..3f1a1c9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
@@ -28,19 +28,20 @@
 #include <QTableWidget>
 
 #include "ExportImageDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.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>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportImage"
 
-ExportImage::ExportImage(U2OpStatus &os, const QString &filePath, const QString &comboValue, int spinValue) :
+ExportImage::ExportImage(HI::GUITestOpStatus &os, const QString &filePath, const QString &comboValue, int spinValue) :
     Filler(os, "ImageExportForm"),
     filePath(filePath),
     comboValue(comboValue),
@@ -49,7 +50,7 @@ ExportImage::ExportImage(U2OpStatus &os, const QString &filePath, const QString
 
 }
 
-ExportImage::ExportImage(U2OpStatus &os, CustomScenario *scenario) :
+ExportImage::ExportImage(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "ImageExportForm", scenario),
     spinValue(0)
 {
@@ -74,11 +75,7 @@ void ExportImage::commonScenario() {
         GTSpinBox::setValue(os, spin, spinValue, GTGlobals::UseKeyBoard);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
@@ -266,7 +263,7 @@ void SelectSubalignmentFiller::run() {
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-ImageExportFormFiller::ImageExportFormFiller(U2OpStatus &os, const Parameters &parameters)
+ImageExportFormFiller::ImageExportFormFiller(HI::GUITestOpStatus &os, const Parameters &parameters)
 : Filler(os, "ImageExportForm"), parameters(parameters)
 {
 
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 0cf6731..e7b4963 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
@@ -24,14 +24,15 @@
 
 #include <U2Core/U2Region.h>
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportImage : public Filler {
 public:
-    ExportImage(U2OpStatus &os, const QString &filePath, const QString &comboValue = "", int spinValue = 0);
-    ExportImage(U2OpStatus &os, CustomScenario *scenario);
+    ExportImage(HI::GUITestOpStatus &os, const QString &filePath, const QString &comboValue = "", int spinValue = 0);
+    ExportImage(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
@@ -43,13 +44,13 @@ protected:
 
 class CircularViewExportImage : public Filler {
 public:
-    CircularViewExportImage(U2OpStatus &_os, QString _filePath, QString _comboValue = "", QString exportedSequenceName = "", int _spinValue=0) : Filler(_os, "ImageExportForm"),
+    CircularViewExportImage(HI::GUITestOpStatus &_os, QString _filePath, QString _comboValue = "", QString exportedSequenceName = "", int _spinValue=0) : Filler(_os, "ImageExportForm"),
         filePath(_filePath),
         comboValue(_comboValue),
         spinValue(_spinValue),
         exportedSequenceName(exportedSequenceName)
     {}
-    CircularViewExportImage(U2OpStatus &os, CustomScenario *scenario) : Filler(os, "ImageExportForm", scenario), spinValue(0) {}
+    CircularViewExportImage(HI::GUITestOpStatus &os, CustomScenario *scenario) : Filler(os, "ImageExportForm", scenario), spinValue(0) {}
     void commonScenario();
 protected:
     QString filePath, comboValue;
@@ -81,7 +82,7 @@ public:
     };
 
     // default
-    ExportMsaImage(U2OpStatus &os, QString filePath,
+    ExportMsaImage(HI::GUITestOpStatus &os, QString filePath,
                    QString comboValue = "",int spinValue = 0)
         : ExportImage(os, filePath, comboValue, spinValue),
           exportWholeAlignment(true),
@@ -92,7 +93,7 @@ public:
     //  exportWholeAlignment = false,   exportCurrentSelection = true   : export of currently selected region, selection must be
     //  exportWholeAlignment = true,    exportCurrentSelection = false  : whole selection export
     //  exportWholeAlignment = true,    exportCurrentSelection = true   : error
-    ExportMsaImage(U2OpStatus &os, QString filePath,
+    ExportMsaImage(HI::GUITestOpStatus &os, QString filePath,
                    Settings settings,
                    bool exportWholeAlignment = true,
                    bool exportCurrentSelection = false,
@@ -129,11 +130,11 @@ public:
         U2Region    region;
     };
 
-    ExportSequenceImage(U2OpStatus &os, QString filePath,
+    ExportSequenceImage(HI::GUITestOpStatus &os, QString filePath,
                         QString comboValue = "", int spinValue = 0)
         : ExportImage(os, filePath, comboValue, spinValue) {}
 
-    ExportSequenceImage(U2OpStatus &os, QString filePath,
+    ExportSequenceImage(HI::GUITestOpStatus &os, QString filePath,
                         Settings settings,
                         QString comboValue = "", int spinValue = 0)
         : ExportImage(os, filePath, comboValue, spinValue),
@@ -147,7 +148,7 @@ private:
 
 class SelectSubalignmentFiller : public Filler {
 public:
-    SelectSubalignmentFiller(U2OpStatus &_os, const RegionMsa &regionMsa)
+    SelectSubalignmentFiller(HI::GUITestOpStatus &_os, const RegionMsa &regionMsa)
         : Filler(_os, "SelectSubalignmentDialog"),
           msaRegion(regionMsa) {}
     virtual void run();
@@ -171,7 +172,7 @@ public:
         QString format;
     };
 
-    ImageExportFormFiller(U2OpStatus &os, const Parameters &parameters);
+    ImageExportFormFiller(HI::GUITestOpStatus &os, const Parameters &parameters);
     void run();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
index 5782c36..1b45003 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
@@ -24,23 +24,23 @@
 #include <QPushButton>
 
 #include "FindQualifierDialogFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::FindQualifierFiller"
 
-FindQualifierFiller::FindQualifierFiller(U2OpStatus &os, const FindQualifierFiller::FindQualifierFillerSettings &settings) :
+FindQualifierFiller::FindQualifierFiller(HI::GUITestOpStatus &os, const FindQualifierFiller::FindQualifierFillerSettings &settings) :
     Filler(os, "SearchQualifierDialog"),
     settings(settings)
 {
 
 }
 
-FindQualifierFiller::FindQualifierFiller(U2OpStatus &os, CustomScenario *scenario) :
+FindQualifierFiller::FindQualifierFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "SearchQualifierDialog", scenario)
 {
 
@@ -95,9 +95,7 @@ void FindQualifierFiller::commonScenario() {
     }
     GTGlobals::sleep();
 
-    QPushButton* closeButton = box->button(QDialogButtonBox::Close);
-    GT_CHECK(closeButton != NULL, "'Close' button is NULL");
-    GTWidget::click(os, closeButton);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Close);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
index aba6a1d..6310f96 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
@@ -22,10 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_FIND_QUALIFIER_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_FIND_QUALIFIER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class FindQualifierFiller : public Filler {
 public:
     struct FindQualifierFillerSettings {
@@ -56,8 +56,8 @@ public:
         bool selectAll;
     };
 
-    FindQualifierFiller(U2OpStatus &os, const FindQualifierFillerSettings& settings = FindQualifierFillerSettings());
-    FindQualifierFiller(U2OpStatus &os, CustomScenario *scenario);
+    FindQualifierFiller(HI::GUITestOpStatus &os, const FindQualifierFillerSettings& settings = FindQualifierFillerSettings());
+    FindQualifierFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
index be65b30..ac40462 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "FindRepeatsDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -45,7 +45,7 @@ namespace U2 {
 #define GT_CLASS_NAME "GTUtilsDialog::FindRepeatsDialogFiller"
 #define GT_METHOD_NAME "run"
 
-FindRepeatsDialogFiller::FindRepeatsDialogFiller(U2OpStatus &_os, const QString & _resultFilesPath,
+FindRepeatsDialogFiller::FindRepeatsDialogFiller(HI::GUITestOpStatus &_os, const QString & _resultFilesPath,
     bool _searchInverted, int minRepeatLength, int repeatsIdentity, int minDistance)
     : Filler(_os, "FindRepeatsDialog"), button(Start), resultAnnotationFilesPath(_resultFilesPath),
     searchInverted(_searchInverted), minRepeatLength(minRepeatLength), repeatsIdentity(repeatsIdentity), minDistance(minDistance)
@@ -53,7 +53,7 @@ FindRepeatsDialogFiller::FindRepeatsDialogFiller(U2OpStatus &_os, const QString
     GTGlobals::sleep(10);
 }
 
-FindRepeatsDialogFiller::FindRepeatsDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+FindRepeatsDialogFiller::FindRepeatsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "FindRepeatsDialog", scenario),
     button(Start),
     searchInverted(false),
@@ -101,13 +101,7 @@ void FindRepeatsDialogFiller::commonScenario() {
     QCheckBox *invertedRepeatsIndicator = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "invertCheck", dialog));
     invertedRepeatsIndicator->setChecked(searchInverted);
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep();
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
index c4505e5..76988be 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
@@ -22,19 +22,19 @@
 #ifndef _U2_GT_RUNNABLES_FIND_REPEATS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_FIND_REPEATS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "api/GTRegionSelector.h"
 #include <U2Algorithm/SmithWatermanSettings.h>
 
 namespace U2 {
-
+using namespace HI;
 class FindRepeatsDialogFiller : public Filler {
 public:
     enum Button {Start, Cancel};
 
-    FindRepeatsDialogFiller(U2OpStatus &os, const QString & _resultFilesPath, bool _searchInverted = false,
+    FindRepeatsDialogFiller(HI::GUITestOpStatus &os, const QString & _resultFilesPath, bool _searchInverted = false,
         int minRepeatLength = -1, int repeatsIdentity = -1, int minDistance = -1);
-    FindRepeatsDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    FindRepeatsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
     Button button;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
index ac53959..43d7a16 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "FindTandemsDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTTabWidget.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTLineEdit.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -38,14 +38,14 @@
 
 namespace U2 {
 
-FindTandemsDialogFiller::FindTandemsDialogFiller( U2OpStatus &_os, const QString & _resultFilesPath)
+FindTandemsDialogFiller::FindTandemsDialogFiller( HI::GUITestOpStatus &_os, const QString & _resultFilesPath)
     : Filler(_os, "FindTandemsDialog"), button(Start), resultAnnotationFilesPath(_resultFilesPath){
 }
 
 #define GT_CLASS_NAME "GTUtilsDialog::FindTandemsDialogFiller"
 #define GT_METHOD_NAME "run"
 
-FindTandemsDialogFiller::FindTandemsDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+FindTandemsDialogFiller::FindTandemsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "FindTandemsDialog", scenario),
     button(Start)
 {
@@ -62,24 +62,11 @@ void FindTandemsDialogFiller::commonScenario(){
         return;
     }
 
-    /*
-    QTabWidget *tabWidget = qobject_cast<QTabWidget*>(GTWidget::findWidget(os, "tabWidget", dialog));
-    GTTabWidget::setCurrentIndex(os, tabWidget, 0);
-    */
-
     QLineEdit *resultLocationEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "leNewTablePath", dialog));
     GT_CHECK(resultLocationEdit, "resultLocation is NULL");
     GTLineEdit::setText(os, resultLocationEdit, resultAnnotationFilesPath);
 
-    //GTTabWidget::setCurrentIndex(os, tabWidget, 1);
-
-    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");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep();
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
index b882abb..cc81b9b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
@@ -22,17 +22,18 @@
 #ifndef _U2_GT_RUNNABLES_FIND_TANDEMS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_FIND_TANDEMS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "api/GTRegionSelector.h"
 
 namespace U2 {
+using namespace HI;
 
 class FindTandemsDialogFiller : public Filler {
 public:
     enum Button {Start, Cancel};
 
-    FindTandemsDialogFiller(U2OpStatus &_os, const QString & _resultFilesPath);
-    FindTandemsDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    FindTandemsDialogFiller(HI::GUITestOpStatus &_os, const QString & _resultFilesPath);
+    FindTandemsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
     Button button;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
index de545ca..8b8220e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
@@ -21,9 +21,9 @@
 
 #include <QApplication>
 
-#include "api/GTCheckBox.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #include "GraphLabelsSelectDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
index 80b9d79..df450d1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GRAPH_LABELS_SELECT_DIALOG_FILLER_H_
 #define _U2_GRAPH_LABELS_SELECT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class GraphLabelsSelectDialogFiller: public Filler
 {
 public:
-    GraphLabelsSelectDialogFiller(U2OpStatus &os, int _windowSize = -1, bool _selectedAreaCheck = false): Filler(os, "GraphLabelsSelectDialog"),
+    GraphLabelsSelectDialogFiller(HI::GUITestOpStatus &os, int _windowSize = -1, bool _selectedAreaCheck = false): Filler(os, "GraphLabelsSelectDialog"),
         windowSize(_windowSize), selectedAreaCheck(_selectedAreaCheck){}
     virtual void commonScenario();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
index 0b77665..7f92b6a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
@@ -22,11 +22,11 @@
 #include <QApplication>
 #include <QGroupBox>
 
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
-#include "runnables/qt/ColorDialogFiller.h"
+#include <base_dialogs/ColorDialogFiller.h>
 
 #include "GraphSettingsDialogFiller.h"
 
@@ -69,6 +69,7 @@ void GraphSettingsDialogFiller::commonScenario(){
         GTWidget::click(os, GTWidget::findWidget(os, "Default color", dialog));
     }
 
+    GTGlobals::sleep(200);
     GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
 }
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
index c22c2a7..3ba6187 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
@@ -23,18 +23,19 @@
 #ifndef _U2_GRAPH_SETTINGS_DIALOG_FILLER_H_
 #define _U2_GRAPH_SETTINGS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class GraphSettingsDialogFiller: public Filler
 {
 public:
-    GraphSettingsDialogFiller(U2OpStatus &os, int _window = -1, int _steps = -1, double _cutoff_min = 0, double _cutoff_max = 0,
+    GraphSettingsDialogFiller(HI::GUITestOpStatus &os, int _window = -1, int _steps = -1, double _cutoff_min = 0, double _cutoff_max = 0,
                               int _r = -1, int _g = -1, int _b = -1)
         : Filler(os, "GraphSettingsDialog"), window(_window), steps(_steps), cutoff_min(_cutoff_min), cutoff_max(_cutoff_max),
     r(_r), g(_g), b(_b){}
-    GraphSettingsDialogFiller(U2OpStatus &os, CustomScenario *c): Filler(os, "GraphSettingsDialog", c){}
+    GraphSettingsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c): Filler(os, "GraphSettingsDialog", c){}
     virtual void commonScenario();
 private:
     int window;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
index 3e36a11..3f16be9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
@@ -20,11 +20,11 @@
  */
 
 #include "ImportBAMFileDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTFileDialog.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <base_dialogs/GTFileDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -40,7 +40,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ImportBAMFileFiller"
 #define GT_METHOD_NAME "run"
-ImportBAMFileFiller::ImportBAMFileFiller(U2OpStatus &os, const QString destinationUrl,
+ImportBAMFileFiller::ImportBAMFileFiller(HI::GUITestOpStatus &os, const QString destinationUrl,
                                          const QString referenceFolderPath, const QString referenceFileName,
                                          bool importUnmappedReads,
                                          int timeoutMs) :
@@ -52,7 +52,7 @@ ImportBAMFileFiller::ImportBAMFileFiller(U2OpStatus &os, const QString destinati
     settings.timeout = timeoutMs;
 }
 
-ImportBAMFileFiller::ImportBAMFileFiller(U2OpStatus &os, CustomScenario* _c):Filler(os, "Import BAM File", _c),
+ImportBAMFileFiller::ImportBAMFileFiller(HI::GUITestOpStatus &os, CustomScenario* _c):Filler(os, "Import BAM File", _c),
     referenceFolderPath(""),
     referenceFileName(""),
     destinationUrl(""),
@@ -84,10 +84,7 @@ void ImportBAMFileFiller::commonScenario() {
         GTCheckBox::setChecked(os, importUnmapped, importUnmapped);
     }
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "ok button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
index b6e2957..611e92f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
@@ -22,17 +22,18 @@
 #ifndef _U2_GT_RUNNABLES_IMPORT_BAM_FILE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_IMPORT_BAM_FILE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ImportBAMFileFiller : public Filler {
 public:
-    ImportBAMFileFiller(U2OpStatus &os, const QString destinationUrl = "",
+    ImportBAMFileFiller(HI::GUITestOpStatus &os, const QString destinationUrl = "",
                         const QString referenceFolderPath = "", const QString referenceFileName = "",
                         bool importUnmappedReads = false,
                         int timeoutMs = 120000);
-    ImportBAMFileFiller(U2OpStatus &os, CustomScenario *_c);
+    ImportBAMFileFiller(HI::GUITestOpStatus &os, CustomScenario *_c);
 
     virtual void commonScenario();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
index a9fcb8c..0f6f9a3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
@@ -33,25 +33,26 @@
 #endif
 
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Formats/AceImporter.h>
 
 #include <U2Gui/ImportOptionsWidget.h>
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "ImportOptionsWidgetFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ImportOptionsWidgetFiller"
 
 #define GT_METHOD_NAME "fill"
-void ImportOptionsWidgetFiller::fill(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::fill(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     Q_UNUSED(os);
     GT_CHECK(NULL != optionsWidget, "optionsWidget is NULL");
 
@@ -68,7 +69,7 @@ void ImportOptionsWidgetFiller::fill(U2OpStatus &os, ImportOptionsWidget *option
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setDestinationFolder"
-void ImportOptionsWidgetFiller::setDestinationFolder(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setDestinationFolder(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::DESTINATION_FOLDER), );
     QLineEdit* destFolder = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "leBaseFolder", optionsWidget));
     GT_CHECK(NULL != destFolder, "destFolder is NULL");
@@ -77,7 +78,7 @@ void ImportOptionsWidgetFiller::setDestinationFolder(U2OpStatus &os, ImportOptio
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setKeepFoldersStructure"
-void ImportOptionsWidgetFiller::setKeepFoldersStructure(U2OpStatus& os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setKeepFoldersStructure(HI::GUITestOpStatus& os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::KEEP_FOLDERS_STRUCTURE), );
     QCheckBox* keepStructure = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbKeepStructure", optionsWidget));
     GT_CHECK(NULL != keepStructure, "keepStructure is NULL");
@@ -86,7 +87,7 @@ void ImportOptionsWidgetFiller::setKeepFoldersStructure(U2OpStatus& os, ImportOp
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setProcessFoldersRecusively"
-void ImportOptionsWidgetFiller::setProcessFoldersRecusively(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setProcessFoldersRecusively(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::PROCESS_FOLDERS_RECUSIVELY), );
     QCheckBox* processRecursively = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbRecursively", optionsWidget));
     GT_CHECK(NULL != processRecursively, "processRecursively is NULL");
@@ -95,7 +96,7 @@ void ImportOptionsWidgetFiller::setProcessFoldersRecusively(U2OpStatus &os, Impo
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setCreateSubfolderForTopLevelFolder"
-void ImportOptionsWidgetFiller::setCreateSubfolderForTopLevelFolder(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setCreateSubfolderForTopLevelFolder(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::CREATE_SUBFOLDER_FOR_TOP_LEVEL_FOLDER), );
     QCheckBox* subfolderForEachFolder = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbCreateSubfoldersForTopLevelFolder", optionsWidget));
     GT_CHECK(NULL != subfolderForEachFolder, "subfolderForeachFolder is NULL");
@@ -104,7 +105,7 @@ void ImportOptionsWidgetFiller::setCreateSubfolderForTopLevelFolder(U2OpStatus &
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setCreateSubfolderForEachFile"
-void ImportOptionsWidgetFiller::setCreateSubfolderForEachFile(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setCreateSubfolderForEachFile(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::CREATE_SUBFOLDER_FOR_EACH_FILE), );
     QCheckBox* subfolderForEachFile = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbCreateSubfoldersForFiles", optionsWidget));
     GT_CHECK(NULL != subfolderForEachFile, "subfolderForEachFile is NULL");
@@ -113,7 +114,7 @@ void ImportOptionsWidgetFiller::setCreateSubfolderForEachFile(U2OpStatus &os, Im
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setImportUnknownAsUdr"
-void ImportOptionsWidgetFiller::setImportUnknownAsUdr(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setImportUnknownAsUdr(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::IMPORT_UNKNOWN_AS_UDR), );
     QCheckBox* importUnknown = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbImportUnrecognized", optionsWidget));
     GT_CHECK(NULL != importUnknown, "importUnknown is NULL");
@@ -122,7 +123,7 @@ void ImportOptionsWidgetFiller::setImportUnknownAsUdr(U2OpStatus &os, ImportOpti
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setMultiSequencePolicy"
-void ImportOptionsWidgetFiller::setMultiSequencePolicy(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setMultiSequencePolicy(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::MULTI_SEQUENCE_POLICY), );
 
     ImportToDatabaseOptions::MultiSequencePolicy policy = static_cast<ImportToDatabaseOptions::MultiSequencePolicy>(data.value(ImportToDatabaseOptions::MULTI_SEQUENCE_POLICY).toInt());
@@ -151,7 +152,7 @@ void ImportOptionsWidgetFiller::setMultiSequencePolicy(U2OpStatus &os, ImportOpt
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setAceFormatPolicy"
-void ImportOptionsWidgetFiller::setAceFormatPolicy(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setAceFormatPolicy(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::PREFERRED_FORMATS), );
 
     const QStringList preferredFormats = data.value(ImportToDatabaseOptions::PREFERRED_FORMATS).toStringList();
@@ -169,7 +170,7 @@ void ImportOptionsWidgetFiller::setAceFormatPolicy(U2OpStatus &os, ImportOptions
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setCreateSubfolderForDocument"
-void ImportOptionsWidgetFiller::setCreateSubfolderForDocument(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setCreateSubfolderForDocument(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::CREATE_SUBFOLDER_FOR_DOCUMENT), );
     QCheckBox* subfolderForDocument = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "cbCreateSubfoldersforDocs", optionsWidget));
     GT_CHECK(NULL != subfolderForDocument, "subfolderForDocument is NULL");
@@ -178,7 +179,7 @@ void ImportOptionsWidgetFiller::setCreateSubfolderForDocument(U2OpStatus &os, Im
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setMergeMultiSequencePolicySeparatorSize"
-void ImportOptionsWidgetFiller::setMergeMultiSequencePolicySeparatorSize(U2OpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
+void ImportOptionsWidgetFiller::setMergeMultiSequencePolicySeparatorSize(HI::GUITestOpStatus &os, ImportOptionsWidget *optionsWidget, const QVariantMap &data) {
     CHECK(data.contains(ImportToDatabaseOptions::MERGE_MULTI_SEQUENCE_POLICY_SEPARATOR_SIZE), );
     QSpinBox* separatorSize = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "sbMerge", optionsWidget));
     GT_CHECK(NULL != separatorSize, "separatorSize is NULL");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
index 9220d7d..4974023 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
@@ -23,27 +23,27 @@
 #define _U2_IMPORT_OPTIONS_WIDGET_FILLER_H_
 
 #include <QtCore/QVariantMap>
+#include <GTGlobals.h>
 
 namespace U2 {
-
+using namespace HI;
 class ImportOptionsWidget;
-class U2OpStatus;
 
 class ImportOptionsWidgetFiller {
 public:
-    static void fill(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void fill(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
 
 private:
-    static void setDestinationFolder(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setKeepFoldersStructure(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setProcessFoldersRecusively(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setCreateSubfolderForTopLevelFolder(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setCreateSubfolderForEachFile(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setImportUnknownAsUdr(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setMultiSequencePolicy(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setAceFormatPolicy(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setCreateSubfolderForDocument(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
-    static void setMergeMultiSequencePolicySeparatorSize(U2OpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setDestinationFolder(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setKeepFoldersStructure(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setProcessFoldersRecusively(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setCreateSubfolderForTopLevelFolder(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setCreateSubfolderForEachFile(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setImportUnknownAsUdr(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setMultiSequencePolicy(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setAceFormatPolicy(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setCreateSubfolderForDocument(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
+    static void setMergeMultiSequencePolicySeparatorSize(HI::GUITestOpStatus& os, ImportOptionsWidget* optionsWidget, const QVariantMap& data);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
index bd0af71..3330234 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
@@ -33,18 +33,19 @@
 #endif
 
 #include "ImportToDatabaseDialogFiller.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
-
+using namespace HI;
 namespace {
 
 QMap<QString, QStringList> convertProjectItemsMap(const QMap<QString, QVariant>& map) {
@@ -71,7 +72,7 @@ ImportToDatabaseDialogFiller::Action::Action(ImportToDatabaseDialogFiller::Actio
 {
 }
 
-ImportToDatabaseDialogFiller::ImportToDatabaseDialogFiller(U2OpStatus &os, const QList<Action> &actions) :
+ImportToDatabaseDialogFiller::ImportToDatabaseDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
     Filler(os, "ImportToDatabaseDialog"),
     actions(actions)
 {
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
index 090d0fe..84005c4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
@@ -24,11 +24,12 @@
 
 #include <QtCore/QPointer>
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 class QTreeWidgetItem;
 
 namespace U2 {
+using namespace HI;
 
 class ImportToDatabaseDialogFiller : public Filler {
 public:
@@ -59,8 +60,8 @@ public:
         static const QString ACTION_DATA__PROJECT_ITEMS_LIST;
     };
 
-    ImportToDatabaseDialogFiller(U2OpStatus& os, const QList<Action>& actions);
-    ImportToDatabaseDialogFiller(U2OpStatus &os, CustomScenario* c): Filler(os, "ImportToDatabaseDialog", c){}
+    ImportToDatabaseDialogFiller(HI::GUITestOpStatus& os, const QList<Action>& actions);
+    ImportToDatabaseDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c): Filler(os, "ImportToDatabaseDialog", c){}
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
index 591c0dd..3e9e23d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
@@ -30,13 +30,13 @@
 
 #include "ImportOptionsWidgetFiller.h"
 #include "ItemToImportEditDialogFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ItemToImportEditDialogFiller"
 
-ItemToImportEditDialogFiller::ItemToImportEditDialogFiller(U2OpStatus& os, const QVariantMap& data) :
+ItemToImportEditDialogFiller::ItemToImportEditDialogFiller(HI::GUITestOpStatus& os, const QVariantMap& data) :
     Filler(os, "ItemToImportEditDialog"),
     data(data)
 {
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
index c43bc30..e30a47f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
@@ -22,13 +22,13 @@
 #ifndef _U2_ITEM_TO_IMPORT_EDIT_DIALOG_FILLER_H_
 #define _U2_ITEM_TO_IMPORT_EDIT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 class ItemToImportEditDialogFiller : public Filler {
 public:
-    ItemToImportEditDialogFiller(U2OpStatus& os, const QVariantMap& data);
+    ItemToImportEditDialogFiller(HI::GUITestOpStatus& os, const QVariantMap& data);
 
     void run();
 
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 3e84901..eda9c73 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "PositionSelectorFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "api/GTKeyboardDriver.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <drivers/GTKeyboardDriver.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -49,10 +49,7 @@ void GoToDialogFiller::run()
 #endif
     GTLineEdit::setText(os, posEdit, QString::number(goTo));
 
-    QPushButton *goButton = dialog->findChild<QPushButton*>("okButton");
-    GT_CHECK(goButton != NULL, "Button \"Go!\" not found");
-
-    GTWidget::click(os, goButton);
+    GTWidget::click(os, GTWidget::findButtonByText(os, "Go!", dialog));
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
index 6c5618f..25f013f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_POSITION_SELECTOR_FILLER_H_
 #define _U2_GT_RUNNABLES_POSITION_SELECTOR_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class GoToDialogFiller : public Filler {
     public:
-        GoToDialogFiller(U2OpStatus &_os, int _goTo) : Filler(_os, ""), goTo(_goTo){}
+        GoToDialogFiller(HI::GUITestOpStatus &_os, int _goTo) : Filler(_os, ""), goTo(_goTo){}
         virtual void run();
     private:
         int goTo;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
index 46aff37..3074d57 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
@@ -22,9 +22,9 @@
 
 #include "PredictSecondaryStructureDialogFiller.h"
 
-#include "api/GTFileDialog.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 
@@ -40,7 +40,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::PredictSecondaryStructureDialogFiller"
 
-PredictSecondaryStructureDialogFiller::PredictSecondaryStructureDialogFiller(U2OpStatus &os, int startPos, int endPos, bool onlyPressOk) :
+PredictSecondaryStructureDialogFiller::PredictSecondaryStructureDialogFiller(HI::GUITestOpStatus &os, int startPos, int endPos, bool onlyPressOk) :
     Filler(os, "SecStructDialog"),
     startPos(startPos),
     endPos(endPos),
@@ -49,7 +49,7 @@ PredictSecondaryStructureDialogFiller::PredictSecondaryStructureDialogFiller(U2O
 
 }
 
-PredictSecondaryStructureDialogFiller::PredictSecondaryStructureDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+PredictSecondaryStructureDialogFiller::PredictSecondaryStructureDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "SecStructDialog", scenario),
     startPos(0),
     endPos(0),
@@ -84,7 +84,7 @@ void PredictSecondaryStructureDialogFiller::commonScenario() {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
index d976a61..3f08644 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_PREDICT_SECONDARY_STRUCTURE_DIALOG_FILLER_H_
 #define _U2_GT_PREDICT_SECONDARY_STRUCTURE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class PredictSecondaryStructureDialogFiller : public Filler {
 public:
-    PredictSecondaryStructureDialogFiller(U2OpStatus &os, int startPos, int endPos, bool onlyPressOk = false);
-    PredictSecondaryStructureDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    PredictSecondaryStructureDialogFiller(HI::GUITestOpStatus &os, int startPos, int endPos, bool onlyPressOk = false);
+    PredictSecondaryStructureDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
 
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 88229b7..776b4bf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
@@ -19,11 +19,12 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2IdTypes.h>
 #include "GTUtilsProjectTreeView.h"
 #include "ProjectTreeItemSelectorDialogFiller.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -38,17 +39,18 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "ProjectTreeItemSelectorDialogFiller"
 
-ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, const QString& documentName, const QString &objectName,
+ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, const QString& documentName, const QString &objectName,
     const QSet<GObjectType> &acceptableTypes, SelectionMode mode, int expectedDocCount)
     : Filler(os, "ProjectTreeItemSelectorDialogBase"), acceptableTypes(acceptableTypes), mode(mode), expectedDocCount(expectedDocCount)
 {
     itemsToSelect.insert(documentName, QStringList() << objectName);
 }
 
-ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, const QMap<QString, QStringList> &itemsToSelect,
+ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, const QMap<QString, QStringList> &itemsToSelect,
     const QSet<GObjectType> &acceptableTypes, SelectionMode mode, int expectedDocCount)
     : Filler(os, "ProjectTreeItemSelectorDialogBase"), itemsToSelect(itemsToSelect), acceptableTypes(acceptableTypes), mode(mode),
     expectedDocCount(expectedDocCount)
@@ -56,7 +58,7 @@ ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(U2OpSta
 
 }
 
-ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+ProjectTreeItemSelectorDialogFiller::ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "ProjectTreeItemSelectorDialogBase", scenario),
     mode(Single),
     expectedDocCount(0)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
index 76bdad5..ed22481 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
@@ -22,7 +22,7 @@
 #ifndef _U2_GT_RUNNABLES_PROJECT_TREE_ITEM_SELECTOR_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_PROJECT_TREE_ITEM_SELECTOR_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsProjectTreeView.h"
 
 namespace U2 {
@@ -33,11 +33,11 @@ public:
         Single, Separate, Continuous
     };
 
-    ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, const QString &documentName, const QString &objectName,
+    ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, const QString &documentName, const QString &objectName,
         const QSet<GObjectType> &acceptableTypes = QSet<GObjectType>(), SelectionMode mode = Single, int expectedDocCount = -1);
-    ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, const QMap<QString, QStringList> &itemsToSelect,
+    ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, const QMap<QString, QStringList> &itemsToSelect,
         const QSet<GObjectType> &acceptableTypes = QSet<GObjectType>(), SelectionMode mode = Single, int expectedDocCount = -1);
-    ProjectTreeItemSelectorDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    ProjectTreeItemSelectorDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
 
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 5e726ce..a121a65 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "RangeSelectionDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -39,7 +39,7 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::exportSequenceOfSelectedAnnotationsFiller"
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_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(U2OpStatus &_
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_os) : Filler(_os, "RangeSelectionDialog")
+selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = true;
@@ -63,7 +63,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_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(U2OpStatus &_
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_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(U2OpStatus &_
     multipleRange = range;
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(U2OpStatus &_os, int _length, bool selectFromBegin) : Filler(_os, "RangeSelectionDialog")
+selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = false;
@@ -158,11 +158,7 @@ void selectSequenceRegionDialogFiller::run()
         GTLineEdit::setText(os, regionEdit, multipleRange);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
index a8ff8a2..950c839 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
@@ -22,18 +22,19 @@
 #ifndef _U2_GT_RUNNABLES_RANGE_SELECTION_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_RANGE_SELECTION_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class selectSequenceRegionDialogFiller : public Filler {
     public:
         enum RangeType {Single, Multiple};
-        selectSequenceRegionDialogFiller(U2OpStatus &_os, int *_len);
-        selectSequenceRegionDialogFiller(U2OpStatus &_os);
-        selectSequenceRegionDialogFiller(U2OpStatus &_os, int _minVal, int _maxVal);
-        selectSequenceRegionDialogFiller(U2OpStatus &_os, const QString &range);
-        selectSequenceRegionDialogFiller(U2OpStatus &_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);
 
         virtual void run();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
index be75039..aa2e18c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "RangeSelectorFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -52,10 +52,7 @@ void ZoomToRangeDialogFiller::run()
         GTLineEdit::setText(os, to, QString::number(maxVal));
     }
 
-    QPushButton *okButton = dialog->findChild<QPushButton*>("ok_button");
-    GT_CHECK(okButton != NULL, "Button \"Ok\" to  not found");
-
-    GTWidget::click(os, okButton);
+    GTWidget::click(os, GTWidget::findButtonByText(os, "Ok", dialog));
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
index a1efedc..615459f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_RANGE_SELECTOR_FILLER_H_
 #define _U2_GT_RUNNABLES_RANGE_SELECTOR_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ZoomToRangeDialogFiller : public Filler {
     public:
-        ZoomToRangeDialogFiller(U2OpStatus &_os, int min = -1, int max = -1) : Filler(_os, "range_selection_dialog"), minVal(min), maxVal(max){}
+        ZoomToRangeDialogFiller(HI::GUITestOpStatus &_os, int min = -1, int max = -1) : Filler(_os, "range_selection_dialog"), minVal(min), maxVal(max){}
         virtual void run();
     private:
         int minVal, maxVal;
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 807e422..f143df6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
@@ -26,25 +26,26 @@
 #include <QPushButton>
 #include <QRadioButton>
 
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTGroupBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
 #include "RemovePartFromSequenceDialogFiller.h"
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::RemovePartFromSequenceDialogFiller"
-RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(U2OpStatus &_os, QString _range, bool recalculateQuals)
+RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os, QString _range, bool recalculateQuals)
     : Filler(_os, "RemovePartFromSequenceDialog"), range(_range), removeType(Resize), format(FASTA), saveNew(false),
     recalculateQuals(recalculateQuals)
 {
 
 }
 
-RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(U2OpStatus &_os,RemoveType _removeType, bool _saveNew,
+RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os,RemoveType _removeType, bool _saveNew,
     const QString &_saveToFile, FormatToUse _format)
     : Filler(_os, "RemovePartFromSequenceDialog"), removeType(_removeType), format(_format), saveNew(_saveNew), recalculateQuals(false)
 {
@@ -54,7 +55,7 @@ RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(U2OpStatu
     comboBoxItems[Genbank] = "Genbank";
 }
 
-RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(U2OpStatus &_os, RemoveType _removeType)
+RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os, RemoveType _removeType)
     : Filler(_os, "RemovePartFromSequenceDialog"), removeType(_removeType), format(FASTA), recalculateQuals(false)
 {
 
@@ -86,7 +87,7 @@ void RemovePartFromSequenceDialogFiller::run()
     GTGlobals::sleep(1000);
     if (saveNew) {
         QGroupBox *saveToAnotherBox =  dialog->findChild<QGroupBox*>(QString::fromUtf8("saveToAnotherBox"));
-        saveToAnotherBox->setChecked(true);
+        GTGroupBox::setChecked(os, saveToAnotherBox, true);
         QLineEdit *filepathEdit = dialog->findChild<QLineEdit*>(QString::fromUtf8("filepathEdit"));
         GT_CHECK(filepathEdit != NULL, "QLineEdit \"filepathEdit\" not found");
 
@@ -101,13 +102,7 @@ void RemovePartFromSequenceDialogFiller::run()
         GTComboBox::setCurrentIndex(os, formatBox, index);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep(1000);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
index 23f14a2..3e11e8e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
@@ -22,18 +22,19 @@
 #ifndef _U2_GT_RUNNABLES_REMOVE_PART_FROM_SEQUENCE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_REMOVE_PART_FROM_SEQUENCE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class RemovePartFromSequenceDialogFiller : public Filler {
 public:
     enum RemoveType {Remove, Resize};
     enum FormatToUse {FASTA, Genbank};
 
-    RemovePartFromSequenceDialogFiller(U2OpStatus &_os, QString _range, bool recalculateQuals = false);
-    RemovePartFromSequenceDialogFiller(U2OpStatus &_os,RemoveType _removeType, bool _saveNew, const QString &_saveToFile, FormatToUse _format);
-    RemovePartFromSequenceDialogFiller(U2OpStatus &_os, RemoveType _removeType);
+    RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os, QString _range, bool recalculateQuals = false);
+    RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os,RemoveType _removeType, bool _saveNew, const QString &_saveToFile, FormatToUse _format);
+    RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os, RemoveType _removeType);
 
     void run();
 
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 12ef04c..9e8dd16 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
@@ -34,28 +34,28 @@
 #include <QtWidgets/QGroupBox>
 #endif
 
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include "ReplaceSubsequenceDialogFiller.h"
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::replaceSubsequenceDialogFiller"
-ReplaceSubsequenceDialogFiller::ReplaceSubsequenceDialogFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool recalculateQuals)
+ReplaceSubsequenceDialogFiller::ReplaceSubsequenceDialogFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool recalculateQuals)
     : Filler(_os, "EditSequenceDialog"), pasteDataHere(_pasteDataHere), recalculateQuals(recalculateQuals)
 {
 
 }
 
-ReplaceSubsequenceDialogFiller::ReplaceSubsequenceDialogFiller(U2OpStatus &os, CustomScenario *scenario)
+ReplaceSubsequenceDialogFiller::ReplaceSubsequenceDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
     : Filler(os, "EditSequenceDialog", scenario)
 {
 
@@ -77,13 +77,9 @@ void ReplaceSubsequenceDialogFiller::commonScenario()
 
     GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "recalculateQualsCheckBox"), recalculateQuals);
 
-    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, "cancel button is NULL");
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTWidget::click(os, button);
 
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
index 63c0458..3c194ff 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_GT_RUNNABLES_REPLACE_SUBSEQUENCE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_REPLACE_SUBSEQUENCE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ReplaceSubsequenceDialogFiller : public Filler {
 public:
-    ReplaceSubsequenceDialogFiller(U2OpStatus &_os, const QString &_pasteDataHere, bool recalculateQuals = false);
-    ReplaceSubsequenceDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    ReplaceSubsequenceDialogFiller(HI::GUITestOpStatus &_os, const QString &_pasteDataHere, bool recalculateQuals = false);
+    ReplaceSubsequenceDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
     void commonScenario();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
index e628be6..b87f738 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
@@ -21,8 +21,8 @@
 
 #include <QApplication>
 
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #include "SetSequenceOriginDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
index bc12fa6..401a761 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
@@ -23,14 +23,15 @@
 #ifndef _U2_SET_SEQUENCE_ORIGIN_DIALOG_FILLER_H_
 #define _U2_SET_SEQUENCE_ORIGIN_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class SetSequenceOriginDialogFiller: public Filler
 {
 public:
-    SetSequenceOriginDialogFiller(U2OpStatus &os, int _start): Filler(os, "SetSequenceOriginDialog"), start(_start){}
+    SetSequenceOriginDialogFiller(HI::GUITestOpStatus &os, int _start): Filler(os, "SetSequenceOriginDialog"), start(_start){}
     virtual void commonScenario();
 private:
     int start;
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 ac08f2c..68e27f5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
@@ -32,21 +32,24 @@
 #include <QtWidgets/QListWidget>
 #endif
 
+#include <U2Core/U2IdTypes.h>
+#include <U2Core/U2SafePoints.h>
 #include "GTDatabaseConfig.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
 #include "SharedConnectionsDialogFiller.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
+#include <base_dialogs/MessageBoxFiller.h>
 
 namespace U2 {
+using namespace HI;
 
 SharedConnectionsDialogFiller::Action::Action(Type type, QString itemName)
 : type(type), itemName(itemName), expectedResult(OK)
@@ -54,15 +57,21 @@ SharedConnectionsDialogFiller::Action::Action(Type type, QString itemName)
     dbName = GTDatabaseConfig::database();
 }
 
-SharedConnectionsDialogFiller::SharedConnectionsDialogFiller(U2OpStatus &os, const QList<Action> &actions, const QFlags<Behavior> &behavior)
-    : Filler(os, "SharedConnectionsDialog"), actions(actions), behavior(behavior)
+SharedConnectionsDialogFiller::SharedConnectionsDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
+    Filler(os, "SharedConnectionsDialog"), actions(actions)
+{
+
+}
+
+SharedConnectionsDialogFiller::SharedConnectionsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
+    Filler(os, "SharedConnectionsDialog", scenario)
 {
 
 }
 
 namespace {
 
-QListWidgetItem * findConnection(U2OpStatus &os, QListWidget *list, const QString &name, GTGlobals::FindOptions options = GTGlobals::FindOptions()) {
+QListWidgetItem * findConnection(HI::GUITestOpStatus &os, QListWidget *list, const QString &name, GTGlobals::FindOptions options = GTGlobals::FindOptions()) {
     GTGlobals::sleep(1000);
     QList<QListWidgetItem*> items = list->findItems(name, Qt::MatchExactly);
     if (1 != items.size()) {
@@ -75,7 +84,7 @@ QListWidgetItem * findConnection(U2OpStatus &os, QListWidget *list, const QStrin
     return items.first();
 }
 
-void clickConnection(U2OpStatus &os, QListWidget *list, const QString &name) {
+void clickConnection(HI::GUITestOpStatus &os, QListWidget *list, const QString &name) {
     QListWidgetItem *item = findConnection(os, list, name);
     CHECK_OP(os, );
 
@@ -85,14 +94,14 @@ void clickConnection(U2OpStatus &os, QListWidget *list, const QString &name) {
     GTMouseDriver::click(os);
 }
 
-void checkDocument(U2OpStatus &os, const QString &name, bool mustBe) {
+void checkDocument(HI::GUITestOpStatus &os, const QString &name, bool mustBe) {
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, name, GTGlobals::FindOptions(false));
     if (!mustBe) {
         CHECK_SET_ERR(!idx.isValid(), "Document is not deleted");
     }
 }
 
-void waitForConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
+void waitForConnection(HI::GUITestOpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
     switch (action.expectedResult) {
         case SharedConnectionsDialogFiller::Action::OK:
             break;
@@ -115,46 +124,21 @@ void waitForConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Acti
     }
 }
 
-void establishConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Action &action,
-    const QFlags<SharedConnectionsDialogFiller::Behavior> &behavior)
+void establishConnection(HI::GUITestOpStatus &os, const SharedConnectionsDialogFiller::Action &action)
 {
     GTGlobals::sleep(1000);
     QWidget* dialog = QApplication::activeModalWidget();
 
-    QWidget *cnctBtn = GTWidget::findWidget(os,"pbConnect", dialog);
-    QWidget *dcntBtn = GTWidget::findWidget(os,"pbDisconnect", dialog);
-    QWidget *editBtn = GTWidget::findWidget(os,"pbEdit", dialog);
-    QListWidget *list = dynamic_cast<QListWidget*>(GTWidget::findWidget(os, "lwConnections", dialog));
-
     waitForConnection(os, action);
     CHECK_OP(os, );
 
-    GTWidget::click(os, cnctBtn, Qt::LeftButton, QPoint(), false);//no processing events after clicking
-    CHECK(behavior.testFlag(SharedConnectionsDialogFiller::SAFE), );
+    GTWidget::click(os, GTWidget::findWidget(os,"pbConnect", dialog));
 
     GTGlobals::sleep(2000);
     GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    if (SharedConnectionsDialogFiller::Action::OK == action.expectedResult ||
-        SharedConnectionsDialogFiller::Action::INITIALIZE == action.expectedResult) {
-        if (SharedConnectionsDialogFiller::Action::INITIALIZE == action.expectedResult) {
-            GTGlobals::sleep(10000);
-        }
-        CHECK_SET_ERR(!cnctBtn->isEnabled(), "connect button enabled");
-        CHECK_SET_ERR(!editBtn->isEnabled(), "edit button enabled");
-        CHECK_SET_ERR(dcntBtn->isEnabled(), "disconnect button disabled");
-
-        // Check connection icon
-        QListWidgetItem *item = findConnection(os, list, action.itemName);
-        CHECK_OP(os, );
-        CHECK_SET_ERR(!item->icon().isNull(), "no icon");
-
-        // Check project view
-        checkDocument(os, action.dbName, true);
-    }
 }
 
-void deleteConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
+void deleteConnection(HI::GUITestOpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
     QListWidget *list = dynamic_cast<QListWidget*>(GTWidget::findWidget(os, "lwConnections"));
 
     GTWidget::click(os, GTWidget::findWidget(os,"pbDelete"));
@@ -168,7 +152,7 @@ void deleteConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Actio
     checkDocument(os, action.dbName, false);
 }
 
-void stopConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
+void stopConnection(HI::GUITestOpStatus &os, const SharedConnectionsDialogFiller::Action &action) {
     QWidget *cnctBtn = GTWidget::findWidget(os,"pbConnect");
     QWidget *dcntBtn = GTWidget::findWidget(os,"pbDisconnect");
     QWidget *editBtn = GTWidget::findWidget(os,"pbEdit");
@@ -187,9 +171,9 @@ void stopConnection(U2OpStatus &os, const SharedConnectionsDialogFiller::Action
 }
 
 #define GT_CLASS_NAME "GTUtilsDialog::SharedConnectionsDialogFiller"
-#define GT_METHOD_NAME "run"
+#define GT_METHOD_NAME "commonScenario"
 
-void SharedConnectionsDialogFiller::run() {
+void SharedConnectionsDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
     QListWidget *list = dynamic_cast<QListWidget*>(GTWidget::findWidget(os, "lwConnections", dialog));
@@ -214,7 +198,7 @@ void SharedConnectionsDialogFiller::run() {
                 CHECK_OP(os, );
                 break;
             case Action::CONNECT:
-                establishConnection(os, action, behavior);
+                establishConnection(os, action);
                 CHECK_OP(os, );
                 if (Action::OK == action.expectedResult) {
                     connected = true;
@@ -224,16 +208,16 @@ void SharedConnectionsDialogFiller::run() {
                 stopConnection(os, action);
                 CHECK_OP(os, );
                 break;
+            case Action::CLOSE:
+                GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Close);
+                break;
             default:
                 os.setError("Unknown action type");
                 return;
         }
         CHECK_OP(os, );
     }
-
-    if (!connected) {
-        GTWidget::click(os, GTWidget::findButtonByText(os, "Close"));
-    }
+    GTGlobals::sleep();
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
index 353eed2..400f3f7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
@@ -28,18 +28,16 @@
 
 #include <QtCore/QFlags>
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
 
 class SharedConnectionsDialogFiller : public Filler {
 public:
-    enum Behavior { SAFE, UNSAFE };
-
     class Action {
     public:
-        enum Type {ADD, CLICK, EDIT, DELETE, CONNECT, DISCONNECT};
+        enum Type {ADD, CLICK, EDIT, DELETE, CONNECT, DISCONNECT, CLOSE};
 
         Action(Type type, QString itemName = "");
         Type type;
@@ -51,12 +49,13 @@ public:
         ConnectResult expectedResult;
     };
 
-    SharedConnectionsDialogFiller(U2OpStatus &os, const QList<Action> &actions, const QFlags<Behavior> &behavior = QFlags<Behavior>(SAFE));
-    void run();
+    SharedConnectionsDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
+    SharedConnectionsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
+
+    void commonScenario();
 
 private:
     QList<Action> actions;
-    QFlags<Behavior> behavior;
 };
 
 } // U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
index 1534fa7..582b50a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
@@ -20,11 +20,11 @@
  */
 
 #include "RenameSequenceFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "api/GTClipboard.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include "system/GTClipboard.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -39,7 +39,7 @@ namespace U2 {
 #define GT_CLASS_NAME "GTUtilsDialog::RenamesequenceFiller"
 #define GT_METHOD_NAME "run"
 
-void RenameSequenceFiller::commonScenario(){
+void RenameSequenceFiller::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog != NULL, "dialog not found");
     GT_CHECK(dialog->windowTitle() == "Rename", "dialog not found");
@@ -52,24 +52,16 @@ void RenameSequenceFiller::commonScenario(){
         GT_CHECK(oldName == actualText, "edited sequence name not match with expected");
     }
     
-    if(oldName != newName){ //if filler used only for checking sequence name
-        //GTLineEdit::setText(os, nameEdit, newName);
-        nameEdit->setText(newName);
+    if (oldName != newName){
+        //if filler used not for checking sequence name
+        GTLineEdit::setText(os, nameEdit, newName);
     }
  
-    GTGlobals::sleep(1000);
-
-#ifndef Q_OS_MAC
-    //instead clicking OK we will send 'Enter'
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
-#else
-    //but on Mac we will definitly click OK
-    QList<QPushButton*> list = dialog->findChildren<QPushButton*>();
-    foreach(QPushButton* but,list){
-        if (but->text().contains("OK"))
-                GTWidget::click(os,but);
+    GTWidget::click(os, GTWidget::findButtonByText(os, "OK", dialog));
+    GTGlobals::sleep(500);
+    if (NULL != QApplication::activeModalWidget()) {
+        GTWidget::click(os, GTWidget::findButtonByText(os, "OK", QApplication::activeModalWidget()));
     }
-#endif
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
index 7625daa..1c7bca7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
@@ -22,18 +22,19 @@
 #ifndef _U2_GT_RUNNABLES_RENAME_SEQUENCE_FILLER_H_
 #define _U2_GT_RUNNABLES_RENAME_SEQUENCE_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class RenameSequenceFiller : public Filler {
 public:
     //class can be used for checking name if newName == oldName
-    RenameSequenceFiller(U2OpStatus &_os, QString _newName, QString _oldName = QString()):Filler(_os, ""),os(_os), newName(_newName), oldName(_oldName){}
-    RenameSequenceFiller(U2OpStatus &_os, CustomScenario* c):Filler(_os, "", c), os(_os){}
+    RenameSequenceFiller(HI::GUITestOpStatus &_os, QString _newName, QString _oldName = QString()):Filler(_os, ""),os(_os), newName(_newName), oldName(_oldName){}
+    RenameSequenceFiller(HI::GUITestOpStatus &_os, CustomScenario* c):Filler(_os, "", c), os(_os){}
     virtual void commonScenario();
 private:
-    U2OpStatus &os;
+    HI::GUITestOpStatus &os;
     QString newName;
     QString oldName;
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
index 4b7fed4..c716f50 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_EXPORT_CONSENSUS_DIALOG_FILLER_H_
 #define _U2_EXPORT_CONSENSUS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2{
+using namespace HI;
 
 class ExportConsensusDialogFiller: public Filler
 {
 public:
-    ExportConsensusDialogFiller(U2OpStatus &os, CustomScenario* _c):
+    ExportConsensusDialogFiller(HI::GUITestOpStatus &os, CustomScenario* _c):
         Filler(os, "ExportConsensusDialog", _c){}
     void commonScenario();
 
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 318112f..d518811 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
@@ -28,19 +28,20 @@
 #include <QSpinBox>
 
 #include "ExportCoverageDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::BranchSettingsDialogFiller"
 
-ExportCoverageDialogFiller::ExportCoverageDialogFiller(U2OpStatus &os, const QList<Action> &actions) :
+ExportCoverageDialogFiller::ExportCoverageDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
     Filler(os, "ExportCoverageDialog"),
     dialog(NULL),
     actions(actions)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
index 94ae69e..3976cb7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_EXPORT_COVERAGE_DIALOG_FILLER_H_
 #define _U2_EXPORT_COVERAGE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportCoverageDialogFiller : public Filler {
 public:
@@ -51,7 +52,7 @@ public:
 
     typedef QPair<ActionType, QVariant> Action;
 
-    ExportCoverageDialogFiller(U2OpStatus &os, const QList<Action> &actions);
+    ExportCoverageDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
 
     void run();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
index 058f92f..641067f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
@@ -33,16 +33,16 @@
 #include <QtWidgets/QCheckBox>
 #endif
 
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportReadsDialogFiller"
 
-ExportReadsDialogFiller::ExportReadsDialogFiller(U2OpStatus &os, const QString &filePath, const QString format, bool addToProject)
+ExportReadsDialogFiller::ExportReadsDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, const QString format, bool addToProject)
     : Filler(os, "ExportReadsDialog"),
       filePath(filePath),
       format(format),
@@ -67,11 +67,7 @@ void ExportReadsDialogFiller::run() {
     GT_CHECK(addToPrj != NULL, "Add to project check box not found");
     GTCheckBox::setChecked(os, addToPrj, addToProject);
 
-    QDialogButtonBox* box = dialog->findChild<QDialogButtonBox*>("buttonBox");
-    GT_CHECK(box != NULL, "buttonBox is NULL");
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #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 1d03118..1c0615d 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
@@ -22,13 +22,14 @@
 #ifndef _U2_EXPORT_READS_DIALOG_FILLER_H_
 #define _U2_EXPORT_READS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportReadsDialogFiller : public Filler {
 public:
-    ExportReadsDialogFiller(U2OpStatus &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);
     virtual void run();
 private:
     QString filePath;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
index 67e077a..5c597d0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
@@ -33,9 +33,9 @@
 #include <QtWidgets/QDialogButtonBox>
 #endif
 
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "runnables/qt/ColorDialogFiller.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <base_dialogs/ColorDialogFiller.h>
 
 namespace U2{
 
@@ -53,11 +53,7 @@ void BranchSettingsDialogFiller::run(){
     QSpinBox* thicknessSpinBox = dialog->findChild<QSpinBox*>("thicknessSpinBox");
     GTSpinBox::setValue(os,thicknessSpinBox,10);
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
index fc1f4c9..2cee66b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef BRANCHSETTINGSDIALOGFILLER_H
 #define BRANCHSETTINGSDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2{
+using namespace HI;
 
 class BranchSettingsDialogFiller : public Filler
 {
 public:
-    BranchSettingsDialogFiller(U2OpStatus &os) : Filler(os,"BranchSettingsDialog"){}
+    BranchSettingsDialogFiller(HI::GUITestOpStatus &os) : Filler(os,"BranchSettingsDialog"){}
     virtual void run();
 };
 
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 5ae99ce..2a5ff6c 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
@@ -30,21 +30,21 @@
 #include <QDialogButtonBox>
 
 #include "BuildTreeDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTWidget.h>
+#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::BuildTreeDialogFiller"
 
-BuildTreeDialogFiller::BuildTreeDialogFiller(U2OpStatus &os, const QString &saveTree, int model, double alpha, bool displayWithMsa) :
+BuildTreeDialogFiller::BuildTreeDialogFiller(HI::GUITestOpStatus &os, const QString &saveTree, int model, double alpha, bool displayWithMsa) :
     Filler(os, "CreatePhyTree"),
     saveTree(saveTree),
     model(model),
@@ -55,7 +55,7 @@ BuildTreeDialogFiller::BuildTreeDialogFiller(U2OpStatus &os, const QString &save
 
 }
 
-BuildTreeDialogFiller::BuildTreeDialogFiller(U2OpStatus &os,
+BuildTreeDialogFiller::BuildTreeDialogFiller(HI::GUITestOpStatus &os,
                                              int replicates,
                                              const QString &saveTree,
                                              int seed,
@@ -73,7 +73,7 @@ BuildTreeDialogFiller::BuildTreeDialogFiller(U2OpStatus &os,
 
 }
 
-BuildTreeDialogFiller::BuildTreeDialogFiller(U2OpStatus &os, CustomScenario *scenario)
+BuildTreeDialogFiller::BuildTreeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
     : Filler(os, "CreatePhyTree", scenario),
     model(0),
     replicates(0),
@@ -133,7 +133,7 @@ void BuildTreeDialogFiller::commonScenario() {
 
 #define GT_CLASS_NAME "GTUtilsDialog::BuildTreeDialogFiller"
 
-BuildTreeDialogFillerPhyML::BuildTreeDialogFillerPhyML(U2OpStatus &os, bool _freqOptimRadioPressed, int bootstrap)
+BuildTreeDialogFillerPhyML::BuildTreeDialogFillerPhyML(HI::GUITestOpStatus &os, bool _freqOptimRadioPressed, int bootstrap)
     : Filler(os, "CreatePhyTree"), freqOptimRadioPressed(_freqOptimRadioPressed), bootstrap(bootstrap)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
index 204930f..dd19b5e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_BUILD_TREE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_BUILD_TREE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class BuildTreeDialogFiller : public Filler {
 public:
@@ -35,9 +36,9 @@ public:
         M1
     };
 
-    BuildTreeDialogFiller(U2OpStatus &os, const QString &saveTree = "default", int model = 0, double alpha = 0, bool displayWithMsa = false);
-    BuildTreeDialogFiller(U2OpStatus &os, int replicates = 0, const QString &saveTree = "default", int seed = 5, ConsensusType type = MAJORITYEXT, double fraction = 0.5);
-    BuildTreeDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    BuildTreeDialogFiller(HI::GUITestOpStatus &os, const QString &saveTree = "default", int model = 0, double alpha = 0, bool displayWithMsa = false);
+    BuildTreeDialogFiller(HI::GUITestOpStatus &os, int replicates = 0, const QString &saveTree = "default", int seed = 5, ConsensusType type = MAJORITYEXT, double fraction = 0.5);
+    BuildTreeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
@@ -54,7 +55,7 @@ private:
 
 class BuildTreeDialogFillerPhyML : public Filler {
  public:
-    BuildTreeDialogFillerPhyML(U2OpStatus &os, bool _freqOptimRadioPressed, int bootstrap = -1);
+    BuildTreeDialogFillerPhyML(HI::GUITestOpStatus &os, bool _freqOptimRadioPressed, int bootstrap = -1);
     void commonScenario();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
index 700889b..98c55a2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "DeleteGapsDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -83,11 +83,7 @@ void RemoveGapColsDialogFiller::run() {
         GTSpinBox::setValue(os, box, spinValue);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
index 3a5b309..69a3537 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_DELETE_GAPS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_DELETE_GAPS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DeleteGapsDialogFiller : public Filler {
 public:
-    DeleteGapsDialogFiller(U2OpStatus &os, int _radioButNum=0) : Filler(os, "DeleteGapsDialog"),
+    DeleteGapsDialogFiller(HI::GUITestOpStatus &os, int _radioButNum=0) : Filler(os, "DeleteGapsDialog"),
         radioButNum(_radioButNum){}
     virtual void run();
 private:
@@ -38,7 +39,7 @@ private:
 class RemoveGapColsDialogFiller : public Filler {
 public:
     enum Radio {Number, Percent, Column};
-    RemoveGapColsDialogFiller(U2OpStatus &os, Radio _button, int _spinValue=1) : Filler(os, "DeleteGapsDialog"),
+    RemoveGapColsDialogFiller(HI::GUITestOpStatus &os, Radio _button, int _spinValue=1) : Filler(os, "DeleteGapsDialog"),
         button(_button), spinValue(_spinValue){
         radioMap[Number] = "absoluteRadioButton";
         radioMap[Percent] = "relativeRadioButton";
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 f062cd6..0f70a55 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
@@ -20,12 +20,13 @@
  */
 #include "DistanceMatrixDialogFiller.h"
 
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTGlobals.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTGroupBox.h>
+#include "GTGlobals.h"
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -43,7 +44,7 @@ namespace U2{
 
 #define GT_CLASS_NAME "GTUtilsDialog::DistanceMatrixDialogFiller"
 
-DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(U2OpStatus &os, bool _hamming, bool _counts, bool _excludeGaps) :
+DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, bool _hamming, bool _counts, bool _excludeGaps) :
     Filler(os,"DistanceMatrixMSAProfileDialog"),
     hamming(_hamming),
     counts(_counts),
@@ -54,7 +55,7 @@ DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(U2OpStatus &os, bool _ham
 
 }
 
-DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(U2OpStatus &os, DistanceMatrixDialogFiller::SaveFormat _format, QString _path) :
+DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, DistanceMatrixDialogFiller::SaveFormat _format, QString _path) :
     Filler(os,"DistanceMatrixMSAProfileDialog"),
     hamming(true),
     counts(true),
@@ -66,7 +67,7 @@ DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(U2OpStatus &os, DistanceM
 
 }
 
-DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(U2OpStatus &os, CustomScenario *c):
+DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c):
     Filler(os, "DistanceMatrixMSAProfileDialog", c){}
 
 #define GT_METHOD_NAME "run"
@@ -94,8 +95,7 @@ void DistanceMatrixDialogFiller::commonScenario(){
     }
 
     if(saveToFile){
-        QGroupBox* saveBox = dialog->findChild<QGroupBox*>("saveBox");
-        saveBox->setChecked(true);
+        GTGroupBox::setChecked(os, "saveBox", dialog);
 
         QLineEdit* fileEdit = dialog->findChild<QLineEdit*>("fileEdit");
         GTLineEdit::setText(os, fileEdit,path);
@@ -112,12 +112,7 @@ void DistanceMatrixDialogFiller::commonScenario(){
     QCheckBox* checkBox = dialog->findChild<QCheckBox*>("checkBox");
     GTCheckBox::setChecked(os,checkBox,excludeGaps);
 
-
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
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 424aa89..9b8a845 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
@@ -21,8 +21,9 @@
 #ifndef DISTANCEMATRIXDIALOGFILLER_H
 #define DISTANCEMATRIXDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 namespace U2{
+using namespace HI;
 
 class DistanceMatrixDialogFiller : public Filler {
 public:
@@ -31,9 +32,9 @@ public:
         CSV
     };
 
-    DistanceMatrixDialogFiller(U2OpStatus &os, bool _hamming=true, bool _counts=true, bool _excludeGaps=true);
-    DistanceMatrixDialogFiller(U2OpStatus &os, SaveFormat _format,QString _path);
-    DistanceMatrixDialogFiller(U2OpStatus &os, CustomScenario* c);
+    DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, bool _hamming=true, bool _counts=true, bool _excludeGaps=true);
+    DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, SaveFormat _format,QString _path);
+    DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c);
 
     virtual void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
index 9c27b61..061fa3b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
@@ -22,14 +22,14 @@
 #include <QApplication>
 
 #include "ExportHighlightedDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "ExportHighlightedDialogFiller"
-ExportHighlightedDialogFiller::ExportHighlightedDialogFiller(U2OpStatus &os, const QString &filePath, bool inverted) :
+ExportHighlightedDialogFiller::ExportHighlightedDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, bool inverted) :
     Filler(os, "ExportHighlightedDialog"),
     filePath(filePath),
     invertedExport(inverted)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
index 1656034..c2cfa65 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_EXPORT_HIGHLIGHTED_DIALOG_FILLER_H_
 #define _U2_EXPORT_HIGHLIGHTED_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportHighlightedDialogFiller : public Filler {
 public:
-    ExportHighlightedDialogFiller(U2OpStatus &os, const QString &filePath,
+    ExportHighlightedDialogFiller(HI::GUITestOpStatus &os, const QString &filePath,
                                   bool invertredExport = true);
 
     void run();
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 42e3e41..a718e68 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
@@ -20,13 +20,13 @@
  */
 
 #include "ExtractSelectedAsMSADialogFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTCheckBox.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTCheckBox.h>
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
 
 
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -49,6 +49,7 @@
 
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExtractSelectedAsMSADialogFiller"
 #define GT_METHOD_NAME "run"
@@ -135,18 +136,12 @@ void ExtractSelectedAsMSADialogFiller::commonScenario() {
 
     GTGlobals::sleep();
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
-
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedSequences"
-QStringList ExtractSelectedAsMSADialogFiller::getSequences(U2OpStatus &os, bool selected){
+QStringList ExtractSelectedAsMSADialogFiller::getSequences(HI::GUITestOpStatus &os, bool selected){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", QStringList());
     QStringList result;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
index fb35eaf..4b22670 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_EXTRACT_SELECTED_AS_MSA_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXTRACT_SELECTED_AS_MSA_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExtractSelectedAsMSADialogFiller : public Filler {
 public:
-    ExtractSelectedAsMSADialogFiller(U2OpStatus &os,QString _filepath, QStringList _list, int _from=0, int _to=0,bool _addToProj=true,
+    ExtractSelectedAsMSADialogFiller(HI::GUITestOpStatus &os,QString _filepath, QStringList _list, int _from=0, int _to=0,bool _addToProj=true,
                                      bool _invertButtonPress=false,bool _allButtonPress=false,
                                      bool _noneButtonPress=false, bool _dontCheckFilepath = false, QString format = "") : Filler(os, "CreateSubalignmentDialog"),
         filepath(_filepath),
@@ -41,9 +42,9 @@ public:
         allButtonPress(_allButtonPress),
         noneButtonPress(_noneButtonPress),
         dontCheckFilepath(_dontCheckFilepath) {}
-    ExtractSelectedAsMSADialogFiller(U2OpStatus &os, CustomScenario *c): Filler(os, "CreateSubalignmentDialog", c){}
+    ExtractSelectedAsMSADialogFiller(HI::GUITestOpStatus &os, CustomScenario *c): Filler(os, "CreateSubalignmentDialog", c){}
     virtual void commonScenario();
-    static QStringList getSequences(U2OpStatus &os, bool selected = true);
+    static QStringList getSequences(HI::GUITestOpStatus &os, bool selected = true);
 private:
     QString filepath;
     QString format;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
index f05fcbf..112c8c8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
@@ -20,10 +20,11 @@
  */
 
 #include "GenerateAlignmentProfileDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTCheckBox.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTGroupBox.h>
 
 
 
@@ -63,8 +64,7 @@ void GenerateAlignmentProfileDialogFiller::run() {
     }
 
     if (format != NONE) {
-        QGroupBox* saveBox = dialog->findChild<QGroupBox*>("saveBox");
-        saveBox->setChecked(true);
+        GTGroupBox::setChecked(os, "saveBox", dialog);
         GTGlobals::sleep(500);
 
         QLineEdit* fileEdit = dialog->findChild<QLineEdit*>("fileEdit");
@@ -83,14 +83,9 @@ void GenerateAlignmentProfileDialogFiller::run() {
     QCheckBox* skipGapPositionsCB = dialog->findChild<QCheckBox*>("skipGapPositionsCB");
     GTCheckBox::setChecked(os,skipGapPositionsCB,skipGaps);
 
-    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");
-    GTWidget::click(os, button);
-
-
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
+
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
index 15d49a1..c51c975 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
@@ -23,15 +23,16 @@
 #ifndef GENERATEALIGNMENTPROFILEDIALOGFILLER_H
 #define GENERATEALIGNMENTPROFILEDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class GenerateAlignmentProfileDialogFiller : public Filler
 {
 public:
     enum saveFormat{NONE,HTML, CSV};
-    GenerateAlignmentProfileDialogFiller(U2OpStatus &os, bool _counts=true, saveFormat _format=NONE,
+    GenerateAlignmentProfileDialogFiller(HI::GUITestOpStatus &os, bool _counts=true, saveFormat _format=NONE,
                                          QString _filePath = "") : Filler(os, "DNAStatMSAProfileDialog"),
         counts(_counts),
         gapScore(false),
@@ -45,7 +46,7 @@ public:
         checkBoxItems[CSV] = "csvRB";
     }
 
-    GenerateAlignmentProfileDialogFiller(U2OpStatus &os, bool _gapsScore, bool _symbolScore, bool _skipGaps) : Filler(os, "DNAStatMSAProfileDialog"),
+    GenerateAlignmentProfileDialogFiller(HI::GUITestOpStatus &os, bool _gapsScore, bool _symbolScore, bool _skipGaps) : Filler(os, "DNAStatMSAProfileDialog"),
         counts(true),
         gapScore(_gapsScore),
         symdolScore(_symbolScore),
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
similarity index 66%
copy from src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp
copy to src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
index a227708..4f7b752 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
@@ -19,31 +19,35 @@
  * MA 02110-1301, USA.
  */
 
+#include <QPushButton>
 #include <QApplication>
 
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
+#include "LicenseAgreementDialogFiller.h"
+#include "utils/GTThread.h"
+#include <primitives/GTWidget.h>
 
-#include "GTUtilsWizard.h"
+namespace U2 {
 
-#include "ConfigurationWizardFiller.h"
+#define GT_CLASS_NAME "GTUtilsDialog::GenerateAlignmentProfileDialogFiller"
 
-namespace U2 {
+LicenseAgreemntDialogFiller::LicenseAgreemntDialogFiller(HI::GUITestOpStatus &os) :
+    Filler(os, "LicenseDialog")
+{
+
+}
 
-#define GT_CLASS_NAME "GTUtilsDialog::StartupDialogFiller"
 #define GT_METHOD_NAME "commonScenario"
-void ConfigurationWizardFiller::commonScenario(){
+void LicenseAgreemntDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
-    GTGlobals::sleep(500);
+    GTGlobals::sleep();
 
-    foreach (QString s, radioNames) {
-        QRadioButton* b = GTWidget::findExactWidget<QRadioButton*>(os, s, dialog);
-        GTRadioButton::click(os, b);
-    }
-
-    GTUtilsWizard::clickButton(os, GTUtilsWizard::Setup);
+    QPushButton* accept = dialog->findChild<QPushButton*>("acceptButton");
+    GTWidget::click(os, accept);
+    GTThread::waitForMainThread(os);
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
-}
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
similarity index 74%
copy from src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
copy to src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
index 9b7cb7a..3b30de2 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
@@ -19,21 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef ESCAPECLICKER_H
-#define ESCAPECLICKER_H
+#ifndef _U2_LICENSE_AGREEMENT_DIALOG_FILLER_H_
+#define _U2_LICENSE_AGREEMENT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
-class EscapeClicker: public Filler
-{
+class LicenseAgreemntDialogFiller : public Filler {
 public:
-    EscapeClicker(U2OpStatus &os, const QString &name = "", CustomScenario *scenario = NULL);
+    LicenseAgreemntDialogFiller(HI::GUITestOpStatus &os);
 
     void commonScenario();
 };
 
 }
-
-#endif // ESCAPECLICKER_H
+#endif // _U2_LICENSE_AGREEMENT_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h
deleted file mode 100644
index 40b98b8..0000000
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 LICENSEAGREEMNTDIALOGFILLER_H
-#define LICENSEAGREEMNTDIALOGFILLER_H
-
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QApplication>
-#endif
-
-#include "GTUtilsDialog.h"
-#include "api/GTWidget.h"
-
-namespace U2 {
-
-class LicenseAgreemntDialogFiller : public Filler {
-public:
-    LicenseAgreemntDialogFiller(U2OpStatus &os) : Filler(os, "LicenseDialog"){}
-    virtual void run(){
-        QWidget* dialog = QApplication::activeModalWidget();
-        CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-        GTGlobals::sleep(1000);
-
-        QPushButton* accept = dialog->findChild<QPushButton*>("acceptButton");
-        GTWidget::click(os, accept);
-    }
-private:
-
-};
-
-}
-#endif // LICENSEAGREEMNTDIALOGFILLER_H
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
index bf47847..35ede37 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
@@ -20,9 +20,14 @@
  */
 
 #include "SmithWatermanDialogBaseFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTextEdit.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTGroupBox.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTextEdit.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -60,19 +65,19 @@ namespace U2 {
 #define GT_CLASS_NAME "GTUtilsDialog::SmithWatermanDialogFiller"
 #define GT_METHOD_NAME "run"
 
-SmithWatermanDialogFiller::SmithWatermanDialogFiller(U2OpStatus &_os, SwRealization _realization,
+SmithWatermanDialogFiller::SmithWatermanDialogFiller(HI::GUITestOpStatus &_os, SwRealization _realization,
                                                      const SmithWatermanSettings::SWResultView _resultView, const QString & _resultFilesPath,
                                                      const QString& _pattern, const GTRegionSelector::RegionSelectorSettings& _s)
     : Filler(_os, "SmithWatermanDialogBase"), button(Search), pattern(_pattern), s(_s),
       resultView(_resultView), resultFilesPath(_resultFilesPath), autoSetupAlgorithmParams(true),
       realization(_realization) {}
 
-SmithWatermanDialogFiller::SmithWatermanDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+SmithWatermanDialogFiller::SmithWatermanDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "SmithWatermanDialogBase", scenario)
 {
 }
 
-SmithWatermanDialogFiller::SmithWatermanDialogFiller(U2OpStatus &_os, const QString& _pattern,
+SmithWatermanDialogFiller::SmithWatermanDialogFiller(HI::GUITestOpStatus &_os, const QString& _pattern,
     const GTRegionSelector::RegionSelectorSettings& _s, SwRealization _realization)
     : Filler(_os, "SmithWatermanDialogBase"), button(Search), pattern(_pattern), s(_s),
     resultView(SmithWatermanSettings::ANNOTATIONS), resultFilesPath(""),
@@ -103,7 +108,7 @@ void SmithWatermanDialogFiller::commonScenario() {
     } else {
         assert(0);
     }
-    resultViewVariants->setCurrentIndex(resultViewIndex);
+    GTComboBox::setCurrentIndex(os, resultViewVariants, resultViewIndex);
 
     if(!resultFilesPath.isEmpty()) {
         QLineEdit * resultFilePathContainer = NULL;
@@ -116,22 +121,22 @@ void SmithWatermanDialogFiller::commonScenario() {
             resultFilesPath += ANNOTATION_RESULT_FILE_NAME;
         }
         assert(NULL != resultFilePathContainer);
-        resultFilePathContainer->setText(resultFilesPath);
+        GTLineEdit::setText(os, resultFilePathContainer, resultFilesPath);
     }
 
     if(autoSetupAlgorithmParams) {
         if(SmithWatermanSettings::MULTIPLE_ALIGNMENT == resultView) {
             QGroupBox * advOptions = qobject_cast<QGroupBox *>(GTWidget::findWidget(os, "advOptions", dialog));
-            advOptions->setChecked(true);
+            GTGroupBox::setChecked(os, advOptions, true);
 
             QLineEdit * mObjectNameTmpl = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "mObjectNameTmpl", dialog));
-            mObjectNameTmpl->setText(mObjectNameTmpl->text() + TEST_NAME_FOR_MA_RESULTS);
+            GTLineEdit::setText(os, mObjectNameTmpl, mObjectNameTmpl->text() + TEST_NAME_FOR_MA_RESULTS);
 
             QLineEdit * refSubseqNameTmpl = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "refSubseqNameTmpl", dialog));
-            refSubseqNameTmpl->setText(refSubseqNameTmpl->text() + TEST_NAME_FOR_MA_RESULTS);
+            GTLineEdit::setText(os, refSubseqNameTmpl, refSubseqNameTmpl->text() + TEST_NAME_FOR_MA_RESULTS);
         } else if(SmithWatermanSettings::ANNOTATIONS == resultView) {
             QLineEdit * annotationNameEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "leAnnotationName", dialog));
-            annotationNameEdit->setText(TEST_NAME_FOR_ANNOT_RESULTS);
+            GTLineEdit::setText(os, annotationNameEdit, TEST_NAME_FOR_ANNOT_RESULTS);
         } else {
             assert(0);
         }
@@ -160,28 +165,22 @@ void SmithWatermanDialogFiller::commonScenario() {
         }
 
         const int swRealizationIndex = comboRealization->findText(realizationName);
-        comboRealization->setCurrentIndex(swRealizationIndex);
+        GTComboBox::setCurrentIndex(os, comboRealization, swRealizationIndex);
 
         QComboBox * comboResultFilter = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "comboResultFilter", dialog));
-        comboResultFilter->setCurrentIndex(RESULT_INTERSECTION_FILTER_INDEX);
+        GTComboBox::setCurrentIndex(os, comboResultFilter, RESULT_INTERSECTION_FILTER_INDEX);
 
         QSpinBox * spinScorePercent = qobject_cast<QSpinBox *>(GTWidget::findWidget(os, "spinScorePercent", dialog));
-        spinScorePercent->setValue(RESULT_SCORE_PERCENTAGE);
+        GTSpinBox::setValue(os, spinScorePercent, RESULT_SCORE_PERCENTAGE, GTGlobals::UseKeyBoard);
 
         QSpinBox * dblSpinGapOpen = qobject_cast<QSpinBox *>(GTWidget::findWidget(os, "spinGapOpen", dialog));
-        dblSpinGapOpen->setValue(GAP_OPEN_PENALTY);
+        GTSpinBox::setValue(os, dblSpinGapOpen, GAP_OPEN_PENALTY);
 
         QSpinBox * dblSpinGapExtd = qobject_cast<QSpinBox *>(GTWidget::findWidget(os, "spinGapExtd", dialog));
-        dblSpinGapExtd->setValue(GAP_EXTENDING_PENALTY);
+        GTSpinBox::setValue(os, dblSpinGapExtd, GAP_EXTENDING_PENALTY);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep();
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
index 46d9bfc..6c09da5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
@@ -22,26 +22,27 @@
 #ifndef _U2_GT_RUNNABLES_SMITH_WATERMAN_DIALOG_BASE_FILLER_H_
 #define _U2_GT_RUNNABLES_SMITH_WATERMAN_DIALOG_BASE_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "api/GTRegionSelector.h"
 #include <U2Algorithm/SmithWatermanSettings.h>
 
 namespace U2 {
+using namespace HI;
 
 class SmithWatermanDialogFiller : public Filler {
 public:
     enum Button {Search, Cancel};
     enum SwRealization {CLASSIC, SSE2};
-    SmithWatermanDialogFiller(U2OpStatus &_os, const QString& _pattern = "",
+    SmithWatermanDialogFiller(HI::GUITestOpStatus &_os, const QString& _pattern = "",
         const GTRegionSelector::RegionSelectorSettings& _s
         = GTRegionSelector::RegionSelectorSettings(), SwRealization _realization = CLASSIC);
 
-    SmithWatermanDialogFiller(U2OpStatus &_os, SwRealization _realization,
+    SmithWatermanDialogFiller(HI::GUITestOpStatus &_os, SwRealization _realization,
         const SmithWatermanSettings::SWResultView _resultView, const QString & _resultFilesPath,
         const QString& _pattern = "", const GTRegionSelector::RegionSelectorSettings& _s
         = GTRegionSelector::RegionSelectorSettings());
 
-    SmithWatermanDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    SmithWatermanDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     virtual void commonScenario();
     Button button;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
index 3a974ef..c4e93f3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
@@ -31,7 +31,7 @@
 #include <QtWidgets/QDialogButtonBox>
 #endif
 
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
@@ -42,11 +42,7 @@ void FindAnnotationCollocationsDialogFiller::run() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    GT_CHECK(box != NULL, "buttonBox is NULL");
-    QPushButton* button = box->button(QDialogButtonBox::Cancel);
-    GT_CHECK(button !=NULL, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
index 697ba7d..d5b0db2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
@@ -22,7 +22,7 @@
 #ifndef _U2_FIND_ANNOTATION_COLLOCATIONS_DIALOG_FILLER_H_
 #define _U2_FIND_ANNOTATION_COLLOCATIONS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QToolButton>
@@ -31,10 +31,11 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 class FindAnnotationCollocationsDialogFiller : public Filler {
 public:
-    FindAnnotationCollocationsDialogFiller(U2OpStatus &os): Filler(os, "FindAnnotationCollocationsDialog"){}
+    FindAnnotationCollocationsDialogFiller(HI::GUITestOpStatus &os): Filler(os, "FindAnnotationCollocationsDialog"){}
     virtual void run();
     QToolButton* getPlusButton() const;
     QList<QToolButton*> getMinusButtons() const;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
index 277b226..9de4f40 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
@@ -20,19 +20,18 @@
  */
 
 #include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+
+#include <QApplication>
 
 #include "StructuralAlignmentDialogFiller.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTComboBox.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "StructuralAlignmentDialogFiller"
-StructuralAlignmentDialogFiller::StructuralAlignmentDialogFiller(U2OpStatus &os) :
-    Filler(os, "StructuralAlignmentDialog")
+StructuralAlignmentDialogFiller::StructuralAlignmentDialogFiller(HI::GUITestOpStatus &os, const QStringList& chainIndexes) :
+    Filler(os, "StructuralAlignmentDialog"), chainIndexes(chainIndexes)
 {
 }
 
@@ -41,6 +40,15 @@ void StructuralAlignmentDialogFiller::run() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog != NULL, "dialog not found");
 
+    if (!chainIndexes.isEmpty()){
+        QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "chainCombo", dialog));
+        CHECK_SET_ERR(combo != NULL, "chainCombo not found!");
+        foreach(const QString& curString, chainIndexes) {
+            int index = combo->findText(curString, Qt::MatchContains);
+            GT_CHECK(index != -1, "Index '" + curString + "' was not found");
+        }
+    }
+
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
index 31d98b8..35934be 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
@@ -22,15 +22,18 @@
 #ifndef _U2_STRUCTURAL_ALIGNMENT_DIALOG_FILLER_H_
 #define _U2_STRUCTURAL_ALIGNMENT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class StructuralAlignmentDialogFiller : public Filler {
 public:
-    StructuralAlignmentDialogFiller(U2OpStatus &os);
+    StructuralAlignmentDialogFiller(HI::GUITestOpStatus &os, const QStringList& chainIndex = QStringList());
 
     void run();
+private:
+    QStringList chainIndexes;
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
index 6898322..20f2906 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
@@ -21,8 +21,8 @@
 
 #include <QApplication>
 
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
 
 #include "CAP3SupportDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
index b2f6ab0..202f25e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
@@ -22,16 +22,17 @@
 #ifndef _U2_CAP3_SUPPORT_DIALOG_FILLER_H_
 #define _U2_CAP3_SUPPORT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class CAP3SupportDialogFiller : public Filler
 {
 public:
-    CAP3SupportDialogFiller(U2OpStatus &os, QStringList _input, const QString& _output):
+    CAP3SupportDialogFiller(HI::GUITestOpStatus &os, QStringList _input, const QString& _output):
     Filler(os, "CAP3SupportDialog"), input(_input), output(_output){}
-    CAP3SupportDialogFiller(U2OpStatus &os, CustomScenario* c): Filler(os, "CAP3SupportDialog", c){}
+    CAP3SupportDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c): Filler(os, "CAP3SupportDialog", c){}
     void commonScenario();
 private:
     QStringList input;
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 1e035b6..d56db5e 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
@@ -20,11 +20,11 @@
  */
 
 #include "ExportAnnotationsDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -40,14 +40,14 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportAnnotationsFiller"
-ExportAnnotationsFiller::ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, U2OpStatus &os)
+ExportAnnotationsFiller::ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, HI::GUITestOpStatus &os)
 : Filler(os, "U2__ExportAnnotationsDialog"), softMode(true), format(format), saveSequencesUnderAnnotations(false), saveSequenceNames(false), useMethod(GTGlobals::UseMouse)
 {
     init(exportToFile);
 }
 
 
-ExportAnnotationsFiller::ExportAnnotationsFiller(U2OpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations,
+ExportAnnotationsFiller::ExportAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations,
     bool _saveSequenceNames, GTGlobals::UseMethod method):
 Filler(_os, "U2__ExportAnnotationsDialog"), softMode(false), format(_format), saveSequencesUnderAnnotations(_saveSequencesUnderAnnotations), saveSequenceNames(_saveSequenceNames), useMethod(method)
 {
@@ -93,12 +93,7 @@ void ExportAnnotationsFiller::run()
         GTCheckBox::setChecked(os, checkButton, saveSequenceNames);
     }
 
-    QDialogButtonBox* buttonBox = dialog->findChild<QDialogButtonBox*>("buttonBox");
-
-    GT_CHECK(buttonBox != NULL, "buttonBox is NULL");
-    QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
-    GT_CHECK(okButton != NULL, "okButton is NULL");
-    GTWidget::click(os, okButton);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
index d7d76b2..7373c8f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
@@ -22,15 +22,16 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_ANNOTATIONS_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_ANNOTATIONS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportAnnotationsFiller : public Filler {
     public:
         enum fileFormat {bed, genbank, gff, gtf, csv};
-        ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, U2OpStatus &os);
-        ExportAnnotationsFiller(U2OpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations = true,
+        ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, HI::GUITestOpStatus &os);
+        ExportAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations = true,
                                 bool _saveSequenceNames = true, GTGlobals::UseMethod method = GTGlobals::UseMouse);
         virtual void run();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
index bfbdf56..0994952 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
@@ -22,15 +22,15 @@
 #include <QApplication>
 
 #include "ExportBlastResultDialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportAnnotationsFiller"
 
-ExportBlastResultDialogFiller::ExportBlastResultDialogFiller(U2OpStatus &os, const QString &filePath, bool _addRefBoxChecked) :
+ExportBlastResultDialogFiller::ExportBlastResultDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, bool _addRefBoxChecked) :
     Filler(os, "ExportBlastResultDialog"),
     filePath(filePath),
     addRefBoxChecked(_addRefBoxChecked)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
index d22a51e..d1f3b73 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_EXPORT_BLAST_RESULT_DIALOG_FILLER_H_
 #define _U2_EXPORT_BLAST_RESULT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportBlastResultDialogFiller : public Filler {
 public:
-    ExportBlastResultDialogFiller(U2OpStatus &os, const QString &filePath, bool _addRefBoxChecked = false);
+    ExportBlastResultDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, bool _addRefBoxChecked = false);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
index b913245..da44775 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
@@ -20,10 +20,10 @@
  */
 
 #include "ExportMSA2MSADialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -42,7 +42,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportToSequenceFormatFiller"
 
-ExportMSA2MSADialogFiller::ExportMSA2MSADialogFiller(U2OpStatus &_os, int _formatVal, QString _path) : Filler(_os, "U2__ExportMSA2MSADialog"),
+ExportMSA2MSADialogFiller::ExportMSA2MSADialogFiller(HI::GUITestOpStatus &_os, int _formatVal, QString _path) : Filler(_os, "U2__ExportMSA2MSADialog"),
     formatVal(_formatVal),
     path(_path){}
 
@@ -61,11 +61,7 @@ void ExportMSA2MSADialogFiller::run()
         GTComboBox::setCurrentIndex(os, formatCombo, formatVal);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
index fbebc12..aab25fa 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_MSA2MSA_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_MSA2MSA_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportMSA2MSADialogFiller : public Filler {
     public:
-        ExportMSA2MSADialogFiller(U2OpStatus &_os, int _formatVal = -1, QString _path="");
+        ExportMSA2MSADialogFiller(HI::GUITestOpStatus &_os, int _formatVal = -1, QString _path="");
         virtual void run();
     private:
         int formatVal;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
index 47adfa9..8cc5481 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
@@ -20,11 +20,11 @@
  */
 
 #include "ExportMSA2SequencesDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -41,7 +41,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportToSequenceFormatFiller"
 
-ExportToSequenceFormatFiller::ExportToSequenceFormatFiller(U2OpStatus &_os, const QString &_path, const QString &_name, documentFormat _format,
+ExportToSequenceFormatFiller::ExportToSequenceFormatFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name, documentFormat _format,
                                                            bool saveFile, bool keepCharacters, GTGlobals::UseMethod method):
 Filler(_os, "U2__ExportMSA2SequencesDialog"), name(_name), format(_format), saveFile(saveFile), keepCharacters(keepCharacters),
 useMethod(method) {
@@ -59,7 +59,7 @@ useMethod(method) {
 
 }
 
-ExportToSequenceFormatFiller::ExportToSequenceFormatFiller(U2OpStatus &_os, CustomScenario *scenario)
+ExportToSequenceFormatFiller::ExportToSequenceFormatFiller(HI::GUITestOpStatus &_os, CustomScenario *scenario)
     : Filler(_os, "U2__ExportMSA2SequencesDialog", scenario),
       format(EMBL),
       saveFile(false),
@@ -104,11 +104,7 @@ void ExportToSequenceFormatFiller::commonScenario()
 
     GTGlobals::sleep(100);
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
index bcde176..b49ddf6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
@@ -22,16 +22,17 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_MSA2SEQUENCES_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_MSA2SEQUENCES_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportToSequenceFormatFiller : public Filler {
 public:
     enum documentFormat {EMBL, FASTA, FASTQ, GFF, Genbank, Swiss_Prot};
-    ExportToSequenceFormatFiller(U2OpStatus &os, const QString &path, const QString &name, documentFormat format,
+    ExportToSequenceFormatFiller(HI::GUITestOpStatus &os, const QString &path, const QString &name, documentFormat format,
                                     bool saveFile, bool keepCharacters, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-    ExportToSequenceFormatFiller(U2OpStatus &os, CustomScenario *scenario);
+    ExportToSequenceFormatFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
index 3148930..f837217 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
@@ -20,11 +20,11 @@
  */
 
 #include "ExportSelectedSequenceFromAlignmentDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -42,7 +42,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::exportSelectedSequenceFromAlignment"
 
-ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(U2OpStatus &_os, const QString &_path,
+ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(HI::GUITestOpStatus &_os, const QString &_path,
                                                                          documentFormat _format, bool _keepGaps, bool _addToProj):
     Filler(_os, "U2__SaveSelectedSequenceFromMSADialog"),
     path(_path),
@@ -59,7 +59,7 @@ ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(U2OpSta
 
 }
 
-ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(U2OpStatus &os, CustomScenario *scenario)
+ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(HI::GUITestOpStatus &os, CustomScenario *scenario)
     : Filler(os, "U2__SaveSelectedSequenceFromMSADialog", scenario),
       format(EMBL),
       keepGaps(false),
@@ -97,11 +97,7 @@ void ExportSelectedSequenceFromAlignment::commonScenario()
         GTRadioButton::click(os,trimGapsRB);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
index 5e3d443..ee06070 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
@@ -22,16 +22,17 @@
 #ifndef EXPORT_SELECTED_SEQUENCE_FROM_ALIGNMENT_DIALOG_FILLER_H
 #define EXPORT_SELECTED_SEQUENCE_FROM_ALIGNMENT_DIALOG_FILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportSelectedSequenceFromAlignment : public Filler {
 public:
     enum documentFormat {EMBL, FASTA, FASTQ, GFF, Genbank, Swiss_Prot};
-    ExportSelectedSequenceFromAlignment(U2OpStatus &_os, const QString &_path, documentFormat _format = FASTA,
+    ExportSelectedSequenceFromAlignment(HI::GUITestOpStatus &_os, const QString &_path, documentFormat _format = FASTA,
         bool _keepGaps = true, bool _addToProj = true);
-    ExportSelectedSequenceFromAlignment(U2OpStatus &os, CustomScenario *scenario);
+    ExportSelectedSequenceFromAlignment(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void 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 6e3281e..d528d49 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
@@ -20,10 +20,10 @@
  */
 
 #include "ExportSequences2MSADialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -39,7 +39,7 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportSequenceAsAlignmentFiller"
-ExportSequenceAsAlignmentFiller::ExportSequenceAsAlignmentFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+ExportSequenceAsAlignmentFiller::ExportSequenceAsAlignmentFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
                                 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);
@@ -58,7 +58,7 @@ Filler(_os, "U2__ExportSequences2MSADialog"), name(_name), useMethod(method), fo
     comboBoxItems[Stockholm] = "Stockholm";
 }
 
-ExportSequenceAsAlignmentFiller::ExportSequenceAsAlignmentFiller(U2OpStatus &_os, CustomScenario *scenario)
+ExportSequenceAsAlignmentFiller::ExportSequenceAsAlignmentFiller(HI::GUITestOpStatus &_os, CustomScenario *scenario)
     : Filler(_os, "U2__ExportSequences2MSADialog", scenario),
       format(Clustalw),
       addToProject(false)
@@ -87,11 +87,7 @@ void ExportSequenceAsAlignmentFiller::commonScenario()
     QCheckBox *checkBox = dialog->findChild<QCheckBox*>(QString::fromUtf8("addToProjectBox"));
     GTCheckBox::setChecked(os, checkBox, addToProject);
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
index ea71be8..b5ffcb3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
@@ -22,17 +22,18 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_SEQUENCES2MSA_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_SEQUENCES2MSA_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportSequenceAsAlignmentFiller : public Filler {
     public:
         enum FormatToUse {Clustalw, Fasta, Msf, Mega, Nexus, Sam, Stockholm};
 
-        ExportSequenceAsAlignmentFiller(U2OpStatus &_os, const QString &_path, const QString &_name, ExportSequenceAsAlignmentFiller::FormatToUse _format,
+        ExportSequenceAsAlignmentFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name, ExportSequenceAsAlignmentFiller::FormatToUse _format,
             bool addDocumentToProject = false, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-        ExportSequenceAsAlignmentFiller(U2OpStatus &_os, CustomScenario *scenario);
+        ExportSequenceAsAlignmentFiller(HI::GUITestOpStatus &_os, CustomScenario *scenario);
 
         void commonScenario();
 
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 ca50fdd..f866aa4 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
@@ -20,12 +20,12 @@
  */
 
 #include "ExportSequencesDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
 
 #include <QtCore/QDir>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -43,7 +43,7 @@ namespace U2 {
 QString ExportSelectedRegionFiller::defaultExportPath = "";
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportSelectedRegionFiller"
-ExportSelectedRegionFiller::ExportSelectedRegionFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+ExportSelectedRegionFiller::ExportSelectedRegionFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
     bool translate, const QString& seqName, bool saveAllAminoFrames)
     : Filler(_os, "U2__ExportSequencesDialog"), name(_name), seqName(seqName), translate(translate),
     saveAllAminoFrames(saveAllAminoFrames)
@@ -56,7 +56,7 @@ ExportSelectedRegionFiller::ExportSelectedRegionFiller(U2OpStatus &_os, const QS
     path = __path;
 }
 
-ExportSelectedRegionFiller::ExportSelectedRegionFiller(U2OpStatus &os, CustomScenario *customScenario)
+ExportSelectedRegionFiller::ExportSelectedRegionFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario)
     : Filler(os, "U2__ExportSequencesDialog", customScenario),
       translate(false), saveAllAminoFrames(true)
 {
@@ -92,11 +92,7 @@ void ExportSelectedRegionFiller::commonScenario()
         GTCheckBox::setChecked(os, allTFramesButton, saveAllAminoFrames);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 
@@ -111,7 +107,7 @@ void ExportSelectedRegionFiller::setName(const QString &value) {
 #undef GT_CLASS_NAME
 
 #define GT_CLASS_NAME "GTUtilsDialog::exportSequenceOfSelectedAnnotationsFiller"
-ExportSequenceOfSelectedAnnotationsFiller::ExportSequenceOfSelectedAnnotationsFiller(U2OpStatus &_os, const QString &_path, FormatToUse _format,
+ExportSequenceOfSelectedAnnotationsFiller::ExportSequenceOfSelectedAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_path, FormatToUse _format,
     MergeOptions _options, int _gapLength, bool _addDocToProject, bool _exportWithAnnotations, GTGlobals::UseMethod method)
     : Filler(_os, "U2__ExportSequencesDialog"), gapLength(_gapLength), format(_format), addToProject(_addDocToProject),
     exportWithAnnotations(false), options(_options), useMethod(method)
@@ -187,11 +183,7 @@ void ExportSequenceOfSelectedAnnotationsFiller::run()
 
     GTGlobals::sleep(200);
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
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 fe7e02f..3f42ea3 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
@@ -22,15 +22,16 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_SEQUENCES_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_SEQUENCES_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportSelectedRegionFiller : public Filler {
     public:
-        ExportSelectedRegionFiller(U2OpStatus &_os, const QString &_path, const QString &_name,
+        ExportSelectedRegionFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
             bool translate = false, const QString& seqName = QString(), bool saveAllAminoFrames = true);
-        ExportSelectedRegionFiller(U2OpStatus &os, CustomScenario *customScenario);
+        ExportSelectedRegionFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario);
 
         void commonScenario();
         void setPath(const QString &value);
@@ -48,7 +49,7 @@ namespace U2 {
     public:
         enum FormatToUse {Fasta, Fastq, Gff, Genbank};
         enum MergeOptions {SaveAsSeparate, Merge};
-        ExportSequenceOfSelectedAnnotationsFiller(U2OpStatus &_os, const QString &_path, FormatToUse _format, MergeOptions _options, int _gapLength = 0,
+        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);
         virtual void run();
     private:
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 b4bf957..1fc7181 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
@@ -26,24 +26,25 @@
 #include <QRadioButton>
 #include <QTableWidget>
 
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #include "ImportAnnotationsToCsvFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::ImportAnnotationsToCsvFiller"
 
-ImportAnnotationsToCsvFiller::ImportAnnotationsToCsvFiller(U2OpStatus &_os, const QString &_fileToRead, const QString &_resultFile,
+ImportAnnotationsToCsvFiller::ImportAnnotationsToCsvFiller(HI::GUITestOpStatus &_os, const QString &_fileToRead, const QString &_resultFile,
         ImportAnnotationsToCsvFiller::fileFormat _format, bool _addResultFileToProject,
         bool _columnSeparator, const QString &_separator, int _numberOfLines,
         const QString &_skipAllLinesStartsWith, bool _interpretMultipleAsSingle,
@@ -129,7 +130,7 @@ void RoleFiller::commonScenario() {
 
 class GTTableWidget {
 public:
-    static QPoint headerItemCenter(U2OpStatus&os, QTableWidget* w, int pos) {
+    static QPoint headerItemCenter(HI::GUITestOpStatus&os, QTableWidget* w, int pos) {
         CHECK_SET_ERR_RESULT(w != NULL, "QTableWidget is NULL", QPoint());
 
         QTableWidgetItem *widgetItem =  w->item(0, pos);
@@ -206,14 +207,12 @@ void ImportAnnotationsToCsvFiller::commonScenario()
         GTUtilsDialog::waitForDialog(os, new RoleFiller(os, r.parameter));
         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);
     }
-    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");
-    GTWidget::click(os, button);
+
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
index 1f392cb..944fdcd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_IMPORT_ANNOTATIONS_TO_CSV_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_IMPORT_ANNOTATIONS_TO_CSV_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ImportAnnotationsToCsvFiller : public Filler {
     public:
@@ -71,12 +72,12 @@ namespace U2 {
             QualifierParameter(const QString& _name) : name(_name){}
             QString name;
         };
-        ImportAnnotationsToCsvFiller(U2OpStatus &_os, const QString &_fileToRead, const QString &_resultFile,
+        ImportAnnotationsToCsvFiller(HI::GUITestOpStatus &_os, const QString &_fileToRead, const QString &_resultFile,
                                         ImportAnnotationsToCsvFiller::fileFormat _format, bool _addResultFileToProject,
                                         bool _columnSeparator, const QString &_separator, int _numberOfLines,
                                         const QString &_skipAllLinesStartsWith, bool _interpretMultipleAsSingle,
                                         bool _removeQuotesButton, const QString &_defaultAnnotationName, const RoleParameters& roleParameters = RoleParameters(), GTGlobals::UseMethod method = GTGlobals::UseMouse);
-        ImportAnnotationsToCsvFiller(U2OpStatus &_os, CustomScenario* c):Filler(_os, "ImportAnnotationsFromCSVDialog", c){}
+        ImportAnnotationsToCsvFiller(HI::GUITestOpStatus &_os, CustomScenario* c):Filler(_os, "ImportAnnotationsFromCSVDialog", c){}
         virtual void commonScenario();
     private:
         QString fileToRead;
@@ -97,9 +98,9 @@ namespace U2 {
 
     class RoleFiller : public Filler {
     public:
-        RoleFiller(U2OpStatus &os, ImportAnnotationsToCsvFiller::RoleParameter* _parameter)
+        RoleFiller(HI::GUITestOpStatus &os, ImportAnnotationsToCsvFiller::RoleParameter* _parameter)
             : Filler(os, "CSVColumnConfigurationDialog"), parameter(_parameter) {}
-        RoleFiller(U2OpStatus &os, CustomScenario* c):
+        RoleFiller(HI::GUITestOpStatus &os, CustomScenario* c):
             Filler(os, "CSVColumnConfigurationDialog", c){}
         virtual void commonScenario();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
index 547c725..8337a1c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
@@ -20,10 +20,10 @@
  */
 
 #include "BuildDotPlotDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
 
 #include "GTUtilsTaskTreeView.h"
 
@@ -63,16 +63,12 @@ void BuildDotPlotFiller::run() {
         }
     }
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "ok button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
     if (cancel) {
-        button = box->button(QDialogButtonBox::Cancel);
-        GT_CHECK(button !=NULL, "cancel button is NULL");
-        GTWidget::click(os, button);
+        dialog = QApplication::activeModalWidget();
+        GT_CHECK(dialog, "activeModalWidget is NULL");
+        GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
     }
-    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
index e80382b..e3883c9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_BUILD_DOTPLOT_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_BUILD_DOTPLOT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class BuildDotPlotFiller : public Filler {
     public:
-        BuildDotPlotFiller(U2OpStatus &_os, const QString &_firstFileEdit,
+        BuildDotPlotFiller(HI::GUITestOpStatus &_os, const QString &_firstFileEdit,
                            const QString &_secondFileEdit="", bool _mergeFirstBoxChecked = false,
                            bool _oneSequenceBoxChecked=false, bool _mergeSecondBoxChecked=false,
                            int _gapFirstVal=5, int _gapSecondVal=5,
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
index 71f2ed6..932e96d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "DotPlotDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTCheckBox.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -59,10 +59,7 @@ void DotPlotFiller::run() {
     QCheckBox* invertedCheckBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "invertedCheckBox", dialog));
     GTCheckBox::setChecked(os, invertedCheckBox, invertedRepeats);
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    QPushButton* button = box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "ok button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
index 99beecf..b63ae69 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_DOTPLOT_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_DOTPLOT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class DotPlotFiller : public Filler {
     public:
-        DotPlotFiller(U2OpStatus &_os, int _minLen=100, int _identity = 0, bool _invertedRepeats = false, bool _but1kpressed=false) : Filler(_os, "DotPlotDialog"), minLen(_minLen), identity(_identity), invertedRepeats(_invertedRepeats), but1kpressed(_but1kpressed) {}
+        DotPlotFiller(HI::GUITestOpStatus &_os, int _minLen=100, int _identity = 0, bool _invertedRepeats = false, bool _but1kpressed=false) : Filler(_os, "DotPlotDialog"), minLen(_minLen), identity(_identity), invertedRepeats(_invertedRepeats), but1kpressed(_but1kpressed) {}
         virtual void run();
     private:
         int minLen, identity;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
index 9843c49..89729bf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
@@ -23,21 +23,22 @@
 #include <QTreeWidget>
 
 #include "ConstructMoleculeDialogFiller.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "ConstructMoleculeDialogFiller"
 
-ConstructMoleculeDialogFiller::ConstructMoleculeDialogFiller(U2OpStatus &os, const QList<Action> &actions) :
+ConstructMoleculeDialogFiller::ConstructMoleculeDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
     Filler(os, "ConstructMoleculeDialog"),
     dialog(NULL),
     actions(actions)
 {
 }
 
-ConstructMoleculeDialogFiller::ConstructMoleculeDialogFiller(U2OpStatus &os, CustomScenario *scenario)
+ConstructMoleculeDialogFiller::ConstructMoleculeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
 : Filler(os, "ConstructMoleculeDialog", scenario), dialog(NULL)
 {
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
index 745e649..56d35c8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_CONSTRUCT_MOLECULE_DIALOG_FILLER_H_
 #define _U2_CONSTRUCT_MOLECULE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ConstructMoleculeDialogFiller : public Filler {
 public:
@@ -35,8 +36,8 @@ public:
     };
     typedef QPair<ActionType, QVariant> Action;
 
-    ConstructMoleculeDialogFiller(U2OpStatus &os, const QList<Action> &actions);
-    ConstructMoleculeDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    ConstructMoleculeDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
+    ConstructMoleculeDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
index 5202c32..688c25f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
@@ -25,13 +25,13 @@
 
 namespace U2 {
 
-CreateFragmentDialogFiller::CreateFragmentDialogFiller(U2OpStatus &os)
+CreateFragmentDialogFiller::CreateFragmentDialogFiller(HI::GUITestOpStatus &os)
 :  Filler(os, "CreateFragmentDialog")
 {
 
 }
 
-CreateFragmentDialogFiller::CreateFragmentDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+CreateFragmentDialogFiller::CreateFragmentDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "CreateFragmentDialog", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
index 94e2cf7..f6ba641 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_CREATE_FRAGMENT_DIALOG_FILLER_H_
 #define _U2_CREATE_FRAGMENT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class CreateFragmentDialogFiller : public Filler {
 public:
-    CreateFragmentDialogFiller(U2OpStatus &os);
-    CreateFragmentDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    CreateFragmentDialogFiller(HI::GUITestOpStatus &os);
+    CreateFragmentDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
index 1b045d7..a0f4c20 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
@@ -23,13 +23,13 @@
 #include <QTreeWidget>
 
 #include "DigestSequenceDialogFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "DigestSequenceDialogFiller"
 
-DigestSequenceDialogFiller::DigestSequenceDialogFiller(U2OpStatus &os, CustomScenario *scenario)
+DigestSequenceDialogFiller::DigestSequenceDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
     : Filler(os, "DigestSequenceDialog", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
index ba50de3..c63fc15 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_DIGEST_SEQUENCE_DIALOG_FILLER_H_
 #define _U2_DIGEST_SEQUENCE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DigestSequenceDialogFiller : public Filler {
 public:
-    DigestSequenceDialogFiller(U2OpStatus &os, CustomScenario *scenario = NULL);
+    DigestSequenceDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario = NULL);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
index 82de527..732a75c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
@@ -21,20 +21,20 @@
 
 
 #include "EditFragmentDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
 #include <QApplication>
 #include <QGroupBox>
 #include <QComboBox>
 
 namespace U2 {
 
-EditFragmentDialogFiller::EditFragmentDialogFiller(U2OpStatus &os, const Parameters &parameters)
+EditFragmentDialogFiller::EditFragmentDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters)
 : Filler(os, "EditFragmentDialog"), parameters(parameters)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
index 3625c6d..8534138 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
@@ -22,10 +22,11 @@
 #ifndef _U2_EDIT_FRAGMENT_DIALOG_FILLER_H_
 #define _U2_EDIT_FRAGMENT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class EditFragmentDialogFiller : public Filler {
 public:
@@ -58,7 +59,7 @@ public:
         bool checkRComplText;
     };
 
-    EditFragmentDialogFiller(U2OpStatus &os, const Parameters &parameters);
+    EditFragmentDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters);
 
     void commonScenario();
 
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 a99ea46..ea40e61 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
@@ -29,14 +29,14 @@
 #endif
 
 #include "FindEnzymesDialogFiller.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "FindEnzymesDialogFiller"
 
-FindEnzymesDialogFiller::FindEnzymesDialogFiller(U2OpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario) :
+FindEnzymesDialogFiller::FindEnzymesDialogFiller(HI::GUITestOpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario) :
     Filler(os, "FindEnzymesDialog", scenario),
     enzymesToFind(enzymesToFind)
 {
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 159f161..161d091 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_FIND_ENZYMES_DIALOG_FILLER_H_
 #define _U2_GT_FIND_ENZYMES_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class FindEnzymesDialogFiller : public Filler {
 public:
-    FindEnzymesDialogFiller(U2OpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario = NULL);
+    FindEnzymesDialogFiller(HI::GUITestOpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario = NULL);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
index d05c080..215eba3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
@@ -28,11 +28,11 @@
 #include <QtWidgets/QComboBox>
 #endif
 
-#include <U2Test/GUITest.h>
+#include <core/GUITest.h>
 
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsTaskTreeView.h"
 
@@ -42,13 +42,13 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::BlastAllSupportDialogFiller"
 
-BlastAllSupportDialogFiller::BlastAllSupportDialogFiller(const Parameters &parameters, U2OpStatus &os)
+BlastAllSupportDialogFiller::BlastAllSupportDialogFiller(const Parameters &parameters, HI::GUITestOpStatus &os)
 : Filler(os, "BlastAllSupportDialog"), parameters(parameters), dialog(NULL)
 {
 
 }
 
-BlastAllSupportDialogFiller::BlastAllSupportDialogFiller(U2OpStatus &os, CustomScenario *scenario)
+BlastAllSupportDialogFiller::BlastAllSupportDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
     : Filler(os, "BlastAllSupportDialog", scenario), dialog(NULL)
 {
 
@@ -83,7 +83,8 @@ void BlastAllSupportDialogFiller::commonScenario() {
         GTWidget::click(os, GTWidget::findWidget(os, "browseInput"));
         GTUtilsTaskTreeView::waitTaskFinished(os);
     }
-
+    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
@@ -94,7 +95,7 @@ void BlastAllSupportDialogFiller::test_3211() {
     CHECK_SET_ERR(NULL == widget, "Annotations widget exists");
 
     //2. Set any input sequence.
-    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, GUITest::dataDir + "samples/FASTA/human_T1.fa"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, HI::GUITest::dataDir + "samples/FASTA/human_T1.fa"));
     GTWidget::click(os, GTWidget::findWidget(os, "browseInput"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -102,7 +103,7 @@ void BlastAllSupportDialogFiller::test_3211() {
     GTWidget::findWidget(os, "rbCreateNewTable");
 
     //3. Set any another input sequence.
-    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, GUITest::testDir + "_common_data/fasta/human_T1_cutted.fa"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, HI::GUITest::testDir + "_common_data/fasta/human_T1_cutted.fa"));
     GTWidget::click(os, GTWidget::findWidget(os, "browseInput"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state: there is a single annotation widget.
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
index 84753f3..c9de525 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_BLAST_ALL_SUPPORT_DIALOG_FILLER_H_
 #define _U2_BLAST_ALL_SUPPORT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 /**
  * @brief The BlastAllSupportDialogFiller class
@@ -49,8 +50,8 @@ public:
           bool test_3211;
     };
 
-    BlastAllSupportDialogFiller(const Parameters &parameters, U2OpStatus &os);
-    BlastAllSupportDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    BlastAllSupportDialogFiller(const Parameters &parameters, HI::GUITestOpStatus &os);
+    BlastAllSupportDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
index 90d6ed3..15e70a4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
@@ -26,7 +26,7 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ClustalOSupportRunDialogFiller"
-ClustalOSupportRunDialogFiller::ClustalOSupportRunDialogFiller(U2OpStatus &os) :
+ClustalOSupportRunDialogFiller::ClustalOSupportRunDialogFiller(HI::GUITestOpStatus &os) :
     Filler(os, "ClustalOSupportRunDialog")
 {
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
index 98555de..09a40ed 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_CLUSTAL_O_SUPPORT_RUN_DIALOG_FILLER_H_
 #define _U2_CLUSTAL_O_SUPPORT_RUN_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ClustalOSupportRunDialogFiller : public Filler {
 public:
-    ClustalOSupportRunDialogFiller(U2OpStatus &os);
+    ClustalOSupportRunDialogFiller(HI::GUITestOpStatus &os);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
index d524a81..656e5ff 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
@@ -32,19 +32,19 @@
 #include <QtWidgets/QComboBox>
 #endif
 
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
 
 #include "FormatDBDialogFiller.h"
 
 namespace U2 {
 
-FormatDBSupportRunDialogFiller::FormatDBSupportRunDialogFiller(U2OpStatus &os, const Parameters &parameters)
+FormatDBSupportRunDialogFiller::FormatDBSupportRunDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters)
 : Filler(os, "FormatDBSupportRunDialog"), parameters(parameters)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
index c6765f8..7b5998d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
@@ -22,10 +22,11 @@
 #ifndef _U2_FORMAT_DB_DIALOG_FILLER_H_
 #define _U2_FORMAT_DB_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class FormatDBSupportRunDialogFiller : public Filler {
 public:
@@ -48,7 +49,7 @@ public:
     };
 
 
-    FormatDBSupportRunDialogFiller(U2OpStatus &os, const Parameters &parameters);
+    FormatDBSupportRunDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters);
     void run();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
index 1cfa8de..3de30b8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
@@ -20,13 +20,13 @@
  */
 
 #include "RemoteBLASTDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
 #include <QtGui/QGroupBox>
@@ -43,13 +43,13 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::RemoteBLASTDialogFiller"
 
-RemoteBLASTDialogFiller::RemoteBLASTDialogFiller(U2OpStatus &os) :
+RemoteBLASTDialogFiller::RemoteBLASTDialogFiller(HI::GUITestOpStatus &os) :
     Filler(os, "RemoteBLASTDialog")
 {
 
 }
 
-RemoteBLASTDialogFiller::RemoteBLASTDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+RemoteBLASTDialogFiller::RemoteBLASTDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "RemoteBLASTDialog", scenario)
 {
 
@@ -60,12 +60,7 @@ void RemoteBLASTDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
-    QDialogButtonBox *buttonBox = dialog->findChild<QDialogButtonBox*>(QString::fromUtf8("buttonBox"));
-    GT_CHECK(buttonBox != NULL, "buttonBox not found");
-
-    QPushButton *button = buttonBox->button(QDialogButtonBox::Ok);
-    GT_CHECK(button != NULL, "standart button not found");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
index e1eb7e8..75111da 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
@@ -22,15 +22,16 @@
 #ifndef _U2_REMOTE_BLAST_DIALOG_FILLER_H_
 #define _U2_REMOTE_BLAST_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class RemoteBLASTDialogFiller : public Filler {
 public:
-    RemoteBLASTDialogFiller(U2OpStatus &os);
-    RemoteBLASTDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    RemoteBLASTDialogFiller(HI::GUITestOpStatus &os);
+    RemoteBLASTDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
 virtual void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
index e6a423d..31467d5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
@@ -22,10 +22,10 @@
 #include <QApplication>
 #include <QDir>
 
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 #include "SpadesGenomeAssemblyDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
index 90a15c2..2c6245e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_SPADES_GENOME_ASSEMBLY_DIALOG_FILLER_H_
 #define _U2_SPADES_GENOME_ASSEMBLY_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class SpadesGenomeAssemblyDialogFiller: public Filler
 {
 public:
-    SpadesGenomeAssemblyDialogFiller(U2OpStatus &os, QString _library, QStringList _leftReads, QStringList _rightReads, QString _output):
+    SpadesGenomeAssemblyDialogFiller(HI::GUITestOpStatus &os, QString _library, QStringList _leftReads, QStringList _rightReads, QString _output):
         Filler(os, "GenomeAssemblyDialog"),
         library(_library),
         leftReads(_leftReads),
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
index 456c3ea..52bd127 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
@@ -29,16 +29,16 @@
 #include <QtWidgets/QDialogButtonBox>
 #endif
 
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
-#include "api/GTSpinBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTSpinBox.h>
 
 namespace U2{
 
 #define GT_CLASS_NAME "GTUtilsDialog::DotPlotFiller"
 #define GT_METHOD_NAME "run"
 
-TCoffeeDailogFiller::TCoffeeDailogFiller(U2OpStatus &os, int gapOpen, int gapExt, int numOfIters) :
+TCoffeeDailogFiller::TCoffeeDailogFiller(HI::GUITestOpStatus &os, int gapOpen, int gapExt, int numOfIters) :
     Filler(os, "TCoffeeSupportRunDialog"),
     gapOpen(gapOpen),
     gapExt(gapExt),
@@ -75,11 +75,7 @@ void TCoffeeDailogFiller::run(){
         GTSpinBox::setValue(os, maxNumberIterRefinementSpinBox, numOfIters);
     }
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
index 004e87c..276b78a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_TCOFFEE_DAILOG_FILLER_H_
 #define _U2_TCOFFEE_DAILOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include <limits.h>
 
 namespace U2{
+using namespace HI;
 
 class TCoffeeDailogFiller : public Filler {
 public:
-    TCoffeeDailogFiller(U2OpStatus& os, int gapOpen = INT_MAX, int gapExt = INT_MAX, int numOfIters = INT_MAX);
+    TCoffeeDailogFiller(HI::GUITestOpStatus& os, int gapOpen = INT_MAX, int gapExt = INT_MAX, int numOfIters = INT_MAX);
 
     virtual void run();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
index 8837c23..da8b847 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
@@ -27,7 +27,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "OrfDialogFiller"
 
-OrfDialogFiller::OrfDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+OrfDialogFiller::OrfDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "ORFDialogBase", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
index 05b0d1b..20ebf6f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_ORF_DIALOG_FILLER_H_
 #define _U2_ORF_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class OrfDialogFiller : public Filler {
 public:
-    OrfDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    OrfDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
index a3413c2..003731f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
@@ -21,8 +21,8 @@
 
 #include <QApplication>
 
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
 
 #include "AddPrimerDialogFiller.h"
 
@@ -34,7 +34,7 @@ AddPrimerDialogFiller::Parameters::Parameters()
 
 }
 
-AddPrimerDialogFiller::AddPrimerDialogFiller(U2OpStatus &os, const Parameters &parameters)
+AddPrimerDialogFiller::AddPrimerDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters)
 : Filler(os, "EditPrimerDialog", parameters.scenario), parameters(parameters)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
index 86765a1..606cbfa 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
@@ -22,10 +22,11 @@
 #ifndef _U2_ADD_PRIMER_DIALOG_FILLER_H_
 #define _U2_ADD_PRIMER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class AddPrimerDialogFiller : public Filler {
 public:
@@ -38,7 +39,7 @@ public:
         CustomScenario *scenario;
     };
 
-    AddPrimerDialogFiller(U2OpStatus &os, const Parameters &parameters);
+    AddPrimerDialogFiller(HI::GUITestOpStatus &os, const Parameters &parameters);
     void commonScenario();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
index 4eb2587..9d1148a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
@@ -26,16 +26,16 @@
 
 #include "ExportPrimersDialogFiller.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 #include "runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h"
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportPrimersDialogFiller"
 
-ExportPrimersDialogFiller::ExportPrimersDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+ExportPrimersDialogFiller::ExportPrimersDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "ExportPrimersDialog", scenario)
 {
 }
@@ -47,7 +47,7 @@ void ExportPrimersDialogFiller::commonScenario() {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getDialog"
-QWidget *ExportPrimersDialogFiller::getDialog(U2OpStatus &os) {
+QWidget *ExportPrimersDialogFiller::getDialog(HI::GUITestOpStatus &os) {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(NULL != dialog, "Active modal dialog is NULL", NULL);
     return dialog;
@@ -55,7 +55,7 @@ QWidget *ExportPrimersDialogFiller::getDialog(U2OpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setExportTarget"
-void ExportPrimersDialogFiller::setExportTarget(U2OpStatus &os, ExportPrimersDialogFiller::ExportTarget exportTarget) {
+void ExportPrimersDialogFiller::setExportTarget(HI::GUITestOpStatus &os, ExportPrimersDialogFiller::ExportTarget exportTarget) {
     switch (exportTarget) {
     case LocalFile:
         GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbExport", getDialog(os)), "Local file");
@@ -70,26 +70,26 @@ void ExportPrimersDialogFiller::setExportTarget(U2OpStatus &os, ExportPrimersDia
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setFormat"
-void ExportPrimersDialogFiller::setFormat(U2OpStatus &os, const QString &format) {
+void ExportPrimersDialogFiller::setFormat(HI::GUITestOpStatus &os, const QString &format) {
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbFormat", getDialog(os)), format);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setFilePath"
-void ExportPrimersDialogFiller::setFilePath(U2OpStatus &os, const QString &filePath) {
+void ExportPrimersDialogFiller::setFilePath(HI::GUITestOpStatus &os, const QString &filePath) {
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leFilePath", getDialog(os)), filePath);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setDatabase"
-void ExportPrimersDialogFiller::setDatabase(U2OpStatus &os, const QString &database) {
+void ExportPrimersDialogFiller::setDatabase(HI::GUITestOpStatus &os, const QString &database) {
     QComboBox *cbDatabase = GTWidget::findExactWidget<QComboBox *>(os, "cbDatabase", getDialog(os));
     GT_CHECK(NULL != cbDatabase, "Database combobox is NULL");
     if (-1 == cbDatabase->findText(database)) {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, database);
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT);
-        GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions, SharedConnectionsDialogFiller::UNSAFE));
+        GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
         GTWidget::click(os, GTWidget::findWidget(os, "tbConnect", getDialog(os)));
         GTUtilsTaskTreeView::waitTaskFinished(os);
     }
@@ -98,7 +98,7 @@ void ExportPrimersDialogFiller::setDatabase(U2OpStatus &os, const QString &datab
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setFolder"
-void ExportPrimersDialogFiller::setFolder(U2OpStatus &os, const QString &folder) {
+void ExportPrimersDialogFiller::setFolder(HI::GUITestOpStatus &os, const QString &folder) {
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leFolder", getDialog(os)), folder);
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
index c5fa6dd..438c6e8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
@@ -22,24 +22,25 @@
 #ifndef _U2_EXPORT_PRIMERS_DIALOG_FILLER_H_
 #define _U2_EXPORT_PRIMERS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ExportPrimersDialogFiller : public Filler {
 public:
     enum ExportTarget {LocalFile, SharedDb};
 
-    ExportPrimersDialogFiller(U2OpStatus &os, CustomScenario *scenario = NULL);
+    ExportPrimersDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario = NULL);
 
     void commonScenario();
 
-    static QWidget *getDialog(U2OpStatus &os);
-    static void setExportTarget(U2OpStatus &os, ExportTarget exportTarget);
-    static void setFormat(U2OpStatus &os, const QString &format);
-    static void setFilePath(U2OpStatus &os, const QString &filePath);
-    static void setDatabase(U2OpStatus &os, const QString &database);
-    static void setFolder(U2OpStatus &os, const QString &folder);
+    static QWidget *getDialog(HI::GUITestOpStatus &os);
+    static void setExportTarget(HI::GUITestOpStatus &os, ExportTarget exportTarget);
+    static void setFormat(HI::GUITestOpStatus &os, const QString &format);
+    static void setFilePath(HI::GUITestOpStatus &os, const QString &filePath);
+    static void setDatabase(HI::GUITestOpStatus &os, const QString &database);
+    static void setFolder(HI::GUITestOpStatus &os, const QString &folder);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
index e2a72ec..638b1d9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
@@ -27,9 +27,9 @@
 
 #include "GTUtilsTaskTreeView.h"
 #include "ImportPrimersDialogFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h"
 
@@ -37,14 +37,14 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ImportPrimersDialogFiller"
 
-ImportPrimersDialogFiller::ImportPrimersDialogFiller(U2OpStatus &os, const QStringList &fileList) :
+ImportPrimersDialogFiller::ImportPrimersDialogFiller(HI::GUITestOpStatus &os, const QStringList &fileList) :
     Filler(os, "ImportPrimersDialog"),
     fileList(fileList)
 {
 
 }
 
-ImportPrimersDialogFiller::ImportPrimersDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+ImportPrimersDialogFiller::ImportPrimersDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "ImportPrimersDialog", scenario)
 {
 
@@ -63,7 +63,7 @@ void ImportPrimersDialogFiller::commonScenario() {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setImportTarget"
-void ImportPrimersDialogFiller::setImportTarget(U2OpStatus &os, ImportSource importSource) {
+void ImportPrimersDialogFiller::setImportTarget(HI::GUITestOpStatus &os, ImportSource importSource) {
     switch (importSource) {
     case LocalFiles:
         GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbSource", getDialog(os)), "Local file(s)");
@@ -78,25 +78,25 @@ void ImportPrimersDialogFiller::setImportTarget(U2OpStatus &os, ImportSource imp
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addFile"
-void ImportPrimersDialogFiller::addFile(U2OpStatus &os, const QString &filePath) {
+void ImportPrimersDialogFiller::addFile(HI::GUITestOpStatus &os, const QString &filePath) {
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, filePath));
     GTWidget::click(os, GTWidget::findWidget(os, "pbAddFile", getDialog(os)));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "connectDatabase"
-void ImportPrimersDialogFiller::connectDatabase(U2OpStatus &os, const QString &databaseName) {
+void ImportPrimersDialogFiller::connectDatabase(HI::GUITestOpStatus &os, const QString &databaseName) {
     QList<SharedConnectionsDialogFiller::Action> actions;
     actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, databaseName);
     actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT);
-    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions, SharedConnectionsDialogFiller::UNSAFE));
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     GTWidget::click(os, GTWidget::findWidget(os, "pbConnect", getDialog(os)));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addObject"
-void ImportPrimersDialogFiller::addObjects(U2OpStatus &os, const QString &databaseName, const QStringList &objectNames) {
+void ImportPrimersDialogFiller::addObjects(HI::GUITestOpStatus &os, const QString &databaseName, const QStringList &objectNames) {
     QMap<QString, QStringList> objects;
     objects[databaseName] = objectNames;
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os,
@@ -108,7 +108,7 @@ void ImportPrimersDialogFiller::addObjects(U2OpStatus &os, const QString &databa
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addObject"
-void ImportPrimersDialogFiller::addObjects(U2OpStatus &os, const QMap<QString, QStringList> &databaseAndObjectNames) {
+void ImportPrimersDialogFiller::addObjects(HI::GUITestOpStatus &os, const QMap<QString, QStringList> &databaseAndObjectNames) {
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os,
                                                                              databaseAndObjectNames,
                                                                              QSet<GObjectType>() << GObjectTypes::SEQUENCE,
@@ -118,7 +118,7 @@ void ImportPrimersDialogFiller::addObjects(U2OpStatus &os, const QMap<QString, Q
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getDialog"
-QWidget *ImportPrimersDialogFiller::getDialog(U2OpStatus &os) {
+QWidget *ImportPrimersDialogFiller::getDialog(HI::GUITestOpStatus &os) {
     Q_UNUSED(os);
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(NULL != dialog, "Active modal dialog is NULL", NULL);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
index c927514..e29ae38 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
@@ -22,25 +22,26 @@
 #ifndef _U2_IMPORT_PRIMERS_DIALOG_FILLER_H_
 #define _U2_IMPORT_PRIMERS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ImportPrimersDialogFiller : public Filler {
 public:
     enum ImportSource {LocalFiles, SharedDb};
 
-    ImportPrimersDialogFiller(U2OpStatus &os, const QStringList &fileList);
-    ImportPrimersDialogFiller(U2OpStatus &os, CustomScenario *scenario = NULL);
+    ImportPrimersDialogFiller(HI::GUITestOpStatus &os, const QStringList &fileList);
+    ImportPrimersDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario = NULL);
 
     void commonScenario();
 
-    static void setImportTarget(U2OpStatus &os, ImportSource importSource);
-    static void addFile(U2OpStatus &os, const QString &filePath);
-    static void connectDatabase(U2OpStatus &os, const QString &databaseName);
-    static void addObjects(U2OpStatus &os, const QString &databaseName, const QStringList &objectNames);
-    static void addObjects(U2OpStatus &os, const QMap<QString, QStringList> &databaseAndObjectNames);
-    static QWidget * getDialog(U2OpStatus &os);
+    static void setImportTarget(HI::GUITestOpStatus &os, ImportSource importSource);
+    static void addFile(HI::GUITestOpStatus &os, const QString &filePath);
+    static void connectDatabase(HI::GUITestOpStatus &os, const QString &databaseName);
+    static void addObjects(HI::GUITestOpStatus &os, const QString &databaseName, const QStringList &objectNames);
+    static void addObjects(HI::GUITestOpStatus &os, const QMap<QString, QStringList> &databaseAndObjectNames);
+    static QWidget * getDialog(HI::GUITestOpStatus &os);
 
 private:
     const QStringList fileList;
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 2f227bd..088a407 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
@@ -22,14 +22,15 @@
 #include <QApplication>
 
 #include "GTUtilsPrimerLibrary.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 
 #include "PrimerLibrarySelectorFiller.h"
 
 namespace U2 {
+using namespace HI;
 
-PrimerLibrarySelectorFiller::PrimerLibrarySelectorFiller(U2OpStatus &os, int number, bool doubleClick)
+PrimerLibrarySelectorFiller::PrimerLibrarySelectorFiller(HI::GUITestOpStatus &os, int number, bool doubleClick)
 : Filler(os, "PrimerLibrarySelector"), number(number), doubleClick(doubleClick)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
index c88fb7b..5bba1c1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_PRIMER_LIBRARY_SELECTOR_FILLER_H_
 #define _U2_PRIMER_LIBRARY_SELECTOR_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class PrimerLibrarySelectorFiller : public Filler {
 public:
-    PrimerLibrarySelectorFiller(U2OpStatus &os, int number, bool doubleClick);
+    PrimerLibrarySelectorFiller(HI::GUITestOpStatus &os, int number, bool doubleClick);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
index 11fe674..2a7ca20 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
@@ -25,13 +25,13 @@
 
 namespace U2 {
 
-PrimersDetailsDialogFiller::PrimersDetailsDialogFiller(U2OpStatus &os)
+PrimersDetailsDialogFiller::PrimersDetailsDialogFiller(HI::GUITestOpStatus &os)
 : Filler(os, "PrimersDetailsDialog")
 {
 
 }
 
-PrimersDetailsDialogFiller::PrimersDetailsDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+PrimersDetailsDialogFiller::PrimersDetailsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "PrimersDetailsDialog", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
index c4432cb..561e15f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
@@ -22,15 +22,16 @@
 #ifndef _U2_PRIMERS_DETAILS_DIALOG_FILLER_H_
 #define _U2_PRIMERS_DETAILS_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class PrimersDetailsDialogFiller : public Filler {
 public:
-    PrimersDetailsDialogFiller(U2OpStatus &os);
-    PrimersDetailsDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    PrimersDetailsDialogFiller(HI::GUITestOpStatus &os);
+    PrimersDetailsDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
index 5defd03..ef56bba 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
@@ -23,23 +23,24 @@
 #include <QLineEdit>
 
 #include "PwmBuildDialogFiller.h"
-#include "api/GTFileDialog.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::DotPlotFiller"
 
-PwmBuildDialogFiller::PwmBuildDialogFiller(U2OpStatus &os, const QList<Action> &actions) :
+PwmBuildDialogFiller::PwmBuildDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
     Filler(os, "PWMBuildDialog"),
     dialog(NULL),
     actions(actions)
 {
 }
 
-PwmBuildDialogFiller::PwmBuildDialogFiller(U2OpStatus &os, CustomScenario *c):
+PwmBuildDialogFiller::PwmBuildDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c):
     Filler(os, "PWMBuildDialog", c){}
 
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
index 82ccbd6..d083557 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_PWM_BUILD_DIALOG_FILLER_H_
 #define _U2_PWM_BUILD_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class PwmBuildDialogFiller : public Filler {
 public:
@@ -36,8 +37,8 @@ public:
     };
     typedef QPair<ActionType, QVariant> Action;
 
-    PwmBuildDialogFiller(U2OpStatus &os, const QList<Action> &actions);
-    PwmBuildDialogFiller(U2OpStatus &os, CustomScenario *c);
+    PwmBuildDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
+    PwmBuildDialogFiller(HI::GUITestOpStatus &os, CustomScenario *c);
 
     void commonScenario();
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
index 827da45..b4b00c2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
@@ -23,7 +23,7 @@
 
 namespace U2 {
 
-PwmSearchDialogFiller::PwmSearchDialogFiller(U2OpStatus &os, CustomScenario *scenario) :
+PwmSearchDialogFiller::PwmSearchDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario) :
     Filler(os, "PWMSearchDialog", scenario)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
index 304f658..e57896a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_PWM_SEARCH_DIALOG_FILLER_H_
 #define _U2_PWM_SEARCH_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class PwmSearchDialogFiller : public Filler {
 public:
-    PwmSearchDialogFiller(U2OpStatus &os, CustomScenario *scenario);
+    PwmSearchDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
 };
 
 }   // namespace U2
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 8d1136e..02a1da6 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
@@ -30,12 +30,13 @@
 #include <QtWidgets/QTableWidget>
 #endif
 
-#include "api/GTWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTTableView.h>
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
 
 namespace U2{
+using namespace HI;
 #define GT_CLASS_NAME "GTUtilsDialog::StartupDialogFiller"
 #define GT_METHOD_NAME "run"
 
@@ -54,7 +55,6 @@ void AliasesDialogFiller::run(){
     }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
index 61aaea9..fa55231 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef ALIASESDIALOGFILLER_H
 #define ALIASESDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2{
+using namespace HI;
 
 class AliasesDialogFiller : public Filler
 {
 public:
-    AliasesDialogFiller(U2OpStatus &_os, QMap<QPoint*,QString> _map):Filler(_os,"SchemaAliasesConfigurationDialog"),
+    AliasesDialogFiller(HI::GUITestOpStatus &_os, QMap<QPoint*,QString> _map):Filler(_os,"SchemaAliasesConfigurationDialog"),
         map(_map){}
     void run();
 private:
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 a227708..867200f 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
@@ -21,29 +21,35 @@
 
 #include <QApplication>
 
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
-
-#include "GTUtilsWizard.h"
-
 #include "ConfigurationWizardFiller.h"
+#include "GTUtilsWizard.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
+using namespace HI;
+
+#define GT_CLASS_NAME "ConfigurationWizardFiller"
 
-#define GT_CLASS_NAME "GTUtilsDialog::StartupDialogFiller"
 #define GT_METHOD_NAME "commonScenario"
-void ConfigurationWizardFiller::commonScenario(){
-    QWidget* dialog = QApplication::activeModalWidget();
+void ConfigurationWizardFiller::commonScenario() {
+    QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
     GTGlobals::sleep(500);
 
-    foreach (QString s, radioNames) {
-        QRadioButton* b = GTWidget::findExactWidget<QRadioButton*>(os, s, dialog);
+    GTMouseDriver::moveTo(os, QPoint(dialog->pos().x() + dialog->rect().width() / 2, dialog->pos().y() + 5));
+    GTMouseDriver::click(os);
+
+    foreach (const QString &s, radioNames) {
+        QRadioButton *b = GTWidget::findExactWidget<QRadioButton *>(os, s, dialog);
         GTRadioButton::click(os, b);
     }
 
     GTUtilsWizard::clickButton(os, GTUtilsWizard::Setup);
 }
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
-}
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
index 414b35b..fc80cf4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
@@ -22,16 +22,17 @@
 #ifndef CONFIGURATIONWIZARDFILLER_H
 #define CONFIGURATIONWIZARDFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ConfigurationWizardFiller: public Filler
 {
 public:
-    ConfigurationWizardFiller(U2OpStatus &os, QString name, QStringList _radioNames):
+    ConfigurationWizardFiller(HI::GUITestOpStatus &os, QString name, QStringList _radioNames):
         Filler(os, name), radioNames(_radioNames){}
-    ConfigurationWizardFiller(U2OpStatus &os, QString name, CustomScenario* c):
+    ConfigurationWizardFiller(HI::GUITestOpStatus &os, QString name, CustomScenario* c):
         Filler(os, name, c){}
     virtual void commonScenario();
 private:
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 039c316..278ac0f 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
@@ -21,19 +21,19 @@
 
 #include "CreateElementWithCommandLineToolFiller.h"
 
-#include <api/GTTextEdit.h>
+#include <primitives/GTTextEdit.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "CreateElementWithCommandLineFiller"
 
-CreateElementWithCommandLineToolFiller::CreateElementWithCommandLineToolFiller(U2OpStatus& os,
+CreateElementWithCommandLineToolFiller::CreateElementWithCommandLineToolFiller(HI::GUITestOpStatus& os,
                                                                                const ElementWithCommandLineSettings& settings)
     : Filler(os, "CreateExternalProcessWorkerDialog"),
       settings(settings)
 {}
 
-CreateElementWithCommandLineToolFiller::CreateElementWithCommandLineToolFiller(U2OpStatus &os, CustomScenario *scenario)
+CreateElementWithCommandLineToolFiller::CreateElementWithCommandLineToolFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
 : Filler(os, "CreateExternalProcessWorkerDialog", scenario)
 {
 
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 908fcf2..f831a74 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
@@ -22,14 +22,14 @@
 #ifndef _U2_GT_CREATE_ELEMENT_WITH_COMMAND_LINE_TOOL_FILLER_H_
 #define _U2_GT_CREATE_ELEMENT_WITH_COMMAND_LINE_TOOL_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-#include <api/GTComboBox.h>
-#include <api/GTKeyboardDriver.h>
-#include <api/GTLineEdit.h>
-#include <api/GTMouseDriver.h>
-#include <api/GTTableView.h>
-#include <api/GTWidget.h>
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -40,6 +40,7 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 class CreateElementWithCommandLineToolFiller : public Filler {
 public:
@@ -83,9 +84,9 @@ public:
     };
 
 public:
-    CreateElementWithCommandLineToolFiller(U2OpStatus& os,
+    CreateElementWithCommandLineToolFiller(HI::GUITestOpStatus& os,
                                            const ElementWithCommandLineSettings& settings);
-    CreateElementWithCommandLineToolFiller(U2OpStatus &os, CustomScenario *scenario);
+    CreateElementWithCommandLineToolFiller(HI::GUITestOpStatus &os, CustomScenario *scenario);
     void commonScenario();
 private:
     QString dataTypeToString(const InOutType &type) const;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
index 5f718fb..b997741 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
@@ -19,23 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "CreateElementWithScriptDialogFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTextEdit>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QTextEdit>
 
+#include "CreateElementWithScriptDialogFiller.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTTextEdit.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
 
 namespace U2{
 
@@ -49,11 +42,7 @@ void CreateElementWithScriptDialogFiller::run(){
     GT_CHECK(nameEdit, "nameEdit not found");
     GTLineEdit::setText(os, nameEdit, name);
 
-    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");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
@@ -74,8 +63,8 @@ void ScriptEditorDialogFiller::run(){
         if (!textEdit->isReadOnly())
             edit = textEdit;
     }
-    GT_CHECK(edit, "textEdit not found")
-    edit->setText(text);
+    GT_CHECK(edit, "textEdit not found");
+    GTTextEdit::setText(os, edit, text);
 
     GTGlobals::sleep(3000);
     if(checkSyntax){
@@ -105,8 +94,8 @@ void ScriptEditorDialogSyntaxChecker::run(){
         if (!textEdit->isReadOnly())
             edit = textEdit;
     }
-    GT_CHECK(edit, "textEdit not found")
-    edit->setText(text);
+    GT_CHECK(edit, "textEdit not found");
+    GTTextEdit::setText(os, edit, text);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os,QMessageBox::Ok, message));
     GTWidget::click(os, GTWidget::findWidget(os, "checkButton", dialog));
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
index 231799e..30727a6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef CREATEELEMENTWITHSCRIPTDIALOGFILLER_H
 #define CREATEELEMENTWITHSCRIPTDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2{
+using namespace HI;
 
 class CreateElementWithScriptDialogFiller : public Filler
 {
 public:
-    CreateElementWithScriptDialogFiller(U2OpStatus& os, QString _name):Filler(os, "CreateScriptBlockDialog"),
+    CreateElementWithScriptDialogFiller(HI::GUITestOpStatus& os, QString _name):Filler(os, "CreateScriptBlockDialog"),
         name(_name){}
     virtual void run();
 private:
@@ -39,7 +40,7 @@ private:
 class ScriptEditorDialogFiller: public Filler
 {
 public:
-    ScriptEditorDialogFiller(U2OpStatus& os, QString _url = "", QString _text = "", bool _checkSyntax = false, QString _checkSyntaxResult = ""): Filler(os, "ScriptEditorDialog"),
+    ScriptEditorDialogFiller(HI::GUITestOpStatus& os, QString _url = "", QString _text = "", bool _checkSyntax = false, QString _checkSyntaxResult = ""): Filler(os, "ScriptEditorDialog"),
         url(_url),
         text(_text),
         checkSyntaxResult(_checkSyntaxResult),
@@ -55,7 +56,7 @@ private:
 class ScriptEditorDialogSyntaxChecker: public Filler
 {
 public:
-    ScriptEditorDialogSyntaxChecker(U2OpStatus& os, QString _text = "", QString _message = ""): Filler(os, "ScriptEditorDialog"),
+    ScriptEditorDialogSyntaxChecker(HI::GUITestOpStatus& os, QString _text = "", QString _message = ""): Filler(os, "ScriptEditorDialog"),
         text(_text),
         message(_message){}
     virtual void run();
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 38111fc..62a4534 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
@@ -22,13 +22,14 @@
 #include <QApplication>
 #include <QTreeWidget>
 
-#include "api/GTKeyboardDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 
 #include "DashboardsManagerDialogFiller.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "DashboardsManagerDialogFiller"
 #define GT_METHOD_NAME "commonScenario"
@@ -41,7 +42,7 @@ void DashboardsManagerDialogFiller::commonScenario(){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectDashboards"
-void DashboardsManagerDialogFiller::selectDashboards(U2OpStatus &os, QStringList names){
+void DashboardsManagerDialogFiller::selectDashboards(HI::GUITestOpStatus &os, QStringList names){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
@@ -56,7 +57,7 @@ void DashboardsManagerDialogFiller::selectDashboards(U2OpStatus &os, QStringList
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isDashboardPresent"
-bool DashboardsManagerDialogFiller::isDashboardPresent(U2OpStatus &os, QString name){
+bool DashboardsManagerDialogFiller::isDashboardPresent(HI::GUITestOpStatus &os, QString name){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", false);
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
index 9abe8f4..cc3d08b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
@@ -22,18 +22,19 @@
 #ifndef _U2_DASHBOARDS_MANAGER_DIALOG_FILLER_H_
 #define _U2_DASHBOARDS_MANAGER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DashboardsManagerDialogFiller: public Filler
 {
 public:
-    DashboardsManagerDialogFiller(U2OpStatus &os, CustomScenario* _c = NULL):
+    DashboardsManagerDialogFiller(HI::GUITestOpStatus &os, CustomScenario* _c = NULL):
         Filler(os, "DashboardsManagerDialog", _c){}
     virtual void commonScenario();
-    static void selectDashboards(U2OpStatus &os, QStringList names);
-    static bool isDashboardPresent(U2OpStatus &os, QString name);
+    static void selectDashboards(HI::GUITestOpStatus &os, QStringList names);
+    static bool isDashboardPresent(HI::GUITestOpStatus &os, QString name);
 
 };
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
index 5d5f329..305a615 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "DatasetNameEditDialogFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTKeyboardDriver.h"
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTKeyboardDriver.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -30,6 +30,7 @@
 #endif
 
 namespace U2{
+using namespace HI;
 
 #define GT_CLASS_NAME "DatasetNameEditDialogFiller"
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
index c213424..aeed207 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef DATASETNAMEEDITDIALOGFILLER_H
 #define DATASETNAMEEDITDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DatasetNameEditDialogFiller : public Filler
 {
 public:
-    DatasetNameEditDialogFiller(U2OpStatus& os, QString _datasetName = ""):Filler(os, ""),
+    DatasetNameEditDialogFiller(HI::GUITestOpStatus& os, QString _datasetName = ""):Filler(os, ""),
         datasetName(_datasetName){}
     virtual void run();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
index f21465a..915823f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
@@ -24,7 +24,7 @@
 
 namespace U2 {
 
-DefaultWizardFiller::DefaultWizardFiller(U2OpStatus &os, const QString &wizardName) :
+DefaultWizardFiller::DefaultWizardFiller(HI::GUITestOpStatus &os, const QString &wizardName) :
     Filler(os, wizardName)
 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
index 595802a..1cc8523 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_DEFAULT_WIZARD_FILLER_H_
 #define _U2_GT_DEFAULT_WIZARD_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DefaultWizardFiller : public Filler {
 public:
-    DefaultWizardFiller(U2OpStatus &os, const QString &wizardName = "");
+    DefaultWizardFiller(HI::GUITestOpStatus &os, const QString &wizardName = "");
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
index 837cc4a..103ccd8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
@@ -18,79 +18,55 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "StartupDialogFiller.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QApplication>
+#include <QLineEdit>
+#include <QPushButton>
 
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "StartupDialogFiller.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <U2Core/U2SafePoints.h>
 
-namespace U2{
+namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::StartupDialogFiller"
-#define GT_METHOD_NAME "run"
 
-StartupDialogFiller::StartupDialogFiller(U2OpStatus &os, QString _path, bool _isPathValid)
-    : Filler(os,"StartupDialog"), path(_path), isPathValid(_isPathValid)
+StartupDialogFiller::StartupDialogFiller(HI::GUITestOpStatus &os, const QString &path, bool isPathValid) :
+    Filler(os, "StartupDialog"),
+    path(path),
+    isPathValid(isPathValid)
 {
 
 }
 
-void StartupDialogFiller::run(){
+#define GT_METHOD_NAME "commonScenario"
+void StartupDialogFiller::commonScenario() {
     GTGlobals::sleep(1000);
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
     if (path != GUITest::sandBoxDir) {
-        QLineEdit *pathEdit = getPathEdit(dialog);
+        QLineEdit *pathEdit = GTWidget::findExactWidget<QLineEdit *>(os, "pathEdit", dialog);
         CHECK(NULL != pathEdit, );
-        QString rightPath = pathEdit->text();
-        pathEdit->setText(path);
+
+        const QString rightPath = GTLineEdit::getText(os, pathEdit);
+        GTLineEdit::setText(os, pathEdit, path);
 
         if (!isPathValid) {
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-            use(dialog);
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
             CHECK_OP(os, );
 
-            pathEdit->setText(rightPath);
-        }
-    }
-
-    use(dialog);
-}
-
-void StartupDialogFiller::clickButton(QWidget *dialog, const QString &text) {
-    QList<QPushButton*> list= dialog->findChildren<QPushButton*>();
-    bool clicked = false;
-    QString s;
-    foreach(QPushButton* but, list){
-        if (but->text().contains(text)) {
-            GTWidget::click(os,but);
-            clicked = true;
+            GTLineEdit::setText(os, pathEdit, rightPath);
         }
     }
-    GT_CHECK(clicked, "Can not find a button: " + text);
-}
-
-void StartupDialogFiller::use(QWidget *dialog) {
-    clickButton(dialog, "OK");
-}
-
-QLineEdit * StartupDialogFiller::getPathEdit(QWidget *dialog) {
-    QList<QLineEdit*> list = dialog->findChildren<QLineEdit*>();
-    GT_CHECK_RESULT(!list.isEmpty(), "No line edit", NULL);
 
-    return list.first();
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
-
 #undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
-}
+
+}    // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
index ae16932..668b80e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
@@ -19,33 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef STARTUPDIALOGFILLER_H
-#define STARTUPDIALOGFILLER_H
+#ifndef _U2_STARTUP_DIALOG_FILLER_H_
+#define _U2_STARTUP_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
-#include <U2Test/GUITest.h>
+#include <core/GUITest.h>
+
+#include "utils/GTUtilsDialog.h"
 
 class QLineEdit;
 class QWidget;
 
 namespace U2 {
+using namespace HI;
 
-class StartupDialogFiller : public Filler
-{
+class StartupDialogFiller : public Filler {
 public:
-    StartupDialogFiller(U2OpStatus &os, QString path = GUITest::sandBoxDir, bool isPathValid = true);
-    void run();
-
-private:
-    QString path;
-    bool isPathValid;
+    StartupDialogFiller(HI::GUITestOpStatus &os, const QString &path = HI::GUITest::sandBoxDir, bool isPathValid = true);
+    void commonScenario();
 
 private:
-    void clickButton(QWidget *dialog, const QString &text);
-    void dontUse(QWidget *dialog);
-    void use(QWidget *dialog);
-    QLineEdit * getPathEdit(QWidget *dialog);
+    const QString path;
+    const bool isPathValid;
 };
 
-}
-#endif // STARTUPDIALOGFILLER_H
+}   // namespace U2
+
+#endif // _U2_STARTUP_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
index 856c68a..2d17e72 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
@@ -20,18 +20,18 @@
  */
 
 #include "WizardFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTFileDialog.h"
-#include "api/GTRadioButton.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <drivers/GTMouseDriver.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTRadioButton.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include "../../src/corelibs/U2Designer/src/wizard/WDWizardPage.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -56,7 +56,7 @@
 #include "GTUtilsWizard.h"
 
 namespace U2 {
-
+using namespace HI;
 
 #define GET_ACTIVE_DIALOG QWidget* dialog = QApplication::activeModalWidget();\
                           GT_CHECK(dialog, "activeModalWidget is NULL");\
@@ -81,7 +81,7 @@ void WizardFiller::commonScenario(){
 
 
 #define GT_METHOD_NAME "WizardFiller::getExpandButton"
-QToolButton* WizardFiller::getExpandButton(U2OpStatus &os){
+QToolButton* WizardFiller::getExpandButton(HI::GUITestOpStatus &os){
     QToolButton* expandButton = NULL;
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL",NULL);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
index ea092dd..06125ae 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
@@ -22,7 +22,7 @@
 #ifndef _U2_GT_RUNNABLES_WIZARD_FILLER_H_
 #define _U2_GT_RUNNABLES_WIZARD_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QPushButton>
@@ -33,17 +33,18 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 class WizardFiller : public Filler {
 public:
-    WizardFiller(U2OpStatus &_os, QString name, QList<QStringList> _inputFiles = QList<QStringList>(), QMap<QString, QVariant> _map = (QMap<QString, QVariant>())):
+    WizardFiller(HI::GUITestOpStatus &_os, QString name, QList<QStringList> _inputFiles = QList<QStringList>(), QMap<QString, QVariant> _map = (QMap<QString, QVariant>())):
         Filler(_os, name), inputFiles(_inputFiles), map(_map){}
-    WizardFiller(U2OpStatus &_os, QString name, QStringList _inputFiles, QMap<QString, QVariant> _map = (QMap<QString, QVariant>())):
+    WizardFiller(HI::GUITestOpStatus &_os, QString name, QStringList _inputFiles, QMap<QString, QVariant> _map = (QMap<QString, QVariant>())):
         Filler(_os, name), inputFiles(QList<QStringList>()<<_inputFiles), map(_map){}
-    WizardFiller(U2OpStatus &_os, QString name, CustomScenario* c): Filler(_os, name, c){}
+    WizardFiller(HI::GUITestOpStatus &_os, QString name, CustomScenario* c): Filler(_os, name, c){}
     void commonScenario();
 
-    static QToolButton* getExpandButton(U2OpStatus &_os);
+    static QToolButton* getExpandButton(HI::GUITestOpStatus &_os);
 
 
     static void setInputFiles();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
index 6fdddaf..64eaad0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
@@ -21,8 +21,8 @@
 
 
 #include "WorkflowMetadialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -49,11 +49,7 @@ void WorkflowMetaDialogFiller::run(){
      GT_CHECK(nameEdit, "urlEdit not found");
      GTLineEdit::setText(os, nameEdit,name);
 
-     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");
-     GTWidget::click(os, button);
+     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
index c583547..8f41482 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
@@ -22,15 +22,15 @@
 #ifndef WORKFLOWMETADIALOGFILLER_H
 #define WORKFLOWMETADIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2{
-
+using namespace HI;
 
 class WorkflowMetaDialogFiller : public Filler
 {
 public:
-    WorkflowMetaDialogFiller(U2OpStatus& os, QString _url, QString _name): Filler(os, "WorkflowMetaDialog"),
+    WorkflowMetaDialogFiller(HI::GUITestOpStatus& os, QString _url, QString _name): Filler(os, "WorkflowMetaDialog"),
         url(_url),
         name(_name){}
     virtual void run();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
index ec9c84f..03aabab 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
@@ -24,13 +24,13 @@
 #include <QComboBox>
 
 #include "MAFFTSupportRunDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
 
 namespace U2 {
 
@@ -70,4 +70,4 @@ void MAFFTSupportRunDialogFiller::run() {
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-}
+}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
index 2476190..b171bcd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
@@ -22,10 +22,11 @@
 #ifndef _U2_GUI_MAFFT_SUPPORT_RUN_DIALOG_FILLER_H_
 #define _U2_GUI_MAFFT_SUPPORT_RUN_DIALOG_FILLER_H_
  
-#include "GTUtilsDialog.h"
-#include "api/GTFileDialog.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/GTFileDialog.h>
 
 namespace U2 {
+using namespace HI;
 
 class MAFFTSupportRunDialogFiller : public Filler {
 public:
@@ -48,7 +49,7 @@ public:
     };
 
 
-    MAFFTSupportRunDialogFiller(U2OpStatus &os, Parameters* parameters) :
+    MAFFTSupportRunDialogFiller(HI::GUITestOpStatus &os, Parameters* parameters) :
         Filler(os, "MAFFTSupportRunDialog"),
         parameters(parameters) {
             CHECK_SET_ERR(parameters, "Invalid filler parameters: NULL pointer");
@@ -66,4 +67,4 @@ Parameters* parameters;
 
 #endif
 
- 
+ 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
index a9b77c6..193b977 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "ClustalWDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
-#include "api/GTDoubleSpinBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTDoubleSpinBox.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -38,7 +38,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ClustalWDialogFiller"
 
-ClustalWDialogFiller::ClustalWDialogFiller(U2OpStatus &_os, int _gapOpenVal) : Filler(_os, "ClustalWSupportRunDialog"),
+ClustalWDialogFiller::ClustalWDialogFiller(HI::GUITestOpStatus &_os, int _gapOpenVal) : Filler(_os, "ClustalWSupportRunDialog"),
     gapOpenVal(_gapOpenVal) {}
 
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
index f6a0275..29e69b8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_CLUSTALW_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_CLUSTALW_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ClustalWDialogFiller : public Filler {
 public:
-    ClustalWDialogFiller(U2OpStatus &_os, int _gapOpenVal=0);
+    ClustalWDialogFiller(HI::GUITestOpStatus &_os, int _gapOpenVal=0);
     virtual void run();
 private:
     int gapOpenVal;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
index 8a80674..bfbe700 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
@@ -21,9 +21,9 @@
 
 #include "UHMM3PhmmerDialogFiller.h"
 
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "api/GTTabBar.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTTabBar.h>
 
 #include <QApplication>
 #include <QTabWidget>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
index d8c9920..086a884 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
@@ -22,14 +22,15 @@
 #ifndef _U2_UHMM3_PHMMER_DIALOG_FILLER_H_
 #define _U2_UHMM3_PHMMER_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class UHMM3PhmmerDialogFiller: public Filler
 {
 public:
-    UHMM3PhmmerDialogFiller(U2OpStatus &os, QString _input):Filler(os, "UHMM3PhmmerDialog"), input(_input){}
+    UHMM3PhmmerDialogFiller(HI::GUITestOpStatus &os, QString _input):Filler(os, "UHMM3PhmmerDialog"), input(_input){}
     virtual void run();
 private:
     QString input;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp
index f25fcd6..4437b23 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp
@@ -21,8 +21,8 @@
 
 #include <QApplication>
 
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 #include "UHMM3SearchDialogFiller.h"
 namespace U2 {
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h
index 7834524..84b3b23 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h
@@ -23,13 +23,14 @@
 #ifndef _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
 #define _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 namespace U2 {
+using namespace HI;
 
 class UHMM3SearchDialogFiller : public Filler
 {
 public:
-    UHMM3SearchDialogFiller(U2OpStatus &os, QString _profile, QString _newFilePath): Filler(os, "UHMM3SearchDialog"),
+    UHMM3SearchDialogFiller(HI::GUITestOpStatus &os, QString _profile, QString _newFilePath): Filler(os, "UHMM3SearchDialog"),
     profile(_profile),
     newFilePath(_newFilePath){}
     virtual void commonScenario();
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
index 6c22ed7..66832fc 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "KalignDialogFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
-#include "api/GTDoubleSpinBox.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTDoubleSpinBox.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -38,7 +38,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::KalignDialogFiller"
 
-KalignDialogFiller::KalignDialogFiller(U2OpStatus &_os, int _gapOpenVal, bool _toAmino) : Filler(_os, "KalignDialog"),
+KalignDialogFiller::KalignDialogFiller(HI::GUITestOpStatus &_os, int _gapOpenVal, bool _toAmino) : Filler(_os, "KalignDialog"),
     gapOpenVal(_gapOpenVal), toAmino(_toAmino) {}
 
 #define GT_METHOD_NAME "run"
@@ -57,12 +57,8 @@ void KalignDialogFiller::run()
 
     QCheckBox* translateCheckBox = GTWidget::findExactWidget<QCheckBox*>(os, "translateCheckBox", dialog);
     GTCheckBox::setChecked(os, translateCheckBox, toAmino);
-
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
index 46e48e2..6ddbb57 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_KALIGN_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_KALIGN_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class KalignDialogFiller : public Filler {
 public:
-    KalignDialogFiller(U2OpStatus &_os, int _gapOpenVal=0, bool _toAmino = false);
+    KalignDialogFiller(HI::GUITestOpStatus &_os, int _gapOpenVal=0, bool _toAmino = false);
     virtual void run();
 private:
     int gapOpenVal;
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 538f18c..77f215a 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
@@ -20,14 +20,14 @@
  */
 
 #include "Primer3DialogFiller.h"
-#include "api/GTCheckBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTWidget.h>
 
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include <QApplication>
 #include <QLineEdit>
@@ -36,9 +36,10 @@
 #include <QCheckBox>
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::KalignDialogFiller"
-Primer3DialogFiller::Primer3DialogFiller(U2OpStatus &os, const Primer3Settings &settings)
+Primer3DialogFiller::Primer3DialogFiller(HI::GUITestOpStatus &os, const Primer3Settings &settings)
     : Filler(os, "Primer3Dialog"),
       settings(settings)
 {}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
index 9391034..f926dc9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_PRIMER3_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_PRIMER3_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class Primer3DialogFiller : public Filler {
 public:
@@ -49,7 +50,7 @@ public:
         bool shortRegion;
     };
 
-    Primer3DialogFiller(U2OpStatus &os, const Primer3Settings &settings = Primer3Settings());
+    Primer3DialogFiller(HI::GUITestOpStatus &os, const Primer3Settings &settings = Primer3Settings());
     void commonScenario();
 private:
     Primer3Settings settings;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
index ab435d2..bfce4eb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "MuscleDialogFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTWidget.h"
-#include "api/GTCheckBox.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTCheckBox.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -43,7 +43,7 @@ namespace U2 {
 #define GT_CLASS_NAME "GTUtilsDialog::MuscleDialogFiller"
 #define GT_METHOD_NAME "run"
 
-MuscleDialogFiller::MuscleDialogFiller(U2OpStatus &os, Mode _mode, bool _doNotReArr, bool translateToAmino)
+MuscleDialogFiller::MuscleDialogFiller(HI::GUITestOpStatus &os, Mode _mode, bool _doNotReArr, bool translateToAmino)
     : Filler(os, "MuscleAlignmentDialog"), mode(_mode), doNotReArr(_doNotReArr), translateToAmino(translateToAmino)
 {
 
@@ -63,11 +63,7 @@ void MuscleDialogFiller::run(){
     QCheckBox *translate2AminoCb = dialog->findChild<QCheckBox*>("translateCheckBox");
     GTCheckBox::setChecked(os, translate2AminoCb, translateToAmino);
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
index 6267f4f..3f85db7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
@@ -22,10 +22,10 @@
 #ifndef _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_MUSCLE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_PLUGINS_3RDPARTY_MUSCLE_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
 //for now it just a stub, which can only press 'align' button
 class MuscleDialogFiller : public Filler {
 public:
@@ -34,7 +34,7 @@ public:
         Large = 1,
         Refine = 2
     };
-    MuscleDialogFiller(U2OpStatus &os, Mode mode = Default, bool _doNotReArr = true, bool translateToAmino = false);
+    MuscleDialogFiller(HI::GUITestOpStatus &os, Mode mode = Default, bool _doNotReArr = true, bool translateToAmino = false);
     virtual void run();
 
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
index 7c0bb0b..adac8a0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
@@ -28,10 +28,11 @@
 #include <QtWidgets/QApplication>
 #include <QtWidgets/QDialogButtonBox>
 #endif
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
 namespace U2{
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::SaveProjectAsDialogFiller"
 #define GT_METHOD_NAME "run"
@@ -65,14 +66,7 @@ void ConvertAceToSqliteDialogFiller::run(){
     GT_CHECK(leDest, "destination URL lineedit not found");
     GTLineEdit::setText(os, leDest, leDestUrl);
 
-    GTWidget::click(os, GTWidget::findButtonByText(os, "OK",dialog));
-    GTGlobals::sleep(300);
-
-    dialog = QApplication::activeModalWidget();
-    if(dialog!=NULL){
-        GTWidget::click(os, GTWidget::findButtonByText(os, "Cancel",dialog));
-    }
-
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
index 0fb32e2..2ae4778 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
@@ -23,15 +23,16 @@
 #ifndef CONVERTACETOSQLITEDIALOGFILLER_H
 #define CONVERTACETOSQLITEDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class ConvertAceToSqliteDialogFiller : public Filler
 {
 public:
     enum OutFileAction { NOT_SET, REPLACE, APPEND, CANCEL };
-    ConvertAceToSqliteDialogFiller(U2OpStatus& _os, QString _leDest, OutFileAction action = NOT_SET): Filler(_os, "AceImportDialog"),
+    ConvertAceToSqliteDialogFiller(HI::GUITestOpStatus& _os, QString _leDest, OutFileAction action = NOT_SET): Filler(_os, "AceImportDialog"),
         leDestUrl(_leDest), action(action) {}
     virtual void run();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
index 480b690..e16133d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "CreateNewProjectWidgetFiller.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -36,7 +36,7 @@
 #endif
 
 namespace U2 {
-
+using namespace HI;
 #define GT_CLASS_NAME "GTUtilsDialog::SaveProjectAsDialogFiller"
 #define GT_METHOD_NAME "run"
 void SaveProjectAsDialogFiller::run() {
@@ -54,13 +54,7 @@ void SaveProjectAsDialogFiller::run() {
     QLineEdit *projectFileEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "projectFileEdit", dialog));
     GTLineEdit::setText(os, projectFileEdit, projectFile);
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
-    GTGlobals::sleep();
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
index ee4ac7d..8482718 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
@@ -22,13 +22,13 @@
 #ifndef _U2_GT_RUNNABLES_CREATE_NEW_PROJECT_WIDGET_FILLER_H_
 #define _U2_GT_RUNNABLES_CREATE_NEW_PROJECT_WIDGET_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
     class SaveProjectAsDialogFiller : public Filler {
     public:
-        SaveProjectAsDialogFiller(U2OpStatus &_os, const QString &_projectName, const QString &_projectFolder, const QString &_projectFile)
+        SaveProjectAsDialogFiller(HI::GUITestOpStatus &_os, const QString &_projectName, const QString &_projectFolder, const QString &_projectFile)
             :Filler(_os, "CreateNewProjectDialog"), projectName(_projectName), projectFolder(_projectFolder), projectFile(_projectFile){}
         virtual void run();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
index 7bc4f37..c30d630 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
@@ -28,10 +28,10 @@
 #include <QtWidgets/QLabel>
 #endif
 
-#include "api/GTComboBox.h"
-#include "api/GTRadioButton.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTRadioButton.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 
 #include "DocumentFormatSelectorDialogFiller.h"
 
@@ -40,7 +40,7 @@ namespace U2{
 #define GT_CLASS_NAME "DocumentFormatSelectorDialogFiller"
 
 #define GT_METHOD_NAME "getButton"
-QRadioButton* DocumentFormatSelectorDialogFiller::getButton(U2OpStatus &os){
+QRadioButton* DocumentFormatSelectorDialogFiller::getButton(HI::GUITestOpStatus &os){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK_RESULT(dialog, "activeModalWidget is NULL", NULL);
     QRadioButton* result = GTWidget::findExactWidget<QRadioButton*>(os, format, dialog, GTGlobals::FindOptions(false));
@@ -68,12 +68,7 @@ void DocumentFormatSelectorDialogFiller::commonScenario()
         GTComboBox::setIndexWithText(os, userSelectedFormat, format, true, GTGlobals::UseMouse);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
-
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_CLASS_NAME
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
index 35afe6a..5216855 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
@@ -22,23 +22,24 @@
 #ifndef DOCUMENTFORMATSELECTORDIALOGFILLER_H
 #define DOCUMENTFORMATSELECTORDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 class QRadioButton;
 
 namespace U2{
+using namespace HI;
 
 class DocumentFormatSelectorDialogFiller : public Filler
 {
 public:
-    DocumentFormatSelectorDialogFiller(U2OpStatus &os, const QString &_format):
+    DocumentFormatSelectorDialogFiller(HI::GUITestOpStatus &os, const QString &_format):
         Filler(os, "DocumentFormatSelectorDialog"), format(_format){}
-    DocumentFormatSelectorDialogFiller(U2OpStatus &os, CustomScenario* custom):
+    DocumentFormatSelectorDialogFiller(HI::GUITestOpStatus &os, CustomScenario* custom):
         Filler(os, "DocumentFormatSelectorDialog", custom){}
     virtual void commonScenario();
 private:
     QString format;
-    QRadioButton* getButton(U2OpStatus &os);
+    QRadioButton* getButton(HI::GUITestOpStatus &os);
 };
 
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
index cbee3b2..adbbd79 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
@@ -21,8 +21,8 @@
 
 #include <QApplication>
 
-#include "api/GTRadioButton.h"
-#include "api/GTWidget.h"
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
 
 #include "DocumentProviderSelectorDialogFiller.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
index d873248..2eef0fd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
@@ -22,15 +22,16 @@
 #ifndef _U2_DOCUMENT_PROVIDER_SELECTOR_DIALOG_FILLER_H_
 #define _U2_DOCUMENT_PROVIDER_SELECTOR_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class DocumentProviderSelectorDialogFiller : public Filler
 {
 public:
     enum OpenWith{AlignmentEditor, AssemblyBrowser};
-    DocumentProviderSelectorDialogFiller(U2OpStatus &os, OpenWith _openWith): Filler(os, "DocumentProviderSelectorDialog"),
+    DocumentProviderSelectorDialogFiller(HI::GUITestOpStatus &os, OpenWith _openWith): Filler(os, "DocumentProviderSelectorDialog"),
     openWith(_openWith){}
     virtual void commonScenario();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
index 4f1f6dc..d0e7184 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
@@ -20,8 +20,8 @@
  */
 
 #include "ExportProjectDialogFiller.h"
-#include "api/GTLineEdit.h"
-#include "api/GTWidget.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -36,6 +36,7 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportProjectDialogChecker"
 #define GT_METHOD_NAME "run"
@@ -48,11 +49,7 @@ void ExportProjectDialogChecker::run() {
     GT_CHECK(projectFileLineEdit != NULL, "LineEdit is NULL");
     GT_CHECK(projectFileLineEdit->text() == projectName, "Project name is not " + projectName);
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    GT_CHECK(box != NULL, "buttonBox is NULL");
-    QPushButton* button = box->button(QDialogButtonBox::Cancel);
-    GT_CHECK(button !=NULL, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
@@ -72,11 +69,7 @@ void ExportProjectDialogSizeChecker::run() {
 
     GT_CHECK(projectFileLineEdit->height() == projectFolderLineEdit->height(), "LineEdits vertical sizes is different");
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    GT_CHECK(box != NULL, "buttonBox is NULL");
-    QPushButton* button = box->button(QDialogButtonBox::Cancel);
-    GT_CHECK(button !=NULL, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
@@ -98,11 +91,7 @@ void ExportProjectDialogFiller::run() {
         GTLineEdit::setText(os, projectFileLineEdit, projectName);
     }
 
-    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, "cancel button is NULL");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
index 2385e0f..e642393 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_PROJECT_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_PROJECT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
     class ExportProjectDialogFiller : public Filler {
     public:
-        ExportProjectDialogFiller(U2OpStatus &_os, const QString &_projectFolder, const QString &_projectName = "")
+        ExportProjectDialogFiller(HI::GUITestOpStatus &_os, const QString &_projectFolder, const QString &_projectName = "")
             :Filler(_os, "ExportProjectDialog"), projectFolder(_projectFolder), projectName(_projectName){}
         virtual void run();
     private:
@@ -38,7 +39,7 @@ namespace U2 {
 
     class ExportProjectDialogChecker : public Filler {
     public:
-        ExportProjectDialogChecker(U2OpStatus &_os, const QString &_projectName)
+        ExportProjectDialogChecker(HI::GUITestOpStatus &_os, const QString &_projectName)
             :Filler(_os, "ExportProjectDialog"), projectName(_projectName){}
         virtual void run();
     private:
@@ -47,7 +48,7 @@ namespace U2 {
 
     class ExportProjectDialogSizeChecker : public Filler {
     public:
-        ExportProjectDialogSizeChecker(U2OpStatus &_os, const QString &_projectName)
+        ExportProjectDialogSizeChecker(HI::GUITestOpStatus &_os, const QString &_projectName)
             :Filler(_os, "ExportProjectDialog"), projectName(_projectName){}
         virtual void run();
     private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
index 746e3dd..c5535d0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
@@ -19,35 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "QComboBox"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QDialogButtonBox>
-#endif
-
+#include <QApplication>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QTreeWidget>
+
+#include <primitives/GTComboBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTextEdit.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 #include "GTUtilsTaskTreeView.h"
 #include "NCBISearchDialogFiller.h"
-#include "api/GTComboBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTextEdit.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
 #include "runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h"
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
 #define GT_CLASS_NAME "NcbiSearchDialogFiller"
 
-NcbiSearchDialogFiller::NcbiSearchDialogFiller(U2OpStatus &os, const QList<Action> &actions) :
+NcbiSearchDialogFiller::NcbiSearchDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions) :
     Filler(os, "SearchGenbankSequenceDialog"),
     dialog(NULL),
     actions(actions)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
index 3547350..9922ba7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
@@ -22,9 +22,10 @@
 #ifndef _U2_NCBI_SEARCH_DIALOG_FILLER_H_
 #define _U2_NCBI_SEARCH_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class NcbiSearchDialogFiller : public Filler {
 public:
@@ -51,7 +52,7 @@ public:
     };
     typedef QPair<ActionType, QVariant> Action;
 
-    NcbiSearchDialogFiller(U2OpStatus &os, const QList<Action> &actions);
+    NcbiSearchDialogFiller(HI::GUITestOpStatus &os, const QList<Action> &actions);
 
     void run();
 
@@ -83,7 +84,7 @@ private:
 // use NCBISearchDialogFillerDeprecated instead
 class NCBISearchDialogFillerDeprecated : public Filler {
 public:
-    NCBISearchDialogFillerDeprecated(U2OpStatus &os, QString _query, bool _doubleEnter = false, int _resultLimit=-1) :
+    NCBISearchDialogFillerDeprecated(HI::GUITestOpStatus &os, QString _query, bool _doubleEnter = false, int _resultLimit=-1) :
         Filler(os, "SearchGenbankSequenceDialog"),
         query(_query),
         doubleEnter(_doubleEnter),
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
index ddcdaca..b730bce 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
@@ -28,7 +28,7 @@
 #include <QtWidgets/QPushButton>
 #endif
 
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 namespace U2{
 void SaveProjectDialogFiller::run(){
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
index f3a7dcf..8ae3720 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
@@ -22,7 +22,7 @@
 #ifndef SAVEPROJECTDIALOGFILLER_H
 #define SAVEPROJECTDIALOGFILLER_H
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialogButtonBox>
 #else
@@ -30,9 +30,11 @@
 #endif
 
 namespace U2{
+using namespace HI;
+
 class SaveProjectDialogFiller: public Filler{
 public:
-    SaveProjectDialogFiller(U2OpStatus &os, QDialogButtonBox::StandardButton _b):
+    SaveProjectDialogFiller(HI::GUITestOpStatus &os, QDialogButtonBox::StandardButton _b):
         Filler(os,"SaveProjectDialog"),b(_b){}
     virtual void run();
 private:
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
index 0d75bc0..83e8be0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
@@ -20,7 +20,7 @@
  */
 
 #include "SelectDocumentFormatDialogFiller.h"
-#include "api/GTWidget.h"
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -33,8 +33,9 @@
 #endif
 
 namespace U2 {
+using namespace HI;
 
-SelectDocumentFormatDialogFiller::SelectDocumentFormatDialogFiller(U2OpStatus &_os, CustomScenario *scenario)
+SelectDocumentFormatDialogFiller::SelectDocumentFormatDialogFiller(HI::GUITestOpStatus &_os, CustomScenario *scenario)
     : Filler(_os, "DocumentFormatSelectorDialog", scenario)
 {
 
@@ -45,12 +46,8 @@ SelectDocumentFormatDialogFiller::SelectDocumentFormatDialogFiller(U2OpStatus &_
 void SelectDocumentFormatDialogFiller::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog != NULL, "dialog not found");
-    QDialogButtonBox *buttonBox = dialog->findChild<QDialogButtonBox*>(QString::fromUtf8("buttonBox"));
-    GT_CHECK(buttonBox != NULL, "buttonBox not found");
 
-    QPushButton *button = buttonBox->button(QDialogButtonBox::Ok);
-    GT_CHECK(button != NULL, "standart button not found");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
index 3353d6b..f68c856 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
@@ -22,13 +22,14 @@
 #ifndef _U2_GT_RUNNABLES_SELECT_DOCUMENT_FORMAT_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_SELECT_DOCUMENT_FORMAT_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
+using namespace HI;
 
 class SelectDocumentFormatDialogFiller : public Filler {
 public:
-    SelectDocumentFormatDialogFiller(U2OpStatus &os, CustomScenario *scenario = NULL);
+    SelectDocumentFormatDialogFiller(HI::GUITestOpStatus &os, CustomScenario *scenario = NULL);
 
     void commonScenario();
 };
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
index c5b9e4a..34ec46e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
@@ -20,9 +20,9 @@
  */
 
 #include "SequenceReadingModeSelectorDialogFiller.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QApplication>
@@ -38,7 +38,7 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::SequenceReadingModeSelectorDialogFiller"
 
-SequenceReadingModeSelectorDialogFiller::SequenceReadingModeSelectorDialogFiller(U2OpStatus &_os, CustomScenario *c) :
+SequenceReadingModeSelectorDialogFiller::SequenceReadingModeSelectorDialogFiller(HI::GUITestOpStatus &_os, CustomScenario *c) :
     Filler(_os, "SequenceReadingModeSelectorDialog", c),
     cancel(false)
 {
@@ -56,6 +56,7 @@ void SequenceReadingModeSelectorDialogFiller::commonScenario()
         QPushButton *button = buttonBox->button(QDialogButtonBox::Cancel);
         GT_CHECK(button != NULL, "standart button not found");
         GTWidget::click(os, button);
+        return;
     }
     if (readingMode == Separate) {
         QRadioButton *separateRB = dialog->findChild<QRadioButton*>(QString::fromUtf8("separateRB"));
@@ -82,9 +83,7 @@ void SequenceReadingModeSelectorDialogFiller::commonScenario()
         GTRadioButton::click(os, refalignmentRB);
     }
 
-    QPushButton *button = buttonBox->button(QDialogButtonBox::Ok);
-    GT_CHECK(button != NULL, "standart button not found");
-    GTWidget::click(os, button);
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
index 8ea4887..2bf1802 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
@@ -22,17 +22,17 @@
 #ifndef _U2_GT_RUNNABLES_SEQUENCE_READING_MODE_SELECTOR_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_SEQUENCE_READING_MODE_SELECTOR_DIALOG_FILLER_H_
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
-
+using namespace HI;
     class SequenceReadingModeSelectorDialogFiller : public Filler {
     public:
         enum ReadingMode {Separate, Merge, Join, Align};
 
-        SequenceReadingModeSelectorDialogFiller(U2OpStatus &_os, ReadingMode _mode = Separate, int _bases=10, bool cancel = false):
+        SequenceReadingModeSelectorDialogFiller(HI::GUITestOpStatus &_os, ReadingMode _mode = Separate, int _bases=10, bool cancel = false):
         Filler(_os, "SequenceReadingModeSelectorDialog"), readingMode(_mode), bases(_bases), cancel(cancel) {}
-        SequenceReadingModeSelectorDialogFiller(U2OpStatus &_os, CustomScenario* c);
+        SequenceReadingModeSelectorDialogFiller(HI::GUITestOpStatus &_os, CustomScenario* c);
 
         virtual void commonScenario();
     private:
diff --git a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
new file mode 100644
index 0000000..5c55954
--- /dev/null
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
@@ -0,0 +1,177 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <QTreeWidgetItem>
+#include <QTreeView>
+#include <QMessageBox>
+
+#include <U2Test/GUITestThread.h>
+#include <U2Test/GUITestBase.h>
+#include <U2Test/GUITestService.h>
+
+#include "GUITestRunner.h"
+
+namespace U2 {
+
+#define ULOG_CAT_TEST_RUNNER "GUI Test Runner Log"
+static Logger log(ULOG_CAT_TEST_RUNNER);
+
+GUITestRunner::GUITestRunner(GUITestBase* _guiTestBase, QWidget *parent) :
+    guiTestBase(_guiTestBase), QWidget(parent)
+{
+    setupUi(this);
+    setWindowIcon(QIcon(QString(":gui_test/images/open_gui_test_runner.png")));
+    tree->setColumnWidth(0,300);
+
+    const GUITests tests = guiTestBase->getTests();
+    foreach(HI::GUITest* t, tests) {
+        //addTestSuite(ts);
+        QStringList list = QStringList();
+        QString suiteName = t->getSuite();
+        QList<QTreeWidgetItem*> suites = tree->findItems(suiteName, Qt::MatchExactly);
+        if (!suites.isEmpty()){
+            if (suites.size() == 1){
+                list.append(t->getName());
+                list.append("Not runned");
+                suites.first()->addChild(new QTreeWidgetItem(list));
+            }
+        }else{
+            list.append(t->getSuite());
+            tree->addTopLevelItem(new QTreeWidgetItem(list));
+            QList<QTreeWidgetItem*> suites = tree->findItems(suiteName, Qt::MatchExactly);
+            list.removeFirst();
+            list.append(t->getName());
+            list.append("Not runned");
+            suites.first()->addChild(new QTreeWidgetItem(list));
+        }
+    }
+
+    delTextAction = new QAction(this);
+    delTextAction->setShortcut(QKeySequence(tr("Esc")));
+    filter->addAction(delTextAction);
+
+    connect(delTextAction, SIGNAL(triggered()), this, SLOT(sl_filterCleared()));
+
+    connect(filter, SIGNAL(textChanged(const QString &)), this, SLOT(sl_filterChanged(const QString &)));
+
+    connect(startSelectedButton,SIGNAL(clicked(bool)),this,SLOT(sl_runSelected()));
+    connect(tree,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(sl_runSelected()));
+
+    connect(startAllButton,SIGNAL(clicked(bool)),this,SLOT(sl_runAllGUITests()));
+
+    show();
+    filter->setFocus();
+}
+
+GUITestRunner::~GUITestRunner()
+{
+
+}
+
+void GUITestRunner::sl_runSelected(){
+    QList<QTreeWidgetItem*> selectedItems = tree->selectedItems();
+    foreach (QTreeWidgetItem* item, selectedItems) {
+        if(item->childCount() == 0){ // single test, not suite
+            QString suite = item->parent()->text(0);
+            QString name = item->text(0);
+            HI::GUITest* test = guiTestBase->getTest(suite, name);
+            GUITestThread *testThread = new GUITestThread(test, log, false);
+            connect(testThread, SIGNAL(finished()), this, SLOT(sl_testFinished()));
+            hide();
+            testThread->start();
+
+        }
+
+    }
+}
+void GUITestRunner::sl_runAllGUITests(){
+    if(GUITestService::getGuiTestService()->isEnabled()){
+        hide();
+        GUITestService::getGuiTestService()->runAllGUITests();
+        show();
+    }
+}
+
+void GUITestRunner::sl_testFinished(){
+    GUITestThread *testThread = qobject_cast<GUITestThread *>(sender());
+    //SAFE_POINT(NULL != testThread, "TestThread is null", );
+    HI::GUITest* test = testThread->getTest();
+    QString result = testThread->getTestResult();
+    for (int suiteIdx = 0; suiteIdx < tree->topLevelItemCount(); suiteIdx++) {
+        QTreeWidgetItem *suite = tree->topLevelItem(suiteIdx);
+        if(test->getSuite() == suite->text(0)){
+            for (int testIdx = 0; testIdx < suite->childCount(); testIdx++) {
+                QTreeWidgetItem *testItem = suite->child(testIdx);
+                if(testItem->text(0) == test->getName()){
+                    testItem->setText(1,result);
+                }
+            }
+        }
+    }
+    show();
+}
+
+////Filter
+
+void GUITestRunner::sl_filterCleared(){
+    filter->clear();
+    tree->collapseAll();
+}
+void GUITestRunner::sl_filterChanged(const QString &nameFilter) {
+    revisible(nameFilter);
+}
+
+namespace {
+bool filterMatched(const QString &nameFilter, const QString &name) {
+    static QRegExp spaces("\\s");
+    QStringList filterWords = nameFilter.split(spaces);
+    foreach (const QString &word, filterWords) {
+        if (!name.contains(word, Qt::CaseInsensitive)) {
+            return false;
+        }
+    }
+    return true;
+}
+}
+void GUITestRunner::revisible(const QString &nameFilter) {
+    setMouseTracking(false);
+    for (int catIdx=0; catIdx<tree->topLevelItemCount(); catIdx++) {
+        QTreeWidgetItem *category = tree->topLevelItem(catIdx);
+        bool hasVisibleSamples = false;
+        QString catName = category->text(0);
+        for (int childIdx=0; childIdx<category->childCount(); childIdx++) {
+            QTreeWidgetItem *sample = category->child(childIdx);
+            QString name = sample->text(0);
+            if (!filterMatched(nameFilter, name) &&
+                !filterMatched(nameFilter, catName)) {
+                sample->setHidden(true);
+            } else {
+                sample->setHidden(false);
+                hasVisibleSamples = true;
+            }
+        }
+        category->setHidden(!hasVisibleSamples);
+        category->setExpanded(hasVisibleSamples);
+    }
+    setMouseTracking(true);
+}
+
+}
diff --git a/src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.h b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
similarity index 59%
rename from src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.h
rename to src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
index 95f23bb..c7fd44c 100644
--- a/src/corelibs/U2View/src/ov_sequence/Das/DasWidgetFactory.h
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
@@ -19,31 +19,37 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_DAS_WIDGET_FACTORY_H_
-#define _U2_DAS_WIDGET_FACTORY_H_
+#ifndef GUITESTRUNNER_H
+#define GUITESTRUNNER_H
 
-#include <U2Gui/OPWidgetFactory.h>
+#include <QWidget>
+#include "ui_GUITestRunner.h"
+#include <U2Test/GUITestBase.h>
 
 namespace U2 {
 
-class U2VIEW_EXPORT DasWidgetFactory : public OPWidgetFactory
+class GUITestRunner : public QWidget, public Ui_GUITestRunner
 {
     Q_OBJECT
+
 public:
-    DasWidgetFactory();
+    explicit GUITestRunner(GUITestBase* guiTestBase, QWidget *parent = 0);
+    ~GUITestRunner();
 
-    virtual QWidget * createWidget(GObjectView* objView);
-    virtual OPGroupParameters getOPGroupParameters();
-    virtual bool passFiltration (OPFactoryFilterVisitorInterface* filter);
-    static const QString & getGroupId();
+private slots:
+    void sl_runSelected();
+    void sl_runAllGUITests();
+    void sl_testFinished();
+    void sl_filterChanged(const QString &nameFilter);
+    void sl_filterCleared();
 
 private:
-    static const QString GROUP_ID;
-    static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
-    static const QString GROUP_DOC_PAGE;
+    void revisible(const QString &nameFilter);
+
+    GUITestBase*    guiTestBase;
+    QAction*        delTextAction;
 };
 
-} // namespace
+}
 
-#endif
+#endif // GUITESTRUNNER_H
diff --git a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.ui b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.ui
new file mode 100644
index 0000000..d7b39b4
--- /dev/null
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.ui
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>GUITestRunner</class>
+ <widget class="QWidget" name="GUITestRunner">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>GUI Test Runner</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="startSelectedButton">
+       <property name="text">
+        <string>Start selected</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="startAllButton">
+       <property name="text">
+        <string>Start all</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="hideButton">
+       <property name="text">
+        <string>Hide</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Tests:</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="QLineEdit" name="filter">
+       <property name="placeholderText">
+        <string>Type to filter by name...</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTreeWidget" name="tree">
+     <property name="selectionMode">
+      <enum>QAbstractItemView::SingleSelection</enum>
+     </property>
+     <column>
+      <property name="text">
+       <string>Name</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Status</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>hideButton</sender>
+   <signal>clicked()</signal>
+   <receiver>GUITestRunner</receiver>
+   <slot>hide()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>662</x>
+     <y>17</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>399</x>
+     <y>299</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
index c65641a..ef87294 100644
--- a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
+++ b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
@@ -19,52 +19,49 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <QtGui/QTreeView>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QTreeView>
-#endif
-
-#include "GUIInitialChecks.h"
-#include "api/GTClipboard.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTGlobals.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "GTUtilsTaskTreeView.h"
-#include "GTUtilsProject.h"
-#include "GTUtilsDialog.h"
-#include "GTUtilsProjectTreeView.h"
-#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/EscapeClicker.h"
+#include <QApplication>
+#include <QDir>
+#include <QMainWindow>
+#include <QTreeView>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/UserApplicationsSettings.h>
+
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QMdiSubWindow>
+#include "utils/GTUtilsDialog.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsProject.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GUIInitialChecks.h"
+#include "system/GTClipboard.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTWidget.h>
+#include "runnables/qt/EscapeClicker.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 
 namespace U2 {
 
 namespace GUITest_initial_checks {
+using namespace HI;
 
-GUI_TEST_CLASS_DEFINITION(test_0000) {
+GUI_TEST_CLASS_DEFINITION(pre_action_0000) {
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 #ifdef Q_OS_WIN
     QProcess::execute("closeAllErrors.exe"); //this exe file, compiled Autoit script
 #endif
-    GTUtilsDialog::cleanup(os);
+    GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
 #ifndef Q_OS_WIN
     GTMouseDriver::release(os, Qt::RightButton);
     GTMouseDriver::release(os);
@@ -75,47 +72,43 @@ GUI_TEST_CLASS_DEFINITION(test_0000) {
 #ifdef Q_OS_MAC
     GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["cmd"]);
 #endif
-
     GTUtilsDialog::startHangChecking(os);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0001) {
+GUI_TEST_CLASS_DEFINITION(pre_action_0001) {
     CHECK_SET_ERR(AppContext::getProjectView() == NULL && AppContext::getProject() == NULL, "There is a project");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0002) {
+GUI_TEST_CLASS_DEFINITION(pre_action_0002) {
     Q_UNUSED(os);
     QMainWindow *mainWindow = AppContext::getMainWindow()->getQMainWindow();
     CHECK_SET_ERR(mainWindow != NULL, "main window is NULL");
-    mainWindow->showMaximized();
 
-#ifdef Q_OS_MAC
-    mainWindow->setWindowFlags(mainWindow->windowFlags() | Qt::CustomizeWindowHint);
-    mainWindow->show();
-    mainWindow->setFocus();
-#endif
+    if (!mainWindow->isMaximized()) {
+        GTWidget::showMaximized(os, mainWindow);
+        GTGlobals::sleep(1000);
+    }
 
-    GTGlobals::sleep(1000);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003) {
+GUI_TEST_CLASS_DEFINITION(pre_action_0003) {
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj1.uprj");
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2.uprj");
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj3.uprj");
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj5.uprj");
-    GTFile::backup(os, testDir + "_common_data/scenarios/assembly/example-alignment.ugenedb");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0004){
+GUI_TEST_CLASS_DEFINITION(pre_action_0004) {
     Q_UNUSED(os);
     QDir dir(QDir().absoluteFilePath(screenshotDir));
-    if(!dir.exists(dir.absoluteFilePath(screenshotDir))){
+    if (!dir.exists(dir.absoluteFilePath(screenshotDir))) {
         dir.mkpath(dir.path());
     }
 }
-GUI_TEST_CLASS_DEFINITION(test_0005){
+
+GUI_TEST_CLASS_DEFINITION(pre_action_0005) {
     PermissionsSetter::setReadWrite(os, sandBoxDir);
     GTGlobals::sleep();
     QDir sandBox = QDir(sandBoxDir);
@@ -124,74 +117,66 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     }
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0006){
+GUI_TEST_CLASS_DEFINITION(pre_action_0006) {
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     CHECK_SET_ERR(mw != NULL, "main window is NULL");
 #ifdef Q_OS_MAC
-    GTWidget::click(os, mw, Qt::LeftButton, QPoint(200,200));
-#endif
-
-
-
-    /*
-    TEMPORARY TO DETECT MAC ERROR
-*/
-#ifdef Q_OS_MAC
-//    GTUtilsDialog::waitForDialog(os, new EscapeClicker(os, "QFileDialog"));
-//    QMenu* menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-//    GTMenu::clickMenuItemByName(os, menu, QStringList() << ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTWidget::click(os, mw, Qt::LeftButton, QPoint(200, 200));
 #endif
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0007){
-    ///temporary ignored
-    //GTFile::removeDir(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath());
+GUI_TEST_CLASS_DEFINITION(post_check_0000) {
+    GTUtilsDialog::cleanup(os);
 }
 
-GUI_TEST_CLASS_DEFINITION(post_test_0000){
-    GTUtilsDialog::cleanup(os);
+GUI_TEST_CLASS_DEFINITION(post_check_0001) {
+    QWidget *modalWidget = QApplication::activeModalWidget();
+    if (NULL != modalWidget) {
+        CHECK_SET_ERR(NULL == modalWidget, QString("There is a modal widget after test finish: %1").arg(modalWidget->windowTitle()));
+    }
+
+    QWidget *popupWidget = QApplication::activePopupWidget();
+    CHECK_SET_ERR(NULL == popupWidget, "There is a popup widget after test finish");
 }
 
-GUI_TEST_CLASS_DEFINITION(post_test_0001) {
-    QWidget* w = QApplication::activeModalWidget();
-    while(w!=NULL){
-        w = QApplication::activeModalWidget();
-        w->close();
+GUI_TEST_CLASS_DEFINITION(post_action_0000) {
+    const Qt::KeyboardModifiers modifiers = QGuiApplication::queryKeyboardModifiers();
+    if (modifiers & Qt::ShiftModifier) {
+        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
     }
 
-    GTClipboard::text(os);
-//#ifdef Q_OS_WIN
-    TaskScheduler* scheduller = AppContext::getTaskScheduler();
-    QString s;
-    foreach (Task* t, scheduller->getTopLevelTasks()) {
-        s.append(t->getTaskName() + '\n');
+    if (modifiers & Qt::ControlModifier) {
+        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
     }
-    if(!s.isEmpty()){
-        QFile f(testDir + QDateTime::currentDateTime().toString() + ".txt");
-        f.open(QFile::ReadWrite);
-        f.write(s.toUtf8());
-        f.close();
+
+    if (modifiers & Qt::AltModifier) {
+        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["alt"]);
     }
+}
 
-//#endif
+GUI_TEST_CLASS_DEFINITION(post_action_0001) {
+    QWidget* popupWidget = QApplication::activePopupWidget();
+    while (popupWidget != NULL) {
+        GTWidget::close(os, popupWidget);
+        popupWidget = QApplication::activePopupWidget();
+    }
 
-}
+    QWidget* modalWidget = QApplication::activeModalWidget();
+    while (modalWidget != NULL) {
+        GTWidget::close(os, modalWidget);
+        modalWidget = QApplication::activeModalWidget();
+    }
 
-GUI_TEST_CLASS_DEFINITION(post_test_0002) {
+    GTClipboard::clear(os);
+}
 
+GUI_TEST_CLASS_DEFINITION(post_action_0002) {
     GTGlobals::sleep(1000);
     // 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(os, 'a', GTKeyboardDriver::key["ctrl"]);
         GTGlobals::sleep(100);
 
         GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
@@ -199,10 +184,9 @@ GUI_TEST_CLASS_DEFINITION(post_test_0002) {
         GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
         GTGlobals::sleep(500);
 #ifdef Q_OS_MAC
-        QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-        GTMenu::clickMenuItem(os, menu, ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
-        GTKeyboardDriver::keyClick(os, 'q', key);
+        GTKeyboardDriver::keyClick(os, 'q', GTKeyboardDriver::key["ctrl"]);
         GTGlobals::sleep(100);
 #endif
         GTGlobals::sleep(500);
@@ -210,26 +194,21 @@ GUI_TEST_CLASS_DEFINITION(post_test_0002) {
         GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
         GTGlobals::sleep();
     }
-    //close WD
-    QMdiSubWindow* WD = GTWidget::findExactWidget<QMdiSubWindow*>(os, "Workflow Designer_SubWindow", NULL, GTGlobals::FindOptions(false));
-    if(WD != NULL){
-        GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os,QMessageBox::Discard));
-        WD->close();
-        GTGlobals::sleep(500);
-    }
+
+    GTUtilsMdi::closeAllWindows(os);
+
     //cancel all tasks
     AppContext::getTaskScheduler()->cancelAllTasks();
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os, 60000);
 }
 
-GUI_TEST_CLASS_DEFINITION(post_test_0003) {
+GUI_TEST_CLASS_DEFINITION(post_action_0003) {
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj1.uprj");
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2.uprj");
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj3.uprj");
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj5.uprj");
-    GTFile::restore(os, testDir + "_common_data/scenarios/assembly/example-alignment.ugenedb");
 
     PermissionsSetter::setReadWrite(os, sandBoxDir);
     GTGlobals::sleep();
@@ -239,46 +218,6 @@ GUI_TEST_CLASS_DEFINITION(post_test_0003) {
     }
 }
 
-GUI_TEST_CLASS_DEFINITION(post_test_0004) {     //if this post test detect any problems, use test_0004 and post_test_0002 for backup and restore corrupted files
-    Q_UNUSED(os);
-#ifdef Q_OS_WIN
-    QProcess *svnProcess = new QProcess();
-
-    QStringList dirs;
-    dirs.append(testDir + "_common_data/");
-    dirs.append(dataDir + "samples/");
-    bool SVNCorrupted = false;
-    foreach(QString workingDir, dirs){
-        QDir d;
-        svnProcess->setWorkingDirectory(d.absoluteFilePath(workingDir));
-        svnProcess->start("svn", QStringList()<<"st");
-        if ( !svnProcess->waitForStarted( 2000 ) ) {
-            coreLog.info( "SVN process hasn't start!" );
-            continue;
-        }
-        while (!svnProcess->waitForFinished(30000));
-        //CHECK_SET_ERR(svnProcess->exitCode() != EXIT_FAILURE, "SVN process finished wrong");
-        QStringList output = QString(svnProcess->readAllStandardOutput()).split('\n');
-        bool needUpdate = false;
-        foreach(QString str, output){
-            QStringList byWords = str.split(QRegExp("\\s+"));
-            if (byWords[0][0] == '?' || byWords[0][0] == 'M'){
-                if(byWords[0][0] == 'M'){
-                    SVNCorrupted = true;
-                    needUpdate = true;
-                }
-                QFile::remove(workingDir + QDir::separator() + byWords[1]);
-            }
-        }
-        if (needUpdate){
-            svnProcess->start("svn", QStringList()<<"up");
-            while(!svnProcess->waitForFinished(30000));
-        }
-    }
-    CHECK_SET_ERR(!SVNCorrupted, "SVN corrupted by this test");
-#endif
-}
-
 } // GUITest_initial_checks namespace
 
 } // U2 namespace
diff --git a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h
index 4cd7c17..93f84ac 100644
--- a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h
+++ b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h
@@ -27,25 +27,29 @@
 namespace U2 {
 
 namespace GUITest_initial_checks {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_initial_checks_"
-
-GUI_TEST_CLASS_DECLARATION(test_0000)
-GUI_TEST_CLASS_DECLARATION(test_0001)
-GUI_TEST_CLASS_DECLARATION(test_0002)
-GUI_TEST_CLASS_DECLARATION(test_0003)
-GUI_TEST_CLASS_DECLARATION(test_0004)
-GUI_TEST_CLASS_DECLARATION(test_0005)
-GUI_TEST_CLASS_DECLARATION(test_0006)
-GUI_TEST_CLASS_DECLARATION(test_0007)
-
-GUI_TEST_CLASS_DECLARATION(post_test_0000)
-GUI_TEST_CLASS_DECLARATION(post_test_0001)
-GUI_TEST_CLASS_DECLARATION(post_test_0002)
-GUI_TEST_CLASS_DECLARATION(post_test_0003)
-GUI_TEST_CLASS_DECLARATION(post_test_0004)
-
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_initial_checks"
+
+// 'Pre action' do some actions that are needed to prepare UGENE for testing
+GUI_TEST_CLASS_DECLARATION(pre_action_0000)
+GUI_TEST_CLASS_DECLARATION(pre_action_0001)
+GUI_TEST_CLASS_DECLARATION(pre_action_0002)
+GUI_TEST_CLASS_DECLARATION(pre_action_0003)
+GUI_TEST_CLASS_DECLARATION(pre_action_0004)
+GUI_TEST_CLASS_DECLARATION(pre_action_0005)
+GUI_TEST_CLASS_DECLARATION(pre_action_0006)
+
+// 'Post check' checks UGENE state after test finish and can set error
+GUI_TEST_CLASS_DECLARATION(post_check_0000)
+GUI_TEST_CLASS_DECLARATION(post_check_0001)
+
+// 'Post action' do some actions that are needed to close UGENE after test finish
+GUI_TEST_CLASS_DECLARATION(post_action_0000)
+GUI_TEST_CLASS_DECLARATION(post_action_0001)
+GUI_TEST_CLASS_DECLARATION(post_action_0002)
+GUI_TEST_CLASS_DECLARATION(post_action_0003)
+
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 05bd53d..2515f61 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
@@ -27,28 +27,29 @@
 
 #include "GTTestsAssemblyBrowser.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsDocument.h"
+#include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsNotifications.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "api/GTAction.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/GTAction.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/GTSpinBox.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h"
@@ -61,12 +62,14 @@
 namespace U2 {
 
 namespace GUITest_Assembly_browser {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 //It is possible to reach negative coord in assembly browser (UGENE-105)
 
 //1. Open _common_data/scenarios/assembly/example-alignment.ugenedb
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 //2. Zoom in until overview selection transforms to cross-hair
     for (int i = 0;i < 24;i++){
@@ -103,26 +106,19 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "replace" ));
     GTUtilsDialog::waitForDialog(os,new ImportBAMFileFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 //2. convert bam file to example-alignment.ugenedb
 //Expected state: conversion finished without error
 
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0004) {
-
-//1. open view for _common_data\scenarios\assembly\example-alignment.bam(.bam открывает окно экспорта)
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.ugenedb");
-//2. open file samples/FASTA/human_T1.fa
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
-    GTUtilsTaskTreeView::waitTaskFinished(os, 5000);
-}
-
 GUI_TEST_CLASS_DEFINITION(test_0010) {
 //    Test default values and bounds of all GUI-elements.
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the consensus area, select "Export coverage" menu item.
 //    Expected state: an "Export the Assembly Coverage" dialog appears.
@@ -178,6 +174,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the consensus area, select "Export coverage" menu item.
 //    Expected state: an "Export the Assembly Coverage" dialog appears.
@@ -259,6 +256,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the consensus area, select "Export coverage" menu item.
 //    Expected state: an "Export the Assembly Coverage" dialog appears.
@@ -302,6 +300,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the consensus area, select "Export coverage" menu item.
 //    Expected state: an "Export the Assembly Coverage" dialog appears.
@@ -357,6 +356,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the consensus area, select "Export coverage" menu item.
 //    Expected state: an "Export the Assembly Coverage" dialog appears.
@@ -449,6 +449,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTUtilsWorkflowDesigner::clickParameter(os, "Output file");
     URLWidget *urlWidget = qobject_cast<URLWidget *>(GTUtilsWorkflowDesigner::getParametersTable(os)->findChild<URLWidget *>());
     GTKeyboardDriver::keySequence(os, "aaa");
+    GTGlobals::sleep(1000);
     CHECK_SET_ERR(NULL != urlWidget, "Output file url widget was not found");
     QTreeWidget *completer = urlWidget->findChild<QTreeWidget *>();
     CHECK_SET_ERR(completer != NULL, "auto completer widget was not found");
@@ -461,6 +462,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
 
 //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<ExportCoverageDialogFiller::Action> actions;
 
 //    2. Call context menu on the consensus area, select {Export coverage} menu item.
@@ -490,9 +492,11 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
 
     //1. Open "samples/Assembly/chrM.fa".
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0017.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Click the "chrM" sequence object in Project View.
     GTUtilsProjectTreeView::click(os, "chrM", "chrM.fa");
@@ -521,14 +525,33 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
     GTWidget::click(os, GTWidget::findWidget(os, "Assembly reference sequence area"), Qt::RightButton);
 }
 
+namespace {
+    void prepareBigFasta(const QString &url, HI::GUITestOpStatus &os) {
+        QFile file(url);
+        bool opened = file.open(QIODevice::WriteOnly);
+        if (!opened) {
+            os.setError("Can't open a file: " + url);
+            return;
+        }
+        file.write(">assembly_test_0018\n");
+        for (int i=0; i<1000000; i++) {
+            file.write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+            file.write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
+        }
+    }
+}
+
 GUI_TEST_CLASS_DEFINITION(test_0018) {
     QFile::copy(testDir + "_common_data/ugenedb/chrM.sorted.bam.ugenedb", sandBoxDir + "assembly_test_0018.ugenedb");
+    prepareBigFasta(sandBoxDir + "assembly_test_0018.fa", os);
 
     //1. Open "samples/Assembly/chrM.fa".
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0018.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Click the "chrM" sequence object in Project View.
     GTUtilsProjectTreeView::click(os, "chrM", "chrM.fa");
@@ -541,7 +564,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
 
     //6. Click "Set reference sequence".
     //7. Choose the file "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq".
-    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index/chr6.fa"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir + "assembly_test_0018.fa"));
     GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
 
     //8. Right click on the reference area while the file is loading.
@@ -565,20 +588,22 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
 
     //1. Open "samples/Assembly/chrM.fa".
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0019.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //4. Click the "chrM" sequence object in Project View.
     GTUtilsProjectTreeView::click(os, "chrM", "chrM.fa");
 
     //5. Click the "Set reference sequence" actions menu item.
     //Expected: it becomes reference.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "setReferenceAction"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
 
     //6. Add the "human_T1" object to the selection.
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
@@ -588,8 +613,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
     //7. Click the "Set reference sequence" actions menu item.
     //Expected: message box about two sequences appears.
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "You have more than one sequence"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "setReferenceAction"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
 
     //8. Click the "chrM.fa" sequence object in Project View.
     GTUtilsProjectTreeView::click(os, "chrM.fa");
@@ -597,8 +621,8 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
     //9. Click the "Set reference sequence" actions menu item.
     //Expected: file dialog appears.
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Genbank/murine.gb"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "setReferenceAction"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0020) {
@@ -606,6 +630,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
 
     //1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0020.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click "Set reference sequence".
     //Expected: file dialog appears.
@@ -620,6 +645,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021) {
 
     //1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0021.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click "Set reference sequence".
     //Expected: file dialog appears.
@@ -637,6 +663,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022) {
 
     //1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
     GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0022.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click "Set reference sequence".
     //Expected: file dialog appears.
@@ -648,6 +675,80 @@ GUI_TEST_CLASS_DEFINITION(test_0022) {
     GTGlobals::sleep();
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0023) {
+    QFile::copy(testDir + "_common_data/ugenedb/chrM.sorted.bam.ugenedb", sandBoxDir + "assembly_test_0023.ugenedb");
+
+    //1. Open "samples/Assembly/chrM.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0023.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Click the "Set reference sequence" toolbar button.
+    //Expected: file dialog appears.
+    //4. Choose "samples/Assembly/chrM.fa".
+    GTLogTracer l;
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Assembly/chrM.fa"));
+    GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
+
+    //Expected: the sequence becomes reference.
+    GTUtilsLog::check(os, l);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0024) {
+    QFile::copy(testDir + "_common_data/ugenedb/chrM.sorted.bam.ugenedb", sandBoxDir + "assembly_test_0024.ugenedb");
+
+    //1. Open "samples/Assembly/chrM.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Unload the document.
+    GTUtilsDocument::unloadDocument(os, "chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0024.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //4. Click the "Set reference sequence" toolbar button.
+    //Expected: file dialog appears.
+    //5. Choose "samples/Assembly/chrM.fa".
+    GTLogTracer l;
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Assembly/chrM.fa"));
+    GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
+
+    //Expected: the document is loaded, the sequence becomes reference.
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0025) {
+    QFile::copy(testDir + "_common_data/ugenedb/chrM.sorted.bam.ugenedb", sandBoxDir + "assembly_test_0025.ugenedb");
+
+    //1. Open "samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Unload the document.
+    GTUtilsDocument::unloadDocument(os, "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, sandBoxDir + "assembly_test_0025.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //4. Click the "Set reference sequence" toolbar button.
+    //Expected: file dialog appears.
+    //5. Choose "samples/CLUSTALW/COI.aln".
+    //Expected: the document is loaded, error notification is shown.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/COI.aln"));
+    GTUtilsNotifications::waitForNotification(os, true, "does not contain sequences");
+    GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
+}
+
 } // 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 a918e22..2f9f5c5 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
@@ -28,12 +28,11 @@ k
 namespace U2 {
 
 namespace GUITest_Assembly_browser {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_Assembly_browser_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_Assembly_browser"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
-GUI_TEST_CLASS_DECLARATION(test_0004)
 GUI_TEST_CLASS_DECLARATION(test_0010)
 GUI_TEST_CLASS_DECLARATION(test_0011)
 GUI_TEST_CLASS_DECLARATION(test_0012)
@@ -47,8 +46,11 @@ GUI_TEST_CLASS_DECLARATION(test_0019)
 GUI_TEST_CLASS_DECLARATION(test_0020)
 GUI_TEST_CLASS_DECLARATION(test_0021)
 GUI_TEST_CLASS_DECLARATION(test_0022)
+GUI_TEST_CLASS_DECLARATION(test_0023)
+GUI_TEST_CLASS_DECLARATION(test_0024)
+GUI_TEST_CLASS_DECLARATION(test_0025)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
index d79a957..d905484 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-#include "api/GTMenu.h"
-#include "api/GTFile.h"
+#include "primitives/GTMenu.h"
+#include "system/GTFile.h"
 #include "GTUtilsTaskTreeView.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
@@ -31,6 +31,7 @@
 #include "GTTestsBowtie2.h"
 
 #include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 namespace GUITest_Bowtie2 {
@@ -50,8 +51,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
                                             testDir + "_common_data/scenarios/sandbox/",
                                             "human_T1_cutted"));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS),
-        QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
 
     // Expected state: there are six files as result:
     //human_T1_cutted.1.bt2, human_T1_cutted.2.bt2, human_T1_cutted.3.bt2, human_T1_cutted.4.bt2,
@@ -121,9 +121,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTUtilsDialog::waitForDialog(os, importBAMFileFiller);
     CHECK_OP(os, );
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    CHECK_OP(os, );
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP(os, );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -189,9 +187,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsDialog::waitForDialog(os, importBAMFileFiller);
     CHECK_OP(os, );
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    CHECK_OP(os, );
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP(os, );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -266,9 +262,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDialog::waitForDialog(os, importBAMFileFiller);
     CHECK_OP(os, );
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    CHECK_OP(os, );
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP(os, );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -283,7 +277,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     bowtie2Parameters.prebuiltIndex = true;
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &bowtie2Parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -294,7 +288,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
                                                  testDir + "_common_data/bowtie2/",
                                                  "reads_1.fq");
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
     GTGlobals::sleep();
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
index 9e60093..f74778e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
@@ -26,8 +26,8 @@
 
 namespace U2 {
 namespace GUITest_Bowtie2 {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_Bowtie2_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_Bowtie2"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -36,7 +36,7 @@ GUI_TEST_CLASS_DECLARATION(test_0004)
 GUI_TEST_CLASS_DECLARATION(test_0005)
 GUI_TEST_CLASS_DECLARATION(test_0006)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_Bowtie2
 } // U2
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
index 0868acb..e979fcf 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
@@ -21,12 +21,13 @@
 
 #include "GTTestsDnaAssembly.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTMenu.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "primitives/GTMenu.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 
 #include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 namespace GUITest_dna_assembly {
@@ -45,9 +46,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     CHECK_OP(os, );
 
-    QMenu *mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    CHECK_OP(os, );
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP(os, );
 
     GTGlobals::sleep(5000);
@@ -62,7 +61,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_test_0002.ugenedb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -77,7 +76,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_test_0003.ugenedb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -92,7 +91,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_test_0004.ugenedb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -107,7 +106,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_test_0005.ugenedb", "", "", false, 200000));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -122,7 +121,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_test_0006.ugenedb", "", "", false, 200000));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
index 135bd77..7930652 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
@@ -26,8 +26,8 @@
 
 namespace U2 {
 namespace GUITest_dna_assembly {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_dna_assembly_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_dna_assembly"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -36,7 +36,7 @@ GUI_TEST_CLASS_DECLARATION(test_0004)
 GUI_TEST_CLASS_DECLARATION(test_0005)
 GUI_TEST_CLASS_DECLARATION(test_0006)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_dna_assembly
 } // 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 9c4324c..08f1d8b 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
@@ -23,16 +23,16 @@
 
 #include <U2Gui/ToolsMenu.h>
 
-#include "api/GTComboBox.h"
-#include "api/GTMenu.h"
-#include "api/GTFile.h"
-#include "api/GTWidget.h"
+#include <primitives/GTComboBox.h>
+#include "primitives/GTMenu.h"
+#include "system/GTFile.h"
+#include <primitives/GTWidget.h>
 
 #include "GTUtilsLog.h"
 #include "GTUtilsTaskTreeView.h"
 
-#include "runnables/qt/DefaultDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 
@@ -50,7 +50,7 @@ public:
     QString message;
     QString reads;
     QMessageBox::StandardButton b;
-    void run(U2::U2OpStatus &os){
+    void run(HI::GUITestOpStatus &os){
         QWidget* dialog = QApplication::activeModalWidget();
         CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
         GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "methodNamesBox", dialog), aligner);
@@ -91,8 +91,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is built
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".1.ebwt"), "index1 not found");
@@ -109,8 +108,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l1, false);
@@ -132,8 +130,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l2, false);
@@ -149,8 +146,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l3, false);
@@ -167,8 +163,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("Bowtie", dataDir + "samples/CLUSTALW/COI.aln",
                                                                                       "These files have the incompatible format:",
                                                                                   testDir + "_common_data/bowtie2/reads_1.fq",  QMessageBox::No)));
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -187,8 +182,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Delete one of the indes files
     QFile f(sandBoxDir + refName + ".3.ebwt");
@@ -198,8 +192,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("Bowtie", sandBoxDir + refName + ".1.ebwt",
                                                                                       "You set the index as a reference and the index files are corrupted")));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -221,8 +214,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is built
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".1.bt2"), "index1 not created");
@@ -239,8 +231,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l1, false);
@@ -262,8 +253,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l2, false);
@@ -279,8 +269,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l3, false);
@@ -297,8 +286,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("Bowtie2", dataDir + "samples/CLUSTALW/COI.aln",
                                                                                       "These files have the incompatible format:",
                                                                                       testDir + "_common_data/bowtie2/reads_1.fq",  QMessageBox::No)));
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -315,8 +303,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Delete one of the indes files
     QFile f(sandBoxDir + refName + ".3.bt2");
@@ -326,8 +313,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("Bowtie2", sandBoxDir + refName + ".1.bt2",
                                                                                       "You set the index as a reference and the index files are corrupted")));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -346,8 +332,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is built
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".fa.amb"), "amb not found");
@@ -363,8 +348,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l1, false);
@@ -388,8 +372,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l2, false);
@@ -409,8 +392,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l3, false);
@@ -431,8 +413,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("BWA", dataDir + "samples/CLUSTALW/COI.aln",
                                                                                       "These files have the incompatible format:",
                                                                                       testDir + "_common_data/bowtie2/reads_1.fq",  QMessageBox::No)));
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -449,8 +430,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Delete one of the indes files
     QFile f(sandBoxDir + refName + ".fa.bwt");
@@ -460,8 +440,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new WrongRefSetter("BWA", sandBoxDir + refName + ".fa.ann",
                                                                                       "You set the index as a reference and the index files are corrupted")));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 }
 
@@ -479,8 +458,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
 
-    QMenu* mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is built
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".fa.amb"), "amb not found");
@@ -496,8 +474,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l1, false);
@@ -517,8 +494,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l2, false);
@@ -534,8 +510,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
 
-    mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: index is reused
     GTUtilsLog::checkContainsMessage(os, l3, false);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
index e077629..947a8a6 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
@@ -27,8 +27,8 @@
 namespace U2 {
 namespace GUITest_index_reuse {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_index_reuse_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_index_reuse"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -41,7 +41,7 @@ GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_dna_assembly_conversions
 } // U2
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
index cc8e6b6..a5559c7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
@@ -19,18 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTMenu.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "primitives/GTMenu.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 
+#include <U2Core/U2IdTypes.h>
 #include "GTTestsDnaAssemblyConversions.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTFile.h"
+#include "system/GTFile.h"
 
 #include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 namespace GUITest_dna_assembly_conversions {
@@ -52,10 +54,7 @@ GUI_TEST_CLASS_DEFINITION( test_0001 ) {
     GTUtilsDialog::waitForDialog( os, new ImportBAMFileFiller(os, sandBoxDir + "output.ugenedb") );
     CHECK_OP( os, );
 
-    QMenu *mainMenu = GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    CHECK_OP( os, );
-    GTMenu::clickMenuItemByName( os, mainMenu, QStringList( ) << ToolsMenu::NGS_MENU
-        << ToolsMenu::NGS_MAP );
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP( os, );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -80,10 +79,7 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
     CHECK_OP( os, );
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "GUITest_dna_assembly_conversions/test_0002.ugenedb"));
 
-    QMenu *mainMenu = GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    CHECK_OP( os, );
-    GTMenu::clickMenuItemByName( os, mainMenu, QStringList( ) << ToolsMenu::NGS_MENU
-        << ToolsMenu::NGS_MAP );
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP( os, );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -111,12 +107,11 @@ GUI_TEST_CLASS_DEFINITION( test_0003 ) {
     CHECK_OP( os, );
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     CHECK_OP( os, );
-    QMenu *mainMenu = GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    CHECK_OP( os, );
-    GTMenu::clickMenuItemByName( os, mainMenu, QStringList( ) << ToolsMenu::NGS_MENU
-        << ToolsMenu::NGS_MAP );
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP( os, );
     GTGlobals::sleep( 5000 );
+    GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Cancel);
+    GTGlobals::sleep();
 //     3. Click start:
 //     Expected: the error dialog appears. It tells that the short reads file has the unknown format.
 }
@@ -137,9 +132,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     CHECK_OP(os, );
 
-    QMenu *mainMenu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    CHECK_OP(os, );
-    GTMenu::clickMenuItemByName(os, mainMenu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     CHECK_OP(os, );
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os,sandBoxDir + "resule.ugenedb"));
 //UGENE can hang up here
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
index 91053f4..6b561dc 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
@@ -22,19 +22,20 @@
 #ifndef _U2_GUITEST_DNA_ASSEMBLY_CONVERSIONS_H_
 #define _U2_GUITEST_DNA_ASSEMBLY_CONVERSIONS_H_
 
+#include <U2Core/global.h>
 #include <U2Test/GUITestBase.h>
 
 namespace U2 {
 namespace GUITest_dna_assembly_conversions {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_dna_assembly_conversions_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_dna_assembly_conversions"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0004)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_dna_assembly_conversions
 } // U2
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
index 9fa1633..4132f05 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
@@ -19,17 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTTestsSAM.h"
-#include "api/GTMenu.h"
-#include "api/GTAction.h"
-#include "api/GTWidget.h"
-#include "api/GTGlobals.h"
+#include "primitives/GTMenu.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTWidget.h>
+#include "GTGlobals.h"
 #include "GTUtilsLog.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h"
-
+#include "GTUtilsTaskTreeView.h"
 
 
 
@@ -49,6 +49,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, "", dataDir + "samples/PDB", "1CF7.PDB"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(l.hasError() == true, "There is no error message in log");
 }
 
@@ -64,6 +65,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, "", testDir + "_common_data/bam/", "small.bam.sorted.bam.bai"));
     GTFileDialog::openFile(os, testDir + "_common_data/sam/", "out.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(l.hasError() == true, "There is no error message in log");
 }
 
@@ -81,6 +83,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, "", dataDir + "samples/Assembly", "chrM.fa"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(!l.hasError(), "Open 'samples/Assembly/chrM.sam' finished with error");
 }
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
index f4ab199..cd72095 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
@@ -27,14 +27,14 @@ k
 
 namespace U2 {
 namespace GUITest_SAM {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_SAM_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_SAM"
 
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0004)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_SAM
 } // U2
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
index 714a664..b6de255 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
@@ -21,23 +21,23 @@
 
 #include "GTTestsNiaidPipelines.h"
 
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTGlobals.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTAction.h"
-#include "api/GTFile.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include "GTGlobals.h"
+#include <primitives/GTTreeWidget.h>
+#include "primitives/GTAction.h"
+#include "system/GTFile.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsWizard.h"
 
 #include <U2Core/AppContext.h>
@@ -63,9 +63,7 @@ namespace U2 {
 namespace GUITest_common_scenarios_NIAID_pipelines {
 
 GUI_TEST_CLASS_DEFINITION(test_0001){
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     GTUtilsWorkflowDesigner::addSample(os,"call variants");
     //GTUtilsDialog::waitForDialog(os, new WizardFiller0001(os,"BED or position list file"));
@@ -83,7 +81,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 #define GT_METHOD_NAME "run"
 class WizardFiller0002:public WizardFiller{
 public:
-    WizardFiller0002(U2OpStatus &_os):WizardFiller(_os,"Tuxedo Wizard"){}
+    WizardFiller0002(HI::GUITestOpStatus &_os):WizardFiller(_os,"Tuxedo Wizard"){}
     void run(){
         QWidget* dialog = QApplication::activeModalWidget();
         GT_CHECK(dialog, "activeModalWidget is NULL");
@@ -106,7 +104,7 @@ public:
         QPoint j = cancel->mapToGlobal(cancel->rect().topLeft());
 
         CHECK_SET_ERR(qAbs(i.y()-j.y())<100, QString("%1   %2").arg(i.y()).arg(j.y()));
-        GTWidget::click(os,cancel);
+        GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
     }
 };
 #undef GT_METHOD_NAME
@@ -114,9 +112,8 @@ public:
 
 GUI_TEST_CLASS_DEFINITION(test_0002){
 //    1. Open WD
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
 //    2. Open tuxedo pipeline from samples
     GTUtilsDialog::waitForDialog(os, new WizardFiller0002(os));
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
index 80e9d55..d352017 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
@@ -28,14 +28,14 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_NIAID_pipelines {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_NIAID_pipelines_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_NIAID_pipelines"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 d365adc..5bdc468 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
@@ -22,15 +22,15 @@
 
 #include "GTTestsQuerryDesigner.h"
 
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTGlobals.h"
-#include "api/GTTreeWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include "GTGlobals.h"
+#include <primitives/GTTreeWidget.h>
+#include "primitives/PopupChooser.h"
 #include "GTUtilsQueryDesigner.h"
 
 #include <U2Gui/ToolsMenu.h>
@@ -42,13 +42,13 @@ namespace U2 {
 
 
 namespace GUITest_common_scenarios_querry_designer {
+using namespace HI;
 
-void test1(U2OpStatus &os, QString s="") {
+void test1(HI::GUITestOpStatus &os, QString s="") {
 //Bug: QD: Crash while resizing and deleting elements (0002402)
 //1. Open Query Designer
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::QUERY_DESIGNER);
-    GTGlobals::sleep(500);
+    GTUtilsQueryDesigner::openQueryDesigner(os);
+
     QString array[] = {"CDD", "Base Content","HMM2","HMM3","ORF"};
     QPoint p;
 //2. Add any algorithm to the scheme
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
index d056ad1..2cf912a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
@@ -28,15 +28,15 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_querry_designer {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_querry_designer_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_querry_designer"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
 GUI_TEST_CLASS_DECLARATION(test_0001_2)
 
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 2109f94..6e913f9 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
@@ -22,31 +22,33 @@
 #include <QTreeWidget>
 
 #include "GTTestsAnnotations.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "GTUtilsApp.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h"
 #include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
+#include "GTUtilsTaskTreeView.h"
 
 #include <U2View/ADVConstants.h>
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 // Creating annotations by different ways
@@ -55,6 +57,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -66,8 +69,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -94,6 +96,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -105,8 +108,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -133,6 +135,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -144,8 +147,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -172,6 +174,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -191,8 +194,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //
 // 4. Click Create button
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "DDD", "D", "join(10..16,18..20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // Expected state: annotation with 2 segments has been created
@@ -207,6 +209,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -226,8 +229,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 //
 // 4. Click Create button
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "DDD", "D", "join(10..16,18..20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // Expected state: annotation with 2 segments has been created
@@ -242,6 +244,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -261,8 +264,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 //
 // 4. Click Create button
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "DDD", "D", "join(10..16,18..20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // Expected state: annotation with 2 segments has been created
@@ -277,6 +279,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -288,8 +291,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -316,6 +318,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -328,14 +331,12 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 // 3. Create 2 annotations:
 //     1) a1 in group a1
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a1_group", "a1", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 //     2) a1 in group a2
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a2_group", "a1", "18..20"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Toggle highlight for a1.
@@ -353,6 +354,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -365,14 +367,12 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
 // 3. Create 2 annotations:
 //     1) a1 in group a1
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a1_group", "a1", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 //     2) a1 in group a2
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a2_group", "a1", "18..20"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Toggle highlight for a1.
@@ -390,6 +390,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -402,14 +403,12 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
 // 3. Create 2 annotations:
 //     1) a1 in group a1
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a1_group", "a1", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 //     2) a1 in group a2
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a2_group", "a1", "18..20"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Toggle highlight for a1.
@@ -427,6 +426,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -443,8 +443,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -466,6 +465,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -485,8 +485,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //
 // 4. Click Create button
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "DDD", "D", "join(10..16,18..20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // Expected state: annotation with 2 segments has been created
@@ -501,6 +500,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -513,14 +513,12 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 // 3. Create 2 annotations:
 //     1) a1 in group a1
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a1_group", "a1", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 //     2) a1 in group a2
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "a2_group", "a1", "18..20"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Toggle highlight for a1.
@@ -538,6 +536,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -557,8 +556,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 //
 // 4. Click Create button
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "DDD", "D", "join(10..16,18..20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // Expected state: annotation with 2 segments has been created
@@ -573,6 +571,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -589,8 +588,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
@@ -620,6 +618,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
     GTUtilsDialog::waitForDialog( os, new SequenceReadingModeSelectorDialogFiller( os,
         SequenceReadingModeSelectorDialogFiller::Separate ) );
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141619"), "No GXL_141619 object!");
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141618"), "No GXL_141618 object!");
 
@@ -651,6 +650,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0010_1.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141619 features"), "No GXL_141619 features object!");
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141618 features"), "No GXL_141618 features object!");
 }
@@ -670,6 +670,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
     GTUtilsDialog::waitForDialog( os, new SequenceReadingModeSelectorDialogFiller( os,
         SequenceReadingModeSelectorDialogFiller::Separate ) );
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141619"), "No GXL_141619 object!");
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141618"), "No GXL_141618 object!");
 
@@ -701,6 +702,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0010_2.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141619 features"), "No GXL_141619 features object!");
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141618 features"), "No GXL_141618 features object!");
 }
@@ -720,6 +722,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_3) {
     GTUtilsDialog::waitForDialog( os, new SequenceReadingModeSelectorDialogFiller( os,
         SequenceReadingModeSelectorDialogFiller::Separate ) );
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141619"), "No GXL_141619 object!");
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "GXL_141618"), "No GXL_141618 object!");
 
@@ -761,6 +764,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_3) {
 
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GTF"));
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0010_3.gtf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141619 features"), "No GXL_141619 features object!");
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "GXL_141618 features"), "No GXL_141618 features object!");
 }
@@ -776,6 +780,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "exon", "annotation", "200..300",
                                                                       sandBoxDir + "ann_test_0011_1.gb"));
@@ -806,6 +811,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "ann", "200..300",
                                                                       sandBoxDir + "ann_test_0011_1.gb"));
@@ -837,6 +843,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "ann", "200..300",
                                                                       sandBoxDir + "ann_test_0011_1.gb"));
@@ -872,9 +879,11 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     //    Expected state: annotation table object name contain sequence name
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
 
     GTFileDialog::openFile(os, testDir + "_common_data/gff/", "scaffold_90.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features");
 
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "scaffold_90 features");
@@ -900,6 +909,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0012_1.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
     CHECK_SET_ERR(!GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features"), "Object shound not be in the project");
 }
@@ -919,9 +929,11 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     //    Expected state: annotation table object name contain sequence name
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
 
     GTFileDialog::openFile(os, testDir + "_common_data/gff/", "scaffold_90.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features");
 
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "scaffold_90 features");
@@ -947,6 +959,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0012_2.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
     CHECK_SET_ERR(!GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features"), "Object shound not be in the project");
 
@@ -967,9 +980,11 @@ GUI_TEST_CLASS_DEFINITION(test_0012_3) {
     //    Expected state: annotation table object name contain sequence name
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
 
     GTFileDialog::openFile(os, testDir + "_common_data/gff/", "scaffold_90.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features");
 
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "scaffold_90 features");
@@ -1003,6 +1018,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_3) {
 
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GTF"));
     GTFileDialog::openFile(os, sandBoxDir, "ann_export_test_0012_3.gtf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "NC_004718 features"), "Object not found");
     CHECK_SET_ERR(!GTUtilsProjectTreeView::checkItem(os, "scaffold_90 features"), "Object shound not be in the project");
 }
@@ -1010,6 +1026,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_3) {
 GUI_TEST_CLASS_DEFINITION(test_0013) {
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -1021,8 +1038,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
     // 3. Create annotation using menu {Actions->Add->New Annotation}, with description field filled
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)", "", "description"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 
     //4. Check what created annotation has corresponding qualifier 'note'
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
index 5a3132a..f7d1ec2 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_annotations_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_annotations"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -61,7 +61,7 @@ GUI_TEST_CLASS_DECLARATION(test_0012_2)
 GUI_TEST_CLASS_DECLARATION(test_0012_3)
 GUI_TEST_CLASS_DECLARATION(test_0013)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 c20f09c..6708938 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
@@ -26,27 +26,27 @@
 
 #include "GTTestsCreateAnnotationWidget.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsOptionPanelSequenceView.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTCheckBox.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTRadioButton.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTextEdit.h"
-#include "api/GTToolbar.h"
-#include "api/GTWidget.h"
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTextEdit.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTWidget.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
@@ -55,56 +55,60 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_create_annotation_widget {
+using namespace HI;
 
 namespace {
 
-void openFileAndCallCreateAnnotationDialog(U2OpStatus &os, const QString &filePath) {
+void openFileAndCallCreateAnnotationDialog(HI::GUITestOpStatus &os, const QString &filePath) {
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "New annotation");
 }
 
-void openFileAndCallSmithWatermanDialog(U2OpStatus &os, const QString &filePath) {
+void openFileAndCallSmithWatermanDialog(HI::GUITestOpStatus &os, const QString &filePath) {
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Find pattern [Smith-Waterman]");
 }
 
-void setSmithWatermanPatternAndOpenLastTab(U2OpStatus &os, QWidget *dialog, const QString &pattern = "AGGAAAAAATGCTAAGGGCAGC") {
+void setSmithWatermanPatternAndOpenLastTab(HI::GUITestOpStatus &os, QWidget *dialog, const QString &pattern = "AGGAAAAAATGCTAAGGGCAGC") {
     GTTextEdit::setText(os, GTWidget::findExactWidget<QTextEdit *>(os, "teditPattern", dialog), pattern);
     GTTabWidget::setCurrentIndex(os, GTWidget::findExactWidget<QTabWidget *>(os, "tabWidget", dialog), 1);
 }
 
-void openFileOpenSearchTabAndSetPattern(U2OpStatus &os, const QString &filePath, const QString &pattern = "GCCCATCAGACTAACAG") {
+void openFileOpenSearchTabAndSetPattern(HI::GUITestOpStatus &os, const QString &filePath, const QString &pattern = "GCCCATCAGACTAACAG") {
     GTFileDialog::openFile(os, filePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTTextEdit::setText(os, GTWidget::findExactWidget<QTextEdit *>(os, "textPattern"), pattern);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
-QString getTypeFromFullWidget(U2OpStatus &os, QWidget *dialog) {
+QString getTypeFromFullWidget(HI::GUITestOpStatus &os, QWidget *dialog) {
     QListWidget *lwAnnotationType = GTWidget::findExactWidget<QListWidget *>(os, "lwAnnotationType", dialog);
     CHECK_SET_ERR_RESULT(NULL != lwAnnotationType, "lwAnnotationType is NULL", "");
     return lwAnnotationType->currentItem()->text();
 }
 
-void setTypeInFullWidget(U2OpStatus &os, const QString &type, QWidget *dialog) {
+void setTypeInFullWidget(HI::GUITestOpStatus &os, const QString &type, QWidget *dialog) {
     GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "lwAnnotationType", dialog), type);
 }
 
-bool checkTypePresenceInFullWidget(U2OpStatus &os, const QString &type, QWidget *dialog) {
+bool checkTypePresenceInFullWidget(HI::GUITestOpStatus &os, const QString &type, QWidget *dialog) {
     return GTListWidget::getItems(os, GTWidget::findExactWidget<QListWidget *>(os, "lwAnnotationType", dialog)).contains(type);
 }
 
-QString getTypeFromNormalWidget(U2OpStatus &os, QWidget *dialog) {
+QString getTypeFromNormalWidget(HI::GUITestOpStatus &os, QWidget *dialog) {
     QComboBox *cbAnnotationType = GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType", dialog);
     CHECK_SET_ERR_RESULT(NULL != cbAnnotationType, "cbAnnotationType is NULL", "");
     return cbAnnotationType->currentText();
 }
 
-void setTypeInNormalWidget(U2OpStatus &os, const QString &type, QWidget *dialog) {
+void setTypeInNormalWidget(HI::GUITestOpStatus &os, const QString &type, QWidget *dialog) {
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType", dialog), type, true, GTGlobals::UseMouse);
 }
 
-bool checkTypePresenceInNormalWidget(U2OpStatus &os, const QString &type, QWidget *dialog) {
+bool checkTypePresenceInNormalWidget(HI::GUITestOpStatus &os, const QString &type, QWidget *dialog) {
     QComboBox *cbAnnotationType = GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType", dialog);
     CHECK_SET_ERR_RESULT(NULL != cbAnnotationType, "cbAnnotationType is NULL", "");
     for (int i = 0; i < cbAnnotationType->count(); i++) {
@@ -115,19 +119,19 @@ bool checkTypePresenceInNormalWidget(U2OpStatus &os, const QString &type, QWidge
     return false;
 }
 
-QString getTypeFromOptionsPanelWidget(U2OpStatus &os) {
+QString getTypeFromOptionsPanelWidget(HI::GUITestOpStatus &os) {
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
     QComboBox *cbAnnotationType = GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType");
     CHECK_SET_ERR_RESULT(NULL != cbAnnotationType, "cbAnnotationType is NULL", "");
     return cbAnnotationType->currentText();
 }
 
-void setTypeInOptionsPanelWidget(U2OpStatus &os, const QString &type) {
+void setTypeInOptionsPanelWidget(HI::GUITestOpStatus &os, const QString &type) {
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType"), type, true, GTGlobals::UseMouse);
 }
 
-bool checkTypePresenceInOptionsPanelWidget(U2OpStatus &os, const QString &type) {
+bool checkTypePresenceInOptionsPanelWidget(HI::GUITestOpStatus &os, const QString &type) {
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
     QComboBox *cbAnnotationType = GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType");
     CHECK_SET_ERR_RESULT(NULL != cbAnnotationType, "cbAnnotationType is NULL", "");
@@ -139,42 +143,42 @@ bool checkTypePresenceInOptionsPanelWidget(U2OpStatus &os, const QString &type)
     return false;
 }
 
-void setGroupName(U2OpStatus &os, const QString &name, QWidget *dialog = NULL) {
+void setGroupName(HI::GUITestOpStatus &os, const QString &name, QWidget *dialog = NULL) {
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leGroupName", dialog), name);
 }
 
-void checkGroupName(U2OpStatus &os, const QString &name, QWidget *dialog = NULL) {
+void checkGroupName(HI::GUITestOpStatus &os, const QString &name, QWidget *dialog = NULL) {
     GTLineEdit::checkText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leGroupName", dialog), name);
 }
 
-void clickSelectGroupButton(U2OpStatus &os, QWidget *dialog = NULL) {
+void clickSelectGroupButton(HI::GUITestOpStatus &os, QWidget *dialog = NULL) {
     GTWidget::click(os, GTWidget::findWidget(os, "tbSelectGroupName", dialog));
 }
 
-void setAnnotationName(U2OpStatus &os, const QString &name, QWidget *dialog = NULL) {
+void setAnnotationName(HI::GUITestOpStatus &os, const QString &name, QWidget *dialog = NULL) {
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leAnnotationName", dialog), name);
 }
 
-void setSimpleLocation(U2OpStatus &os, int startPos, int endPos, bool complement, QWidget *dialog) {
+void setSimpleLocation(HI::GUITestOpStatus &os, int startPos, int endPos, bool complement, QWidget *dialog) {
     GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "rbSimpleFormat", dialog));
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leRegionStart", dialog), QString::number(startPos));
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leRegionEnd", dialog), QString::number(endPos));
     GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "chbComplement", dialog), complement);
 }
 
-void setGenbankLocation(U2OpStatus &os, const QString &locationString, QWidget *dialog) {
+void setGenbankLocation(HI::GUITestOpStatus &os, const QString &locationString, QWidget *dialog) {
     GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "rbGenbankFormat", dialog));
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leLocation", dialog), locationString);
 }
 
-void setExistingTable(U2OpStatus &os, QWidget *dialog = NULL, const QString &tableName = "") {
+void setExistingTable(HI::GUITestOpStatus &os, QWidget *dialog = NULL, const QString &tableName = "") {
     GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable", dialog));
     if (!tableName.isEmpty()) {
         GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "cbExistingTable", dialog), tableName);
     }
 }
 
-void setNewTable(U2OpStatus &os, QWidget *dialog = NULL, const QString &tablePath = "") {
+void setNewTable(HI::GUITestOpStatus &os, QWidget *dialog = NULL, const QString &tablePath = "") {
     GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "rbCreateNewTable", dialog));
     if (!tablePath.isEmpty()) {
         GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "leNewTablePath", dialog), tablePath);
@@ -190,7 +194,7 @@ public:
 
     }
 
-    void run(U2OpStatus &os) {
+    void run(HI::GUITestOpStatus &os) {
         GTGlobals::sleep(1000);
         GTMouseDriver::release(os);
         QMenu* activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget());
@@ -226,7 +230,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -274,7 +278,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -361,7 +365,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -409,7 +413,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -496,7 +500,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     class CreateAnnotationDialogScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -520,7 +524,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     class SmithWatermanDialogScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -572,7 +576,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -616,7 +620,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -694,7 +698,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -729,7 +733,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -790,7 +794,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -835,7 +839,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -916,7 +920,7 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -955,7 +959,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1023,7 +1027,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1064,7 +1068,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1137,7 +1141,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1174,7 +1178,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1212,7 +1216,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 
     class Scenario3 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1250,7 +1254,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 
     class Scenario4 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1292,7 +1296,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1329,7 +1333,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1368,7 +1372,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
 
     class Scenario3 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1407,7 +1411,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
 
     class Scenario4 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1558,7 +1562,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1585,7 +1589,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1612,7 +1616,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 
     class Scenario3 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1639,7 +1643,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 
     class Scenario4 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1669,7 +1673,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1696,7 +1700,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1723,7 +1727,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 
     class Scenario3 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1750,7 +1754,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 
     class Scenario4 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1780,7 +1784,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1814,7 +1818,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028) {
 //    4. Call "Create new annotation" dialog.
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1851,7 +1855,7 @@ GUI_TEST_CLASS_DEFINITION(test_0029) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1887,7 +1891,7 @@ GUI_TEST_CLASS_DEFINITION(test_0029) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1970,6 +1974,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031) {
 
 //    1. Open "_common_data/genbank/2nanot_1seq.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/2annot_1seq.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Drag'n'drop "NC_001363 annotations 2" object to the sequence view, confirm the relation creation.
     GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(os, "NC_001363 annotations 2");
@@ -1978,7 +1983,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1987,7 +1992,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031) {
 
             class ProjectTreeItemsChecker : public CustomScenario {
             public:
-                void run(U2OpStatus &os) {
+                void run(HI::GUITestOpStatus &os) {
                     QWidget *dialog = QApplication::activeModalWidget();
                     CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2079,6 +2084,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
 
 //    1. Open "_common_data/genbank/2anot_1seq.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/2annot_1seq.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Drag'n'drop "NC_001363 annotations 2" object to the sequence view, confirm the relation creation.
     GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(os, "NC_001363 annotations 2");
@@ -2088,7 +2094,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2099,7 +2105,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
 
             class ProjectTreeItemsChecker : public CustomScenario {
             public:
-                void run(U2OpStatus &os) {
+                void run(HI::GUITestOpStatus &os) {
                     QWidget *dialog = QApplication::activeModalWidget();
                     CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2190,6 +2196,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 //    1. Open "_common_data/genbank/2anot_1seq.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/2annot_1seq.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Drag'n'drop "NC_001363 annotations 2" object to the sequence view, confirm the relation creation.
     GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(os, "NC_001363 annotations 2");
@@ -2205,7 +2212,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
     class ProjectTreeItemsChecker : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2298,7 +2305,7 @@ GUI_TEST_CLASS_DEFINITION(test_0034) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2333,7 +2340,7 @@ GUI_TEST_CLASS_DEFINITION(test_0034) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2369,7 +2376,7 @@ GUI_TEST_CLASS_DEFINITION(test_0035) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2404,7 +2411,7 @@ GUI_TEST_CLASS_DEFINITION(test_0035) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2484,12 +2491,13 @@ GUI_TEST_CLASS_DEFINITION(test_0037) {
 
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call "ORF Marker" dialog. Open "Output" tab.
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2522,7 +2530,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2812,7 +2820,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2934,6 +2942,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario2));
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::markSequenceAsCircular(os, "murine.gb");
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "New annotation");
 }
@@ -2946,7 +2955,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3001,7 +3010,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3256,7 +3265,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3281,7 +3290,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041) {
 //    5. Create an annotation with some description.
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3312,7 +3321,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042) {
 
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3339,7 +3348,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042) {
 
     class Scenario2 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
index 5cf3d27..e2163ff 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_common_scenarios_create_annotation_widget {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_create_annotation_widget_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_create_annotation_widget"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -75,7 +75,7 @@ GUI_TEST_CLASS_DECLARATION(test_0041)
 GUI_TEST_CLASS_DECLARATION(test_0042)
 GUI_TEST_CLASS_DECLARATION(test_0043)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_common_scenarios_create_annotation_widget
 
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 ddf83e9..c5fd07d 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
@@ -20,28 +20,28 @@
  */
 
 #include "GTTestsAnnotationsEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "GTUtilsApp.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h"
-
+#include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_edit {
-
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     // Rename annotation
@@ -50,6 +50,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -92,6 +93,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -139,6 +141,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -186,6 +189,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -215,6 +219,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -257,6 +262,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -299,6 +305,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -331,6 +338,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -375,6 +383,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     //
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -417,6 +426,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     // Steps:
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -449,6 +459,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_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");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -481,6 +492,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_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");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -514,6 +526,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     // 1. Open data/samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press <Ctrl>+N
     //2.1 CHECK if dialog box titled with "Create annotation" appeared
@@ -549,6 +562,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
 
     // 1. Open data/samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press <Ctrl>+N
     //2.1 CHECK if dialog box titled with "Create annotation" appeared
@@ -607,6 +621,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
 
     // 1. Open data/samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press <Ctrl>+N
     //2.1 CHECK if dialog box titled with "Create annotation" appeared
@@ -659,6 +674,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     // Steps:
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -685,6 +701,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_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");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -720,6 +737,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     // Steps:
     // 1. Open data/samples/Genbank/mirine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select a group on annotations editor
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
index dbb3e7c..9b4f6eb 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_edit {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_annotations_edit_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_annotations_edit"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -55,7 +55,7 @@ GUI_TEST_CLASS_DECLARATION(test_0006_1)
 GUI_TEST_CLASS_DECLARATION(test_0006_2)
 
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 99ac1ed..c7ad3b0 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
@@ -27,29 +27,30 @@
 
 #include "GTTestsAnnotationsQualifiers.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_qualifiers {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -71,6 +72,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -102,6 +104,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -135,6 +138,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -157,6 +161,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -179,6 +184,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -211,6 +217,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 GUI_TEST_CLASS_DEFINITION(test_0003) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -232,6 +239,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -253,6 +261,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 GUI_TEST_CLASS_DEFINITION(test_0003_2) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -285,6 +294,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
 
 GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
@@ -303,6 +313,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
 GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
@@ -323,6 +334,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -350,6 +362,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
 GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -370,6 +383,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 GUI_TEST_CLASS_DEFINITION(test_0005_1) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -390,6 +404,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
 GUI_TEST_CLASS_DEFINITION(test_0005_2) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -421,6 +436,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
 GUI_TEST_CLASS_DEFINITION(test_0006) {
     // Open "_common_data/scenarios/annotations_qualifiers/test_6_murine.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_qualifiers/test_6_murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Click the "db_xref" qualifier value in any "CDS" annotation.
     GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
@@ -457,6 +473,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
 GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -487,6 +504,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
 GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -517,6 +535,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -557,6 +576,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFile::copy(os, testDir + "_common_data/genbank/1anot_1seq.gen", sandBoxDir + "1anot_1seq.gen");
     GTFileDialog::openFile(os, sandBoxDir + "1anot_1seq.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTMouseDriver::doubleClick(os);
@@ -601,6 +621,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFile::copy(os, testDir + "_common_data/genbank/1anot_1seq.gen", sandBoxDir + "1anot_1seq.gen");
     GTFileDialog::openFile(os, sandBoxDir + "1anot_1seq.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTMouseDriver::doubleClick(os);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
index f38f99c..7b0c563 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_qualifiers {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_annotations_qualifiers_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_annotations_qualifiers"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -52,7 +52,7 @@ GUI_TEST_CLASS_DECLARATION(test_0007_2)
 GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 ee38130..45dfd46 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
@@ -18,36 +18,39 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "GTTestsAnnotationsImport.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTLineEdit.h"
-#include "api/GTAction.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "GTUtilsApp.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTLineEdit.h>
+#include "primitives/GTAction.h"
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
 //#include <QtGui/QApplication>
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
+#include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_import {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -75,6 +78,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -102,6 +106,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -128,6 +133,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -155,6 +161,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -182,6 +189,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -209,6 +217,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -236,6 +245,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -263,6 +273,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -290,6 +301,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -317,6 +329,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -345,6 +358,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -373,6 +387,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -401,6 +416,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -429,6 +445,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -457,6 +474,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -484,6 +502,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -511,6 +530,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -538,6 +558,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -565,6 +586,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -592,6 +614,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -619,6 +642,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -646,6 +670,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -673,6 +698,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::NameParameter()));
@@ -700,6 +726,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::IgnoreParameter()));
@@ -727,6 +754,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0009_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::IgnoreParameter()));
@@ -754,6 +782,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0009_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/annotations_import/", "se1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters roleParameters;
     roleParameters.append(ImportAnnotationsToCsvFiller::RoleColumnParameter (0, new ImportAnnotationsToCsvFiller::IgnoreParameter()));
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
index 28f6d47..9471eee 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_import {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_annotations_import_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_annotations_import"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -66,7 +66,7 @@ GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0009_1)
 GUI_TEST_CLASS_DECLARATION(test_0009_2)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
index b1531b0..f6e1af7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
@@ -27,8 +27,8 @@
 namespace U2 {
 namespace GUITest_common_scenarios_circular_view {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_circular_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_circular_view"
 
 GUI_TEST_CLASS_DECLARATION(general_avail_1)
 GUI_TEST_CLASS_DECLARATION(general_avail_2)
@@ -39,7 +39,7 @@ GUI_TEST_CLASS_DECLARATION(general_avail_6)
 GUI_TEST_CLASS_DECLARATION(general_avail_7)
 GUI_TEST_CLASS_DECLARATION(general_avail_8)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 } // namespace GUITest_common_scenarios_circular_view
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
index 1463336..9a3e217 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
@@ -23,13 +23,13 @@
 
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 
 #include "runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h"
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
@@ -56,13 +56,14 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 //        right_end_strand
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "SacII"));
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Find restriction sites"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new DigestSequenceDialogFiller(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::CLONING_MENU << ToolsMenu::CLONING_FRAGMENTS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Digest into fragments...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem* fr1 = GTUtilsAnnotationsTreeView::findItem(os, "Fragment 1");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
index ea1414a..92e094e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
@@ -27,12 +27,12 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_cloning {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_cloning_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_cloning"
 
 GUI_TEST_CLASS_DECLARATION(test_0011)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace GUITest_common_scenarios_cloning
 
 } // namespace U2
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 08cbd6a..96a74e3 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
@@ -22,22 +22,22 @@
 
 #include "GTTestsDocumentFromText.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTAction.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/GTAction.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h"
 #include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 
@@ -58,7 +58,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -81,7 +81,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -105,7 +105,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -127,7 +127,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -149,7 +149,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -172,7 +172,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -194,7 +194,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result_new.gb");
@@ -215,7 +215,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -236,7 +236,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
 
@@ -257,7 +257,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -277,7 +277,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -297,7 +297,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -317,7 +317,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -337,7 +337,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -357,7 +357,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -377,7 +377,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -396,7 +396,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -416,7 +416,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -436,7 +436,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -456,7 +456,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -476,7 +476,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -496,7 +496,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -516,7 +516,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -536,7 +536,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -556,7 +556,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -576,7 +576,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -596,7 +596,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -616,7 +616,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
@@ -648,7 +648,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
 //  3. Click Create button
@@ -688,7 +688,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     //  3. Click Create button
@@ -728,7 +728,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     //  3. Click Create button
@@ -767,7 +767,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     //  3. Click Create button
@@ -807,7 +807,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     //  3. Click Create button
@@ -846,7 +846,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     //  3. Click Create button
@@ -873,17 +873,18 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.fa");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/" , "result.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     }
@@ -899,17 +900,18 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/" , "result.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     }
 
@@ -924,17 +926,18 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.fa");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/" , "result.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     }
 GUI_TEST_CLASS_DEFINITION(test_0013) {
@@ -949,7 +952,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsDocument::checkDocument(os, "result.fa");
     GTGlobals::sleep();
@@ -973,7 +976,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsDocument::checkDocument(os, "result.gb");
     GTGlobals::sleep();
@@ -997,7 +1000,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),QStringList()<< "NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsDocument::checkDocument(os, "result.fa");
     GTGlobals::sleep();
@@ -1022,7 +1025,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
@@ -1042,7 +1045,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
@@ -1061,7 +1064,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsProject::checkProject(os, GTUtilsProject::Exists);
@@ -1081,7 +1084,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -1124,7 +1127,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -1167,7 +1170,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -1211,7 +1214,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
                                                               CreateDocumentFiller::FASTA, "test_0016", false));
 
 //    3. Specify a created document location and press the "Create" button in the dialog.
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1237,7 +1240,7 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
                                                                   CreateDocumentFiller::FASTA, "test_0017", false));
 
 //    3. Specify a created document location and press the "Create" button in the dialog.
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1267,7 +1270,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
                                                                   CreateDocumentFiller::FASTA, "test_0018", false));
 
 //    3. Specify a created document location and press the "Create" button in the dialog.
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1299,7 +1302,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "active modal widget is NULL");
 
@@ -1324,7 +1327,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
     };
 
     GTUtilsDialog::waitForDialog(os, new CreateDocumentFiller(os, new Scenario));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 }
 
 } // namespace GUITest_common_scenarios_document_from_text
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
index 948721e..9dc088b 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_document_from_text {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_document_from_text_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_document_from_text"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -80,7 +80,7 @@ GUI_TEST_CLASS_DECLARATION(test_0017)
 GUI_TEST_CLASS_DECLARATION(test_0018)
 GUI_TEST_CLASS_DECLARATION(test_0019)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 4871ef1..b735a3d 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
@@ -20,25 +20,26 @@
  */
 #include "GTTestsDpView.h"
 #include "../../../GTUtilsEscClicker.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "GTUtilsApp.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "GTUtilsDialog.h"
-#include "runnables/qt/PopupChooser.h"
+#include "utils/GTUtilsDialog.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include "GTUtilsTaskTreeView.h"
 
 #include <U2Gui/ToolsMenu.h>
 
@@ -61,14 +62,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
 //    {Minimum repeat length} 8bp
 //    {repeats identity} 80%
 //5. Click OK button
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80,false,false));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa", testDir + "_common_data/scenarios/dp_view/dp2.fa");
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(1000);
 //Expected state: Dot plot view has appear. There is 1 line at view.
 //6. Use context menu on dot plot view {Dotplot->Remove}
@@ -88,14 +86,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
 }
 GUI_TEST_CLASS_DEFINITION(test_0011_1){
 //DIFFERENCE: ONE SEQUENCE USED
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80,false,false));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Dotplot"<<"Remove"));
@@ -111,14 +106,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){
 }
 GUI_TEST_CLASS_DEFINITION(test_0011_2){//commit DotPlotWidget.cpp exitButton
 //DIFFERENCE: EXITBUTTON IS USED
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::DOTPLOT));
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80,false,false));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTGlobals::sleep(500);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
     GTWidget::click(os, GTWidget::findWidget(os, "exitButton"));
@@ -133,6 +125,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){//commit DotPlotWidget.cpp exitButton
 GUI_TEST_CLASS_DEFINITION(test_0011_3){
     //DIFFERENCE: EXITBUTTON IS USED
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/", "dp1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80,false,false));
 
     GTWidget::click(os, GTWidget::findWidget(os, "build_dotplot_action_widget"));
@@ -148,15 +141,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0013) {
-
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 100));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/NC_014267.gb", "secondparametrTest",true,true,false,10);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep();
 
 }
@@ -175,14 +164,11 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 //    {Minimum repeat length} 4bp
 
 //5. Click OK button
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 4));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(500);
     GTUtilsProjectTreeView::openView(os);
 
@@ -206,14 +192,11 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 
 GUI_TEST_CLASS_DEFINITION(test_0014_1){
     //DIFFERENCE: ANNOTATION TREE WIDGET IS USED
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 4));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(500);
     GTUtilsProjectTreeView::openView(os);
 
@@ -229,14 +212,11 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1){
 }
 GUI_TEST_CLASS_DEFINITION(test_0014_2){
     //DIFFERENCE: ANNOTATION TREE WIDGET IS USED
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 4));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dp1.fa","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(500);
     GTUtilsProjectTreeView::openView(os);
 
@@ -263,14 +243,11 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
 //Expected state: minimum repeat length changed to 2bp
 //5. Click OK button
 //Expected state: Dotplot view has appeared.
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os,100,0, false,true));
     Runnable *filler2 = new BuildDotPlotFiller(os, dataDir + "samples/PDB/1CF7.PDB","",false,true);
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(4000);
     GTUtilsProjectTreeView::openView(os);
     GTGlobals::sleep(500);
@@ -301,7 +278,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
 
     class DotPlotExportImageFiller : public Filler {
     public:
-        DotPlotExportImageFiller(int scenario, U2OpStatus &os)
+        DotPlotExportImageFiller(int scenario, HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm"),
               scenario(scenario) {}
         virtual void run() {
@@ -341,7 +318,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
             GTWidget::click(os, button);
         }
 
-        static void performScenario(U2OpStatus &os, int scenario) {
+        static void performScenario(HI::GUITestOpStatus &os, int scenario) {
             GTUtilsDialog::waitForDialog(os, new DotPlotExportImageFiller(scenario, os));
             GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Dotplot" << "Save/Load" << "Save as image"));
             GTWidget::click(os, GTWidget::findWidget(os, "dotplot widget"), Qt::RightButton);
@@ -359,9 +336,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
                                               testDir + "_common_data/genbank/pBR322.gb");
     GTUtilsDialog::waitForDialog(os, filler);
 
-    QMenu *menu;
-    menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep();
 
     DotPlotExportImageFiller::performScenario(os, 1);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
index 732ef87..36b568e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
@@ -24,13 +24,13 @@ k
 #define GTTESTS_DP_VIEW_H_
 
 #include <U2Test/GUITestBase.h>
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
 
 namespace GUITest_Common_scenarios_dp_view {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_Common_scenarios_dp_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_Common_scenarios_dp_view"
 
 GUI_TEST_CLASS_DECLARATION(test_0011)
 GUI_TEST_CLASS_DECLARATION(test_0011_1)
@@ -45,7 +45,7 @@ GUI_TEST_CLASS_DECLARATION(test_0014_2)
 GUI_TEST_CLASS_DECLARATION(test_0020)
 GUI_TEST_CLASS_DECLARATION(test_0025)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 2f12fbf..863927a 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
@@ -20,19 +20,19 @@
  */
 
 #include "GTTestsMsaEditor.h"
-#include "api/GTAction.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTClipboard.h"
-#include "api/GTToolbar.h"
-#include "api/GTLineEdit.h"
-#include "api/GTSpinBox.h"
-#include "api/GTRadioButton.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTToolbar.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTRadioButton.h>
 #include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
@@ -43,11 +43,11 @@
 #include "GTUtilsProject.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsOptionPanelMSA.h"
-#include "runnables/qt/DefaultDialogFiller.h"
-#include "runnables/qt/ColorDialogFiller.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/FontDialogFiller.h"
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/ColorDialogFiller.h>
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include <base_dialogs/FontDialogFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
@@ -68,6 +68,7 @@
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
+#include "utils/GTThread.h"
 
 #include <U2Gui/ToolsMenu.h>
 
@@ -79,10 +80,12 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
@@ -98,6 +101,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
@@ -113,6 +117,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Maximize);
@@ -131,6 +136,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 GUI_TEST_CLASS_DEFINITION(test_0001_3) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Minimize);
@@ -149,8 +155,10 @@ GUI_TEST_CLASS_DEFINITION(test_0001_3) {
 GUI_TEST_CLASS_DEFINITION(test_0001_4) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "translations_nucl.aln", GTFileDialog::Cancel);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "translations_nucl.aln", GTFileDialog::Open);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
@@ -166,6 +174,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_4) {
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
@@ -191,6 +200,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
@@ -218,14 +228,13 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
-
     GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
     GTGlobals::sleep();
     GTGlobals::sleep();
 
@@ -246,13 +255,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 GUI_TEST_CLASS_DEFINITION(test_0002_3) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
-
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(mdiWindow != NULL, "MDI window == NULL");
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
     GTGlobals::sleep();
     GTGlobals::sleep();
 
@@ -270,9 +278,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_3) {
     GTMouseDriver::doubleClick(os);
     GTGlobals::sleep();
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
-
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
     GTGlobals::sleep();
     GTGlobals::sleep();
 
@@ -282,6 +288,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_3) {
 
 GUI_TEST_CLASS_DEFINITION(test_0002_4) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
@@ -316,6 +323,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_4) {
 
 GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "action_sort_by_name"));
@@ -327,10 +335,10 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "action_sort_by_name"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Sort sequences by name");
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSorted(os);
@@ -338,6 +346,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "action_sort_by_name"));
@@ -353,12 +362,12 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
 
 GUI_TEST_CLASS_DEFINITION(test_0003_3) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSorted(os, false);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "action_sort_by_name"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Sort sequences by name");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
@@ -380,6 +389,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_3) {
 GUI_TEST_CLASS_DEFINITION(test_0003_4) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSorted(os, false);
@@ -408,6 +418,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_4) {
 GUI_TEST_CLASS_DEFINITION(test_0004)
 {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -433,6 +444,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004)
 GUI_TEST_CLASS_DEFINITION(test_0004_1)
 {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -458,6 +470,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1)
 GUI_TEST_CLASS_DEFINITION(test_0004_2)
 {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -485,6 +498,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state: Alignment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -524,6 +538,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
 
 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state: Alignment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -564,6 +579,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
 
 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state: Alignment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -623,6 +639,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
     // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: Aligniment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -662,6 +679,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
 
     // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: Aligniment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -705,6 +723,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
 
     // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: Aligniment length 14, left offset 1, right offset 14
     GTGlobals::sleep();
@@ -760,6 +779,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
 GUI_TEST_CLASS_DEFINITION(test_0007) {
     //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -798,6 +818,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -835,6 +856,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -871,6 +893,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 GUI_TEST_CLASS_DEFINITION(test_0007_3) {
     //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -907,6 +930,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_3) {
 GUI_TEST_CLASS_DEFINITION(test_0007_4) {
     //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
@@ -945,12 +969,13 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 //     1. Open document samples\CLUSTALW\COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -976,7 +1001,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1000,7 +1025,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTGlobals::sleep();
 //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1058,12 +1083,13 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
     //     1. Open document samples\CLUSTALW\COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1083,7 +1109,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1101,7 +1127,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1153,12 +1179,13 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
     //     1. Open document samples\CLUSTALW\COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1184,7 +1211,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1208,7 +1235,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1255,12 +1282,13 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
     //     1. Open document samples\CLUSTALW\COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "HIV-1 [m] HIV-1");
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1286,7 +1314,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1310,7 +1338,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
     GTMouseDriver::moveTo(os, p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
@@ -1356,6 +1384,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
     //1. Open ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
@@ -1365,7 +1394,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     //3. Do context menu {Align-> Align with MUSCLE}  use "column range"
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep();
     //GTGlobals::sleep();
@@ -1392,6 +1421,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
 
     //1. Open ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
@@ -1402,7 +1432,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
     //3. Do context menu {Align-> Align with MUSCLE}  use "column range"
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep();
     //GTGlobals::sleep();
@@ -1427,6 +1457,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
 
     //1. Open ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
@@ -1437,7 +1468,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
     //3. Do context menu {Align-> Align with MUSCLE}  use "column range"
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep();
     //GTGlobals::sleep();
@@ -1462,6 +1493,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
@@ -1494,6 +1526,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
@@ -1523,6 +1556,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
@@ -1557,6 +1591,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 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"));
@@ -1601,6 +1636,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 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"));
@@ -1650,12 +1686,12 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Select first sequence and do context menu {Edit->Replace selected rows with reverce complement}
 // CHANGES: using main menu
-    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));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace selected rows with reverse-complement");
     GTGlobals::sleep();
     //GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
 // Expected state: sequence changed from TTG -> CAA
@@ -1675,8 +1711,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
 
 // 3. Do step 2 again
 // CHANGES: using main menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace selected rows with reverse-complement");
     GTGlobals::sleep();
 
 // Expected state: sequence changed from CAA -> TTG
@@ -1701,6 +1736,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 
 // 1. Open file _common_data\scenarios\msa\revcompl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
@@ -1735,6 +1771,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
 
 // 1. Open file _common_data\scenarios\msa\revcompl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
@@ -1768,6 +1805,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
 
 // 1. Open file _common_data\scenarios\msa\revcompl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
@@ -1808,6 +1846,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
     GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
@@ -1836,6 +1875,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1) {
 
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
     GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os,-1,testDir + "_common_data/scenarios/sandbox/COI_transl.aln"));
@@ -1872,6 +1912,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013_2) {
 
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
     GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
@@ -1886,13 +1927,10 @@ GUI_TEST_CLASS_DEFINITION(test_0013_2) {
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
 
 // CHANGES: using main menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
-    GTGlobals::sleep();
-    GTGlobals::sleep();
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align" << "Align with Kalign...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state: UGENE not crash
-    GTGlobals::sleep(5000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0014) {
@@ -1900,6 +1938,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 
 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
 
@@ -1928,17 +1967,16 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1) {
 
 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
 
 // CHANGES: using main menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
-    GTGlobals::sleep();
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align" << "Align with Kalign...");
     GTGlobals::sleep();
 
 // 2. after kalign finishes and msa opens insert gaps and click in alignment
-    GTGlobals::sleep(5000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
     GTMouseDriver::click(os);
@@ -1949,7 +1987,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1) {
     GTMouseDriver::click(os);
 
 // Expected state: UGENE not crash
-    GTGlobals::sleep(5000);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0014_2) {
@@ -1957,6 +1995,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2) {
 
 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // CHANGES: close and open MDI window, close Project tree view
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -1997,7 +2036,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/", "COI.aln"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::MALIGN_MENU << ToolsMenu::MALIGN_KALIGN);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Multiple sequence alignment" << "Align with Kalign...");
     GTGlobals::sleep();
 
 // 3. aligned document opens
@@ -2022,6 +2061,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
 
 // CHANGES: opens file, Kalign by popup menu
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
@@ -2052,7 +2092,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/", "COI.aln"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() <<  ToolsMenu::MALIGN_MENU << ToolsMenu::MALIGN_KALIGN);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Multiple sequence alignment" << "Align with Kalign...");
     GTGlobals::sleep();
 
 // 3. aligned document opens
@@ -2079,6 +2119,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped_edited.aln");
     GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata'
@@ -2115,6 +2156,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016_1) {
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped_edited.aln");
     GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // CHANGES: insert gaps in the beginning
@@ -2159,6 +2201,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016_2) {
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped_edited.aln");
     GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata'
@@ -2196,10 +2239,12 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
 //
 // 1. Open file data/samples/Genbank/murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. Open file data/samples/MSF/HMA.msf
     GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
@@ -2218,21 +2263,21 @@ GUI_TEST_CLASS_DEFINITION(test_0017_1) {
 //
 // 1. Open file data/samples/Genbank/murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. Open file data/samples/MSF/HMA.msf
     GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from current project"));
-
 // 4. Select item dialog appeared
 // Expected state: loaded sequences present in list
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
 
 // CHANGES: using main menu instead of popup
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from current project...");
     GTGlobals::sleep();
 }
 
@@ -2241,6 +2286,7 @@ GUI_TEST_CLASS_DEFINITION(test_0017_2) {
 //
 // 1. Open file data/samples/Genbank/murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // CHANGES: close MDI window of murine.gb
@@ -2249,17 +2295,16 @@ GUI_TEST_CLASS_DEFINITION(test_0017_2) {
 
 // 2. Open file data/samples/MSF/HMA.msf
     GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from current project"));
-
 // 4. Select item dialog appeared
 // Expected state: loaded sequences present in list
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
 
 // CHANGES: using main menu instead of popup
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from current project...");
     GTGlobals::sleep();
 }
 
@@ -2268,6 +2313,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
 //
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Click on some row in sequence names area
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
@@ -2303,6 +2349,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018_1) {
 //
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Click on some row in sequence names area
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
@@ -2338,6 +2385,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018_2) {
 //
 // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Click on some row in sequence names area
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
@@ -2373,6 +2421,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
 // 2. Press button Enable collapsing
@@ -2388,6 +2437,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019_1) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
 // 2. Press button Enable collapsing
@@ -2403,6 +2453,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019_2) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
 // 2. Press button Enable collapsing
@@ -2418,6 +2469,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
 //
 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // 2. Select Edit -> remove columns of gaps -> remove columns with number of gaps 1.
 // 3. Click OK
     GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os));
@@ -2440,6 +2492,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020_1) {
 //
 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Insert some gaps to the first column. Ensure, that every column has a gap
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
@@ -2476,6 +2529,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. zoom MSA to maximum
@@ -2496,6 +2550,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021_1) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. zoom MSA to maximum
@@ -2516,6 +2571,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021_2) {
 //
 // 1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // 2. zoom MSA to maximum
@@ -2534,6 +2590,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021_2) {
 GUI_TEST_CLASS_DEFINITION(test_0022){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select character â„–3 in "Phaneroptera_falcata"(G)
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(2,0));
     QLabel* posLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os,"Position"));
@@ -2556,6 +2613,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022){
 GUI_TEST_CLASS_DEFINITION(test_0022_1){//DIFFERENCE: Column label is tested
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select character â„–3 in "Phaneroptera_falcata"(G)
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(2,0));
     QLabel* colLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os,"Column"));
@@ -2578,6 +2636,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022_1){//DIFFERENCE: Column label is tested
 GUI_TEST_CLASS_DEFINITION(test_0022_2){//DIFFERENCE: Line label is tested
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select character â„–3 in "Phaneroptera_falcata"(G)
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(2,0));
     QLabel* lineLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os,"Line"));
@@ -2598,6 +2657,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022_2){//DIFFERENCE: Line label is tested
 GUI_TEST_CLASS_DEFINITION(test_0023){
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //    2. Do context menu->Add->sequence from file
     GTFileDialogUtils *ob = new GTFileDialogUtils(os,dataDir + "samples/Genbank/", "CVU55762.gb");
@@ -2615,6 +2675,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023){
 GUI_TEST_CLASS_DEFINITION(test_0024){
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. select first symbol of first sequence
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0,0));
     GTMouseDriver::click(os);
@@ -2642,6 +2703,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024){
 GUI_TEST_CLASS_DEFINITION(test_0025){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "change font button" on toolbar
     GTUtilsDialog::waitForDialog(os, new FontDialogFiller(os));
 
@@ -2667,6 +2729,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025){
 GUI_TEST_CLASS_DEFINITION(test_0025_1){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "change font button" on toolbar
     GTUtilsDialog::waitForDialog(os, new FontDialogFiller(os));
 
@@ -2691,6 +2754,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025_1){
 GUI_TEST_CLASS_DEFINITION(test_0026){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
     GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.bmp"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
@@ -2705,12 +2769,14 @@ GUI_TEST_CLASS_DEFINITION(test_0026){
 //    file name: test/_common_data/scenarios/sandbox/image.bmp
 //    press OK
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/sandbox/","image.bmp");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: image is exported
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0026_1){//DIFFERENCE: context menu is used
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
     GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.bmp"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_EXPORT<<"Export as image"));
@@ -2726,6 +2792,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026_1){//DIFFERENCE: context menu is used
 GUI_TEST_CLASS_DEFINITION(test_0026_2_linux){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
     GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp", "jpeg" ,100));
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
@@ -2751,6 +2818,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_linux){
 GUI_TEST_CLASS_DEFINITION(test_0026_2_windows){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
     GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp","jpeg",100));
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
@@ -2775,6 +2843,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_windows){
 GUI_TEST_CLASS_DEFINITION(test_0027){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. select element 4 in sequence 3
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(3,2));
 //    3. Move selected left using mouse by 6
@@ -2792,6 +2861,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027){
 GUI_TEST_CLASS_DEFINITION(test_0027_1){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. select element 4 in sequence 3
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(3,3));
 //    3. Move selected left using mouse by 6
@@ -2809,6 +2879,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027_1){
 GUI_TEST_CLASS_DEFINITION(test_0028_linux){
 //    1. Open document "samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Context menu -- "Export as image"
     GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("svg")));
@@ -2824,6 +2895,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028_linux){
 GUI_TEST_CLASS_DEFINITION(test_0028_windows){
 //    1. Open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Context menu -- "Export as image"
     GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("svg")));
@@ -2842,11 +2914,13 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
         GTUtilsProject::openFiles(os, dataDir + "samples/CLUSTALW/COI.aln");
     //    2. Select first sequence
         GTUtilsMSAEditorSequenceArea::click(os,QPoint(0,0));
-        GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseMouse));
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseKey));
         Runnable* r = new ExportSelectedSequenceFromAlignment(os,testDir + "_common_data/scenarios/sandbox/export.fasta",ExportSelectedSequenceFromAlignment::FASTA,true);
         GTUtilsDialog::waitForDialog(os, r);
 
         GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
+        GTGlobals::sleep();
+        GTUtilsTaskTreeView::waitTaskFinished(os);
         //GTMouseDriver::click(os,Qt::RightButton);
 
         GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"export.fasta"));
@@ -2854,11 +2928,14 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
         GTGlobals::sleep();
 
         GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os,42,44));
-        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region",GTGlobals::UseMouse));
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region"));
         GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
+        GTGlobals::sleep();
 
-        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<< "Copy sequence",GTGlobals::UseMouse));
+
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<< "Copy sequence"));
         GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
+        GTGlobals::sleep();
 
         QString clipboardText = GTClipboard::text(os);
         CHECK_SET_ERR(clipboardText == "---", "Expected: TAGTTTATTAA, Found: " + clipboardText);
@@ -2875,9 +2952,10 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
 GUI_TEST_CLASS_DEFINITION(test_0029_1){//DIFFERENCE:gaps are trimmed, FASTQ format is used
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select first sequence
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(0,2));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseKey));
     Runnable* r = new ExportSelectedSequenceFromAlignment(os,testDir + "_common_data/scenarios/sandbox/export.fasta",ExportSelectedSequenceFromAlignment::FASTQ,false);
     GTUtilsDialog::waitForDialog(os, r);
 
@@ -2889,10 +2967,10 @@ GUI_TEST_CLASS_DEFINITION(test_0029_1){//DIFFERENCE:gaps are trimmed, FASTQ form
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region",GTGlobals::UseKey));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<< "Copy sequence",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<< "Copy sequence",GTGlobals::UseKey));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 
     QString clipboardText = GTClipboard::text(os);
@@ -2910,15 +2988,17 @@ GUI_TEST_CLASS_DEFINITION(test_0029_1){//DIFFERENCE:gaps are trimmed, FASTQ form
 GUI_TEST_CLASS_DEFINITION(test_0029_2){
 //    1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select first sequence
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(0,2));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_EXPORT<<"Save sequence",GTGlobals::UseKey));
     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);
 
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/sandbox/","export.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. use MSA area context menu->export->save sequence
 //    Exptcted state: Export sequence dialog appeared
 
@@ -2932,11 +3012,12 @@ GUI_TEST_CLASS_DEFINITION(test_0029_2){
 GUI_TEST_CLASS_DEFINITION(test_0031){//TODO: check statistic result
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile"));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Exptcted state: generate alignment profile dialog appeared
 
 //    3. Fill dialog: Profile mode:Counts. Click "Generate"
@@ -2949,11 +3030,12 @@ GUI_TEST_CLASS_DEFINITION(test_0031){//TODO: check statistic result
 GUI_TEST_CLASS_DEFINITION(test_0031_1){//DIFFERENCE: Percentage is used
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile"));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,false));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(1500);
 //    Exptcted state: generate alignment profile dialog appeared
 
 //    3. Fill dialog: Profile mode:Counts. Click "Generate"
@@ -2966,11 +3048,12 @@ GUI_TEST_CLASS_DEFINITION(test_0031_1){//DIFFERENCE: Percentage is used
 GUI_TEST_CLASS_DEFINITION(test_0031_2){//TODO: check statistic result
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,true,false,false));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(1500);
 //    Exptcted state: generate alignment profile dialog appeared
 
 //    3. Fill dialog: Profile mode:Counts. Click "Generate"
@@ -2983,11 +3066,12 @@ GUI_TEST_CLASS_DEFINITION(test_0031_2){//TODO: check statistic result
 GUI_TEST_CLASS_DEFINITION(test_0031_3){//TODO: check statistic result
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,false,true,false));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(1500);
 //    Exptcted state: generate alignment profile dialog appeared
 
 //    3. Fill dialog: Profile mode:Counts. Click "Generate"
@@ -3000,11 +3084,12 @@ GUI_TEST_CLASS_DEFINITION(test_0031_3){//TODO: check statistic result
 GUI_TEST_CLASS_DEFINITION(test_0031_4){//TODO: check statistic result
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,false,false,true));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(1500);
 //    Exptcted state: generate alignment profile dialog appeared
 
 //    3. Fill dialog: Profile mode:Counts. Click "Generate"
@@ -3017,9 +3102,10 @@ GUI_TEST_CLASS_DEFINITION(test_0031_4){//TODO: check statistic result
 GUI_TEST_CLASS_DEFINITION(test_0032){
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
 //    Exptcted state: generata alignment profile dialog appeared
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,true,GenerateAlignmentProfileDialogFiller::HTML,
                                                                               testDir + "_common_data/scenarios/sandbox/stat.html"));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
@@ -3038,9 +3124,10 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
 GUI_TEST_CLASS_DEFINITION(test_0032_1){//DIFFERENCE: csv format is used
 //    1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do MSA area context menu->Statistics->generate grid profile
 //    Exptcted state: generata alignment profile dialog appeared
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate grid profile",GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os,true,GenerateAlignmentProfileDialogFiller::CSV,
                                                                               testDir + "_common_data/scenarios/sandbox/stat.html"));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
@@ -3059,9 +3146,10 @@ GUI_TEST_CLASS_DEFINITION(test_0032_1){//DIFFERENCE: csv format is used
 GUI_TEST_CLASS_DEFINITION(test_0033){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os,true,true,true));
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3079,9 +3167,10 @@ GUI_TEST_CLASS_DEFINITION(test_0033){
 GUI_TEST_CLASS_DEFINITION(test_0033_1){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os,false,true,true));
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3099,9 +3188,10 @@ GUI_TEST_CLASS_DEFINITION(test_0033_1){
 GUI_TEST_CLASS_DEFINITION(test_0034){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os,true,false,true));
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3120,9 +3210,10 @@ GUI_TEST_CLASS_DEFINITION(test_0034){
 GUI_TEST_CLASS_DEFINITION(test_0034_1){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os,true,true,false));
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3141,10 +3232,11 @@ GUI_TEST_CLASS_DEFINITION(test_0034_1){
 GUI_TEST_CLASS_DEFINITION(test_0035){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     Runnable* dis = new DistanceMatrixDialogFiller(os,DistanceMatrixDialogFiller::HTML,testDir + "_common_data/scenarios/sandbox/matrix.html");
     GTUtilsDialog::waitForDialog(os, dis);
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3164,10 +3256,11 @@ GUI_TEST_CLASS_DEFINITION(test_0035){
 GUI_TEST_CLASS_DEFINITION(test_0035_1){
 //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/","ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Do MSA area context menu->Statistics->generate distance matrix
     Runnable* dis = new DistanceMatrixDialogFiller(os,DistanceMatrixDialogFiller::CSV,testDir + "_common_data/scenarios/sandbox/matrix.html");
     GTUtilsDialog::waitForDialog(os, dis);
-    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseMouse);
+    Runnable* pop = new PopupChooser(os,QStringList()<<MSAE_MENU_STATISTICS<<"Generate distance matrix",GTGlobals::UseKey);
     GTUtilsDialog::waitForDialog(os, pop);
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(500);
@@ -3187,6 +3280,7 @@ GUI_TEST_CLASS_DEFINITION(test_0035_1){
 GUI_TEST_CLASS_DEFINITION(test_0036){
 //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",0));
@@ -3206,6 +3300,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
 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
@@ -3226,6 +3321,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036_1){
 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));
@@ -3245,6 +3341,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036_2){
 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));
@@ -3264,6 +3361,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036_3){
 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");
@@ -3284,6 +3382,7 @@ GUI_TEST_CLASS_DEFINITION(test_0037){
 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");
@@ -3304,6 +3403,7 @@ GUI_TEST_CLASS_DEFINITION(test_0037_1){
 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");
@@ -3324,6 +3424,7 @@ GUI_TEST_CLASS_DEFINITION(test_0037_2){
 GUI_TEST_CLASS_DEFINITION(test_0038){
 //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,100,testDir + "_common_data/scenarios/sandbox/COI.nwk",
                                                                5,BuildTreeDialogFiller::MAJORITYEXT));
@@ -3349,6 +3450,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
 GUI_TEST_CLASS_DEFINITION(test_0038_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,100,testDir + "_common_data/scenarios/sandbox/COI.nwk",
                                                                5,BuildTreeDialogFiller::STRICTCONSENSUS));
@@ -3374,6 +3476,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_1){
 GUI_TEST_CLASS_DEFINITION(test_0038_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,100,testDir + "_common_data/scenarios/sandbox/COI.nwk",
                                                                5,BuildTreeDialogFiller::MAJORITY));
@@ -3401,6 +3504,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_2){
 GUI_TEST_CLASS_DEFINITION(test_0038_3){
 //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,100,testDir + "_common_data/scenarios/sandbox/COI.nwk",
                                                                5,BuildTreeDialogFiller::M1));
@@ -3426,6 +3530,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_3){
 GUI_TEST_CLASS_DEFINITION(test_0038_4){
 //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,100,testDir + "_common_data/scenarios/sandbox/COI.nwk",
                                                                5,BuildTreeDialogFiller::M1,1));
@@ -3449,9 +3554,10 @@ GUI_TEST_CLASS_DEFINITION(test_0038_4){
 //Expected state: tree appeared
 }
 
-void test_0039_function(U2OpStatus &os, int comboNum, QString extention){
+void test_0039_function(HI::GUITestOpStatus &os, int comboNum, QString extention){
     //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, GUITest::dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Use project tree context menu->Export/Import->Export Nucleic Alignment to Amino Translation
     //Expected state: Export Nucleic Alignment to Amino Translation dialog appeared
@@ -3533,6 +3639,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041) {
     //
     // 1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     int oldLength = GTUtilsMSAEditorSequenceArea::getLength(os);
     // 2. Select the first column.
     GTUtilsMSAEditorSequenceArea::selectColumnInConsensus(os, 0);
@@ -3560,6 +3667,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041) {
 GUI_TEST_CLASS_DEFINITION(test_0042) {
     // default msa export
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0042.png"));
@@ -3570,6 +3678,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042) {
 GUI_TEST_CLASS_DEFINITION(test_0042_1) {
     // "all included" export
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os,
@@ -3581,6 +3690,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042_1) {
 GUI_TEST_CLASS_DEFINITION(test_0042_2) {
     // slightly modified export
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os,
@@ -3595,6 +3705,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042_2) {
 GUI_TEST_CLASS_DEFINITION(test_0043) {
     // select a few sequences
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList sequences;
     sequences << "Montana_montana"
@@ -3612,6 +3723,7 @@ GUI_TEST_CLASS_DEFINITION(test_0043) {
 GUI_TEST_CLASS_DEFINITION(test_0044) {
     // export selected region
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 2), QPoint(25, 8));
 
@@ -3628,7 +3740,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045) {
     // there should be no selection
     class ExportDialogChecker : public Filler {
     public:
-        ExportDialogChecker(U2OpStatus &os)
+        ExportDialogChecker(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3636,7 +3748,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045) {
 
             GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "SelectSubalignmentDialog", QDialogButtonBox::Cancel));
             QComboBox* exportType = dialog->findChild<QComboBox*>("comboBox");
-            GTComboBox::setIndexWithText(os, exportType, "Custom region", false, GTGlobals::UseMouse);
+            GTComboBox::setIndexWithText(os, exportType, "Custom region", false, GTGlobals::UseKey);
 
             GTGlobals::sleep();
             CHECK_SET_ERR(exportType->currentText() == "Whole alignment", "Wrong combo box text!");
@@ -3645,6 +3757,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045) {
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportDialogChecker(os));
@@ -3658,7 +3771,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045_1) {
 
     class ExportChecker : public Filler {
     public:
-        ExportChecker(U2OpStatus &os)
+        ExportChecker(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3683,6 +3796,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045_1) {
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportChecker(os));
@@ -3693,6 +3807,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045_1) {
 GUI_TEST_CLASS_DEFINITION(test_0046) {
     // check quality
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
@@ -3707,7 +3822,7 @@ GUI_TEST_CLASS_DEFINITION(test_0047) {
 
     class SelectSubalignmentChecker : public Filler {
     public:
-        SelectSubalignmentChecker(U2OpStatus &os)
+        SelectSubalignmentChecker(HI::GUITestOpStatus &os)
             : Filler(os, "SelectSubalignmentDialog") {}
 
         virtual void run() {
@@ -3745,7 +3860,7 @@ GUI_TEST_CLASS_DEFINITION(test_0047) {
 
     class ExportChecker : public Filler {
     public:
-        ExportChecker(U2OpStatus &os)
+        ExportChecker(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3761,6 +3876,7 @@ GUI_TEST_CLASS_DEFINITION(test_0047) {
     };
 
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "align.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1,1), QPoint(1,1));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
@@ -3772,10 +3888,11 @@ GUI_TEST_CLASS_DEFINITION(test_0048) {
     // fail to export big alignment
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class CustomFiller_0048 : public Filler {
     public:
-        CustomFiller_0048(U2OpStatus &os)
+        CustomFiller_0048(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3809,6 +3926,7 @@ GUI_TEST_CLASS_DEFINITION(test_0048) {
 GUI_TEST_CLASS_DEFINITION(test_0049){
     //save alignment buttons test
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "COI_test_0049.aln",
                                                                     ExportDocumentDialogFiller::CLUSTALW));\
     GTWidget::click(os, GTAction::button(os, "Save alignment as"));
@@ -3816,6 +3934,7 @@ GUI_TEST_CLASS_DEFINITION(test_0049){
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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"]);
 
@@ -3824,6 +3943,7 @@ GUI_TEST_CLASS_DEFINITION(test_0049){
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
 
     GTFileDialog::openFile(os, sandBoxDir, "COI_test_0049.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0,0), QPoint(10,0), "ATTCGAGCCGA");
 }
 
@@ -3840,6 +3960,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
     //    Expected state: result file contain rowa of sequences
 
         GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference"));
         GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton, QPoint(10, 10));
 
@@ -3872,6 +3993,7 @@ GUI_TEST_CLASS_DEFINITION(test_0051){
 */
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma_unsorted.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "action_sort_by_name"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
@@ -3894,10 +4016,11 @@ GUI_TEST_CLASS_DEFINITION(test_0052){
 //    Expected state: warning is gone, export is enabled
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/3000_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class CustomFiller_0052 : public Filler {
     public:
-        CustomFiller_0052(U2OpStatus &os)
+        CustomFiller_0052(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3948,6 +4071,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053){
         //3. Context menue {Copy-><<Copy formatted}
         //Expected state: the buffer contatin the sequence in CLUSTALW format
         GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
@@ -3970,6 +4094,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_1){
     //4. Context menu {Copy->Copy formatted}
     //Expected state: the buffer contatin the sequence in Mega format
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
@@ -4002,6 +4127,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_2){
     //4. Toolbar {Copy->Copy formatted}
     //Expected state: the buffer contatin the sequence in CLUSTALW format
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
@@ -4032,6 +4158,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_3){
         //3. Context menue {Copy->Copy formatted}
         //Expected state: the buffer contatin the sequences in CLUSTALW format
         GTFileDialog::openFile(os, testDir + "_common_data/clustal/100_sequences.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -4054,6 +4181,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_4){
         //2. Try context menue {Copy->Copy formatted}
         //Expected state: the action is disabled
         GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         QWidget* w = GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "copy_formatted");
@@ -4069,6 +4197,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_5){
     //4. Toolbar {Copy->Copy formatted}
     //Expected state: the buffer contatin the sequence in RTF format
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
@@ -4099,6 +4228,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_5){
 GUI_TEST_CLASS_DEFINITION(test_0054){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Use context menu:
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle"));
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default, true, true));
@@ -4115,6 +4245,7 @@ GUI_TEST_CLASS_DEFINITION(test_0054){
 GUI_TEST_CLASS_DEFINITION(test_0054_1){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Use context menu:
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os, 0, true));
@@ -4131,13 +4262,14 @@ GUI_TEST_CLASS_DEFINITION(test_0054_1){
 GUI_TEST_CLASS_DEFINITION(test_0055){
 //    Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select some area
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 2), QPoint(8, 8));
 //    Use context menu:
 //    {Export->Export subalignment}
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
 
             QLineEdit* filepathEdit = GTWidget::findExactWidget<QLineEdit*>(os, "filepathEdit", dialog);
@@ -4160,11 +4292,12 @@ GUI_TEST_CLASS_DEFINITION(test_0055){
 GUI_TEST_CLASS_DEFINITION(test_0056){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Export sequence as alignment. In export dialog check
 
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
 
             QLineEdit* fileNameEdit = GTWidget::findExactWidget<QLineEdit*>(os, "fileNameEdit", dialog);
@@ -4193,7 +4326,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057){
 
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep();
 
@@ -4220,7 +4353,7 @@ GUI_TEST_CLASS_DEFINITION(test_0058){
 
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4252,6 +4385,7 @@ GUI_TEST_CLASS_DEFINITION(test_0058){
 GUI_TEST_CLASS_DEFINITION(test_0059){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Create new color scheme. Set some new color for some
 
 //    character.
@@ -4259,7 +4393,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 
     class customColorSelector: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             GTGlobals::sleep(500);
             QWidget *dialog = QApplication::activeModalWidget();
 
@@ -4303,7 +4437,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 
     class customColorSchemeCreator: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             GTGlobals::sleep(500);
             QWidget *dialog = QApplication::activeModalWidget();
 
@@ -4323,7 +4457,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 
     class customAppSettingsFiller: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4346,10 +4480,11 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 GUI_TEST_CLASS_DEFINITION(test_0060){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open "Color schemes" dialog.
     class customAppSettingsFiller: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4379,7 +4514,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 
     class customAppSettingsFiller1: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4402,6 +4537,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 GUI_TEST_CLASS_DEFINITION(test_0061){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open "Color schemes" dialog.
 //    Open "Create color scheme" dialog.
 //    Set wrong scheme names: space only, empty, with forbidden
@@ -4416,7 +4552,7 @@ GUI_TEST_CLASS_DEFINITION(test_0061){
 
     class customColorSchemeCreator: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             GTGlobals::sleep(500);
             QWidget *dialog = QApplication::activeModalWidget();
 
@@ -4428,7 +4564,7 @@ GUI_TEST_CLASS_DEFINITION(test_0061){
             GTLineEdit::setText(os, schemeName, "");
             CHECK_SET_ERR(validLabel->text() == "Warning: Name of scheme is empty.", "unexpected hint: " + validLabel->text());
             GTLineEdit::setText(os, schemeName, "name*");
-            CHECK_SET_ERR(validLabel->text() == "Warning: Name has to consist of letters, digits, spaces", "unexpected hint: " + validLabel->text());
+            CHECK_SET_ERR(validLabel->text() == "Warning: Name has to consist of letters, digits, spaces<br>or underscore symbols only.", "unexpected hint: " + validLabel->text());
             GTLineEdit::setText(os, schemeName, "GUITest_common_scenarios_msa_editor_test_0061");
             CHECK_SET_ERR(validLabel->text() == "Warning: Color scheme with the same name already exists.", "unexpected hint: " + validLabel->text());
 
@@ -4442,7 +4578,7 @@ GUI_TEST_CLASS_DEFINITION(test_0061){
 
     class customAppSettingsFiller: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4465,13 +4601,14 @@ GUI_TEST_CLASS_DEFINITION(test_0061){
 GUI_TEST_CLASS_DEFINITION(test_0062){
 //    Open COI.aln
     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");
 //    Open "Export subalignment" dialog
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
             QLineEdit* filepathEdit = GTWidget::findExactWidget<QLineEdit*>(os, "filepathEdit", dialog);
@@ -4530,11 +4667,12 @@ GUI_TEST_CLASS_DEFINITION(test_0062){
 GUI_TEST_CLASS_DEFINITION(test_0063){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press "align" button on toolbar. Check state
 
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QStringList expectedActions = QStringList() << "Align with muscle"
                                                    << "Align sequences to profile with MUSCLE"
                                                    << "Align profile to profile with MUSCLE"
@@ -4565,6 +4703,7 @@ GUI_TEST_CLASS_DEFINITION(test_0063){
 GUI_TEST_CLASS_DEFINITION(test_0064){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open "Statistics" OP tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
 //    Set some reference sequence
@@ -4592,6 +4731,7 @@ GUI_TEST_CLASS_DEFINITION(test_0064){
 GUI_TEST_CLASS_DEFINITION(test_0065){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Use context menu: {Copy->Copy consensus with gaps}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "Copy consensus with gaps"));
 
@@ -4604,6 +4744,7 @@ GUI_TEST_CLASS_DEFINITION(test_0065){
 GUI_TEST_CLASS_DEFINITION(test_0066){
 //    Open COI.aln consArea
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select some area on consensus with mouse
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1, -3), QPoint(10, -3));
 //    Check selection on consensus and alignment
@@ -4621,6 +4762,7 @@ GUI_TEST_CLASS_DEFINITION(test_0067){
 GUI_TEST_CLASS_DEFINITION(test_0068){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press on some sequence in nameList with right button
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 2));
 //    Use context menu: {Copy->Copy current sequence}
@@ -4635,6 +4777,7 @@ 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");
@@ -4685,6 +4828,7 @@ GUI_TEST_CLASS_DEFINITION(test_0069){
 GUI_TEST_CLASS_DEFINITION(test_0070){
 //    Open empty alignment
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press on nameList area
     GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_name_list"));
 //    Check state
@@ -4693,6 +4837,7 @@ GUI_TEST_CLASS_DEFINITION(test_0070){
 GUI_TEST_CLASS_DEFINITION(test_0071){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Click on some character on sequence area
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 2));
 //    Press on other character with shift modifier
@@ -4707,6 +4852,7 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
 //    Open COI.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "Chikungunya_E1.fasta");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(5, 5));
 //    Check keys: arrows
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
@@ -4728,15 +4874,15 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
 //    shift + arrows
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
-    GTGlobals::sleep(300);
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5,4), QPoint(5,5)));
 
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"]);
-    GTGlobals::sleep(300);
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,4), QPoint(5,5)));
 
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
-    GTGlobals::sleep(300);
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,5), QPoint(5,5)));
 
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"]);
@@ -4747,7 +4893,7 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
     QScrollBar* hbar = GTWidget::findExactWidget<QScrollBar*>(os, "horizontal_sequence_scroll");
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["end"]);
     GTGlobals::sleep(300);
-    CHECK_SET_ERR(hbar->value() > 1820, QString("end key scrollbar value: %1").arg(hbar->value()))
+    CHECK_SET_ERR(hbar->value() == hbar->maximum(), QString("end key scrollbar value: %1").arg(hbar->value()))
 //    home
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
     GTGlobals::sleep(300);
@@ -4764,7 +4910,7 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
     QScrollBar* vbar = GTWidget::findExactWidget<QScrollBar*>(os, "vertical_sequence_scroll");
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["end"], GTKeyboardDriver::key["shift"]);
     GTGlobals::sleep(300);
-    CHECK_SET_ERR(vbar->value() == 1695, QString("shift + end key works wrong. Scrollbar value: %1").arg(vbar->value()))
+    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"]);
     GTGlobals::sleep(300);
@@ -4795,6 +4941,7 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
 GUI_TEST_CLASS_DEFINITION(test_0073){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Unload document
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"action_project__unload_selected_action"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
@@ -4809,11 +4956,12 @@ GUI_TEST_CLASS_DEFINITION(test_0073){
 GUI_TEST_CLASS_DEFINITION(test_0074){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(0, 5));
 //    Open "Export subalignment" dialog
     class custom: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             GTGlobals::sleep(500);
 
@@ -4853,6 +5001,7 @@ GUI_TEST_CLASS_DEFINITION(test_0074){
 GUI_TEST_CLASS_DEFINITION(test_0075){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* overview = GTWidget::findWidget(os, "msa_overview_area_graph");
     QImage init = GTWidget::getImage(os, overview);
 //    Use context menu on overview: {Calculation method->Clustal}
@@ -4873,6 +5022,7 @@ GUI_TEST_CLASS_DEFINITION(test_0075){
 GUI_TEST_CLASS_DEFINITION(test_0076){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* overview = GTWidget::findWidget(os, "msa_overview_area_graph");
 //    Show simple overview
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
@@ -4904,6 +5054,7 @@ GUI_TEST_CLASS_DEFINITION(test_0076){
 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");
@@ -4926,6 +5077,7 @@ GUI_TEST_CLASS_DEFINITION(test_0077){
 GUI_TEST_CLASS_DEFINITION(test_0078){
 //    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");
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 f3acf54..c9a682c 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
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -245,7 +245,7 @@ GUI_TEST_CLASS_DECLARATION(test_0077)
 GUI_TEST_CLASS_DECLARATION(test_0078)
 
 GUI_TEST_CLASS_DECLARATION(test_fake)
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 72ffc5d..870b26e 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
@@ -19,23 +19,23 @@
  * MA 02110-1301, USA.
  */
 #include "GTTestsAlignSequenceToMsa.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTGlobals.h"
-#include "api/GTClipboard.h"
-#include "api/GTAction.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTToolbar.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTCheckBox.h"
-#include "GTUtilsDialog.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTSpinBox.h>
+#include "GTGlobals.h"
+#include "system/GTClipboard.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTCheckBox.h>
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
@@ -43,7 +43,7 @@
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
@@ -52,8 +52,9 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_align_sequences_to_msa{
+using namespace HI;
 
-void checkAlignedRegion(U2OpStatus& os, QRect selectionRect, const QString& expectedContent) {
+void checkAlignedRegion(HI::GUITestOpStatus& os, QRect selectionRect, const QString& expectedContent) {
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, selectionRect.center().x()));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
@@ -77,9 +78,11 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "3000_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "tub1.txt");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::click(os, "tub");
     GTUtilsMdi::activateWindow(os, "3000_sequences [m] 3000_sequences");
@@ -106,9 +109,11 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "3000_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "tub1.txt");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::click(os, "tub");
     GTUtilsMdi::activateWindow(os, "3000_sequences [m] 3000_sequences");
@@ -135,6 +140,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/cmdline/primers/", "primers.fa");
     GTUtilsDialog::waitForDialog(os, ob);
@@ -165,6 +171,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     //Expected state: UGENE alignment started and finished succesfully
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsExternalTools::removeTool(os, "MAFFT");
 
@@ -187,6 +194,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 GUI_TEST_CLASS_DEFINITION(test_0005){
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "TUB.msf");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList fileList;
     fileList << "tub1.txt" << "tub3.txt";
@@ -227,6 +235,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 GUI_TEST_CLASS_DEFINITION(test_0006){
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "TUB.msf");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsExternalTools::removeTool(os, "MAFFT");
 
@@ -272,6 +281,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, dataDir + "samples/Genbank/", "CVU55762.gb");
     GTUtilsDialog::waitForDialog(os, ob);
@@ -290,6 +300,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList fileList;
     fileList << "39_034.ab1" << "19_022.ab1" << "25_032.ab1";
@@ -310,6 +321,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "TUB.msf");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/clustal/", "COI na.aln");
     GTUtilsDialog::waitForDialog(os, ob);
@@ -327,6 +339,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     //2. Ensure that MAFFT tool is set.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/empty.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Click "Align sequence to this alignment" button on the toolbar.
     //4. Select "data/samples/FASTQ/eas.fastq".
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
index 581338d..ffc3664 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_align_sequences_to_msa {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_align_sequences_to_msa_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_align_sequences_to_msa"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -42,7 +42,7 @@ GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
index 1f617f9..a7d8acd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
@@ -19,34 +19,36 @@
  * MA 02110-1301, USA.
  */
 #include "GTTestsMSAEditorColors.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "GTUtilsApp.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "GTUtilsMdi.h"
+#include "GTUtilsTaskTreeView.h"
+
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_colors {
-
-void checkColor(U2OpStatus &os, QPoint p, QString expectedColor, int Xmove=0,int Ymove=0){
+using namespace HI;
+void checkColor(HI::GUITestOpStatus &os, QPoint p, QString expectedColor, int Xmove=0,int Ymove=0){
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     CHECK_SET_ERR(seq!=NULL,"msa_editor_sequence_area widget is NULL")
 
@@ -69,6 +71,7 @@ void checkColor(U2OpStatus &os, QPoint p, QString expectedColor, int Xmove=0,int
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Colors->UGENE} in MSA editor area.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Colors"<<"UGENE"));
@@ -96,6 +99,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 GUI_TEST_CLASS_DEFINITION(test_0002){
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu {Colors->No Colors} in MSA editor area.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Colors"<<"No colors"));
@@ -120,6 +124,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 GUI_TEST_CLASS_DEFINITION(test_0003){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Colors->Jalview} in MSA editor area.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Colors"<<"Jalview"));
@@ -145,6 +150,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 GUI_TEST_CLASS_DEFINITION(test_0004){
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu {Colors->Persentage identity} in MSA editor area.
 //    Expected state: Background of the symbol  with the highest number of matches in the column is painted over.
 //    Intensity of colour depends on the frequency of appearance in the column.
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
index ea6b720..1f32974 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
@@ -24,20 +24,20 @@ k
 #define GTTESTS_MSA_EDITOR_COLORS_H_
 
 #include <U2Test/GUITestBase.h>
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_colors {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_colors_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor_colors"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0004)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
index 0bbbddc..6312c7e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
@@ -19,23 +19,25 @@
  * MA 02110-1301, USA.
  */
 #include "GTTestsMSAEditorConsensus.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTGlobals.h"
-#include "api/GTComboBox.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsDialog.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTSpinBox.h>
+#include "GTGlobals.h"
+#include <primitives/GTComboBox.h>
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsTaskTreeView.h"
+
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
 namespace U2 {
@@ -47,6 +49,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 //    Check consensus in MSA editor
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu {Consensus mode} in MSA editor area.
 //    Expected state: consensus representstion dialog appeared
 
@@ -75,6 +78,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Default consensus type. Set 100% treshhold
@@ -104,6 +108,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Default consensus type. Set 100% treshhold
@@ -128,6 +133,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Default consensus type. Set 100% treshhold
@@ -152,6 +158,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Strict consensus type. Set 100% treshhold.
@@ -181,6 +188,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Strict consensus type. Set 100% treshhold.
@@ -205,6 +213,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Strict consensus type. Set 100% treshhold.
@@ -230,6 +239,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Levitsky consensus type. Set 90% treshhold.
@@ -258,6 +268,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Levitsky consensus type. Set 90% treshhold.
@@ -282,6 +293,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2){
 //Check consensus in MSA editor
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Use context menu {Consensus mode} in MSA editor area.
 //Expected state: consensus representstion dialog appeared
 //3. Select Levitsky consensus type. Set 90% treshhold.
@@ -302,7 +314,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2){
 //Expected state: consensus must be W-------------
 }
 
-void checkLimits(U2OpStatus &os, int minVal, int maxVal){
+void checkLimits(HI::GUITestOpStatus &os, int minVal, int maxVal){
     QSlider* thresholdSlider = qobject_cast<QSlider*>(GTWidget::findWidget(os, "thresholdSlider"));
     CHECK_SET_ERR(thresholdSlider != NULL, "thresholdSlider not found");
     int actualSliderMin = thresholdSlider->minimum();
@@ -322,6 +334,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 //check thresholdSpinBox and thresholdSlider limits
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
     GTGlobals::sleep(200);
@@ -338,7 +351,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     checkLimits(os, 1, 100);
 }
 
-void checkValues(U2OpStatus &os, int expected){
+void checkValues(HI::GUITestOpStatus &os, int expected){
     QSlider* thresholdSlider = qobject_cast<QSlider*>(GTWidget::findWidget(os, "thresholdSlider"));
     CHECK_SET_ERR(thresholdSlider != NULL, "thresholdSlider not found");
     int actualSliderValue = thresholdSlider->value();
@@ -354,6 +367,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 //check reset button
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
     GTGlobals::sleep(200);
@@ -368,16 +382,19 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
     GTComboBox::setIndexWithText(os, consensusType, "Default");
     GTSpinBox::setValue(os, thresholdSpinBox, 10, GTGlobals::UseKeyBoard);
     GTWidget::click(os, thresholdResetButton);
+    GTGlobals::sleep(500);
     checkValues(os, 100);
 //3. Select "Levitsky" consensus mode
     GTComboBox::setIndexWithText(os, consensusType, "Levitsky");
     GTSpinBox::setValue(os, thresholdSpinBox, 70, GTGlobals::UseKeyBoard);
     GTWidget::click(os, thresholdResetButton);
+    GTGlobals::sleep(500);
     checkValues(os, 90);
 //3. Select "Strict" consensus mode
     GTComboBox::setIndexWithText(os, consensusType, "Strict");
     GTSpinBox::setValue(os, thresholdSpinBox, 10, GTGlobals::UseKeyBoard);
     GTWidget::click(os, thresholdResetButton);
+    GTGlobals::sleep(500);
     checkValues(os, 100);
 }
 } // namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
index eef00a4..78948fd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_consensus {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_consensus_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor_consensus"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 
@@ -48,7 +48,7 @@ GUI_TEST_CLASS_DECLARATION(test_0004_2)
 GUI_TEST_CLASS_DECLARATION(test_0005)
 GUI_TEST_CLASS_DECLARATION(test_0006)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 f3ef74a..3a13418 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
@@ -25,37 +25,40 @@
 #include <QCheckBox>
 #include <QTableWidget>
 
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include <GTGlobals.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTUtilsDialog.h>
+
 #include "GTTestsMSAEditorEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTSpinBox.h"
-#include "api/GTGlobals.h"
-#include "api/GTClipboard.h"
-#include "api/GTAction.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTCheckBox.h"
-#include "GTUtilsDialog.h"
+#include "GTUtilsTaskTreeView.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
-#include "runnables/qt/PopupChooser.h"
+#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
-#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorSequenceArea.h>
 
 namespace U2 {
+using namespace HI;
 
-void test_1(U2OpStatus &os,int i, QString expectedSec, int j = 0) {
+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"]);
 
@@ -78,6 +81,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 //Check insert gaps
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_1(os,0,"-AAGACTTCTTTTAA");
 //2. Select first symbol for Phaneroptera_falcata sequence. Press "space".
@@ -85,6 +89,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 }
 GUI_TEST_CLASS_DEFINITION(test_0001_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_1(os,3,"-AAGTC---TATTAA");
 //DIFFERENCE:Select first symbol for Tettigonia_viridissima sequence. Press "space".
@@ -92,13 +97,14 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1){
 }
 GUI_TEST_CLASS_DEFINITION(test_0001_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_1(os,6,"TAGCT-TATTAA---",5);
 //DIFFERENCE:Select first symbol for Conocephalus_percaudata sequence. Press "space".
 //Expected state: Conocephalus_percaudata TAGCT-TATTAA--, sequence length 14, right offset 14
 }
 
-void test_3(U2OpStatus &os, int i=0, QString expectedSec=""){
+void test_3(HI::GUITestOpStatus &os, int i=0, QString expectedSec=""){
 //2. Select 6th symbol for Phaneroptera_falcata sequence. Use context menu {Edit->Insert gap}.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(13,i));
 
@@ -119,6 +125,7 @@ void test_3(U2OpStatus &os, int i=0, QString expectedSec=""){
 GUI_TEST_CLASS_DEFINITION(test_0003){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_3(os,0,"AAGACTTCTTTTA-A");
 //Expected state: Phaneroptera_falcata AAGAC-TTCTTTTAA, sequence length 15, right offset 14
@@ -126,6 +133,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 
 GUI_TEST_CLASS_DEFINITION(test_0003_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_3(os,3,"AAGTC---TATTA-A");
 //Expected state: DIFFERENCE: Tettigonia_viridissima AAGTC---TATTA-A, sequence length 15, right offset 14
@@ -133,12 +141,13 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1){
 
 GUI_TEST_CLASS_DEFINITION(test_0003_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_3(os,7,"AAGTCTTT---TA-A");
 //Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTCTTT---TA-A, sequence length 15, right offset 14
 }
 
-void test_4(U2OpStatus &os, int startPos, int endPos, QString expectedSeq, int i=0, int context=0){
+void test_4(HI::GUITestOpStatus &os, int startPos, int endPos, QString expectedSeq, int i=0, int context=0){
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(startPos,i), QPoint(endPos, i));
 
     if(context){
@@ -162,6 +171,7 @@ void test_4(U2OpStatus &os, int startPos, int endPos, QString expectedSeq, int i
 GUI_TEST_CLASS_DEFINITION(test_0004){
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select 1..5 region for Phaneroptera_falcata sequence. Press "delete".
     test_4(os,0,4,"TTCTTTTAA-----");
 //    Expected state: Phaneroptera_falcata TTCTTTTAA-----, sequence length 14, right offset 9
@@ -169,6 +179,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
 GUI_TEST_CLASS_DEFINITION(test_0004_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,0,4,"---TATTAA-----",3);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima ---TATTAA-----, sequence length 14, right offset 9
@@ -176,6 +187,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1){
 
 GUI_TEST_CLASS_DEFINITION(test_0004_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,0,4,"TTT---TAA-----",7);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J TTT---TAA-----, sequence length 14, right offset 9
@@ -184,6 +196,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2){
 GUI_TEST_CLASS_DEFINITION(test_0005){
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select 6..9 symbol for Phaneroptera_falcata sequence. Use context menu {Edit->Delete selection}.
     test_4(os,5,8,"AAGACTTTAA----");
 //    Expected state: Phaneroptera_falcata AAGACTTTAA----, sequence length 14, right offsets 10
@@ -191,6 +204,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 
 GUI_TEST_CLASS_DEFINITION(test_0005_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,5,8,"AAGTCATTAA----",3);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima AAGTCATTAA----, sequence length 14, right offset 10
@@ -198,6 +212,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1){
 
 GUI_TEST_CLASS_DEFINITION(test_0005_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,5,8,"AAGTC--TAA----",7);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTC--TAA----, sequence length 14, right offset 10
@@ -206,6 +221,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2){
 GUI_TEST_CLASS_DEFINITION(test_0006){
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select 13..14 symbol for Phaneroptera_falcata sequence. Use context menu {Edit->Delete selection}.
     test_4(os,12,13,"AAGACTTCTTTT--",0,1);
 //    Expected state: Phaneroptera_falcata AAGACTTCTTTT--, sequence length 14, right offsets 12
@@ -213,6 +229,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 
 GUI_TEST_CLASS_DEFINITION(test_0006_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,12,13,"AAGTC---TATT--",3,1);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima AAGTC---TATT--, sequence length 14, right offsets 12
@@ -220,6 +237,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){
 
 GUI_TEST_CLASS_DEFINITION(test_0006_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_4(os,12,13,"AAGTCTTT---T--",7,1);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTCTTT---T--, sequence length 14, right offsets 12
@@ -229,6 +247,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 //    Check remove all gaps
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use msa editor context menu {Edit->Remove all gaps}.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "Remove all gaps"));
@@ -269,6 +288,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){
 //    Check remove all gaps
 //DIFFERENSE:    1. Open document _common_data\scenarios\msa\ma2_gap_col.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use msa editor context menu {Edit->Remove all gaps}.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "Remove all gaps"));
@@ -308,6 +328,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 //Check remove columns with gaps
 //1. Open document _common_data\scenarios\msa\ma2_gap_col.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Place cursor on 4th column of alignment. Use msa editor context menu (at the column with gaps) {Edit->Remove column of gaps}.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(3,3));
 
@@ -354,6 +375,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){
 //Check remove columns with gaps
 //1. Open document _common_data\scenarios\msa\ma2_gap_col.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Place cursor on 4th column of alignment. Use msa editor context menu (at the column with gaps) {Edit->Remove column of gaps}.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(3,3));
 
@@ -405,7 +427,7 @@ Hetrodes_pupus_EF540832            AAGCTTTTAA---
 }
 
 
-void test_9(U2OpStatus &os, int i=0){
+void test_9(HI::GUITestOpStatus &os, int i=0){
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     QString gaps;
     QString expectedSeq;
@@ -494,12 +516,14 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 //Check remove columns with gaps
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Put cursor at last symbol in first sequence, click "Space" two times.
     test_9(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0009_1){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //DIFFERENCE: 2. Select column 3, click "Space" two times.
     test_9(os,2);
 
@@ -507,6 +531,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1){
 
 GUI_TEST_CLASS_DEFINITION(test_0009_2){
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //DIFFERENCE: 2. Select column 9, click "Space" two times.
     test_9(os,8);
 }
@@ -515,10 +540,14 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 //UGENE crashes when edit multiply alignment (0001744)
 //1. Open file samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open at least 2 views for multiple alignment
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //3. Try to edit MSA(insert spaces or something
     GTUtilsMSAEditorSequenceArea::click(os);
@@ -533,6 +562,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
 //Check Undo/Redo functional
 //1. Open document _common_data\scenarios\msa\ma.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    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"]);
@@ -571,6 +601,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){
 //Check Undo/Redo functional
 //1. Open document _common_data\scenarios\msa\ma.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    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"]);
@@ -614,6 +645,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){
 //Check Undo/Redo functional
 //1. Open document _common_data\scenarios\msa\ma.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use msa editor context menu {Edit->Remove all gaps}.
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "Remove all gaps"));
@@ -676,6 +708,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3){
 //Check Undo/Redo functional
 //1. Open document _common_data\scenarios\msa\ma.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Insert seversl spaces somewhere
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
     for(int i=0; i<6; i++){
@@ -704,6 +737,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
 //Check copy
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. 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"]);
@@ -722,7 +756,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
     CHECK_SET_ERR(clipboardTest=="TATTAA-","\n Expected: \nTATTAA-\nFound:\n"+clipboardTest);
 }
 
-void test_13(U2OpStatus &os, int comboVal, int SpinVal, QString ExpectedCons){
+void test_13(HI::GUITestOpStatus &os, int comboVal, int SpinVal, QString ExpectedCons){
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Consensus mode",GTGlobals::UseMouse));
@@ -738,6 +772,7 @@ void test_13(U2OpStatus &os, int comboVal, int SpinVal, QString ExpectedCons){
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"MSAE_MENU_COPY" << "Copy consensus",GTGlobals::UseMouse));
     GTMenu::showContextMenu(os,seq);
+    GTGlobals::sleep(1000);
 
     QString clipboardText=GTClipboard::text(os);
     GTGlobals::sleep(500);
@@ -747,6 +782,7 @@ void test_13(U2OpStatus &os, int comboVal, int SpinVal, QString ExpectedCons){
 GUI_TEST_CLASS_DEFINITION(test_0013){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_13(os,1,100,"aagc+tattaataa");
 }
@@ -754,6 +790,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013){
 GUI_TEST_CLASS_DEFINITION(test_0013_1){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_13(os,1,1,"AAGC+TATTAATAA");
 }
@@ -761,6 +798,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1){
 GUI_TEST_CLASS_DEFINITION(test_0013_2){
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     test_13(os,2,75,"WAGYYTWYTAW");
 }
@@ -769,6 +807,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
 //Create subaligniment
 //1. Open document samples\CLUSTALW\COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Right click on aligniment view. Open context menu {Export->save subalignment}
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(0,5),QPoint(10,5));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_EXPORT<<"Save subalignment"));
@@ -799,108 +838,85 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
 //Montana_montana TTATTAATTCG
 //Zychia_baranovi TTATTAATCCG
 }
-class SpecialExtractSelectedAsMSADialogFiller : public Filler {
-public:
-    SpecialExtractSelectedAsMSADialogFiller(U2OpStatus &os) : Filler(os, "CreateSubalignmentDialog"){}
-    virtual void run(){
-        QWidget* dialog = QApplication::activeModalWidget();
-        CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-
-        QTableWidget *table=dialog->findChild<QTableWidget*>("sequencesTableWidget");
-        CHECK_SET_ERR(table!=NULL, "tableWidget is NULL");
-
-        for(int i=0; i<table->rowCount() ;i++){//check all selected
-            QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
-            CHECK_SET_ERR(box->isChecked(),"box" + box->text() + "is not checked");
-        }
 
-        QWidget *noneButton = dialog->findChild<QWidget*>("noneButton");//clear button
-        CHECK_SET_ERR(noneButton!=NULL, "noneButton is NULL");
-        GTWidget::click(os,noneButton);
-
-        for(int i=0; i<table->rowCount() ;i++){//check all unselected
-            QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
-            CHECK_SET_ERR(!box->isChecked(),"box " + box->text() + " is checked");
-        }
-
-        QPoint p=table->geometry().topRight();
-        p.setX(p.x()-2);
-        p.setY(p.y()+2);
-        p=dialog->mapToGlobal(p);
-        GTMouseDriver::moveTo(os,p);
-        GTMouseDriver::doubleClick(os);
-
-        QStringList list;
-        list<<"Zychia_baranovi"<<"Montana_montana";//select these
-        for(int i=0; i<table->rowCount() ;i++){
-            GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["down"]);
-            GTGlobals::sleep(100);
-            foreach(QString s, list){
-                QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
-                if (s==box->text()){
-                    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["space"]);
-                }
-            }
-        }
+GUI_TEST_CLASS_DEFINITION(test_0015) {
+//Create subaligniment
+//1. Open document "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-        QWidget *invertButton = dialog->findChild<QWidget*>("invertButton");//click invert button
-        CHECK_SET_ERR(invertButton!=NULL, "invertButton is NULL");
-        GTWidget::click(os,invertButton);
+//2. Right click on aligniment view. Open context menu {Export->save subalignment}
 
-        for(int i=4; i<table->rowCount() ;i++){//check invertion result
-            bool nameFound=false;
-            QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+//Expected state: Create subaligniment dialog has appeared, all sequences are checked
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
-            foreach(QString s, list){
-                if (s==box->text()){
-                    CHECK_SET_ERR(!box->isChecked(), "box "+box->text()+" is checked. It must be uncheked");
-                    nameFound=true;
-                }
-            }
+            QTableWidget *table = GTWidget::findExactWidget<QTableWidget *>(os, "sequencesTableWidget", dialog);
+            CHECK_SET_ERR(NULL != table, "tableWidget is NULL");
 
-            if(!nameFound){
-                CHECK_SET_ERR(box->isChecked(), "box "+box->text()+" is unchecked. It must be cheked");
+            for (int i = 0; i < table->rowCount(); i++){
+                QCheckBox *box = qobject_cast<QCheckBox *>(table->cellWidget(i, 0));
+                CHECK_SET_ERR(box->isChecked(), QString("box '%1' is not checked").arg(box->text()));
             }
-        }
-
-        QWidget *allButton = dialog->findChild<QWidget*>("allButton");//click SelectAll button
-        CHECK_SET_ERR(allButton!=NULL, "allButton is NULL");
-        GTWidget::click(os,allButton);
-
-        for(int i=0; i<table->rowCount() ;i++){//check all selected
-            QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
-            CHECK_SET_ERR(box->isChecked(),"box " + box->text() + " is not checked");
-        }
-
-        QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-        CHECK_SET_ERR(box != NULL, "buttonBox is NULL");
-        QPushButton* button = box->button(QDialogButtonBox::Cancel);
-        CHECK_SET_ERR(button !=NULL, "cancel button is NULL");
-        GTWidget::click(os, button);
-    }
-};
-GUI_TEST_CLASS_DEFINITION(test_0015){
-//Create subaligniment
-//1. Open document samples\CLUSTALW\COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
-//2. Right click on aligniment view. Open context menu {Export->save subalignment}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_EXPORT<<"Save subalignment"));
-    GTUtilsDialog::waitForDialog(os,new SpecialExtractSelectedAsMSADialogFiller(os));
-    GTMenu::showContextMenu(os,GTWidget::findWidget(os,"msa_editor_sequence_area"));
-//Expected state: Create subaligniment dialog has appeared, all sequences are checked
 
 //3. Click button Clean selection
+            GTWidget::click(os, GTWidget::findWidget(os, "noneButton"));
+
 //Expected result: all sequences unchecked
+            for (int i = 0; i < table->rowCount(); i++){
+                QCheckBox *box = qobject_cast<QCheckBox *>(table->cellWidget(i,0));
+                CHECK_SET_ERR(!box->isChecked(), QString("box '%1' is checked").arg(box->text()));
+            }
 
 //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);
+
+            const QStringList list = QStringList() << "Zychia_baranovi" << "Montana_montana";
+            for (int i = 0; i < table->rowCount(); i++) {
+                GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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"]);
+                    GTGlobals::sleep(100);
+                }
+            }
 
 //5. Click button Invert selection
+            GTWidget::click(os, GTWidget::findWidget(os, "invertButton", dialog));
+
 //Expected result: all sequences except Montana_montana, Zychia_baranovi are checked
+            for (int i = 1; i < table->rowCount(); i++) {
+                QCheckBox *box = qobject_cast<QCheckBox *>(table->cellWidget(i, 0));
+                if (list.contains(box->text())) {
+                    CHECK_SET_ERR(!box->isChecked(), QString("box '%1' is checked. It must be unchecked").arg(box->text()));
+                } else {
+                    CHECK_SET_ERR(box->isChecked(), QString("box '%1' is unchecked. It must be cheked").arg(box->text()));
+                }
+            }
 
 //6. Click button Select all
+            GTWidget::click(os, GTWidget::findWidget(os, "allButton"));
+
 //Expected result: all sequences are checked
+            for (int i = 0; i < table->rowCount(); i++){
+                QCheckBox *box = qobject_cast<QCheckBox *>(table->cellWidget(i, 0));
+                CHECK_SET_ERR(box->isChecked(), QString("box '%1' is not checked").arg(box->text()));
+            }
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
+    GTUtilsDialog::waitForDialog(os, new ExtractSelectedAsMSADialogFiller(os, new Scenario));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep();
 }
 
 } // namespace
 } // namespace U2
-
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
index 087b5c5..c6a560f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_edit {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_edit_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor_edit"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -77,7 +77,7 @@ GUI_TEST_CLASS_DECLARATION(test_0013_2)
 GUI_TEST_CLASS_DECLARATION(test_0014)
 GUI_TEST_CLASS_DECLARATION(test_0015)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 82fbf9e..9c7d8ea 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
@@ -19,33 +19,35 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsMSAEditorOverview.h"
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
-#include "api/GTAction.h"
-#include "api/GTMenu.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTComboBox.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/ColorDialogFiller.h"
-#include "GTUtilsTaskTreeView.h"
-#include "GTUtilsMsaEditorSequenceArea.h"
+#include <QMainWindow>
 
 #include <U2Core/AppContext.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QMainWindow>
-#endif
+
+#include "GTTestsMSAEditorOverview.h"
+#include "GTUtilsMsaEditor.h"
+#include "GTUtilsMsaEditorSequenceArea.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GTUtilsProjectTreeView.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTToolbar.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/ColorDialogFiller.h>
+#include "primitives/PopupChooser.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_overview {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001){
     //1. Open "_common_data/fasta/empty.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
@@ -73,6 +75,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     //1. Open "_common_data/clustal/10000_sequences.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "10000_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state: simple overview is disabled, graph overview is displayed.
     QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
     CHECK_SET_ERR(!simple->isVisible(), "simple overveiw is visiable");
@@ -84,6 +87,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 GUI_TEST_CLASS_DEFINITION(test_0003){
 //    1. Open "_common_data/clustal/protein.fasta.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "protein.fasta.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click on "Overview" button on tool bar.
     QAbstractButton* button = GTAction::button(os, "Show overview");
     GTWidget::click(os, button);
@@ -101,6 +105,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 // + show/hide simple overview
 //    1. Open "_common_data/clustal/protein.fasta.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "protein.fasta.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA Overview context menu (right click on msa overview).
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
@@ -120,31 +125,37 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 GUI_TEST_CLASS_DEFINITION(test_0005){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 //    Expected state: simple overview is enabled.
     QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
     CHECK_SET_ERR(simple->isVisible(), "simple overveiw is not visiable");
 //    2. Resize Ugene window to make overview area smaller.
-    QMainWindow* window = AppContext::getMainWindow()->getQMainWindow();
-    window->showNormal();
-    window->resize(550,550);
-    GTGlobals::sleep(1000);
+    QMainWindow *window = AppContext::getMainWindow()->getQMainWindow();
+    if (window->isMaximized()) {
+        GTWidget::showNormal(os, window);
+        GTGlobals::sleep(500);
+    }
+    GTWidget::resizeWidget(os, window, QSize(550, 550));
 //    Expected state: at some moment simple overview is not displayed -
 //    there is a gray area with "MSA is too big for current window size. Simple overview is unavailable." text.
 
-    // text can not be cheched, check color
+    // text can not be checked, check color
     QPixmap pixmap = QPixmap::grabWidget(simple, simple->rect());
     QImage img = pixmap.toImage();
     QRgb rgb = img.pixel(simple->rect().topLeft() + QPoint(5,5));
     QColor c(rgb);
-
     CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
+
+    const int tasksCount = GTUtilsTaskTreeView::getTopLevelTasksCount(os);
+    CHECK_SET_ERR(0 == tasksCount,"An unexpected task is running. Ensure that the overview is not calculating");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0006){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 //    2. Resize main window.
@@ -174,6 +185,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 GUI_TEST_CLASS_DEFINITION(test_0007){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 //    2. Delete symbols until msa becomes very small.
@@ -208,6 +220,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 GUI_TEST_CLASS_DEFINITION(test_0008){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
@@ -252,6 +265,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 GUI_TEST_CLASS_DEFINITION(test_0009){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
@@ -289,6 +303,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 GUI_TEST_CLASS_DEFINITION(test_0010){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
@@ -330,6 +345,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 GUI_TEST_CLASS_DEFINITION(test_0011){
 //    1. Open "_common_data/phylip/seq_protein.ph".
     GTFileDialog::openFile(os, testDir + "_common_data/phylip", "seq_protein.ph");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     //saving overview image
     QPixmap pixmapGraph = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
@@ -351,6 +367,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
 GUI_TEST_CLASS_DEFINITION(test_0012){
 //    1. Open "_common_data/stockholm/5_msa.sto".
     GTFileDialog::openFile(os, testDir + "_common_data/stockholm", "5_msa.sto");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA Overview context menu (right click on msa overview).
     GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255,0,0));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Display settings"
@@ -373,6 +390,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
 GUI_TEST_CLASS_DEFINITION(test_0013){
 //    1. Open "_common_data/stockholm/5_msa.sto".
     GTFileDialog::openFile(os, testDir + "_common_data/stockholm", "5_msa.sto");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA Overview context menu (right click on msa overview).
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Display settings"
                                                       << "Graph type"
@@ -393,6 +411,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013){
 GUI_TEST_CLASS_DEFINITION(test_0014){
 //    1. Open "_common_data/clustal/COI_na.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
@@ -405,20 +424,16 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
     GTGlobals::sleep(200);
 
 //    3. Change Color Scheme.
-    QPixmap pixmap = QPixmap::grabWidget(overviewSimple, overviewSimple->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(QPoint(5, overviewSimple->rect().height() - 5));
-    QColor c(rgb);
-
+    const QColor c = GTUtilsMsaEditor::getSimpleOverviewPixelColor(os, QPoint(5, overviewSimple->rect().height() - 5));
     CHECK_SET_ERR(c.name()=="#ededed","simple overview has wrong color. Expected: #ededed, Found: " + c.name());
 //    Expected state: in simple msa overview color scheme was changed.
-
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0015){
     //this is 0015 and 0016 scenarios
 //    1. Open "_common_data/CLUSLAL/COI_na.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA overview context menu (right click on MSA Overview).
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
@@ -450,6 +465,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015){
 GUI_TEST_CLASS_DEFINITION(test_0017){
 //    1. Open "_common_data/CLUSLAL/HIV_1.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA overview context menu (right click on MSA Overview).
 //    3. Select {Calculation method -> Gaps}.
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
@@ -486,6 +502,7 @@ GUI_TEST_CLASS_DEFINITION(test_0019){
     //0019 and 0020 scenarios
 //    1. Open "_common_data/CLUSLAL/HIV_1.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Go to MSA overview context menu (right click on MSA Overview).
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
@@ -517,6 +534,87 @@ GUI_TEST_CLASS_DEFINITION(test_0019){
 
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0020){
+/* 1. Open "_common_data/clustal/test_1393.aln".
+ * 2. Show simple overview.
+ * 3. Select whole alignment.
+ * Expected state: whole simple overview is filled with a selection rect.
+ * 4. Click "Align sequence to this alignment" button on the tool bar and select "data/samples/fastq/eas.fastq".
+ * Expected state: sequences are added, two of five sequences are selected both in the sequence area and simple overview.
+ * Current state: sequences are added, two of five sequences are selected in the sequence area, but the simple overview if filled with a selection rect like whole alignment is selected.
+ */
+
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5,0), QPoint(-5,2));
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/FASTQ/eas.fastq"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTGlobals::sleep();
+    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
+    CHECK_SET_ERR(color.name() == "#ededed", "graph overview has wrong color. Expected: #ededed, Found: " + color.name());
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0021){
+/* 1. Open "_common_data/clustal/test_1393.aln".
+ * 2. Select whole alignment.
+ * 3. Show simple overview.
+ * Expected state: whole simple overview is filled with a selection rect.
+ * Current state: selection not showed.
+ */
+
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-4,2), QPoint(-5,0));
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+
+    GTGlobals::sleep();
+    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
+    CHECK_SET_ERR(color.name() == "#7eaecc", "graph overview has wrong color. Expected: #7eaecc, Found: " + color.name());
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0022){
+/* 1. Open "_common_data/clustal/test_1393.aln".
+ * 2. Open ProjectView if it closed
+ * 3. Select whole alignment.
+ * 4. Show simple overview.
+ * Expected state: whole simple overview is filled with a selection rect.
+ * 5. Close ProjectView
+ * Expected state: whole simple overview is filled with a selection rect.
+ * Current state: selection is not full.
+ */
+
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsProjectTreeView::openView(os);
+
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-4,2), QPoint(-5,0));
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+
+    GTUtilsProjectTreeView::toggleView(os);
+
+    GTGlobals::sleep();
+
+    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
+    CHECK_SET_ERR(color.name() == "#7eaecc", "graph overview has wrong color. Expected: #7eaecc, Found: " + color.name());
+}
+
+
 }//namespace GUITest_common_scenarios_msa_editor
 
 }//namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
index 00842eb..92b8b13 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
@@ -26,8 +26,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_overview {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_overview_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor_overview"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -46,8 +46,11 @@ GUI_TEST_CLASS_DECLARATION(test_0014)
 GUI_TEST_CLASS_DECLARATION(test_0015)
 GUI_TEST_CLASS_DECLARATION(test_0017)
 GUI_TEST_CLASS_DECLARATION(test_0019)
+GUI_TEST_CLASS_DECLARATION(test_0020)
+GUI_TEST_CLASS_DECLARATION(test_0021)
+GUI_TEST_CLASS_DECLARATION(test_0022)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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
new file mode 100644
index 0000000..08546ea
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp
@@ -0,0 +1,564 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QComboBox>
+#include <QSpinBox>
+#include <QApplication>
+#include <QCheckBox>
+#include <QTableWidget>
+
+#include "GTTestsMSAEditorReplaceCharacter.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include "primitives/GTMenu.h"
+#include "GTGlobals.h"
+#include "system/GTClipboard.h"
+#include "utils/GTUtilsDialog.h"
+#include "GTUtilsNotifications.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
+#include "GTUtilsMsaEditorSequenceArea.h"
+#include "GTUtilsProjectTreeView.h"
+#include "primitives/PopupChooser.h"
+#include "GTUtilsTaskTreeView.h"
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_msa_editor_replace_character {
+using namespace HI;
+
+GUI_TEST_CLASS_DEFINITION(test_0001){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
+
+    //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"]);
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0002){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
+
+    //3. Open the context menu in the sequence area.
+    //Expected result : the menu contains an item "Edit > Replace character".The item is enabled.A hotkey Shift + R is shown nearby.
+    //4. Select the item.
+    //Expected result : the character is selected in the replacement mode.
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_character"));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+
+GUI_TEST_CLASS_DEFINITION(test_0003){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
+
+    //3. Open the main menu in the sequence area.
+    //Expected result : the menu contains an item "Actions > Edit > Replace character".The item is enabled.A hotkey Shift + R is shown nearby.
+    //4. Select the item.
+    //Expected result : the character is selected in the replacement mode.
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace selected character", GTGlobals::UseMouse);
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0004){
+    //1. Open an alignment in the Alignment Editor.
+
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a region with more than one character.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(10, 10));
+
+    //3. Open the context menu in the sequence area.
+    //Expected result : the "Edit > Replace character" item is disabled.Selection is in normal mode.
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_character", PopupChecker::IsDisabled));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
+
+    //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"]);
+
+    //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.
+    //A warning notification appears : Alphabet of the character, inserted into the alignment, differs from the alignment alphabet.The alignment alphabet has been set to
+    //"%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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005_1){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
+
+    //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"]);
+
+    //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.
+    //A warning notification appears : Alphabet of the character, inserted into the alignment, differs from the alignment alphabet.The alignment alphabet has been set to
+    //"%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');
+    GTGlobals::sleep();
+
+    //5. Click "Undo".
+    //Expected state : There is NO notifications.
+    GTUtilsMsaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //6. Click "Redo".
+    //Expected state : The warning notification appears again.
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
+    GTUtilsMsaEditor::redo(os);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0006){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 1), QPoint(9, 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"]);
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0006_1){
+    //1. Open an alignment in the Alignment Editor.
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select one character.
+    //Expected result : the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 1), QPoint(9, 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"]);
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+
+    //5. Click "Undo".
+    //Expected state : There is NO notifications.
+    GTUtilsMsaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //6. Click "Redo".
+    //Expected state : There is NO notifications.
+    GTUtilsMsaEditor::redo(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0007){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //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"]);
+
+    //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');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0008){
+    //1. Open an alignment.
+
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a gap after sequence character.
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(41, 9));
+
+    //3. Replace the gap
+    //Expected result : the gap is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0009){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a gap before sequence character.
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(43, 9));
+
+    //3. Replace the gap
+    //Expected result : the gap is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0010){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a gap between other gaps.
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(42, 9));
+
+    //3. Replace the gap
+    //Expected result : the gap is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0011){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //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"]);
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+    GTGlobals::sleep(500);
+
+    //3. Replace the gap
+    //Expected result : the gap is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0012){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a gap before the first sequence character.
+    GTUtilsMSAEditorSequenceArea::selectColumnInConsensus(os, 0);
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+GUI_TEST_CLASS_DEFINITION(test_0013){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a first character in sequence.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 9), QPoint(0, 9));
+
+    //3. Replace the character
+    //Expected result : the character is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0014){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a last character in sequence.
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(603, 9));
+
+    //3. Replace the character
+    //Expected result : the character is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMsaEditor::toggleCollapsingMode(os);
+
+    //2. Enable collapsing mode
+    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Mecopoda_elongata__Ishigaki__J");
+
+    //3. Select a character in sequence inside of the collapsing group.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 14), QPoint(9, 14));
+
+    //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(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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"]);
+    GTGlobals::sleep(200);
+    selectionContent = GTClipboard::text(os);
+    CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0016){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a character in sequence.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 9), QPoint(0, 9));
+
+    //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(os, GTKeyboardDriver::key["space"]);
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTGlobals::sleep(200);
+    QString selectionContent = GTClipboard::text(os);
+    CHECK_SET_ERR(selectionContent == "-", QString("Incorrect selection content: expected - %1, received - %2").arg("-").arg(selectionContent));
+
+    //3. Select a character in sequence.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 10), QPoint(0, 10));
+
+    //4. Replace the character to gap by '-' key
+    //Expected result : the character is succesfully replaced.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, '-');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTGlobals::sleep(200);
+    selectionContent = GTClipboard::text(os);
+    CHECK_SET_ERR(selectionContent == "-", QString("Incorrect selection content: expected - %1, received - %2").arg("-").arg(selectionContent));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0017){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a first character in sequence.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 9), QPoint(0, 9));
+
+    //3. Press unsupported key
+    //Expected result : the error notification appeared.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment.");
+    GTKeyboardDriver::keyClick(os, ']');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0018){
+    //1. Open an alignment.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select a character in sequence.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 9), QPoint(0, 9));
+
+    //3. Press 'Escape'
+    //Expected result : edit character mode is ended.
+    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+
+    GTKeyboardDriver::keyClick(os, 'c');
+    GTGlobals::sleep(200);
+
+    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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));
+}
+
+} // namespace
+} // namespace U2
+
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
similarity index 74%
copy from src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
copy to src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
index 00842eb..42bed33 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
@@ -1,54 +1,60 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 GTTESTSMSAEDITOROVERVIEW_H
-#define GTTESTSMSAEDITOROVERVIEW_H
-
-#include <U2Test/GUITestBase.h>
-
-namespace U2 {
-
-namespace GUITest_common_scenarios_msa_editor_overview {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_msa_editor_overview_"
-
-GUI_TEST_CLASS_DECLARATION(test_0001)
-GUI_TEST_CLASS_DECLARATION(test_0002)
-GUI_TEST_CLASS_DECLARATION(test_0003)
-GUI_TEST_CLASS_DECLARATION(test_0004)
-GUI_TEST_CLASS_DECLARATION(test_0005)
-GUI_TEST_CLASS_DECLARATION(test_0006)
-GUI_TEST_CLASS_DECLARATION(test_0007)
-GUI_TEST_CLASS_DECLARATION(test_0008)
-GUI_TEST_CLASS_DECLARATION(test_0009)
-GUI_TEST_CLASS_DECLARATION(test_0010)
-GUI_TEST_CLASS_DECLARATION(test_0011)
-GUI_TEST_CLASS_DECLARATION(test_0012)
-GUI_TEST_CLASS_DECLARATION(test_0013)
-GUI_TEST_CLASS_DECLARATION(test_0014)
-GUI_TEST_CLASS_DECLARATION(test_0015)
-GUI_TEST_CLASS_DECLARATION(test_0017)
-GUI_TEST_CLASS_DECLARATION(test_0019)
-
-#undef GUI_TEST_PREFIX
-} // namespace U2
-
-} //namespace
-#endif // GTTESTSMSAEDITOROVERVIEW_H
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+k
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef GTTESTS_MSA_EDITOR_REPLACE_CHARACTER_H_
+#define GTTESTS_MSA_EDITOR_REPLACE_CHARACTER_H_
+
+#include <U2Test/GUITestBase.h>
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_msa_editor_replace_character {
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_msa_editor_replace_character"
+
+GUI_TEST_CLASS_DECLARATION(test_0001)
+GUI_TEST_CLASS_DECLARATION(test_0002)
+GUI_TEST_CLASS_DECLARATION(test_0003)
+GUI_TEST_CLASS_DECLARATION(test_0004)
+GUI_TEST_CLASS_DECLARATION(test_0005)
+GUI_TEST_CLASS_DECLARATION(test_0005_1)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+GUI_TEST_CLASS_DECLARATION(test_0006_1)
+GUI_TEST_CLASS_DECLARATION(test_0007)
+GUI_TEST_CLASS_DECLARATION(test_0008)
+GUI_TEST_CLASS_DECLARATION(test_0009)
+GUI_TEST_CLASS_DECLARATION(test_0010)
+GUI_TEST_CLASS_DECLARATION(test_0011)
+GUI_TEST_CLASS_DECLARATION(test_0012)
+GUI_TEST_CLASS_DECLARATION(test_0013)
+GUI_TEST_CLASS_DECLARATION(test_0014)
+GUI_TEST_CLASS_DECLARATION(test_0015)
+GUI_TEST_CLASS_DECLARATION(test_0016)
+GUI_TEST_CLASS_DECLARATION(test_0017)
+GUI_TEST_CLASS_DECLARATION(test_0018)
+
+#undef GUI_TEST_SUITE
+} // namespace U2
+
+} //namespace
+
+#endif //GTTESTS_MSA_EDITOR_EDIT_H_
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 de6d0e7..23967fa 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
@@ -23,53 +23,47 @@
 #include <QFontComboBox>
 #include <QTextStream>
 
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-
+#include "GTTestsOptionPanel.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsOptionPanelSequenceView.h"
 #include "GTUtilsOptionsPanel.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
-
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.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/GTSpinBox.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.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/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
-
-#include "GTTestsOptionPanel.h"
+#include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
 
-/*void EnterClicker::run()
-{   GTGlobals::sleep(1000);
-
-        GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["enter"]);
-
-}*/
-
 namespace GUITest_common_scenarios_options_panel {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001){
 //    Options panel. Information tab. Character occurence
 //    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"));
 
@@ -96,6 +90,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1){
 //    Options panel. Information tab. Character occurence
 //    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"));
 
@@ -117,6 +112,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 //Options panel. Information tab. Dinucleotides
 //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. Expand Dinucleotides
     GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
     GTGlobals::sleep(500);
@@ -166,6 +162,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
 //Options panel. Information tab. Dinucleotides
 //    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. Expand Dinucleotides
     GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
 
@@ -197,6 +194,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){//commit sequenceInfo
 //    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");
@@ -216,6 +214,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1){//commit sequenceInfo
 //    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");
@@ -233,6 +232,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1){//commit sequenceInfo
 GUI_TEST_CLASS_DEFINITION(test_0004){
 //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,"Characters Occurrence");
@@ -269,9 +269,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 GUI_TEST_CLASS_DEFINITION(test_0005){
 //    Options panel. Copyng
 //    1. Open file (_common_data\fasta\multy_fa.fa). Open fiel in separate sequences mode.
-    GTUtilsDialog::waitForDialog(os, new EnterClicker(os));
-    GTFileDialog::openFile(os,testDir + "_common_data/fasta/","multy_fa.fa");
-    //GTUtilsDialog::waitForDialog(os, new EnterClicker(os));
+    GTUtilsProject::openMultiSequenceFileAsSequences(os, testDir + "_common_data/fasta/multy_fa.fa");
 
 //    2. Activate Information tab on Options panel at the right edge of UGENE window.
     GTWidget::click(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
@@ -300,6 +298,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj3.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj3.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -325,6 +324,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
 // DEFFERS: OTHER SOURSE FILE, OTHER SUBSEQUENCE
 // PROJECT IS CLOSED MANUALY TO CACHE MESSAGEBOX
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionsPanel::runFindPatternWithHotKey("TTTTTAAAAA", os);
 
@@ -345,6 +345,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
 GUI_TEST_CLASS_DEFINITION(test_0007) {
     // nucl statistics 1
     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");
@@ -371,6 +372,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     // nucl statistics 2
     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");
@@ -382,7 +384,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     QString s = QString("Length: </b></td><td>199 950");
     QString s1 = QString("GC Content: </b></td><td>38.84%");
-    QString s2 = QString("Molar Weight: </b></td><td>61730585.82");
+    QString s2 = QString("Molar Weight: </b></td><td>61730585.8");
     QString s3 = QString("Molar Ext. Coef: </b></td><td>2223359500");
     QString s4 = QString("Melting TM: </b></td><td>80.82 C");
     QString s5 = QString("nmole/OD<sub>260</sub> : </b></td><td>0.00");
@@ -403,6 +405,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 GUI_TEST_CLASS_DEFINITION(test_0009) {
     // amino statistics
     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");
@@ -425,6 +428,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 GUI_TEST_CLASS_DEFINITION(test_0010) {
     // nucl statistics update on selection
     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");
@@ -440,7 +444,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
     QString s = QString("Length: </b></td><td>199 950");
     QString s1 = QString("GC Content: </b></td><td>38.84%");
-    QString s2 = QString("Molar Weight: </b></td><td>61730585.82");
+    QString s2 = QString("Molar Weight: </b></td><td>61730585.8");
     QString s3 = QString("Molar Ext. Coef: </b></td><td>2223359500");
     QString s4 = QString("Melting TM: </b></td><td>80.82 C");
     QString s5 = QString("nmole/OD<sub>260</sub> : </b></td><td>0.00");
@@ -465,6 +469,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
     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");
@@ -488,6 +493,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     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");
@@ -532,75 +538,58 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 
 GUI_TEST_CLASS_DEFINITION(test_0013) {
     // 1. Open linear nucl sequence
-    // 2. Open "Circular View Settings" tab
-    // 3. Check the hint: it is visible
-    // 4. Open CV
-    // 5. Check the hint: it is hidden
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    ADVSingleSequenceWidget *seqWidget = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "sars.gb", "NC_004718");
-    GTWidget::click( os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
-    GTGlobals::sleep(500);
+    // 2. Open "Circular View Settings" tab
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
 
+    // 3. Check the hint: it is visible
     QWidget *openCvWidget = GTWidget::findWidget(os,"openCvWidget");
     CHECK_SET_ERR( openCvWidget != NULL, "No hint widget");
     CHECK_SET_ERR( openCvWidget->isVisible(), "Hint label and OpenCV button should be visible");
 
-    GTUtilsCv::cvBtn::click(os, seqWidget);
-    GTGlobals::sleep(500);
+    // 4. Open CV
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
+
+    // 5. Check the hint: it is hidden
     CHECK_SET_ERR(openCvWidget->isHidden(), "Hint label and OpenCV button should be hidden");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0014) {
     // 1. Open sequence with CV
-    // 2. Set some circular settings
-    // 3. Open another sequence
-    // 4. Check difference between the modified and newly opened settings
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
 
-    ADVSingleSequenceWidget *seqWidget1 = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "sars.gb", "NC_004718");
-    GTWidget::click( os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
-    GTUtilsCv::cvBtn::click(os, seqWidget1);
-    GTGlobals::sleep();
-
-    QSpinBox*  titleFontSpinBox1 = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "fontSizeSpinBox"));
-    CHECK_SET_ERR( titleFontSpinBox1 != NULL, "Title font size spinBox is NULL");
-    GTSpinBox::setValue(os, titleFontSpinBox1, 28);
-    int fontSize1 = titleFontSpinBox1->value();
-    GTWidget::click( os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
-
-    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
-    QList<ADVSingleSequenceWidget*> seqWidgets = GTUtilsMdi::activeWindow(os)->findChildren<ADVSingleSequenceWidget*>();
-    CHECK_SET_ERR(seqWidgets.size() == 1, "Wrong number of sequences");
-    ADVSingleSequenceWidget* seqWidget2 = seqWidgets.first();
-    GTUtilsCv::cvBtn::click(os, seqWidget2);
-    GTGlobals::sleep();
-
-    QWidget* parent = GTWidget::findWidget(os, "murine [s] NC_001363");
-    QWidget* cvTab = GTWidget::findWidget(os,"OP_CV_SETTINGS", parent);
-    CHECK_SET_ERR(cvTab != NULL, "CV settings tab is NULL");
-    GTWidget::click( os, cvTab);
-
-    QSpinBox*  titleFontSpinBox2 = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "fontSizeSpinBox", parent));
-    CHECK_SET_ERR( titleFontSpinBox2 != NULL, "Title font size spinBox is NULL");
-    int fontSize2 = titleFontSpinBox2->value();
+    // 2. Set some circular settings
+    const int fontSize1 = 28;
+    GTUtilsOptionPanelSequenceView::setTitleFontSize(os, fontSize1);
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
 
-    CHECK_SET_ERR( fontSize1 != fontSize2,
-                   "CV Settings should be differenct for different documents");
+    // 3. Open another sequence
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
 
+    // 4. Check difference between the modified and newly opened settings
+    const int fontSize2 = GTUtilsOptionPanelSequenceView::getTitleFontSize(os);
+    CHECK_SET_ERR(fontSize1 != fontSize2, "CV Settings should be differenct for different documents");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0015) {
     // 1. Open sequence
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
     // 2. Open CV
     // 3. Open CV Settings tab
-    // 4. Select each available label position option
-
-    ADVSingleSequenceWidget *seqWidget = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "sars.gb", "NC_004718");
-    GTUtilsCv::cvBtn::click(os, seqWidget);
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
 
+    // 4. Select each available label position option
     QComboBox* positionComboBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "labelPositionComboBox"));
     CHECK_SET_ERR( positionComboBox != NULL, "Position comboBox is NULL");
     CHECK_SET_ERR( positionComboBox->count() == 4, "Wrong amount of available label position");
@@ -612,14 +601,13 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
 
 GUI_TEST_CLASS_DEFINITION(test_0016) {
     // 1. Open sequence with CV
-    // 2. Open CV Settings tab
-    // 3. Check font spinboxes bound values
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    ADVSingleSequenceWidget *seqWidget = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "NC_014267.1.gb", "NC_014267");
-    CHECK_SET_ERR( GTUtilsCv::isCvPresent(os, seqWidget), "No CV opened");
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
+    // 2. Open CV Settings tab
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
 
+    // 3. Check font spinboxes bound values
     QSpinBox* titleFontSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "fontSizeSpinBox"));
     QSpinBox* rulerFontSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "rulerFontSizeSpinBox"));
     QSpinBox* annotFontSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "labelFontSizeSpinBox"));
@@ -635,14 +623,13 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
 
 GUI_TEST_CLASS_DEFINITION(test_0017) {
     // 1. Open sequence with CV
-    // 2. Open CV Settings tab
-    // 3. Check default conditions of checkboxes, uncheck them
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    ADVSingleSequenceWidget *seqWidget = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "NC_014267.1.gb", "NC_014267");
-    CHECK_SET_ERR( GTUtilsCv::isCvPresent(os, seqWidget), "No CV opened");
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
+    // 2. Open CV Settings tab
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
 
+    // 3. Check default conditions of checkboxes, uncheck them
     QCheckBox* titleCheckBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "titleCheckBox"));
     QCheckBox* lengthCheckBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "lengthCheckBox"));
     QCheckBox* rulerLineCheckBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "rulerLineCheckBox"));
@@ -666,14 +653,14 @@ GUI_TEST_CLASS_DEFINITION(test_0017) {
 
 GUI_TEST_CLASS_DEFINITION(test_0018) {
     // 1. Open sequence with CV
-    // 2. Open CV Settings tab
-    // 3. Check font combobox and bold attribute button
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    ADVSingleSequenceWidget *seqWidget = GTUtilsProject::openFileExpectSequence(os,
-        dataDir  + "samples/Genbank", "murine.gb", "NC_001363");
-    GTUtilsCv::cvBtn::click(os, seqWidget);
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_CV_SETTINGS"));
+    // 2. Open CV Settings tab
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::CircularView);
+    GTUtilsOptionPanelSequenceView::toggleCircularView(os);
 
+    // 3. Check font combobox and bold attribute button
     QWidget* boldButton = GTWidget::findWidget(os, "boldButton");
     CHECK_SET_ERR( boldButton != NULL, "Bold button is NULL");
     GTWidget::click(os, boldButton);
@@ -683,7 +670,11 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
     CHECK_SET_ERR( fontComboBox != NULL, "Font comboBox is NULL");
 
     GTComboBox::setIndexWithText(os, fontComboBox, "Serif", false);
-    GTComboBox::setIndexWithText(os, fontComboBox, "Sans Serif");
+#ifndef Q_OS_MAC
+    GTComboBox::setIndexWithText(os, fontComboBox, "Sans Serif", false);
+#else
+    GTComboBox::setIndexWithText(os, fontComboBox, "Microsoft Sans Serif");
+#endif
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0019) {
@@ -734,6 +725,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
     CHECK_SET_ERR( openCvWidget1->isVisible(), "Hint label and OpenCV button should be visible");
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<ADVSingleSequenceWidget*> seqWidgets = GTUtilsMdi::activeWindow(os)->findChildren<ADVSingleSequenceWidget*>();
     CHECK_SET_ERR(seqWidgets.size() == 1, "Wrong number of sequences");
     ADVSingleSequenceWidget* seqWidget2 = seqWidgets.first();
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
index e1856cc..a3a501e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
@@ -27,37 +27,16 @@ k
 
 #include <U2Test/GUITestBase.h>
 
-#include "GTUtilsDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
+#include "utils/GTUtilsDialog.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
-class EnterClicker : public Filler {
-public:
-    EnterClicker(U2OpStatus &_os)
-        :Filler(_os,"SequenceReadingModeSelectorDialog"){}
-    virtual void run(){
-        GTGlobals::sleep(1000);
-#ifdef Q_OS_MAC
-        QWidget* dialog = QApplication::activeModalWidget();
-        QList<QPushButton*> list= dialog->findChildren<QPushButton*>();
-
-        foreach(QPushButton* but, list){
-            if (but->text().contains("OK"))
-                GTWidget::click(os,but);
-        }
-#else
-        GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["enter"]);
-#endif
-    }
-private:
-
-};
-
 namespace GUITest_common_scenarios_options_panel {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_options_panel_"
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_options_panel"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -91,7 +70,7 @@ GUI_TEST_CLASS_DECLARATION(test_0018)
 GUI_TEST_CLASS_DECLARATION(test_0019)
 GUI_TEST_CLASS_DECLARATION(test_0020)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 6f9a651..b6abc7c 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
@@ -30,21 +30,21 @@
 
 #include "GTTestsOptionPanelMSA.h"
 
-#include "api/GTAction.h"
+#include "primitives/GTAction.h"
 #include "api/GTBaseCompleter.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSlider.h"
-#include "api/GTWidget.h"
-
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/ColorDialogFiller.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTWidget.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"
 
@@ -61,11 +61,12 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_options_panel_MSA{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(general_test_0001){
     const QString seqName = "Phaneroptera_falcata";
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Use button to add Phaneroptera_falcata as referene
@@ -94,6 +95,7 @@ GUI_TEST_CLASS_DEFINITION(general_test_0001_1){
     const QString seqName = "Phaneroptera_falcata";
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Use button to add Phaneroptera_falcata as reference
@@ -121,6 +123,7 @@ GUI_TEST_CLASS_DEFINITION(general_test_0002){
     const QString seqName = "Phaneroptera_falcata";
 //1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //3. Type "phan" in reference line edit
@@ -134,11 +137,13 @@ GUI_TEST_CLASS_DEFINITION(general_test_0002){
 
     QString name = names.at(0);
     CHECK_SET_ERR(name == seqName, QString("wrong sequence name. Expected %1, found %2").arg(seqName).arg(name));
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 }
 
 GUI_TEST_CLASS_DEFINITION(general_test_0003){
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Type some string which is not part some sequence's name
@@ -154,6 +159,7 @@ GUI_TEST_CLASS_DEFINITION(general_test_0003){
 GUI_TEST_CLASS_DEFINITION(general_test_0004){
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Rename Isophya_altaica_EF540820 to Phaneroptera_falcata
@@ -175,6 +181,7 @@ GUI_TEST_CLASS_DEFINITION(general_test_0004){
 GUI_TEST_CLASS_DEFINITION(general_test_0005){
 //    1. Open file data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Delete Hetrodes_pupus_EF540832
@@ -196,6 +203,7 @@ GUI_TEST_CLASS_DEFINITION(general_test_0005){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001){
 //    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 "UGENE" color scheme
@@ -218,6 +226,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0001){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_1){
 //    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 "No colors" color scheme
@@ -240,6 +249,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_2){
 //    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 "Jalview" color scheme
@@ -262,6 +272,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_2){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_3){
 //    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 "Percentage Identity" color scheme
@@ -284,6 +295,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_3){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_4){
 //    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 "Percentage Identity (gray)" color scheme
@@ -306,6 +318,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_4){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0002){
 //    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. Create custom color scheme
     const QString schemeName = getName() + "Scheme";
     GTUtilsMSAEditorSequenceArea::createColorScheme(os, schemeName, NewColorSchemeCreator::nucl);
@@ -332,6 +345,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0002){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0002_1){
 //    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. Create 3 color schemes
     const QString scheme1 = getName() + "_scheme1";
     const QString scheme2 = getName() + "_scheme2";
@@ -350,6 +364,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0002_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0003){
 //    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. Create custom color scheme
     const QString scheme = getName() + "_scheme111111111111111111111111111111111111111111111";
     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme, NewColorSchemeCreator::nucl);
@@ -381,6 +396,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0003){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "No color" color scheme
@@ -395,6 +411,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_1){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Buried index" color scheme
@@ -434,6 +451,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_2){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Clustal X" color scheme
@@ -473,6 +491,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_2){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_3){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Helix propensity" color scheme
@@ -512,6 +531,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_3){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_4){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Hydrophobicity" color scheme
@@ -551,6 +571,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_4){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_5){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Strand propensity" color scheme
@@ -590,6 +611,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_5){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_6){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Tailor" color scheme
@@ -629,6 +651,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_6){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_7){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Turn propensity" color scheme
@@ -668,6 +691,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_7){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_8){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "UGENE" color scheme
@@ -707,6 +731,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_8){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_9){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Zappo" color scheme
@@ -746,6 +771,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_9){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0005){
 //    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);
@@ -790,6 +816,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0005){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0005_1){
 //    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 3 color schemes
     const QString scheme1 = getName() + "_scheme1";
     const QString scheme2 = getName() + "_scheme2";
@@ -808,6 +835,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0005_1){
 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);
@@ -827,7 +855,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0006){
 }
 
 namespace {
-void setHighlightingType(U2OpStatus &os, const QString& type){
+void setHighlightingType(HI::GUITestOpStatus &os, const QString& type){
     QComboBox* highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
     CHECK_SET_ERR(highlightingScheme != NULL, "highlightingScheme not found");
     GTComboBox::setIndexWithText(os, highlightingScheme, type);
@@ -837,6 +865,7 @@ void setHighlightingType(U2OpStatus &os, const QString& type){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0007){
 //    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.
@@ -853,6 +882,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0007){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0007_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.
@@ -867,6 +897,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0007_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0008){
 //    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.
@@ -883,6 +914,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0008){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0008_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.
@@ -896,6 +928,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0008_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0009){
 //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select Phaneroptera_falcata as reference.
@@ -912,6 +945,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0009){
 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.
@@ -925,6 +959,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0009_1){
 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.
@@ -937,6 +972,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0010){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_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.
@@ -949,6 +985,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_1){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0011){
 //    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.
@@ -963,6 +1000,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0011){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0012){
 //    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.
@@ -977,6 +1015,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0012){
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0013){
 //1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
     QWidget* w = GTWidget::findWidget(os, "msa_editor_sequence_area");
@@ -1002,6 +1041,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0013){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence
@@ -1024,6 +1064,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0002){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence two times
@@ -1044,6 +1085,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0002){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0003){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence with popup helper
@@ -1069,6 +1111,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0003){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Type wrong names in sequences' line edits.
@@ -1091,6 +1134,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add two sequences to PA line edits
@@ -1114,12 +1158,13 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005_1){
 //    1. Open file test/_common_data/alphabets/raw_alphabet.aln
         GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "raw_alphabet.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    Expected state: wrong alphabet hint appeared
     QLabel* lblMessage = qobject_cast<QLabel*>(GTWidget::findWidget(os, "lblMessage"));
     CHECK_SET_ERR(lblMessage != NULL, "lblMessage not found");
-    CHECK_SET_ERR(lblMessage->text() == "Warning: Current alphabet does not correspond the requirements.",
+    CHECK_SET_ERR(lblMessage->text() == "Pairwise alignment is not available for alignments with \"Raw\" alphabet.",
                   QString("wrong label text: %1").arg(lblMessage->text()));
 //    3. Add two sequences to PA line edits
     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "seq7");
@@ -1141,7 +1186,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005_1){
 
 namespace{
 
-void expandSettings(U2OpStatus &os, const QString& widgetName, const QString& arrowName) {
+void expandSettings(HI::GUITestOpStatus &os, const QString& widgetName, const QString& arrowName) {
     QWidget* widget = GTWidget::findWidget(os, widgetName);
     CHECK_SET_ERR(widget != NULL, QString("%1 not found").arg(widgetName));
     if(widget->isHidden()){
@@ -1149,11 +1194,11 @@ void expandSettings(U2OpStatus &os, const QString& widgetName, const QString& ar
     }
 }
 
-void expandAlgoSettings(U2OpStatus &os){
+void expandAlgoSettings(HI::GUITestOpStatus &os){
     expandSettings(os, "settingsContainerWidget", "ArrowHeader_Algorithm settings");
 }
 
-void expandOutputSettings(U2OpStatus &os){
+void expandOutputSettings(HI::GUITestOpStatus &os){
     expandSettings(os, "outputContainerWidget", "ArrowHeader_Output settings");
 }
 
@@ -1161,6 +1206,7 @@ void expandOutputSettings(U2OpStatus &os){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0006){
 //    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 Pairwise alignment option panel tab. check spinboxes limits for KAilign
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
     expandAlgoSettings(os);
@@ -1188,37 +1234,37 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0006){
 
 namespace{
 
-void setSpinValue(U2OpStatus &os, double value, const QString& spinName){
+void setSpinValue(HI::GUITestOpStatus &os, double value, const QString& spinName){
     expandAlgoSettings(os);
     QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox*>(GTWidget::findWidget(os, spinName));
     CHECK_SET_ERR(spinBox != NULL, spinName + " spinbox not found");
     GTDoubleSpinbox::setValue(os, spinBox, value, GTGlobals::UseKeyBoard);
 }
 
-void setGapOpen(U2OpStatus &os, double value){
+void setGapOpen(HI::GUITestOpStatus &os, double value){
     setSpinValue(os, value, "gapOpen");
 }
 
-void setGapExtd(U2OpStatus &os, double value){
+void setGapExtd(HI::GUITestOpStatus &os, double value){
     setSpinValue(os, value, "gapExtd");
 }
 
-void setGapTerm(U2OpStatus &os, double value){
+void setGapTerm(HI::GUITestOpStatus &os, double value){
     setSpinValue(os, value, "gapTerm");
 }
 
-void setBonusScore(U2OpStatus &os, double value){
+void setBonusScore(HI::GUITestOpStatus &os, double value){
     setSpinValue(os, value, "bonusScore");
 }
 
-void inNewWindow(U2OpStatus &os, bool inNew){
+void inNewWindow(HI::GUITestOpStatus &os, bool inNew){
     expandOutputSettings(os);
     QCheckBox* inNewWindowCheckBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "inNewWindowCheckBox"));
     CHECK_SET_ERR(inNewWindowCheckBox != NULL, "inNewWindowCheckBox not found");
     GTCheckBox::setChecked(os, inNewWindowCheckBox, inNew);
 }
 
-void align(U2OpStatus &os){
+void align(HI::GUITestOpStatus &os){
     GTWidget::click(os, GTWidget::findWidget(os, "alignButton"));
 }
 
@@ -1226,6 +1272,7 @@ void align(U2OpStatus &os){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
@@ -1242,6 +1289,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_1){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
@@ -1258,6 +1306,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_1){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_2){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
@@ -1274,6 +1323,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_2){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_3){
 //    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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
@@ -1289,7 +1339,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_3){
     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0,1), QPoint(14,1), "AAG-CTTACT---AA");
 }
 namespace{
-void setOutputPath(U2OpStatus &os, const QString& path, const QString& name){
+void setOutputPath(HI::GUITestOpStatus &os, const QString& path, const QString& name){
     expandOutputSettings(os);
     QWidget* outputFileSelectButton = GTWidget::findWidget(os, "outputFileSelectButton");
     CHECK_SET_ERR(outputFileSelectButton != NULL, "outputFileSelectButton not found");
@@ -1304,6 +1354,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0008){
     const QString fileName = "pairwise_alignment_test_0008.aln";
 //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence
@@ -1332,6 +1383,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009){
     const QString fileName = "pairwise_alignment_test_0009.aln";
 //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence
@@ -1367,6 +1419,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
     const QString dirName = "pairwise_alignment_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 Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3. Add Phaneroptera_falcata sequence
@@ -1392,6 +1445,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011){
 //1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Open Pairwise alignment option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //3. Add Phaneroptera_falcata sequence
@@ -1417,6 +1471,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0001){
 //    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
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
 //    3. Press "Open tree" button. Select data/samples/CLUSTALW/COI.nwk in file dialog
@@ -1430,6 +1485,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0001){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0002){
 //    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
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
 //    3. Press "build tree" button.
@@ -1444,6 +1500,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0002){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003){
 //    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));
@@ -1490,6 +1547,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004){
 //    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));
@@ -1531,6 +1589,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004){
 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));
@@ -1599,7 +1658,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005){
 }
 
 namespace{
-void expandFontSettings(U2OpStatus &os){
+void expandFontSettings(HI::GUITestOpStatus &os){
     QWidget* labelsColorButton = GTWidget::findWidget(os, "labelsColorButton");
     CHECK_SET_ERR(labelsColorButton != NULL, "labelsColorButton not found");
     if(!labelsColorButton->isVisible()){
@@ -1607,14 +1666,14 @@ void expandFontSettings(U2OpStatus &os){
     }
 }
 
-void setLabelsColor(U2OpStatus &os, int r, int g, int b){
+void setLabelsColor(HI::GUITestOpStatus &os, int r, int g, int b){
     expandFontSettings(os);
     GTUtilsDialog::waitForDialog(os , new ColorDialogFiller(os, r, g, b));
     QWidget* labelsColorButton = GTWidget::findWidget(os, "labelsColorButton");
     GTWidget::click(os, labelsColorButton);
 }
 
-bool checkLabelColor(U2OpStatus &os, QString expectedColorName){
+bool checkLabelColor(HI::GUITestOpStatus &os, QString expectedColorName){
     QGraphicsView* w = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     CHECK_SET_ERR_RESULT(w != NULL, "tree view not found", false);
     QList<QGraphicsSimpleTextItem*> labels = GTUtilsPhyTree::getVisiableLabels(os, w);
@@ -1648,6 +1707,7 @@ bool checkLabelColor(U2OpStatus &os, QString expectedColorName){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006){
 //    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));
@@ -1719,6 +1779,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0007){
 //    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));
@@ -1749,7 +1810,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0007){
 
 namespace{
 
-void expandPenSettings(U2OpStatus &os){
+void expandPenSettings(HI::GUITestOpStatus &os){
     QWidget* branchesColorButton = GTWidget::findWidget(os, "branchesColorButton");
     CHECK_SET_ERR(branchesColorButton != NULL, "branchesColorButton not found");
     if(!branchesColorButton->isVisible()){
@@ -1757,14 +1818,14 @@ void expandPenSettings(U2OpStatus &os){
     }
 }
 
-void setBranchColor(U2OpStatus &os, int r, int g, int b){
+void setBranchColor(HI::GUITestOpStatus &os, int r, int g, int b){
     expandPenSettings(os);
     GTUtilsDialog::waitForDialog(os , new ColorDialogFiller(os, r, g, b));
     QWidget* branchesColorButton = GTWidget::findWidget(os, "branchesColorButton");
     GTWidget::click(os, branchesColorButton);
 }
 
-double colorPercent(U2OpStatus & /*os*/, QWidget* w, const QString& c){
+double colorPercent(HI::GUITestOpStatus & /*os*/, QWidget* w, const QString& c){
     double total = 0;
     double found = 0;
     QPixmap pixmap = QPixmap::grabWidget(w, w->rect());
@@ -1792,6 +1853,7 @@ double colorPercent(U2OpStatus & /*os*/, QWidget* w, const QString& c){
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0008){
 //    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));
@@ -1824,7 +1886,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0008){
 }
 
 namespace{
-void setConsensusOutputPath(U2OpStatus &os, const QString& path){
+void setConsensusOutputPath(HI::GUITestOpStatus &os, const QString& path){
     QLineEdit* pathLe = GTWidget::findExactWidget<QLineEdit*>(os, "pathLe");
     CHECK_SET_ERR(pathLe != NULL, "pathLe not found");
     GTLineEdit::setText(os, pathLe, path);
@@ -1835,6 +1897,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0001){
     const QString fileName = "export_consensus_test_0001.txt";
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Plain text"));
@@ -1860,6 +1923,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002){
     const QString fileName = "export_consensus_test_0002.aln";
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
 //    3. Select some existing read-only file as output
@@ -1893,6 +1957,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
     const QString dirName = "export_consensus_test_0003";
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
 //    3. Select some existing read-only file as output
@@ -1915,6 +1980,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
 //    3. Set empty path
@@ -1923,7 +1989,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004){
     class exportConsensusTest0004Filler: public CustomScenario{
     public:
         exportConsensusTest0004Filler(){}
-        virtual void run(U2::U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1952,6 +2018,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0006){
 GUI_TEST_CLASS_DEFINITION(statistics_test_0001){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export statistics option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
 //    3. check showDistancesColumn checkbox
@@ -1993,6 +2060,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0001){
 GUI_TEST_CLASS_DEFINITION(statistics_test_0002){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export statistics option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
 //    3. check showDistancesColumn checkbox
@@ -2020,6 +2088,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0002){
 GUI_TEST_CLASS_DEFINITION(statistics_test_0003){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export statistics option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
 //    3. check showDistancesColumn checkbox
@@ -2068,6 +2137,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0003){
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0001){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //   Check saving parameters
@@ -2099,6 +2169,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0001){
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0002){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 
@@ -2137,6 +2208,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003){
     //KAlign settings
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 
@@ -2190,6 +2262,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003_1){//
     //smith-waterman settings
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 
@@ -2242,6 +2315,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003_1){//
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004){
 //    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
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
 //    3. Press "build tree" button.
@@ -2313,6 +2387,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004){
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004_1){
 //    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
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
 //    3. Press "build tree" button.
@@ -2369,6 +2444,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004_1){
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2.  Set scrict consensus
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
     QComboBox* consensusType = GTWidget::findExactWidget<QComboBox*>(os, "consensusType");
@@ -2405,6 +2481,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005){
 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0006){
 //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2.  Set scrict consensus
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
index 187a019..08f0d3a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
@@ -27,8 +27,8 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_options_panel_MSA {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_options_panel_MSA_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_options_panel_MSA"
 
 GUI_TEST_CLASS_DECLARATION(general_test_0001)
 GUI_TEST_CLASS_DECLARATION(general_test_0001_1)
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
index 8a5c8cc..67ff43d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
@@ -30,22 +30,22 @@
 
 #include "GTTestsOptionPanelSequenceView.h"
 
-#include "api/GTAction.h"
+#include "primitives/GTAction.h"
 #include "api/GTBaseCompleter.h"
-#include "api/GTComboBox.h"
-#include "api/GTCheckBox.h"
-#include "api/GTDoubleSpinBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSlider.h"
-#include "api/GTWidget.h"
-
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/ColorDialogFiller.h"
+#include <primitives/GTComboBox.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTWidget.h>
+
+#include <base_dialogs/MessageBoxFiller.h>
+#include <base_dialogs/ColorDialogFiller.h>
 
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsLog.h"
@@ -60,10 +60,11 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_options_panel_sequence_view{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001){
     //checking 'next' 'prev' buttons functionality
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     CHECK_SET_ERR(!GTUtilsOptionPanelSequenceView::isGetAnnotationsEnabled(os), "Get annotations is enabled");
@@ -84,6 +85,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 GUI_TEST_CLASS_DEFINITION(test_0002){
     //checking searching with invalid pattern
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::enterPattern(os, "zz");
@@ -95,6 +97,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 GUI_TEST_CLASS_DEFINITION(test_0003){
     //checking results with diffirent algorithms
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -110,6 +113,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 GUI_TEST_CLASS_DEFINITION(test_0004){
     //checking saving annotations after search
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::enterPattern(os, "AAAAAAAAAAAAAAAAAAAAAAAAAAA");
@@ -125,6 +129,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 GUI_TEST_CLASS_DEFINITION(test_0005){
     //checking searching with different parameter 'match percentage'
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -140,6 +145,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 GUI_TEST_CLASS_DEFINITION(test_0006) {
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open "Search In Sequence" options panel tab.
 //    Expected state: all show/hide widgetsare collapsed.
@@ -155,6 +161,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 GUI_TEST_CLASS_DEFINITION(test_0007){
     //checking results with searching in translation
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -169,6 +176,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 GUI_TEST_CLASS_DEFINITION(test_0008){
     //checking results with searching in translation
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -185,6 +193,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 GUI_TEST_CLASS_DEFINITION(test_0009){
     //checking results with searching in translation
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -209,6 +218,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 GUI_TEST_CLASS_DEFINITION(test_0010){
     //checking results with searching in translation
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -219,72 +229,6 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     CHECK_SET_ERR(GTUtilsOptionPanelSequenceView::checkResultsText(os, "Results: 1/99900"), "Results string not match");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0011) {
-    // "DAS Annotations" widget multiple annotations downloading.
-    // Test may fail if DAS server does not respond
-
-    // 1. Open file "test/_common_data/pdb/1FSC.pdb"
-    GTFileDialog::openFile(os, testDir + "_common_data/pdb/", "1FSC.pdb");
-
-    // Expected state : Options panel has the "DAS Annotations" tab
-    // 2. Open the "DAS Annotations" tab
-    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Das);
-
-    // 3. Press the "Fetch IDs" button
-    GTWidget::click(os, GTWidget::findWidget(os, "searchIdsButton"));
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    // Expected state : In a few seconds some content has appeared in the table with IDs / Identity
-    QTableWidget *idList = qobject_cast<QTableWidget *>(GTWidget::findWidget(os, "idList"));
-    CHECK_SET_ERR(idList->rowCount() > 0, "DAS annotations not found");
-
-    // 4. Select a few rows with left mouse button holding Shift,
-    // then add to selection a few rows with left mouse button holding Ctrl
-    // Expected state : appropriate rows has added to selection
-    GTMouseDriver::moveTo(os, idList->viewport()->mapToGlobal(idList->visualItemRect(idList->item(idList->rowCount() - 1, 0)).center()));
-    GTMouseDriver::click(os);
-
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTGlobals::sleep(200);
-
-    GTMouseDriver::moveTo(os, idList->viewport()->mapToGlobal(idList->visualItemRect(idList->item(idList->rowCount() - 3, 0)).center()));
-    GTMouseDriver::click(os);
-
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
-    GTGlobals::sleep(200);
-
-    CHECK_SET_ERR(idList->selectedItems().size() == 6, QString("Incorrect selection size. Expected 6, actual %1").arg(idList->selectedItems().size()));
-
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTGlobals::sleep(200);
-
-    GTMouseDriver::moveTo(os, idList->viewport()->mapToGlobal(idList->visualItemRect(idList->item(idList->rowCount() - 2, 0)).center()));
-    GTMouseDriver::click(os);
-
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
-    GTGlobals::sleep(200);
-
-    CHECK_SET_ERR(idList->selectedItems().size() == 4, QString("Incorrect selection size. Expected 4, actual %1").arg(idList->selectedItems().size()));
-
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(200);
-
-    GTMouseDriver::moveTo(os, idList->viewport()->mapToGlobal(idList->visualItemRect(idList->item(0, 0)).center()));
-    GTMouseDriver::click(os);
-
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(200);
-
-    CHECK_SET_ERR(idList->selectedItems().size() == 6, QString("Incorrect selection size. Expected 6, actual %1").arg(idList->selectedItems().size()));
-
-    // 5. Press the "Fetch Annotations" button
-    GTWidget::click(os, GTWidget::findWidget(os, "annotateButton"));
-
-    // Expected state : New annotations were downloaded and added to the annotation object
-    GTUtilsTaskTreeView::waitTaskFinished(os, 300000);
-    GTUtilsProjectTreeView::checkItem(os, "Annotations");
-}
-
 }
 
 }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
index 8fd485a..3fa9eb5 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
@@ -27,8 +27,8 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_options_panel_sequence_view {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_options_panel_sequence_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_options_panel_sequence_view"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -40,7 +40,6 @@ GUI_TEST_CLASS_DECLARATION(test_0007)
 GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
-GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_0011, 480000)
 
 }
 
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 f874e8b..cd14a6e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
@@ -19,19 +19,20 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2IdTypes.h>
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsPcr.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTComboBox.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/PopupChooser.h"
+#include <primitives/GTComboBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
@@ -39,7 +40,7 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_in_silico_pcr {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsPcr::clearPcrDir(os);
     //The PCR options panel is available only for nucleic sequences
@@ -47,6 +48,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     //1. Open "_common_data/fasta/alphabet.fa".
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "alphabet.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Activate the "Amino" sequence in the sequence view (set the focus for it).
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os, 0));
@@ -75,6 +77,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -109,6 +112,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -145,6 +149,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -198,6 +203,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -251,6 +257,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -292,6 +299,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -331,6 +339,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -366,6 +375,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     //    3' perfect match
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -400,6 +410,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     //Export annotations
     //1. Open "_common_data/cmdline/pcr/begin-end.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/cmdline/pcr/begin-end.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the PCR OP.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
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 cd448b7..4841afc 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
@@ -26,8 +26,8 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_in_silico_pcr {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_in_silico_pcr_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_in_silico_pcr"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
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 6d66584..1c78c7e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
@@ -24,7 +24,7 @@
 #include "GTDatabaseConfig.h"
 #include "GTTestsPrimerLibrary.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsPcr.h"
 #include "GTUtilsPrimerLibrary.h"
@@ -33,9 +33,9 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsLog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
 #include "runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
@@ -43,7 +43,7 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_primer_library {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     //The library is the singleton MDI window
@@ -79,7 +79,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     //Expected: the dialog appears. The OK button is disabled.
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //3. Set the focus at the primer line edit and write "Q%1" (not ACGT).
             QLineEdit *primerEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "primerEdit"));
             GTLineEdit::setText(os, primerEdit, "Q%1", true);
@@ -173,6 +173,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     //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.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
@@ -269,7 +270,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //        File path: any valid path;
 //    and accept the dialog.
     class ExportToFastaScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ExportPrimersDialogFiller::setExportTarget(os, ExportPrimersDialogFiller::LocalFile);
@@ -324,7 +325,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 //        File path: any valid path;
 //    and accept the dialog.
     class ExportToGenbankScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ExportPrimersDialogFiller::setExportTarget(os, ExportPrimersDialogFiller::LocalFile);
@@ -385,7 +386,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 //        Folder: any valid path;
 //    and accept the dialog.
     class ExportToSharedDbScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ExportPrimersDialogFiller::setExportTarget(os, ExportPrimersDialogFiller::SharedDb);
@@ -436,7 +437,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 //        Files: "_common_data/fasta/random_primers.fa"
 //    and accept the dialog.
     class ImportFromMultifasta : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::LocalFiles);
@@ -483,7 +484,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 //               "_common_data/fasta/random_primers.fa2"
 //    and accept the dialog.
     class ImportFromSeveralFiles : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::LocalFiles);
@@ -539,7 +540,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 //                 "/pcrlib/test_0011/primer4",
 //    and accept the dialog.
     class ImportFromSharedDatabaseObjects : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::SharedDb);
@@ -589,7 +590,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 //        Objects: "/pcrlib/test_0012/"
 //    and accept the dialog.
     class ImportFromSharedDatabaseFolder : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::SharedDb);
@@ -636,7 +637,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 //                 "user2 at ugene_gui_test/pcrlib/test_0013/primerToImport9"
 //    and accept the dialog.
     class ImportFromTwoSharedDatabases : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::SharedDb);
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 21d1000..0fa042a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
@@ -26,8 +26,8 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_primer_library {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_primer_library_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_primer_library"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
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 83f5fcc..458aaa1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
@@ -33,7 +33,7 @@
 #include <U2View/MSAEditorFactory.h>
 
 #include "GTTestsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
@@ -42,19 +42,19 @@
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsStartPage.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
-#include "api/GTClipboard.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWebView.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "utils/GTUtilsToolTip.h"
+#include "system/GTClipboard.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWebView.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h"
@@ -73,10 +73,11 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_project{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0004) {
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj1.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1CF7.PDB" is opened
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
@@ -96,11 +97,11 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 //     {Destination Directory} _common_data/scenarios/sandbox
 // 4. Click OK button
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogFiller(os, testDir+"_common_data/scenarios/sandbox"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
     GTGlobals::sleep();
 
 // 5. Use menu {File->Close project}
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
 // Expected state: project is unloaded and project view is closed
@@ -108,6 +109,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
 // 6. Use menu {File->Open}. Open project _common_data/sandbox/proj1.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // Expected state:
@@ -145,10 +147,10 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj2", testDir+"_common_data/scenarios/sandbox", "proj2"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/sandbox/proj2.uprj");
@@ -210,13 +212,14 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/project/1.gb");
 
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogChecker(os, "project.uprj"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0012) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document", GTGlobals::UseMouse));
 
@@ -260,6 +263,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
     //1. Open project _common_data\scenario\project\proj1.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProject::checkProject(os);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxOpenAnotherProject(os));
@@ -276,7 +280,7 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
 GUI_TEST_CLASS_DEFINITION(test_0014) {
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1HTQ", 3));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
 
     GTGlobals::sleep();
 
@@ -407,9 +411,8 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0025) {
-
-//     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
@@ -420,13 +423,6 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "misc_feature", "complement(1.. 20)"));
     GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep();
-
-/*
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMenu::clickMenuItem(os, GTMenu::showMainMenu(os, MWMENU_FILE), ACTION__EXIT);
-    GTGlobals::sleep();
-*/
-//     GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0026) {
@@ -452,7 +448,7 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
     GTUtilsProject::openFiles(os, dataDir + "samples/FASTA/human_T1.fa");
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::Cancel));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTUtilsLog::check(os, logTracer);
@@ -461,6 +457,7 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
 GUI_TEST_CLASS_DEFINITION(test_0031) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "human_T1.fa");
 
     GTUtilsProjectTreeView::openView(os);
@@ -482,7 +479,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/project/1.gb");
 
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogSizeChecker(os, "project.uprj"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
     GTGlobals::sleep();
 }
 
@@ -496,6 +493,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 //    Expected state: file opens, document contains two malignment objects, the MSA Editor is shown.
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDocument::checkDocument(os, "ace_test_1.ace", MSAEditorFactory::ID);
     GTUtilsProjectTreeView::checkObjectTypes(os,
@@ -510,6 +508,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "project_test_0033.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_2.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDocument::checkDocument(os, "project_test_0033.ugenedb", AssemblyBrowserFactory::ID);
     GTUtilsProjectTreeView::checkObjectTypes(os,
@@ -519,6 +518,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 GUI_TEST_CLASS_DEFINITION(test_0034) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //select sequence object
     GTUtilsProjectTreeView::click(os, "murine.gb");
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
@@ -528,7 +528,9 @@ GUI_TEST_CLASS_DEFINITION(test_0034) {
 
 GUI_TEST_CLASS_DEFINITION(test_0035) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //select 2 objects
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
     GTUtilsProjectTreeView::click(os, "NC_001363");
@@ -541,7 +543,9 @@ GUI_TEST_CLASS_DEFINITION(test_0035) {
 
 GUI_TEST_CLASS_DEFINITION(test_0036) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //select 2 files
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
     GTUtilsProjectTreeView::click(os, "sars.gb");
@@ -554,6 +558,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036) {
 
 GUI_TEST_CLASS_DEFINITION(test_0037) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //select 1 file
     GTUtilsProjectTreeView::click(os, "sars.gb");
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
@@ -565,6 +570,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
     //test for several alignments in one document
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //check for first document
     GTUtilsProjectTreeView::doubleClickItem(os, "Contig1");
@@ -599,6 +605,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_1){
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_3637_1.ugenedb"));
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //check for first document
     GTUtilsProjectTreeView::doubleClickItem(os, "Contig1");
@@ -847,8 +854,8 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
     GTGlobals::sleep(500);
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-    GTMenu::clickMenuItem(os, menu, ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QFile savedFile(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + "/clipboard.fa");
@@ -927,7 +934,7 @@ GUI_TEST_CLASS_DEFINITION(test_0055){
     class CustomScenarioCancel: public CustomScenario {
     public:
         CustomScenarioCancel(){}
-        virtual void run(U2::U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -965,7 +972,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057){
     class CheckPathScenario: public CustomScenario {
     public:
         CheckPathScenario(){}
-        virtual void run(U2::U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
index e7fdaec..79cc01e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project"
 
 GUI_TEST_CLASS_DECLARATION(test_0004)
 GUI_TEST_CLASS_DECLARATION(test_0005)
@@ -81,7 +81,7 @@ GUI_TEST_CLASS_DECLARATION(test_0056)
 GUI_TEST_CLASS_DECLARATION(test_0057)
 GUI_TEST_CLASS_DECLARATION(test_0058)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 c67863f..36e3f7c 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
@@ -20,30 +20,32 @@
  */
 
 #include "GTTestsProjectAnonymousProject.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
 #include "GTUtilsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsProject.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/ugeneui/ExportProjectDialogFiller.h"
 #include "runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h"
+#include "GTUtilsTaskTreeView.h"
 
 #include <U2View/AnnotatedDNAViewFactory.h>
 
 namespace U2{
 
 namespace GUITest_common_scenarios_project_anonymous_project{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 1. Use menu {File->Open}. Open file data/samples/PDB/1CF7.pdb
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1CF7.PDB" is opened
@@ -59,18 +61,19 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // 5. Click NO in opened messagebox
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogFiller(os, testDir + "_common_data/scenarios/sandbox", "proj2.uprj"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
     GTGlobals::sleep();
 
 // 6. Use menu {File->Close project}
 // 7. Click NO in opened messagebox
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
 // 8. Use menu {File->Open}. Open project _common_data/scenarios/sandbox/proj2.uprj
     GTGlobals::sleep();
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) project view with document "1CF7.PDB" has been opened,
@@ -86,6 +89,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 // 1. Use menu {File->Open}. Open file samples/PDB/1CF7.pdb
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1CF7.PDB" is opened
@@ -100,11 +104,11 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 //     {Project file} proj2
 // 4. Click Save button
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj2", testDir+"_common_data/scenarios/sandbox", "proj2"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
     GTGlobals::sleep();
 
 // 5. Use menu {File->Close project}
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
 // Expected state: project and sequence view closed
@@ -112,6 +116,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 // 6. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) project view with document "1CF7.PDB" has been opened,
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
index b4dddec..d841aa7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
@@ -27,13 +27,13 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_anonymous_project {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_anonymous_project_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_anonymous_project"
 
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 1e149e2..2f27f5b 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
@@ -20,39 +20,40 @@
  */
 
 #include "GTTestsBookmarks.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
 #include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsToolTip.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "GTUtilsMdi.h"
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "api/GTTreeWidget.h"
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsMdi.h"
 #include <U2View/AnnotatedDNAViewFactory.h>
 #include <U2View/MSAEditorFactory.h>
-#include <api/GTFileDialog.h>
+#include <base_dialogs/GTFileDialog.h>
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 
 namespace U2{
 
 namespace GUITest_common_scenarios_project_bookmarks {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 //  1. Open a GenBank file with circular view (tested on NC_014267.gb from NCBI DB)
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/" , "NC_014267.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
 //  2. Create a bookmark
@@ -63,13 +64,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 //  3. Close project
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 }
 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     // 1. Open a GenBank file with circular view (tested on NC_014267.gb from NCBI DB)
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/" , "NC_014267.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 2. Create a bookmark. Change: Create 2 bookmarks.
@@ -85,13 +87,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     // 3. Close project
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 }
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
     // 1. Open a GenBank file with circular view (tested on NC_014267.gb from NCBI DB)
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/" , "NC_014267.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 2. Create a bookmark
@@ -108,7 +111,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
     // 3. Close project
     GTUtilsDialog::waitForDialog(os,new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 }
 } // namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
index 2714d65..1164b37 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
@@ -27,14 +27,14 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_bookmarks {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_bookmarks_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_bookmarks"
 
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0002_1)
 GUI_TEST_CLASS_DECLARATION(test_0002_2)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 fdf1f61..ef91793 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
@@ -20,31 +20,33 @@
  */
 
 #include "GTTestsProjectDocumentModifying.h"
-#include "api/GTMenu.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
+#include "primitives/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
 #include "GTUtilsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsToolTip.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "utils/GTUtilsToolTip.h"
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/ugeneui/ExportProjectDialogFiller.h"
+#include "GTUtilsTaskTreeView.h"
 
 #include <U2View/AnnotatedDNAViewFactory.h>
 
 namespace U2{
 
 namespace GUITest_common_scenarios_project_document_modifying{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2-1.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj2-1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
@@ -69,6 +71,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 GUI_TEST_CLASS_DEFINITION(test_0001_1) { //CHANGES another annotation created
     // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2-1.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj2-1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
@@ -94,6 +97,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
@@ -105,16 +109,17 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // 3. Fill the next field in dialog and click Save button:
 //     {Project Folder:} _common_data/scenarios/sandbox
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogFiller(os, testDir + "_common_data/scenarios/sandbox"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
     GTGlobals::sleep();
 
 // 4. Close project. No questions must be asked
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
     GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
 
 // 5. Open exported project
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
@@ -138,11 +143,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // Expected state: "Question?" dialog has appeared that proposes to save 1.gb file
 // 8. Click Yes button
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
 // 9. Load _common_data/scenarios/sandbox/proj2.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state: project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
index d2007b1..3ae1265 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
@@ -27,15 +27,15 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_document_modifying {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_document_modifying_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_document_modifying"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
 
 GUI_TEST_CLASS_DECLARATION(test_0002)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
index 160a9a7..4cd85b2 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
@@ -20,12 +20,12 @@
  */
 
 #include "GTTestsProjectMultipleDocs.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
 #include "GTUtilsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsTaskTreeView.h"
 #include "runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h"
@@ -40,6 +40,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 // 	1) Project view with document "1.gb" has been opened
@@ -54,11 +55,12 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 // 	{Project file} proj2
 // 4. Click Save button
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj2", testDir+"_common_data/scenarios/sandbox", "proj2"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
     GTGlobals::sleep();
 
 // 5. Use menu {File->Open}. Open file samples/PDB/1CF7.PDB
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 // 	1) Project view with documents "1CF7.PDB", "1.gb" has been opened
@@ -66,11 +68,12 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 6. Close project
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
 // 7. Open project from the location used in item 3
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/sandbox/", "proj2.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 // Project has 2 documents: 1CF7.PDB and 1.gb
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
index fddc94a..cac56bc 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
@@ -27,12 +27,12 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_multiple_docs {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_multiple_docs_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_multiple_docs"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 b82dc58..57d3396 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
@@ -21,15 +21,16 @@
 
 #include <QTreeView>
 
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
+#include <U2Core/U2IdTypes.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
 #include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
-#include "runnables/qt/DefaultDialogFiller.h"
+#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSharedDatabaseDocument.h"
@@ -40,13 +41,16 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_filtering {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     // 1. Open "data/samples/FASTA/human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -71,9 +75,11 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 GUI_TEST_CLASS_DEFINITION(test_0002) {
     // 1. Open "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -97,9 +103,11 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 GUI_TEST_CLASS_DEFINITION(test_0003) {
     // 1. Open "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -123,9 +131,11 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 GUI_TEST_CLASS_DEFINITION(test_0004) {
     // 1. Open "data/samples/FASTA/human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -148,9 +158,11 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 GUI_TEST_CLASS_DEFINITION(test_0005) {
     // 1. Open "data/samples/FASTA/human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/HIV-1.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -174,9 +186,11 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     // 1. Open "test/_common_data/text/text.txt"
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Plain text"));
     GTFileDialog::openFile(os, testDir + "_common_data/text/", "text.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/HIV-1.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -204,9 +218,11 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 GUI_TEST_CLASS_DEFINITION(test_0007) {
     // 1. Open "data/samples/Genbank/sars.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/HIV-1.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -231,9 +247,11 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     // 1. Open "data/samples/FASTA/human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -245,7 +263,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     const QModelIndexList groupIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, "Object name");
     CHECK_SET_ERR(1 == groupIndexes.size(), "'Object name' group is not found");
     const QModelIndexList objectIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, "/import_test_0003", groupIndexes.first());
-    CHECK_SET_ERR(1 == objectIndexes.size(), "Unexpected filtered object count");
+    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()));
@@ -269,7 +287,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 namespace {
 
-void checkEditMenu(U2OpStatus &os, const QString &groupName, const QString &objectName) {
+void checkEditMenu(HI::GUITestOpStatus &os, const QString &groupName, const QString &objectName) {
     const QModelIndexList groupIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, groupName);
     CHECK_SET_ERR(groupIndexes.size() == 1, QString("Expected a single '%1' filter group in the project view").arg(groupName));
 
@@ -282,7 +300,7 @@ void checkEditMenu(U2OpStatus &os, const QString &groupName, const QString &obje
     GTMouseDriver::click(os, Qt::RightButton);
 }
 
-void checkDeleteButton(U2OpStatus &os, const QString &groupName, const QString &objectName) {
+void checkDeleteButton(HI::GUITestOpStatus &os, const QString &groupName, const QString &objectName) {
     QModelIndexList groupIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, groupName);
     CHECK_SET_ERR(groupIndexes.size() == 1, QString("Expected a single '%1' filter group in the project view").arg(groupName));
 
@@ -302,7 +320,7 @@ void checkDeleteButton(U2OpStatus &os, const QString &groupName, const QString &
     CHECK_SET_ERR(filteredObjectCount == groupIndexes.first().model()->rowCount(groupIndexes.first()), "Filtered object count changed unexpectedly");
 }
 
-void makeRightClick(U2OpStatus &os, const QString &groupName) {
+void makeRightClick(HI::GUITestOpStatus &os, const QString &groupName) {
     const QModelIndexList groupIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, 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());
@@ -350,9 +368,11 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 GUI_TEST_CLASS_DEFINITION(test_0011) {
     // 1. Open "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -420,9 +440,11 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 GUI_TEST_CLASS_DEFINITION(test_0013) {
     // 1. Open "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Connect to the "ugene_gui_test" database
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -447,9 +469,11 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 GUI_TEST_CLASS_DEFINITION(test_0014) {
     // 1. Open "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: Project filter clear button is invisible
     QWidget *clearButton = GTWidget::findWidget(os, "project filter clear button");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
index ae37550..500e178 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_filtering {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_filtering_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_filtering"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -45,7 +45,7 @@ GUI_TEST_CLASS_DECLARATION(test_0012)
 GUI_TEST_CLASS_DECLARATION(test_0013)
 GUI_TEST_CLASS_DECLARATION(test_0014)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } // namespace U2
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 53f753c..71db13f 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
@@ -20,10 +20,10 @@
  */
 
 #include "GTTestsProjectRelations.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
 #include "GTUtilsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include <U2View/AnnotatedDNAViewFactory.h>
@@ -31,7 +31,7 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_project_relations{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj2.uprj");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
index 5dba3fe..8b8be12 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
@@ -27,13 +27,13 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_relations {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_relations_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_relations"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
index 06ca0c5..962553f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
@@ -23,7 +23,7 @@
 #include <U2View/AnnotatedDNAViewFactory.h>
 
 #include "GTTestsProjectRemoteRequest.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
@@ -32,15 +32,15 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTTreeWidget.h"
+#include <primitives/GTTreeWidget.h>
 #include "runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h"
 #include "runnables/ugene/ugeneui/NCBISearchDialogFiller.h"
 
@@ -50,7 +50,7 @@ namespace GUITest_common_scenarios_project_remote_request {
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "3EZB", 3));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsTaskTreeView::openView(os);
@@ -60,7 +60,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "NC_001363", 0));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTGlobals::sleep(20000);
@@ -89,7 +89,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
 
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -119,7 +119,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
 
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -148,7 +148,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
 
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -178,7 +178,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
 
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -207,12 +207,10 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::CheckForceSequenceDownloadVisibility, false);
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetDatabase, "UniProtKB/TrEMBL");
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::CheckForceSequenceDownloadVisibility, false);
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetDatabase, "UniProt (DAS)");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::CheckForceSequenceDownloadVisibility, false);
     actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickCancel, "");
 
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
@@ -250,7 +248,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::ClickClose, "");
 
     GTUtilsDialog::waitForDialog(os, new NcbiSearchDialogFiller(os, searchActions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__SEARCH_GENBANK, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
@@ -288,7 +286,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::ClickClose, "");
 
     GTUtilsDialog::waitForDialog(os, new NcbiSearchDialogFiller(os, searchActions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__SEARCH_GENBANK, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
index b1be337..a169dca 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_remote_request {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_remote_request_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_remote_request"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -41,7 +41,7 @@ GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 4184ca8..fc04abb 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
@@ -24,27 +24,27 @@
 #include <QTreeView>
 
 #include "GTTestsProjectSequenceExporting.h"
-#include "api/GTGlobals.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTComboBox.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTFile.h"
-#include "api/GTTreeWidget.h"
+#include "GTGlobals.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTComboBox.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include "system/GTFile.h"
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
@@ -61,6 +61,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_sequence_exporting {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
@@ -171,6 +172,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003)
 
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 // Expected state:
@@ -237,6 +239,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    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));
@@ -277,7 +280,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
         "Sequence", false
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -306,22 +309,12 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTMouseDriver::click(os, Qt::RightButton);
 
     GTGlobals::sleep();
-
-    GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(100);
-
-    //GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::NoToAll));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-
-    GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     class CustomExportSelectedRegion : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
 
             QComboBox *formatCombo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "formatCombo", dialog));
@@ -348,6 +341,7 @@ 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"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
@@ -358,6 +352,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 GUI_TEST_CLASS_DEFINITION(test_0009) {
     // the test checks that a sequence associated with an annotation table can be exported
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
@@ -373,7 +368,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 GUI_TEST_CLASS_DEFINITION(test_0010) {
     // negative test for an annotation table not associated with any sequence
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
@@ -404,6 +401,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     // negative test for annotation table associated with a removed sequence
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
     GTMouseDriver::click(os);
@@ -418,7 +416,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 GUI_TEST_CLASS_DEFINITION(test_0012) {
     // test for an annotation table whose sequence association was changed
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QModelIndex annIdx = GTUtilsProjectTreeView::findIndex(os, "NC_001363 features");
     QWidget *seqArea = GTWidget::findWidget(os, "render_area_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -440,6 +440,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 GUI_TEST_CLASS_DEFINITION(test_0013) {
     // test for multiple annotation object selection associated sequence import is not available
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep(200);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
index d376d41..3e1189a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_sequence_exporting {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_sequence_exporting_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_sequence_exporting"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -43,7 +43,7 @@ GUI_TEST_CLASS_DECLARATION(test_0011)
 GUI_TEST_CLASS_DECLARATION(test_0012)
 GUI_TEST_CLASS_DECLARATION(test_0013)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 26311b0..e247d10 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
@@ -20,31 +20,32 @@
  */
 
 #include "GTTestsFromProjectView.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <utils/GTThread.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTFileDialog.h"
+#include <primitives/GTTreeWidget.h>
+#include <base_dialogs/GTFileDialog.h>
 #include "GTUtilsProject.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsMdi.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include <U2View/AnnotatedDNAViewFactory.h>
 #include <U2View/MSAEditorFactory.h>
@@ -52,6 +53,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_sequence_exporting_from_project_view {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
@@ -170,6 +172,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_PROJECT__EXPORT_AS_SEQUENCES_ACTION));
@@ -207,6 +210,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 3. Right click [m] COI object, in project view tree. Use context menu item {Export->Export to FASTA}
@@ -218,22 +222,17 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
     GTMouseDriver::click(os, Qt::RightButton);
-    GTGlobals::sleep(1000);
-
-    GTGlobals::sleep(1000);
+    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);
-    GTGlobals::sleep(1000);
-
-    GTGlobals::sleep(1000);
+    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
 
     QWidget *activeWindow =  GTUtilsMdi::activeWindow(os);
-    if (! activeWindow->windowTitle().contains("Zychia_baranovi") && !os.hasError()) {
-        os.setError("fasta file with sequences has been not opened");
-        }
+    CHECK_SET_ERR(activeWindow->windowTitle().contains("Zychia_baranovi"), "fasta file with sequences has been not opened");
 
     int sequenceLength = GTUtilsSequenceView::getLengthOfSequence(os);
     CHECK_SET_ERR(sequenceLength == 586, "Sequence length is " + QString::number(sequenceLength) + ", expected 586");
@@ -244,6 +243,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 3. Right click [m] COI object, in project view tree. Use context menu item {Export->Export to FASTA}
@@ -282,6 +282,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 3. Right click [m] COI object, in project view tree. Use context menu item {Export->Export to FASTA}
@@ -321,6 +322,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
 // Expected state:
@@ -363,6 +365,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "_common_data/scenarios/sandbox/", "exp2.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
 // Expected state: multiple aligniment view with NC_001363 sequence has been opened
@@ -378,6 +381,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state:
@@ -420,6 +424,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "_common_data/scenarios/sandbox/", "exp2.sto");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state: multiple alignment view with NC_001363 sequence has been opened
@@ -435,6 +440,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state:
@@ -477,6 +483,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "_common_data/scenarios/sandbox/", "exp2.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state: multiple alignment view with NC_001363 sequence has been opened
@@ -492,6 +499,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state:
@@ -534,6 +542,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "_common_data/scenarios/sandbox/", "exp2.meg");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // Expected state: multiple alignment view with NC_001363 sequence has been opened
@@ -543,6 +552,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
@@ -559,6 +569,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
@@ -574,6 +585,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
index 85d89df..9f7985c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_sequence_exporting_from_project_view {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_sequence_exporting_from_project_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_sequence_exporting_from_project_view"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -45,7 +45,7 @@ GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0008_1)
 GUI_TEST_CLASS_DECLARATION(test_0008_2)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //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 7545404..c6a6276 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
@@ -20,21 +20,21 @@
  */
 
 #include "GTTestsProjectUserLocking.h"
-#include "api/GTGlobals.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTFileDialog.h"
-#include "api/GTWidget.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTFile.h"
-#include "api/GTMenu.h"
+#include "GTGlobals.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTTreeWidget.h>
+#include "system/GTFile.h"
+#include "primitives/GTMenu.h"
 #include "GTUtilsProject.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h"
 
 #include <U2Core/DocumentModel.h>
@@ -56,6 +56,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_user_locking {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
@@ -63,7 +64,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 #define GT_METHOD_NAME "run"
     class CreateAnnnotationDialogComboBoxChecker : public Filler {
     public:
-        CreateAnnnotationDialogComboBoxChecker(U2OpStatus &_os, const QString &radioButtonName): Filler(_os, "CreateAnnotationDialog"), buttonName(radioButtonName){}
+        CreateAnnnotationDialogComboBoxChecker(HI::GUITestOpStatus &_os, const QString &radioButtonName): Filler(_os, "CreateAnnotationDialog"), buttonName(radioButtonName){}
         void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             GT_CHECK(dialog != NULL, "activeModalWidget is NULL");
@@ -95,6 +96,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 #undef GT_CLASS_NAME
 
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj5.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -116,7 +118,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
 #define GT_METHOD_NAME "run"
     class CreateAnnnotationDialogComboBoxChecker : public Filler {
     public:
-        CreateAnnnotationDialogComboBoxChecker(U2OpStatus &_os, const QString &radioButtonName): Filler(_os, "CreateAnnotationDialog"), buttonName(radioButtonName){}
+        CreateAnnnotationDialogComboBoxChecker(HI::GUITestOpStatus &_os, const QString &radioButtonName): Filler(_os, "CreateAnnotationDialog"), buttonName(radioButtonName){}
         void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             GT_CHECK(dialog != NULL, "activeModalWidget is NULL");
@@ -151,6 +153,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
 //     GTFile::backup(os, testDir + "_common_data/scenarios/project/proj3.uprj");
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj3.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     QModelIndex item = GTUtilsProjectTreeView::findIndex(os, "1.gb");
@@ -182,7 +185,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
     GTMouseDriver::moveTo(os, itemPos);
     GTMouseDriver::click(os, Qt::RightButton);
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     // proj3 was modified, restoring
@@ -218,10 +221,10 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     CHECK_SET_ERR(expectedImage == foundImage, "Icon is unlocked");
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj2", testDir+"_common_data/scenarios/sandbox", "proj2"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
 
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/sandbox/proj2.uprj");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
index 7274d53..29f7a2b 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
@@ -27,15 +27,15 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_project_user_locking {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_project_user_locking_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_project_user_locking"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0005)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // GUITest_common_scenarios_project_user_locking namespace
 
 } // U2 namespace
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 e240e74..67885cc 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
@@ -27,22 +27,24 @@
 #endif
 
 #include "GTTestsRepeatFinder.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "api/GTMouseDriver.h"
+#include <drivers/GTMouseDriver.h>
 #include "GTUtilsProjectTreeView.h"
-#include "api/GTTreeWidget.h"
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsMdi.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
+#include "GTUtilsTaskTreeView.h"
+
 #include <U2View/ADVConstants.h>
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_repeat_finder {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 // The Test Runs Repeat Finder then checks if the qualifier "repeat homology" exists in resulting annotations
 //
@@ -50,15 +52,14 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 //
 // 1. Use menu {File->Open}. Open file _common_data/fasta/seq4.fa.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "seq4.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "seq4.fa");
 
 // 2. Run Find Repeats dialog
     Runnable * swDialog = new FindRepeatsDialogFiller(os, testDir + "_common_data/scenarios/sandbox/");
     GTUtilsDialog::waitForDialog(os, swDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE
-        << "find_repeats_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find repeats...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
 // 3. Close sequence view, then reopen it
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
index 78ad78e..3944ee6 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
@@ -28,12 +28,12 @@ namespace U2 {
 
 namespace GUITest_common_scenarios_repeat_finder {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_repeat_finder_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_repeat_finder"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 } // 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 ce4b15e..07de354 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
@@ -23,20 +23,21 @@
 #include <QClipboard>
 #include <QTreeWidgetItem>
 
-#include "api/GTClipboard.h"
+#include <U2Core/U2IdTypes.h>
+#include "system/GTClipboard.h"
 #include "GTTestsSequenceEdit.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTFileDialog.h"
-#include "api/GTTreeWidget.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsProject.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsNotifications.h"
@@ -44,7 +45,7 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsMdi.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h"
@@ -58,7 +59,7 @@
 namespace U2{
 
 namespace GUITest_common_scenarios_sequence_edit {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     GTUtilsProject::openFiles(os, dataDir + "samples/FASTA/human_T1.fa");
@@ -69,8 +70,6 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
-
     Runnable *removeDialog = new RemovePartFromSequenceDialogFiller(os,
         RemovePartFromSequenceDialogFiller::Remove,
         true,
@@ -79,7 +78,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     );
     GTUtilsDialog::waitForDialog(os, removeDialog);
 
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTGlobals::sleep(1000);
 
     GTUtilsSequenceView::openSequenceView(os, "result.fa");
@@ -142,6 +141,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 GUI_TEST_CLASS_DEFINITION(test_0003) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     Runnable *filler = new InsertSequenceFiller(os,
@@ -152,7 +152,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
         false
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.fa");
@@ -170,6 +170,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     Runnable *filler = new InsertSequenceFiller(os,
@@ -180,7 +181,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
         false
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result.gb");
@@ -198,10 +199,10 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 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));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     Runnable *removeDialog = new RemovePartFromSequenceDialogFiller(os,
         RemovePartFromSequenceDialogFiller::Remove,
         true,
@@ -209,11 +210,12 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
         RemovePartFromSequenceDialogFiller::FASTA
     );
     GTUtilsDialog::waitForDialog(os, removeDialog);
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTGlobals::sleep(1000);
     GTUtilsDocument::checkDocument(os, "result.fa");
     GTGlobals::sleep(1000);
     GTUtilsSequenceView::openSequenceView(os, "result.fa");
+    GTGlobals::sleep(1000);
 
     int sequenceLength = GTUtilsSequenceView::getLengthOfSequence(os);
     CHECK_SET_ERR(sequenceLength == 199900, "Sequence length is " + QString::number(sequenceLength) + ", expected 199900");
@@ -225,6 +227,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 }
 GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/", "NC_014267.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_RESERVE_COMPLEMENT_SEQUENCE, GTGlobals::UseKey));
@@ -242,9 +245,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     // 2. Select "Remove subsequence" in the context menu.
     // 3. Insert region "2..2" into the "Region to remove" field.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "2..2"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTGlobals::sleep(1000);
 
     // Expected result: the sequence is started from "AAT", the sequence length is 29, DUMMY_1 annotation is [2..5].
@@ -261,6 +263,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/edit_sequence/", "test.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     QTreeWidgetItem *dummyTest = GTUtilsAnnotationsTreeView::findItem(os, "DUMMY_1");
@@ -270,7 +273,6 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep();
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
 
     Runnable *removeDialog = new RemovePartFromSequenceDialogFiller(os,
         RemovePartFromSequenceDialogFiller::Remove,
@@ -280,7 +282,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
         );
 
     GTUtilsDialog::waitForDialog(os, removeDialog);
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     int sequenceLength = GTUtilsSequenceView::getLengthOfSequence(os);
@@ -312,6 +314,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
 GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTFileDialog::openFile(os, testDir + "_common_data/edit_sequence/", "test.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 11));
@@ -328,6 +331,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/edit_sequence/", "test.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_COPY" << "action_copy_annotation_sequence"));
@@ -346,9 +350,8 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/edit_sequence/test.gb");
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "2..2"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTGlobals::sleep(1000);
 
     QString sequenceBegin = GTUtilsSequenceView::getBeginOfSequenceAsString(os, 3);
@@ -393,7 +396,7 @@ QString shiftQualifierRegions(const QString &value, int delta) {
     return result;
 }
 
-void checkQualifierValue(U2OpStatus &os, const QString &qualName, int regionShift) {
+void checkQualifierValue(HI::GUITestOpStatus &os, const QString &qualName, int regionShift) {
     QTreeWidgetItem *qual = GTUtilsAnnotationsTreeView::findItem(os, qualName);
     const QString qualValue = qual->data(2, Qt::DisplayRole).toString();
     const QString expectedVal = shiftQualifierRegions(getReferenceQualifiers()[qualName], regionShift);
@@ -401,13 +404,13 @@ void checkQualifierValue(U2OpStatus &os, const QString &qualName, int regionShif
         .arg(expectedVal).arg(qualValue));
 }
 
-void checkQualifierRegionsShift(U2OpStatus &os, int shift) {
+void checkQualifierRegionsShift(HI::GUITestOpStatus &os, int shift) {
     foreach(const QString &qualName, getReferenceQualifiers().keys()) {
         checkQualifierValue(os, qualName, shift);
     }
 }
 
-void doMagic(U2OpStatus &os) {
+void doMagic(HI::GUITestOpStatus &os) {
     QTreeWidgetItem *annotationGroup = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature  (0, 2)");
     GTTreeWidget::getItemCenter(os, annotationGroup);
     for (int i = 0; i < annotationGroup->childCount(); ++i) {
@@ -421,18 +424,17 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1) {
     // Check that qualifiers are recalculated on a removal of a subsequence that is located to the left of a region mentioned in a qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "1..10", false));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, 0);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "1..10", true));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, -10);
@@ -442,11 +444,11 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1_neg) {
     // Check that qualifiers aren't recalculated on a removal of a subsequence that is located to the right of a region mentioned in a qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "1000..1100", true));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, 0);
@@ -456,10 +458,10 @@ GUI_TEST_CLASS_DEFINITION(test_0013_2) {
     // Check that a translation qualifier is recalculated on a removal of a subsequence that is located inside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "1040..1042", true));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem *annotationGroup = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
@@ -474,10 +476,10 @@ GUI_TEST_CLASS_DEFINITION(test_0013_2_neg) {
     // Check that a translation qualifier isn't recalculated on a removal of a subsequence that is located outside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "996..1000", true));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem *annotationGroup = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
@@ -492,22 +494,21 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1) {
     // Check that qualifiers are recalculated on an insertion of a subsequence that is located to the left of a region mentioned in a qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 1);
 
     GTUtilsDialog::waitForDialog(os, new InsertSequenceFiller(os, "AAAAAAAAAA", InsertSequenceFiller::Resize, 1, "",
         InsertSequenceFiller::FASTA, false, false, GTGlobals::UseKey, false, false));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS),
-        QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, 0);
 
     GTUtilsDialog::waitForDialog(os, new InsertSequenceFiller(os, "AAAAAAAAAA", InsertSequenceFiller::Resize, 1, "",
         InsertSequenceFiller::FASTA, false, false, GTGlobals::UseKey, false, true));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS),
-        QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, 10);
@@ -517,14 +518,14 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1_neg) {
     // Check that qualifiers aren't recalculated on an insertion of a subsequence that is located to the right of a region mentioned in a qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
     GTUtilsSequenceView::selectSequenceRegion(os, 100000, 100000);
 
     GTUtilsDialog::waitForDialog(os, new InsertSequenceFiller(os, "AAAAAAAAAA", InsertSequenceFiller::Resize, 100000, "",
         InsertSequenceFiller::FASTA, false, false, GTGlobals::UseKey, false, true));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS),
-        QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     checkQualifierRegionsShift(os, 0);
@@ -534,13 +535,13 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2) {
     // Check that a translation qualifier is recalculated on an insertion of a subsequence that is located inside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1050, 1050);
 
     GTUtilsDialog::waitForDialog(os, new InsertSequenceFiller(os, "A", InsertSequenceFiller::Resize, 1050, "",
         InsertSequenceFiller::FASTA, false, false, GTGlobals::UseKey, false, true));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS),
-        QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem *annotationGroup = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
@@ -555,13 +556,13 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2_neg) {
     // Check that a translation qualifier isn't recalculated on an insertion of a subsequence that is located outside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 1);
 
     GTUtilsDialog::waitForDialog(os, new InsertSequenceFiller(os, "A", InsertSequenceFiller::Resize, 1, "",
         InsertSequenceFiller::FASTA, false, false, GTGlobals::UseKey, false, true));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS),
-        QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem *annotationGroup = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
@@ -576,12 +577,13 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     // Check that a qualifier is recalculated on a substitution of a subsequence that is located to the left of a region mentioned in the qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 10);
 
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "AAAAA", false));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence..."));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -590,7 +592,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 10);
 
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "AAAAA", true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence..."));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -601,12 +603,13 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1_neg) {
     // Check that a qualifier isn't recalculated on a substitution of a subsequence that is located to the right of a region mentioned in the qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1000, 1010);
 
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "AAAAA", true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence..."));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -617,11 +620,12 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     // Check that a translation qualifier is recalculated on a substitution of a subsequence that is located inside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1050, 1050);
 
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "AAA", true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence..."));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -637,6 +641,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2_neg) {
     // Check that a translation qualifier isn't recalculated on a substitution of a subsequence that is located outside an annotated region
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 996, 1000);
 
@@ -657,12 +662,13 @@ GUI_TEST_CLASS_DEFINITION(test_0016_1) {
     // Check that a qualifier isn't recalculated on a removal of a subsequence that includes a region mentioned in the qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE, GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "1..600", true));
     GTUtilsNotifications::waitForNotification(os, false);
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove subsequence...", GTGlobals::UseMouse);
+
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMdi::activateWindow(os, "qulifier_rebuilding [s] human_T1");
@@ -674,12 +680,13 @@ GUI_TEST_CLASS_DEFINITION(test_0016_2) {
     // Check that a qualifier isn't recalculated on a complete replacement of a subsequence that includes a region mentioned in the qualifier
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/qulifier_rebuilding.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     doMagic(os); // for some reason annotation qualifiers are not found without actions done by this function
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 600);
 
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "AAAAA", true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace subsequence..."));
     GTUtilsNotifications::waitForNotification(os, false);
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
index 3458252..7ce8b7f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_sequence_edit {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_sequence_edit_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_sequence_edit"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -57,7 +57,7 @@ GUI_TEST_CLASS_DECLARATION(test_0015_2_neg)
 GUI_TEST_CLASS_DECLARATION(test_0016_1)
 GUI_TEST_CLASS_DECLARATION(test_0016_2)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 6bed0b4..931684a 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,20 +20,21 @@
  */
 
 #include "GTTestsSequenceView.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTGlobals.h"
-#include "api/GTWidget.h"
-#include "api/GTAction.h"
-#include "api/GTMenu.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.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 "api/GTKeyboardDriver.h"
-#include "api/GTRadioButton.h"
-#include "api/GTTreeWidget.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
 #include "GTUtilsCircularView.h"
@@ -42,10 +43,10 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
-#include "runnables/qt/ColorDialogFiller.h"
-#include "runnables/qt/DefaultDialogFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "utils/GTUtilsToolTip.h"
+#include <base_dialogs/ColorDialogFiller.h>
+#include <base_dialogs/DefaultDialogFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
@@ -61,7 +62,8 @@
 #include "runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include <U2View/DetView.h>
 #include <U2Core/AppContext.h>
 #include <U2View/ADVConstants.h>
@@ -82,7 +84,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_sequence_view {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 //    disable circular view for protein sequences (0002400)
 
@@ -90,6 +92,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //    Expected state: 'Show circular view' button disabled for 1CF7 chain 1 sequence and 1CF7 chain 2 sequence, but enabled for others
 
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     QWidget *w0 = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
@@ -115,6 +118,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     QWidget *w0 = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
@@ -137,6 +141,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     QWidget *w0 = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
@@ -169,6 +174,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 //    Expected state: buttons 'Show amino translations' and 'Show amino strand' becomes enabled
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget *toggleViewButton = GTWidget::findWidget(os, "toggleViewButton");
@@ -207,6 +213,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget* ext_button = GTWidget::findWidget(os, "qt_toolbar_ext_button", GTWidget::findWidget(os, "mwtoolbar_activemdi"));
@@ -249,6 +256,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     }
 GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget *toggleViewButton = GTWidget::findWidget(os, "toggleViewButton");
@@ -310,6 +318,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 //    Expected state: UGENE not crashed
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 3);
@@ -322,6 +331,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 GUI_TEST_CLASS_DEFINITION(test_0004_1) { //CHANGES: keyboard used instead mouse
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 3);
@@ -344,7 +354,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     class AllActionsPopupChooser : public PopupChooser {
     public:
-        AllActionsPopupChooser(U2OpStatus &_os) : PopupChooser(_os, QStringList()) {}
+        AllActionsPopupChooser(HI::GUITestOpStatus &_os) : PopupChooser(_os, QStringList()) {}
         void run() {
             GTGlobals::sleep(100);
             QMenu* activePopupMenu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
@@ -388,6 +398,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //     GTGlobals::sleep();
 //     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* toggleAutoAnnotationsButton = GTWidget::findWidget(os, "toggleAutoAnnotationsButton");
 //  !!! dirty fastfix of test, very temporary
@@ -415,6 +426,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     //Expected state: there is no auto-annotations for opened sequences
 
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     QTreeWidgetItem* enz = GTUtilsAnnotationsTreeView::findItem(os, "enzymes", GTGlobals::FindOptions(false));
@@ -430,6 +442,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     GTGlobals::sleep();
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* toggleAutoAnnotationsButton = GTWidget::findWidget(os, "toggleAutoAnnotationsButton");
 //  !!! dirty fastfix of test, very temporary
@@ -490,6 +503,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     //2. Open any PBD file from samples
     //Expected state: there is no auto-annotations for opened sequences
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //Expected state: there is no auto-annotations for opened sequences
@@ -507,6 +521,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     GTGlobals::sleep();
     GTGlobals::sleep();
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //1. Enable Auto-annotations
     QWidget* toggleAutoAnnotationsButton = GTWidget::findWidget(os, "toggleAutoAnnotationsButton");
@@ -570,6 +585,7 @@ GUI_TEST_CLASS_DEFINITION(test_0021) {
 //     Expected state: even the sequence is linear, Primer3 finds primers on junction
 
     GTFileDialog::openFile(os, testDir + "/_common_data/primer3", "linear_circular_results.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os));
@@ -594,6 +610,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022) {
 //     Expected state: the sequence is circular - a few primers cover junction point
 
     GTFileDialog::openFile(os, testDir + "/_common_data/primer3", "circular_primers.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os));
@@ -620,6 +637,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
 //     Expected state: results are linear
 
     GTFileDialog::openFile(os, testDir + "/_common_data/primer3", "DNA.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os));
@@ -672,6 +690,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
 //    Expected state: primers are located on both selected regions(start and end).
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     ADVSingleSequenceWidget* wgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
     CHECK_SET_ERR(wgt != NULL, "ADVSequenceWidget is NULL");
     GTUtilsCv::cvBtn::click(os, wgt);
@@ -711,6 +730,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
 //    Expected state: primers(left and right) are located on either side of junction point
 
     GTFileDialog::openFile(os, testDir + "/_common_data/primer3", "DNA.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     ADVSingleSequenceWidget* wgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
     CHECK_SET_ERR(wgt != NULL, "ADVSequenceWidget is NULL");
 
@@ -739,6 +759,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 //    4. Accept the dialog
 //    Expected state: no warning apeared, primers are located on selected region
     GTFileDialog::openFile(os, testDir + "/_common_data/primer3", "DNA.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ADVSingleSequenceWidget* wgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
     CHECK_SET_ERR(wgt != NULL, "ADVSequenceWidget is NULL");
@@ -767,6 +788,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 //    2. Export sequence as image
 
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new ExportSequenceImage(os, sandBoxDir + "seq_image_0027"));
     GTWidget::click(os, GTAction::button(os, "export_image"));
@@ -777,14 +799,16 @@ GUI_TEST_CLASS_DEFINITION(test_0028) {
 //    Region selector is hidden if CurrentView export is selected
 
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class RegionChecker : public Filler {
     public:
-        RegionChecker(U2OpStatus& os)
+        RegionChecker(HI::GUITestOpStatus& os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+            GTWidget::clickWindowTitle(os, dialog);
 
             QRadioButton* radioButton = dialog->findChild<QRadioButton*>("currentViewButton");
             GTRadioButton::click(os, radioButton);
@@ -833,6 +857,7 @@ GUI_TEST_CLASS_DEFINITION(test_0029) {
 
 
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QAction* zoom = GTAction::findActionByText(os, "Zoom In");
     CHECK_SET_ERR(zoom != NULL, "Cannot find Zoom In action");
@@ -842,11 +867,12 @@ GUI_TEST_CLASS_DEFINITION(test_0029) {
 
     class LimitsChecker : public Filler {
     public:
-        LimitsChecker(U2OpStatus& os)
+        LimitsChecker(HI::GUITestOpStatus& os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+            GTWidget::clickWindowTitle(os, dialog);
 
             QWidget* rangeSelector = dialog->findChild<QWidget*>("range_selector");
             CHECK_SET_ERR(rangeSelector != NULL, "range_selector not found");
@@ -902,6 +928,7 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
 
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "YkrI"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Find restriction sites"));
@@ -911,7 +938,7 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
 
     class SvgLimitsChecker : public Filler {
     public:
-        SvgLimitsChecker(U2OpStatus& os)
+        SvgLimitsChecker(HI::GUITestOpStatus& os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -967,6 +994,7 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
 GUI_TEST_CLASS_DEFINITION(test_0031){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select some redion
     GTUtilsSequenceView::selectSequenceRegion(os, 10, 20);
 //    Use context menu {Copy->Copy reverse complement sequence}
@@ -982,6 +1010,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031){
 GUI_TEST_CLASS_DEFINITION(test_0031_1){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select some redion
     GTUtilsSequenceView::selectSequenceRegion(os, 10, 20);
 //    Use context menu {Copy->Copy reverse complement sequence}
@@ -997,6 +1026,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031_1){
 GUI_TEST_CLASS_DEFINITION(test_0031_2){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select annotation
     GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
 //    Use context menu {Copy->Copy reverse complement sequence}
@@ -1033,6 +1063,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031_2){
 GUI_TEST_CLASS_DEFINITION(test_0031_3){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select annotation
     GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
 //    Use context menu {Copy->Copy reverse complement sequence}
@@ -1068,7 +1099,7 @@ 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"); \
+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); \
@@ -1080,13 +1111,14 @@ QAction* compl3 = GTMenu::getMenuItem(os, activePopupMenu, "3 complementary tran
 GUI_TEST_CLASS_DEFINITION(test_0032){
 //    Open human_T1.fa
     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);
 //    Check "Show direct only"
     class DirectPopupChecker : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GET_ACTIONS
 
             CHECK_SET_ERR(direct1->isChecked(), "check1: direct1 is not checked");
@@ -1110,7 +1142,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
     GTWidget::click(os, aminoToolbarButton);
 
     class ComplPopupChecker : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GET_ACTIONS
 
             CHECK_SET_ERR(!direct1->isChecked(), "check2: direct1 is checked");
@@ -1134,7 +1166,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
     GTWidget::click(os, aminoToolbarButton);
 
     class AllPopupChecker : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GET_ACTIONS
 
             CHECK_SET_ERR(direct1->isChecked(), "check3: direct1 is checked");
@@ -1158,6 +1190,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
 GUI_TEST_CLASS_DEFINITION(test_0034){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* panView = GTWidget::findWidget(os, "pan_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     QImage init = GTWidget::getImage(os, panView);
 //    Create custom ruler
@@ -1187,6 +1220,7 @@ GUI_TEST_CLASS_DEFINITION(test_0034){
 GUI_TEST_CLASS_DEFINITION(test_0035){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Double click on pan view
     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()));
@@ -1202,6 +1236,7 @@ GUI_TEST_CLASS_DEFINITION(test_0035){
 GUI_TEST_CLASS_DEFINITION(test_0036){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select 2 annotations.
     GTUtilsAnnotationsTreeView::createAnnotation(os, "new_group", "ann1", "10..20");
     GTUtilsAnnotationsTreeView::createAnnotation(os, "new_group", "ann2", "40..50",false);
@@ -1229,6 +1264,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
 GUI_TEST_CLASS_DEFINITION(test_0037) {
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select any area
     GTUtilsSequenceView::selectSequenceRegion(os, 10000, 11000);
 //    Press zoom to selection button
@@ -1244,6 +1280,7 @@ GUI_TEST_CLASS_DEFINITION(test_0037_1) {
 //Check defails "zoom to selection" dialog values
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press zoom to selection button
     GTUtilsDialog::waitForDialog(os, new ZoomToRangeDialogFiller(os));
     GTWidget::click(os, GTAction::button(os, "zoom_to_range_human_T1 (UCSC April 2002 chr7:115977709-117855134)"));
@@ -1256,6 +1293,7 @@ GUI_TEST_CLASS_DEFINITION(test_0037_1) {
 GUI_TEST_CLASS_DEFINITION(test_0038){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* exportButton = GTWidget::findWidget(os, "export_image");
 //    Export image
 //    GTUtilsDialog::waitForDialog(os, new ExportSequenceImage(os, sandBoxDir + "seq_view_test_0037_1.png"));
@@ -1283,6 +1321,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
 GUI_TEST_CLASS_DEFINITION(test_0040){
 //scrollbar on seq view
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     DetView* det = GTWidget::findExactWidget<DetView*>(os, "det_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     QScrollBar* scroll = det->findChild<QScrollBar*>();
     GTWidget::click(os, scroll);
@@ -1293,6 +1332,7 @@ GUI_TEST_CLASS_DEFINITION(test_0040){
 GUI_TEST_CLASS_DEFINITION(test_0041){
     //test key events
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     DetView* det = GTWidget::findExactWidget<DetView*>(os, "det_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     int initLength = det->getVisibleRange().length;
     GTWidget::click(os, det);
@@ -1342,6 +1382,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041){
 GUI_TEST_CLASS_DEFINITION(test_0042){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select annotation
     GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
 //    Expected: annotation selected
@@ -1359,6 +1400,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042){
 GUI_TEST_CLASS_DEFINITION(test_0043){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    move mouse to annotation on det view
     GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
     GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(20, 0));
@@ -1374,6 +1416,7 @@ GUI_TEST_CLASS_DEFINITION(test_0043){
 GUI_TEST_CLASS_DEFINITION(test_0044){
     //Overview weel event
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     Overview* over = qobject_cast<Overview*>(GTWidget::findWidget(os, "OverviewRenderArea")->parentWidget()->parentWidget());
     GTWidget::click(os, over);
     GTGlobals::sleep(1000);
@@ -1390,6 +1433,7 @@ GUI_TEST_CLASS_DEFINITION(test_0044){
 GUI_TEST_CLASS_DEFINITION(test_0044_1){
     //selection on overview
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     Overview* over = qobject_cast<Overview*>(GTWidget::findWidget(os, "OverviewRenderArea")->parentWidget()->parentWidget());
     GTWidget::click(os, over);
 
@@ -1407,6 +1451,7 @@ GUI_TEST_CLASS_DEFINITION(test_0044_1){
 GUI_TEST_CLASS_DEFINITION(test_0044_2){
     //move slider
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     Overview* over = GTUtilsSequenceView::getOverviewByNumber(os);
     GTWidget::click(os, over);
     GTMouseDriver::doubleClick(os);
@@ -1431,6 +1476,7 @@ GUI_TEST_CLASS_DEFINITION(test_0044_2){
 
 GUI_TEST_CLASS_DEFINITION(test_0045){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* pan = GTUtilsSequenceView::getPanViewByNumber(os);
     QImage init = GTWidget::getImage(os, pan);
 //show restriction sites
@@ -1470,6 +1516,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045){
 
 GUI_TEST_CLASS_DEFINITION(test_0046){
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     for(int i=0; i<5; i++){
         GTWidget::click(os, GTAction::button(os, "action_zoom_in_NC_001363"));
     }
@@ -1496,6 +1543,7 @@ GUI_TEST_CLASS_DEFINITION(test_0046){
 GUI_TEST_CLASS_DEFINITION(test_0047){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open CV
     GTUtilsCv::cvBtn::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
 //    Use context menu on CV
@@ -1511,7 +1559,9 @@ GUI_TEST_CLASS_DEFINITION(test_0047){
 GUI_TEST_CLASS_DEFINITION(test_0048){
 //    Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Use context menu on annotation in tree view
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363 features"));
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
@@ -1524,7 +1574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0048){
 GUI_TEST_CLASS_DEFINITION(test_0050){
     class WrongNameChecker : public CustomScenario {
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1538,7 +1588,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
 
     class WrongDistanceChecker : public CustomScenario {
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1559,6 +1609,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsAnnotationsTreeView::selectItems(os, QList<QTreeWidgetItem*>() << GTUtilsAnnotationsTreeView::findItem(os, "CDS"));
 
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new WrongNameChecker));
@@ -1573,7 +1624,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
 GUI_TEST_CLASS_DEFINITION(test_0050_1){
     class custom : public CustomScenario {
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1587,6 +1638,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050_1){
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsAnnotationsTreeView::selectItems(os, QList<QTreeWidgetItem*>() << GTUtilsAnnotationsTreeView::findItem(os, "CDS"));
 
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new custom));
@@ -1598,6 +1650,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050_1){
 GUI_TEST_CLASS_DEFINITION(test_0051){
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
 
     QColor init = GTUtilsAnnotHighlightingTreeView::getItemColor(os, "CDS");
@@ -1616,6 +1669,7 @@ GUI_TEST_CLASS_DEFINITION(test_0051){
 
 GUI_TEST_CLASS_DEFINITION(test_0052){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     DetView* det = GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView();
@@ -1625,10 +1679,14 @@ GUI_TEST_CLASS_DEFINITION(test_0052){
 
     GTWidget::click(os, GTAction::button(os, "complement_action"));
     GTGlobals::sleep(1000);
+    GTWidget::click(os, det);
+    GTGlobals::sleep(1000);
     QImage image2 = GTWidget::getImage(os, det);
 
     GTWidget::click(os, GTAction::button(os, "complement_action"));
     GTGlobals::sleep(1000);
+    GTWidget::click(os, det);
+    GTGlobals::sleep(1000);
     QImage image3 = GTWidget::getImage(os, det);
 
     CHECK_SET_ERR(image1 != image2, "Image was not changed");
@@ -1637,29 +1695,26 @@ GUI_TEST_CLASS_DEFINITION(test_0052){
 
 GUI_TEST_CLASS_DEFINITION(test_0052_1){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     DetView* det = GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView();
     GTWidget::click(os, det);
+    GTGlobals::sleep(1000);
     QImage image1 = GTWidget::getImage(os, det);
 
     GTWidget::click(os, GTAction::button(os, "translation_action"));
     GTGlobals::sleep(2000);
+    GTWidget::click(os, det);
+    GTGlobals::sleep(1000);
     QImage image2 = GTWidget::getImage(os, det);
 
     GTWidget::click(os, GTAction::button(os, "translation_action"));
     GTGlobals::sleep(2000);
+    GTWidget::click(os, det);
+    GTGlobals::sleep(1000);
     QImage image3 = GTWidget::getImage(os, det);
 
-    QImageWriter writer("1test.jpg");
-    writer.write(image1);
-
-    QImageWriter writer1("2test.jpg");
-    writer.write(image3);
-
-    image1.save("/home/vmalin/1.bmp", "BMP");
-    image3.save("/home/vmalin/3.bmp", "BMP");
-
     CHECK_SET_ERR(image1 != image2, "Image was not changed");
     CHECK_SET_ERR(image1 == image3, "Image was not restored");
 }
@@ -1667,8 +1722,9 @@ GUI_TEST_CLASS_DEFINITION(test_0052_1){
 GUI_TEST_CLASS_DEFINITION(test_0053){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open any graph
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "GC Content (%)", GTGlobals::UseMouse));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
     GTGlobals::sleep(500);
 //    Add label with shift+left mouse
@@ -1678,12 +1734,13 @@ GUI_TEST_CLASS_DEFINITION(test_0053){
     GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
 
     QList<QVariant> list = GTUtilsSequenceView::getLabelPositions(os, GTUtilsSequenceView::getGraphView(os));
-    CHECK_SET_ERR(list.size() == 1, QString("unexpected number of labels: ").arg(list.size()));
+    CHECK_SET_ERR(list.size() == 1, QString("unexpected number of labels: %1").arg(list.size()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0054){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open any graph
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
@@ -1709,6 +1766,7 @@ GUI_TEST_CLASS_DEFINITION(test_0054){
 GUI_TEST_CLASS_DEFINITION(test_0055){
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open any graph
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
@@ -1760,6 +1818,7 @@ GUI_TEST_CLASS_DEFINITION(test_0056){
     //wrong cutoff values
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open any graph
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
@@ -1769,7 +1828,7 @@ GUI_TEST_CLASS_DEFINITION(test_0056){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -1792,6 +1851,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057){
     //Uses processor core!!!
 //    Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open any graph
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
@@ -1813,6 +1873,7 @@ GUI_TEST_CLASS_DEFINITION(test_0058){
     // complex test on local toolbars buttons
 
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QAction* zoomIn = GTAction::findAction(os, "action_zoom_in_A1#berezikov");
     CHECK_SET_ERR(zoomIn != NULL, "Cannot find action_zoom_in_A1#berezikov");
@@ -1823,13 +1884,16 @@ GUI_TEST_CLASS_DEFINITION(test_0058){
 
     QWidget* chromView = GTWidget::findWidget(os, "chromatogram_view_A1#berezikov");
     CHECK_SET_ERR(chromView != NULL, "Cannot find chromatogram_view_A1#berezikov");
-    QPixmap pix = QPixmap::grabWidget(chromView, chromView->rect());
+
+    QImage image = GTWidget::getImage(os, chromView);
 
     QAction* bars = GTAction::findActionByText(os, "Show quality bars");
     CHECK_SET_ERR(bars, "Cannot find 'Show quality bars' action");
     GTWidget::click(os, GTAction::button(os, bars));
-    CHECK_SET_ERR(pix.toImage() != QPixmap::grabWidget(chromView, chromView->rect()).toImage(), "Nothing changed on Chromatogram View after Bars adding");
-    pix = QPixmap::grabWidget(chromView, chromView->rect());
+
+    CHECK_SET_ERR(image != GTWidget::getImage(os, chromView), "Nothing changed on Chromatogram View after Bars adding");
+
+    image = GTWidget::getImage(os, chromView);
 
     QAction* traces = GTAction::findActionByText(os, "Show/hide trace");
     CHECK_SET_ERR(traces != NULL, "Cannot find 'Show/hide trace' action");
@@ -1840,20 +1904,22 @@ GUI_TEST_CLASS_DEFINITION(test_0058){
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "C"));
     GTWidget::click(os, GTAction::button(os, traces));
 
-    CHECK_SET_ERR(pix.toImage() != QPixmap::grabWidget(chromView, chromView->rect()).toImage(), "Nothing changed on Chromatogram View after Traces hiding");
+    CHECK_SET_ERR(image != GTWidget::getImage(os, chromView), "Nothing changed on Chromatogram View after Traces hiding");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0059){
     //"Invert annotation selection" action test
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Invert annotation selection"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, GTUtilsAnnotationsTreeView::findItem(os, "CDS"));
     QList<QTreeWidgetItem*> selected = GTUtilsAnnotationsTreeView::getAllSelectedItems(os);
-    CHECK_SET_ERR(selected.size() == 15, QString("Unexpected number of selected items: %1").arg(selected.size()));
+    CHECK_SET_ERR(selected.size() == 7, QString("Unexpected number of selected items: %1").arg(selected.size()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0059_1){
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ORFs"));
     GTWidget::click(os, GTWidget::findWidget(os, "toggleAutoAnnotationsButton"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -1870,6 +1936,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059_1){
 
 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);
@@ -1887,6 +1954,398 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0061_1) {
+    //1. Open "data/Samples/PDB/1CF7.PDB".
+    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"));
+    //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]"));
+    //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));
+    QTreeWidgetItem* annotationsChainB = GTUtilsAnnotationsTreeView::findItem(os, "1CF7 chain B annotation [1CF7.PDB]");
+    //5. Check that there is 'molecule_name' qualifier with value 'PROTEIN (TRANSCRIPTION FACTOR DP-2)'  in 'chain_info' annotation for chain B
+    CHECK_SET_ERR(NULL != annotationsChainB, QString("Can't find '1CF7 chain B annotation [1CF7.PDB]' annotations document"));
+    QTreeWidgetItem* chainInfoGroup = GTUtilsAnnotationsTreeView::findItem(os, "chain_info  (0, 1)", annotationsChainB);
+    CHECK_SET_ERR(NULL != chainInfoGroup, QString("Can't find 'chain_info' annotation group for chain B"));
+    QTreeWidgetItem* chainInfo = GTUtilsAnnotationsTreeView::findItem(os, "chain_info", chainInfoGroup);
+    CHECK_SET_ERR(NULL != chainInfo, QString("Can't find 'chain_info' annotation for chain B"));
+    QString moleculeNameChainB = GTUtilsAnnotationsTreeView::getQualifierValue(os, "molecule_name", chainInfo);
+
+    CHECK_SET_ERR(moleculeNameChainB == "PROTEIN (TRANSCRIPTION FACTOR DP-2)", QString("Incorrect molecule name is detected for chain B: %1").arg(moleculeNameChainB));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0061_2) {
+    //1. Open "_common_data/pdb/1CRN_without_compnd_tag.PDB"
+    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]"));
+
+    //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");
+    CHECK_SET_ERR("A" == chainId, QString("Incorrect 'chain_info' qualifier value: %1").arg(chainId));
+    //4. Check that there is not 'molecule_name' qualifier
+    QTreeWidgetItem *moleculeName = GTUtilsAnnotationsTreeView::findItem(os, "molecule_name", GTGlobals::FindOptions(false));
+    CHECK_SET_ERR(NULL == moleculeName, QString("There is 'moleculeName' qualifier"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0061_3) {
+    //1. Open "data/samples/PDB/1CF7.PDB".
+    GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Call context menu on the 3dview, select {Structural Alignment -> Align With...} menu item.
+    //3. Check that chain combobox contains identifiers: A, B, C, D.
+    //4. Accept the dialog.
+    QStringList chainIndexes;
+    chainIndexes << "A" << "B" << "C" << "D";
+    GTUtilsDialog::waitForDialog(os, new StructuralAlignmentDialogFiller(os, chainIndexes));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Structural Alignment" << "align_with"));
+    QWidget *widget3d = GTWidget::findWidget(os, "1-1CF7");
+    CHECK_SET_ERR(NULL != widget3d, "3D widget was not found");
+    GTWidget::click(os, widget3d, Qt::RightButton);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0062) {
+//    1. Open any sequence (e.g. murine.gb)
+//    2. "Wrap sequence" button is not checked
+//    3. Click "Wrap sequence" button on the local toolbar
+//    Expected state: the view was not resized, horizontal scrollbar is hidden, vertical scrollbar appeared, sequence is split into lines
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+
+    ADVSingleSequenceWidget* seqWgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
+    CHECK_SET_ERR(seqWgt != NULL, "No sequence widget found");
+    QSize seqWgtSize = seqWgt->size();
+
+    QScrollBar* hScrollBar = GTScrollBar::getScrollBar(os, "singleline_scrollbar");
+    CHECK_SET_ERR(hScrollBar != NULL, "Cannot find singleline_scrollbar");
+    CHECK_SET_ERR(hScrollBar->isVisible(), "singleline_scrollbar is not visible");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+    CHECK_SET_ERR(seqWgtSize == seqWgt->size(), "Multi-line mode resized the view");
+    CHECK_SET_ERR(hScrollBar->isHidden(), "singleline_scrollbar is visible");
+
+    QScrollBar* scrollBar = GTScrollBar::getScrollBar(os, "multiline_scrollbar");
+    CHECK_SET_ERR(scrollBar != NULL, "Cannot find multiline_scrollbar");
+    CHECK_SET_ERR(scrollBar->isVisible(), "multiline_scrollbar is hidden");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0063) {
+//    1. Open any sequence (e.g. murine.gb)
+//    2. Scroll to the middle of the sequence (say visible range starts from X position)
+//    3. Click "Wrap sequence" (say visible range starts from Y position now)
+//    4. Expected state: X position is located in the first visible line
+//    5. Uncheck "Wrap sequence"
+//    Expected state: sequence is displayed in one line, and visible range starts from Y position
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+
+    int pos = 789;
+    GTUtilsSequenceView::goToPosition(os, pos);
+    GTGlobals::sleep();
+    U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    CHECK_SET_ERR(visibleRange.contains(pos), "Visible range does not contain 789 position");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+    GTGlobals::sleep();
+
+    visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    CHECK_SET_ERR(visibleRange.contains(pos), "Visible range does not contain requeried position");
+    pos = visibleRange.startPos;
+
+    GTWidget::click(os, wrapButton);
+    GTGlobals::sleep();
+    visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    CHECK_SET_ERR(visibleRange.startPos == pos, "Start position of visible range was changed");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0064) {
+//    1. Open any sequence (e.g. murine.gb)
+//    2. Scroll with the mouse wheel to the end of the sequence and back to the beginning
+
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "seq4.fa");
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    QScrollBar* scrollBar = GTScrollBar::getScrollBar(os, "multiline_scrollbar");
+    CHECK_SET_ERR(scrollBar != NULL, "Cannot find multiline_scrollbar");
+
+    GTScrollBar::moveSliderWithMouseWheelDown(os, scrollBar, scrollBar->maximum());
+    GTGlobals::sleep();
+
+    U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    CHECK_SET_ERR(visibleRange.contains(GTUtilsSequenceView::getSeqWidgetByNumber(os)->getSequenceLength() - 1), "The end position of the sequence is not visible. Failed to scroll to the end" );
+
+    GTScrollBar::moveSliderWithMouseWheelUp(os, scrollBar, scrollBar->maximum());
+    GTGlobals::sleep();
+
+    visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    CHECK_SET_ERR(visibleRange.contains(1), "The end position of the sequence is not visible. Failed to scroll to the end" );
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0065) {
+//    1. Open any sequence (e.g. murine.gb), "Wrap sequence"
+//    2. Set focus on the DetView
+//    3. Press down-arrow button a few times
+//    Expected state: the view is scrolled down a little
+//    4. Press up-arrow button a few times
+//    Expected state: the view is scrolled up a little
+//    5. Press page-down button
+//    Expected state: the sequence was scrolled to the next line
+//    6. Press page-up button
+//    Expected state: the sequence was scrolled to the previous line
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+
+    U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    for (int i = 0; i < 5; i++) {
+        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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"]);
+    }
+    CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was changed");
+
+    visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"]);
+    GTGlobals::sleep();
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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"]);
+    GTGlobals::sleep();
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"]);
+    GTGlobals::sleep();
+    CHECK_SET_ERR(visibleRange.startPos != GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was not changed on page up");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0066) {
+//    1. Open any sequence (e.g. sars.gb)
+//    2. Click "Wrap sequence"
+//    3. Enlarge the view at the bottom
+//    Expected state: more lines become visible at the bottom of the view, visible range starts from the same position
+//    4. Reduce the height of the view by the bottom splitter
+//    Expected state: lines at the bottom become hidden, visible range starts from the same position
+//    5.Enlarge the view at the top
+//    Expected state: more lines become visible at the bottom of the view, visible range starts from the same position
+//    6. Reduce the height of the view by the top splitter
+//    Expected state: lines at the bottom become hidden, visible range starts from the same position
+//    7. Scroll to the end of the sequence
+//    8. Enlarge at the top
+//    Expected state: more lines become visible at the top, the end of the sequence is still visible
+//    9. Enlarge at the bottom
+//    Expected state: more lines become visible at the top, the end of the sequence is still visible
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "sars.gb");
+    GTUtilsSequenceView::goToPosition(os, 1000);
+    GTGlobals::sleep();
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+    QSplitter* splitter = qobject_cast<QSplitter*>(GTWidget::findWidget(os, "annotated_DNA_splitter"));
+    CHECK_SET_ERR(splitter != NULL, "Cannot find annotated_DNA_splitter");
+    QWidget* bottomSplitterHandle = splitter->handle( splitter->count() - 1);//GTWidget::findWidget(os, "qt_splithandle_", GTWidget::findWidget(os, "annotated_DNA_splitter"));
+    CHECK_SET_ERR(bottomSplitterHandle != NULL, "Cannot find bottom splitter handle");
+    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);
+    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);
+    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");
+    CHECK_SET_ERR(topSplitterHandle != NULL, "Cannot find qt_splithandle_det_view_NC_004718");
+    GTWidget::click(os, topSplitterHandle);
+    p1 = GTMouseDriver::getMousePosition();
+    p2 = QPoint(p1.x(), p1.y() - 100);
+    GTMouseDriver::press(os);
+    GTMouseDriver::moveTo(os, p2);
+    GTMouseDriver::release(os);
+    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);
+    CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisiableStart(os), "Start position of visible range was changed on reduce at the top");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0067) {
+//    1. Open very short sequence <50 (e.g. "_common_data/fasta/fa1.fa")
+//    2. Ensure that DetView is visible (click "Show detail view" button)
+//    3. Randomly click on an empty space after the end of the sequence
+//    4. Click "Wrap sequence"
+//    Expected state: the view looks the same, only the scroll bar was changed to vertical
+//    5. Randomly click on an empty space after the end of the sequence
+//    Export "Sequence details" to file
+//    6. Expected state: exported image have the whole sequence in it and has the minimum size to fit the sequence (no extra white space)
+
+
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "fa1.fa");
+    QWidget* showDetViewButton = GTWidget::findWidget(os, "show_hide_details_view");
+    CHECK_SET_ERR(showDetViewButton != NULL, "Cannot find show_hide_details_view button");
+    GTWidget::click(os, showDetViewButton);
+
+    ADVSingleSequenceWidget* seqWgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
+    CHECK_SET_ERR(seqWgt != NULL, "No sequence widget found");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    QScrollBar* scrollBar = GTScrollBar::getScrollBar(os, "multiline_scrollbar");
+    CHECK_SET_ERR(scrollBar->minimum() == scrollBar->maximum(), "There is something to scroll");
+
+    GTWidget::click(os, seqWgt);
+    GTMouseDriver::doubleClick(os);
+    GTWidget::click(os, wrapButton);
+    GTWidget::click(os, seqWgt);
+    GTMouseDriver::doubleClick(os);
+
+    ExportSequenceImage::Settings s(ExportSequenceImage::DetailsView, U2Region(1, 3));
+    GTUtilsDialog::waitForDialog(os, new ExportSequenceImage(os, sandBoxDir + "seq_image_0067", s));
+    GTWidget::click(os, GTAction::button(os, "export_image"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QPixmap p(sandBoxDir + "seq_image_0027");
+    CHECK_SET_ERR(p.size() != QSize() && p.size() !=  seqWgt->getDetView()->getDetViewRenderArea()->size(), "Exported image size is incorrect");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0068) {
+//    1. Open any sequence (e.g. murine.gb)
+//    Optionally: enlarge the widget for a better view
+//    2. Click "Wrap seqeence"
+//    3. Uncheck "Show amino translations" button
+//    Expected state: the view is updated, the lines fill all available space
+//    4. Uncheck "Show complement strand"
+//    Expected state: the view is updated, the lines fill all available space
+//    5. Check "Show amino translations" button
+//    Expected state: the view is updated, the lines fill all available space
+//    6. Check "Show complement strand"
+//    Expected state: the view is updated, the lines fill all available space
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+    U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
+
+    GTWidget::click(os, GTAction::button(os, "translation_action"));
+    CHECK_SET_ERR(visibleRange != GTUtilsSequenceView::getVisibleRange(os), "Visible range was not changed on translation show/hide");
+
+    GTWidget::click(os, GTAction::button(os, "complement_action"));
+    CHECK_SET_ERR(visibleRange != GTUtilsSequenceView::getVisibleRange(os), "Visible range was not changed on complement strand show/hide");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0069) {
+//    1. Open any sequence (e.g. murine.gb)
+//    2. Resize the view to see a few lines
+//    3. Press the mouse button on one line (start the selection)
+//    4. Move the mouse to the other line and release the button (finish the selection)
+//    Expected state: the sequence between press position and release position is selected (the line is selected)
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    ADVSingleSequenceWidget* seqWgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
+    CHECK_SET_ERR(seqWgt != NULL, "Cannot find sequence widget");
+    CHECK_SET_ERR(GTUtilsSequenceView::getSelection(os).isEmpty(), "Selection is not empty");
+
+    GTWidget::click(os, seqWgt);
+    QPoint p1 = GTMouseDriver::getMousePosition();
+    QPoint p2(p1.x() + 300, p1.y() + 200);
+
+    GTMouseDriver::press(os);
+    GTMouseDriver::moveTo(os, p2);
+    GTMouseDriver::release(os);
+
+    CHECK_SET_ERR(!GTUtilsSequenceView::getSelection(os).isEmpty(), "Nothing is selected");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0070) {
+//    1. Open any sequence with annotations (e.g. murine.gb)
+//    2. Click on annotation
+//    Expected state: annotation is selected
+//    3. Click "Wrap sequence"
+//    4. Enlarge the view to see a few lines of the sequence
+//    5. Click on a few annotations located on a different lines of the sequence
+//    Expected state: clicked annotation is selected
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
+    QVector<U2Region> selection = GTUtilsSequenceView::getSelection(os);
+    CHECK_SET_ERR(!selection.isEmpty(), "Nothing is selected");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+//    DetView* detView = GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView();
+//    CHECK_SET_ERR(detView != NULL, "DetView is NULL");
+    GTUtilsSequenceView::clickAnnotationDet(os, "CDS", 1042);
+    CHECK_SET_ERR(!GTUtilsSequenceView::getSelection(os).isEmpty(), "Selection is empty");
+    CHECK_SET_ERR(GTUtilsSequenceView::getSelection(os) != selection, "Selection was not changed");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0071) {
+//    1. Open any sequence (e.g. murine.gb)
+//    2. Click "Wrap sequence"
+//    3. Click "Export image"
+//    4. Fill the dialog (select a region from the middle of the sequence) and export the dialog
+//    Expected state: the result file contains the lines of the sequence started from the specified position, no extra empty space
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    ADVSingleSequenceWidget* seqWgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
+    CHECK_SET_ERR(seqWgt != NULL, "Cannot find sequence widget");
+
+    QAbstractButton* wrapButton = GTAction::button(os, "wrap_sequence_action");
+    CHECK_SET_ERR(!wrapButton->isChecked(), "Multi-line mode is unexpectedly active");
+    GTWidget::click(os, wrapButton);
+
+    ExportSequenceImage::Settings s(ExportSequenceImage::DetailsView, U2Region(1, 2000));
+    GTUtilsDialog::waitForDialog(os, new ExportSequenceImage(os, sandBoxDir + "seq_image_0071", s));
+    GTWidget::click(os, GTAction::button(os, "export_image"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QPixmap p(sandBoxDir + "seq_image_0071");
+    CHECK_SET_ERR(p.size() != QSize() && p.size() !=  seqWgt->getDetView()->getDetViewRenderArea()->size(), "Exported image size is incorrect");
+}
+
 } // 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 bb26556..9b74737 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
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_sequence_view {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_sequence_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_sequence_view"
 
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0002_1)
@@ -92,8 +92,23 @@ GUI_TEST_CLASS_DECLARATION(test_0058)
 GUI_TEST_CLASS_DECLARATION(test_0059)
 GUI_TEST_CLASS_DECLARATION(test_0059_1)
 GUI_TEST_CLASS_DECLARATION(test_0060)
+GUI_TEST_CLASS_DECLARATION(test_0061_1)
+GUI_TEST_CLASS_DECLARATION(test_0061_2)
+GUI_TEST_CLASS_DECLARATION(test_0061_3)
 
-#undef GUI_TEST_PREFIX
+GUI_TEST_CLASS_DECLARATION(test_0062)
+GUI_TEST_CLASS_DECLARATION(test_0063)
+GUI_TEST_CLASS_DECLARATION(test_0064)
+GUI_TEST_CLASS_DECLARATION(test_0065)
+GUI_TEST_CLASS_DECLARATION(test_0066)
+GUI_TEST_CLASS_DECLARATION(test_0067)
+GUI_TEST_CLASS_DECLARATION(test_0068)
+GUI_TEST_CLASS_DECLARATION(test_0069)
+GUI_TEST_CLASS_DECLARATION(test_0070)
+GUI_TEST_CLASS_DECLARATION(test_0071)
+
+
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 2086065..4bbc129 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
@@ -20,15 +20,17 @@
  */
 
 #include <QTreeWidgetItem>
+#include <QListWidget>
 
 #include <U2Core/ImportToDatabaseOptions.h>
 #include <U2Core/U2ObjectDbi.h>
 
-#include <U2Test/GUITest.h>
+#include <core/GUITest.h>
 
 #include <U2View/AnnotationsTreeView.h>
 
 #include "GTDatabaseConfig.h"
+#include "GTTestsSharedDatabase.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsLog.h"
@@ -39,16 +41,17 @@
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h"
@@ -61,10 +64,49 @@
 #include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
 #include "runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h"
 
-#include "GTTestsSharedDatabase.h"
-
 namespace U2 {
 namespace GUITest_common_scenarios_shared_database {
+using namespace HI;
+namespace {
+
+QListWidgetItem * getConnectionItem(HI::GUITestOpStatus &os, const QString &connectionName) {
+    QWidget *dialog = QApplication::activeModalWidget();
+    CHECK_SET_ERR_RESULT(NULL != dialog, "Active modal widget is NULL", NULL);
+
+    QListWidget *list = GTWidget::findExactWidget<QListWidget *>(os, "lwConnections", dialog);
+    CHECK_SET_ERR_RESULT(NULL != list, "Connections list widget is NULL", NULL);
+    const QList<QListWidgetItem *> items = list->findItems(connectionName, Qt::MatchExactly);
+    CHECK_SET_ERR_RESULT(1 == items.size(), QString("List item '%1'' not found").arg(connectionName), NULL);
+
+    return items.first();
+}
+
+void checkButtonStateForConnectionItem(HI::GUITestOpStatus &os, const QString &connectionName, const QString &buttonText, bool isEnabled) {
+    QWidget *dialog = QApplication::activeModalWidget();
+    CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+    GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "lwConnections", dialog), connectionName);
+
+    QWidget *button = GTWidget::findButtonByText(os, buttonText, dialog);
+    CHECK_SET_ERR(NULL != button, "Button is NULL");
+    CHECK_SET_ERR(isEnabled == button->isEnabled(), QString("Button '%1' has an incorrect state").arg(buttonText));
+}
+
+void checkConnectionItemIcon(HI::GUITestOpStatus &os, const QString &connectionName, const QString &expectedIconPath) {
+    QListWidgetItem *connectionItem = getConnectionItem(os, connectionName);
+    CHECK_OP(os, );
+    const QIcon icon = connectionItem->icon();
+    const QIcon expectedIcon(expectedIconPath);
+    if (!expectedIconPath.isEmpty()) {
+        CHECK_SET_ERR(expectedIcon.pixmap(expectedIcon.availableSizes().first()).toImage() == icon.pixmap(icon.availableSizes().first()).toImage(), "Icon is incorrect");
+    } else {
+        QPixmap px(":/core/images/db/database_lightning.png");
+        px.fill(Qt::transparent);
+        CHECK_SET_ERR(px.toImage() == icon.pixmap(icon.availableSizes().first()).toImage(), "Icon is incorrect");
+    }
+}
+
+}
 
 GUI_TEST_CLASS_DEFINITION(cm_test_0001) {
     //1. File -> Shared databases.
@@ -94,11 +136,22 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0001) {
         params.connectionName = conName;
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params, EditConnectionDialogFiller::FROM_SETTINGS));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 
     GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "cm_test_0001: new shared database", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "cm_test_0001: new shared database", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 }
 
 GUI_TEST_CLASS_DEFINITION(cm_test_0002) {
@@ -125,7 +178,18 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0002) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "cm_test_0002: new shared database", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "cm_test_0002: new shared database", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
@@ -133,7 +197,10 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0002) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::DELETE, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    const bool exists = GTUtilsProjectTreeView::checkItem(os, conName, QModelIndex());
+    CHECK_SET_ERR(!exists, "A database connection unexpectedly is presented in the project view");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -175,15 +242,41 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0003) {
         params.connectionName = newConName;
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params, EditConnectionDialogFiller::FROM_SETTINGS));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "cm_test_0003: new shared database 1", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "cm_test_0003: new shared database 1", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, newConName);
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::DISCONNECT, newConName);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario2 : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "cm_test_0003: new shared database 1", "");
+            checkButtonStateForConnectionItem(os, "cm_test_0003: new shared database 1", "Edit", true);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario2));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    const bool exists = GTUtilsProjectTreeView::checkItem(os, conName, QModelIndex());
+    CHECK_SET_ERR(!exists, "A database connection unexpectedly is presented in the project view");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -206,7 +299,18 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0004) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "ugene_gui_test", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "ugene_gui_test", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -234,15 +338,41 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0005) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "ugene_gui_test", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "ugene_gui_test", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, conName);
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::DISCONNECT, conName);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario2 : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "ugene_gui_test", "");
+            checkButtonStateForConnectionItem(os, "ugene_gui_test", "Edit", true);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario2));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    const bool exists = GTUtilsProjectTreeView::checkItem(os, conName, QModelIndex());
+    CHECK_SET_ERR(!exists, "A database connection unexpectedly is presented in the project view");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -264,23 +394,47 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0006) {
     //            c) There are no errors in the log.
     //            d) The "Edit" button is disabled.
     GTLogTracer lt;
-    QString conName = "cm_test_0006: uninitialized database";
+
+    const QString conName = "cm_test_0006: uninitialized database";
     GTDatabaseConfig::initTestConnectionInfo(conName, GTDatabaseConfig::uninitializedDatabase());
-    {
-        QList<SharedConnectionsDialogFiller::Action> actions;
-        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, conName);
 
-        SharedConnectionsDialogFiller::Action cAction(SharedConnectionsDialogFiller::Action::CONNECT, conName);
-        cAction.dbName = GTDatabaseConfig::uninitializedDatabase();
-        cAction.expectedResult = SharedConnectionsDialogFiller::Action::DONT_INITIALIZE;
-        actions << cAction;
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget");
 
-        cAction.expectedResult = SharedConnectionsDialogFiller::Action::INITIALIZE;
-        actions << cAction;
+            const QString conName = "cm_test_0006: uninitialized database";
 
-        GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
-    }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+            GTGlobals::sleep(500);
+            GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "lwConnections", dialog), conName);
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No, "is not initialized"));
+            GTWidget::click(os, GTWidget::findWidget(os, "pbConnect", dialog));
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes, "is not initialized"));
+            GTWidget::click(os, GTWidget::findWidget(os, "pbConnect", dialog));
+
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    const bool exists = GTUtilsProjectTreeView::checkItem(os, conName, QModelIndex());
+    CHECK_SET_ERR(exists, "A database connection not found in the project view");
+
+    class Scenario2 : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            const QString conName = "cm_test_0006: uninitialized database";
+            checkConnectionItemIcon(os, conName, ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, conName, "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario2));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -300,10 +454,10 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0007) {
         cAction.dbName = GTDatabaseConfig::versionDatabase();
         cAction.expectedResult = SharedConnectionsDialogFiller::Action::VERSION;
         actions << cAction;
-
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 }
 
 GUI_TEST_CLASS_DEFINITION(cm_test_0008) {
@@ -333,7 +487,21 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0008) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName1);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "ugene_gui_test", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "ugene_gui_test", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    bool exists = GTUtilsProjectTreeView::checkItem(os, conName1, QModelIndex());
+    CHECK_SET_ERR(exists, "A database connection not found in the project view");
 
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
@@ -343,7 +511,21 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0008) {
         actions << cAction;
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario2 : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "ugene_gui_test_2", ":/core/images/db/database_lightning.png");
+            checkButtonStateForConnectionItem(os, "ugene_gui_test_2", "Edit", false);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario2));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    exists = GTUtilsProjectTreeView::checkItem(os, conName2, QModelIndex());
+    CHECK_SET_ERR(exists, "A database connection not found in the project view");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -368,6 +550,7 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0009) {
         SharedConnectionsDialogFiller::Action cAction(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         cAction.expectedResult = SharedConnectionsDialogFiller::Action::WRONG_DATA;
         actions << cAction;
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
     {
@@ -380,7 +563,7 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0009) {
         params.password = "wrongPassword";
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params, EditConnectionDialogFiller::MANUAL));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 }
 
 GUI_TEST_CLASS_DEFINITION(cm_test_0013) {
@@ -399,10 +582,10 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0013) {
     //    Login: ugene
     //7. Click "OK".
     //Expected: the connection is established:
-    //          1) The connection item has the "Connected" icon.
+    //          1) The connection item has no icon.
     //          2) The database document appears in the project.
     //          3) There are no errors in the log.
-    //          4) The "Edit" button is disabled.
+    //          4) The "Edit" button is enabled.
     GTLogTracer lt;
     if(GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)) != NULL){
         GTUtilsMdi::click(os, GTGlobals::Close);
@@ -425,10 +608,23 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0013) {
         params.database = GTDatabaseConfig::database();
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params, EditConnectionDialogFiller::MANUAL));
     }
-    {
-        GTUtilsDialog::waitForDialog(os, new AuthenticationDialogFiller(os, GTDatabaseConfig::login(), GTDatabaseConfig::password()));
-    }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+
+    GTUtilsDialog::waitForDialog(os, new AuthenticationDialogFiller(os, GTDatabaseConfig::login(), GTDatabaseConfig::password()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            checkConnectionItemIcon(os, "cm_test_0013: new shared database", "");
+            checkButtonStateForConnectionItem(os, "cm_test_0013: new shared database", "Edit", true);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Close);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+
+    const bool exists = GTUtilsProjectTreeView::checkItem(os, conName, QModelIndex());
+    CHECK_SET_ERR(exists, "A database connection not found in the project view");
 
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
 }
@@ -442,11 +638,12 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0014) {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, "UGENE public database");
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::EDIT);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
     {
         class ReadOnlyCheckScenario : public CustomScenario {
-            void run(U2::U2OpStatus &os) {
+            void run(HI::GUITestOpStatus &os) {
                 QWidget *dialog = QApplication::activeModalWidget();
                 CHECK_SET_ERR(NULL != dialog, "Dialog is NULL");
 
@@ -480,7 +677,7 @@ GUI_TEST_CLASS_DEFINITION(cm_test_0014) {
 
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, new ReadOnlyCheckScenario));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
     GTGlobals::sleep();
 }
 
@@ -823,6 +1020,7 @@ GUI_TEST_CLASS_DEFINITION(import_test_0001) {
     const QModelIndex newFolderItemIndex = GTUtilsSharedDatabaseDocument::getItemIndex(os, databaseDoc, newFolderPath);
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const QModelIndex fileDocIndex = GTUtilsProjectTreeView::findIndex(os, fileDocName);
     const QModelIndex objectDocIndex = GTUtilsProjectTreeView::findIndex(os, fileObjectName, fileDocIndex);
 
@@ -861,6 +1059,7 @@ GUI_TEST_CLASS_DEFINITION(import_test_0002) {
     const QString importedObjectPath = importedDocFolderPath + U2ObjectDbi::PATH_SEP + fileObjectName;
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Document* databaseDoc = GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
 
@@ -923,6 +1122,7 @@ GUI_TEST_CLASS_DEFINITION(import_test_0003) {
     QModelIndex databaseSequenceObjectItemIndex = GTUtilsSharedDatabaseDocument::getItemIndex(os, databaseDoc, databaseSequenceObjectPath);
 
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const QModelIndex fileDocIndex = GTUtilsProjectTreeView::findIndex(os, fileDocName);
     const QModelIndex fileAnnotationObjectIndex = GTUtilsProjectTreeView::findIndex(os, annotationObjectName, fileDocIndex);
 
@@ -1423,6 +1623,7 @@ GUI_TEST_CLASS_DEFINITION(import_test_0010) {
 
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", documentName);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Document* databaseDoc = GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
 
@@ -1486,6 +1687,7 @@ GUI_TEST_CLASS_DEFINITION(import_test_0011) {
 
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", documentName);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Document* databaseDoc = GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
index ab8e355..b5c7c28 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_shared_database {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_shared_database_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_shared_database"
 
 GUI_TEST_CLASS_DECLARATION(cm_test_0001)
 GUI_TEST_CLASS_DECLARATION(cm_test_0002)
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 9bc3430..333d646 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
@@ -29,25 +29,26 @@
 #include <U2View/ADVConstants.h>
 
 #include "GTUtilsProject.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTTreeWidget.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
+#include <primitives/GTTreeWidget.h>
 
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTTestsSWDialog.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsTaskTreeView.h"
 
 #include "../../../runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
-#include "../../../runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "../../../GTUtilsMsaEditorSequenceArea.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_sw_dialog {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 //Performing Smith-Waterman algorithm with multiple alignment as result
 //
@@ -55,6 +56,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 //
 // 1. Use menu {File->Open}. Open file _common_data/smith_waterman2/multi/06/query.txt. Get pattern sequence
     GTFileDialog::openFile(os, testDir + "_common_data/smith_waterman2/multi/06/", "query.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "query.txt");
     QString patternSequence;
     GTUtilsSequenceView::getSequenceAsString(os, patternSequence);
@@ -62,6 +64,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 2. Use menu {File->Open}. Open file _common_data/smith_waterman2/multi/06/search.txt
     GTFileDialog::openFile(os, testDir + "_common_data/smith_waterman2/multi/06/", "search.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "search.txt");
 
 // 3. Run Smith-Waterman Search by SW dialog
@@ -69,8 +72,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
         patternSequence);
     GTUtilsDialog::waitForDialog(os, swDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
 
@@ -116,6 +118,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //
 // 1. Use menu {File->Open}. Open file _common_data/smith_waterman2/multi/06/query.txt. Get pattern sequence
     GTFileDialog::openFile(os, testDir + "_common_data/smith_waterman2/multi/06/", "query.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "query.txt");
     QString patternSequence;
     GTUtilsSequenceView::getSequenceAsString(os, patternSequence);
@@ -123,6 +126,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 2. Use menu {File->Open}. Open file _common_data/smith_waterman2/multi/06/search.txt
     GTFileDialog::openFile(os, testDir + "_common_data/smith_waterman2/multi/06/", "search.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "search.txt");
 
 // 3. Run Smith-Waterman Search by SW dialog
@@ -130,8 +134,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
         patternSequence);
     GTUtilsDialog::waitForDialog(os, swDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
 // 4. Close sequence view, then reopen it
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
index 4343df7..10b3a8b 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
@@ -28,13 +28,13 @@ namespace U2 {
 
 namespace GUITest_common_scenarios_sw_dialog {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_sw_dialog_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_sw_dialog"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 } // namespace GUITest_common_scenarios_sw_dialog
 
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 8e7fe28..0632a99 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
@@ -26,21 +26,22 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsStartPage.h"
 
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWebView.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWebView.h>
 
-#include "runnables/qt/DefaultDialogFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include <base_dialogs/DefaultDialogFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 
 #include "GTTestsStartPage.h"
+#include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_start_page{
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001){
 //    Start UGENE
 //    Press "Open file(s)" button on start page
@@ -57,8 +58,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTUtilsStartPage::clickButton(os, GTUtilsStartPage::CreateWorkflow);
     GTGlobals::sleep(500);
 //    Expected state: WD opened.
-    QString windowName = GTUtilsMdi::activeWindowTitle(os);
-    CHECK_SET_ERR(windowName == "Workflow Designer - New workflow", "unexpected window title: " + windowName)
+    GTUtilsMdi::waitWindowOpened(os, "Workflow Designer - New workflow", 20000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0003){
@@ -74,6 +74,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 //    Start UGENE
 //    Open any file.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Go to Start page.
     GTUtilsStartPage::openStartPage(os);
 //    Expected state: File added to "Resent files" list
@@ -95,6 +96,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 //    Start UGENE
 //    Open any project.
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/project/", "proj1.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Go to Start page.
 //    Expected state: project is added to "Resent files" list
 //    Close project
@@ -124,20 +126,20 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
     GTGlobals::sleep();
     QString title = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title == "Start Page", "unexpected window title: " + title);
+
 //    Use main menu: Help->Open start page
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"welcome_page"));
-    GTMenu::showMainMenu(os, MWMENU_HELP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Help" << "Open Start Page");
     GTGlobals::sleep(500);
+
 //    Expected state: nothing happens
     title = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title == "Start Page", "unexpected window title: " + title);
 //    Close Start page
     GTUtilsMdi::click(os, GTGlobals::Close);
     QWidget* window = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(window == NULL, "start page was not closed")
+    CHECK_SET_ERR(window == NULL, "start page was not closed");
 //    Repeat step 2
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"welcome_page"));
-    GTMenu::showMainMenu(os, MWMENU_HELP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Help" << "Open Start Page");
     GTGlobals::sleep(500);
 //    Expected state: Start page is opened
     title = GTUtilsMdi::activeWindowTitle(os);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
index eb1dc6a..89a0d66 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
@@ -28,8 +28,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_start_page {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_start_page_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_start_page"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -39,7 +39,7 @@ GUI_TEST_CLASS_DECLARATION(test_0006)
 GUI_TEST_CLASS_DECLARATION(test_0008)
 
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 ea78fbe..a11ab2c 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
@@ -20,18 +20,18 @@
  */
 
 #include "GTTestsToggleView.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTAction.h"
-#include "api/GTFileDialog.h"
-#include "api/GTTreeWidget.h"
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include "primitives/GTMenu.h"
+#include "primitives/GTAction.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTTreeWidget.h>
 #include "GTUtilsProject.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsProjectTreeView.h"
@@ -39,7 +39,7 @@
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsMdi.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h"
 
 #include <U2Core/AppContext.h>
@@ -59,7 +59,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_toggle_view {
-
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 1. Use menu {File->Open}. Open file _common_data/scenarios/project/multiple.fa
@@ -1466,6 +1466,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
     // 4. Click "Remove sequence" button
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/PBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_SYNPBR322");
     CHECK_SET_ERR(toolbar != NULL, "Cannot find views_tool_bar_SYNPBR322");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
index 9b83f0d..e7887cc 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_toggle_view {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_toggle_view_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_toggle_view"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -79,7 +79,7 @@ GUI_TEST_CLASS_DECLARATION(test_0014_2)
 GUI_TEST_CLASS_DECLARATION(test_0015)
 GUI_TEST_CLASS_DECLARATION(test_0016)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } //namespace
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 8be46f4..acc9cb4 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
@@ -39,18 +39,18 @@
 #include "GTUtilsPhyTree.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.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"
@@ -59,12 +59,15 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_tree_viewer {
+using namespace HI;
+
 const int nodeWidth = 7;
 GUI_TEST_CLASS_DEFINITION(test_0001){
 //Screenshoting MSA editor (regression test)
 
 //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
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
@@ -92,6 +95,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_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
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
@@ -118,6 +122,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2){
 
 //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
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
@@ -131,9 +136,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2){
 //Expected state: philogenetic tree appears
 
 //4. Use "Capture tree" button on toolbar to make screenshots
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Export Tree Image"<<"Screen Capture"));
     GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "jpeg",50));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Export Tree Image" << "Screen Capture...");
 
     GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpeg");
 //Expected state: images on screenshots same as on your screen
@@ -144,6 +148,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 
 //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
@@ -190,6 +195,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
 //Rebuilding tree after removing tree file
 //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
@@ -243,16 +249,15 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2){
 //Rebuilding tree after removing tree file
 //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: Main menu is used for building tree
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_TREES<<"Build Tree"));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Tree" << "Build Tree");
 
-    GTMenu::showMainMenu(os,MWMENU_ACTIONS);
-    GTGlobals::sleep(500);
 //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"));
@@ -281,10 +286,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2){
 //Expected state: "Create Philogenetic Tree" dialog appears
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os,testDir + "_common_data/scenarios/sandbox/COI.nwk"));
     //DIFFERENCE: Main menu is used for building tree
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_TREES<<"Build Tree"));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Tree" << "Build Tree");
 
-    GTGlobals::sleep(500);
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
 //7. Click  OK button
 //Expected state: philogenetic tree appears
     GTGlobals::sleep(500);
@@ -296,6 +299,7 @@ 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
@@ -323,6 +327,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 //    Disabling views
 //    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
 //    Expected state: "Create Philogenetic Tree" dialog appears
@@ -366,14 +371,14 @@ 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"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_ALIGN<<"Align with muscle", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align" << "Align with MUSCLE...", GTGlobals::UseMouse);
 
-    GTMenu::showMainMenu(os,MWMENU_ACTIONS);
 //3. Click "Align" button
 //4. Click on "Build tree" button on toolbar
     QAbstractButton *tree= GTAction::button(os,"Build Tree");
@@ -385,7 +390,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     CHECK_SET_ERR(treeView!=NULL,"TreeView not found");
 //Expected state: philogenetic tree appears
 }
-int getCoord(U2OpStatus &os, QGraphicsSimpleTextItem *node){
+int getCoord(HI::GUITestOpStatus &os, QGraphicsSimpleTextItem *node){
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     QPointF sceneCoord = node->mapToScene(node->boundingRect().bottomLeft());
     QPoint globalCoord = treeView->mapToGlobal(sceneCoord.toPoint());
@@ -396,6 +401,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 //    1. Open file _common_data/scenario/tree_view/COI.nwk
 //    Expected state: philogenetic tree appears
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //    2. Click on {Layout->Circilar layout} button on toolbar
     //GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Circular"));
@@ -442,6 +448,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 //1. Open file _common_data/scenario/tree_view/COI.nwk
 //Expected state: philogenetic tree appears
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
@@ -457,8 +464,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
         }
     }
 //2. Click on "Align name labels" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Align Labels"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align Labels");
     GTGlobals::sleep(500);
     //GTWidget::click(os, GTAction::button(os,"Align Labels"));
 
@@ -479,8 +485,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 //Expected state: sequence labels aligned at right side of the screen
 
 //3. Click on "Align name labels" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Align Labels"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align Labels");
     GTGlobals::sleep(500);
 
     QList<int> finalPos;
@@ -502,6 +507,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 //1. Open file _common_data/scenario/tree_view/COI.nwk
 //Expected state: philogenetic tree appears
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //2. Click on "Show sequence names" button on toolbar
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Show Names"));
@@ -575,10 +581,10 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){//difference: main menu is used
 //1. Open file _common_data/scenario/tree_view/COI.nwk
 //Expected state: philogenetic tree appears
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //2. Click on "Show sequence names" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"show_labels_action"<<"Show Names"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS,GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Show Labels" << "Show Names", GTGlobals::UseMouse);
 
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     QList<QGraphicsItem*> list = treeView->scene()->items();
@@ -592,8 +598,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){//difference: main menu is used
 //Expected state: sequence name labels disappers
 
 //3. Click on "Show distance labels" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"show_labels_action"<<"Show Distances"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS,GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Show Labels" << "Show Distances", GTGlobals::UseMouse);
 
     foreach(QGraphicsItem* item, list){
             QGraphicsSimpleTextItem * node = qgraphicsitem_cast<QGraphicsSimpleTextItem *>(item);
@@ -606,8 +611,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){//difference: main menu is used
 //Expected state: distance labels disappers
 
 //4. Click on "Show sequence names" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"show_labels_action"<<"Show Names"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS,GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Show Labels" << "Show Names", GTGlobals::UseMouse);
     GTGlobals::sleep(200);
     int i=0;
 
@@ -621,8 +625,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){//difference: main menu is used
 //Expected state: sequence name labels appers
 
 //5. Click on "Show distance labels" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"show_labels_action"<<"Show Distances"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS,GTGlobals::UseMouse);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Show Labels" << "Show Distances", GTGlobals::UseMouse);
     GTGlobals::sleep(200);
     i=0;
 
@@ -641,6 +644,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 
 //1. Open Newick file (.NWK)
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //2. Create new bookmark for the file
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [tr] Tree");
@@ -678,6 +682,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
 //1. Open file _common_data/scenario/tree_view/COI.nwk
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //Expected state: phylogenetic tree appears
 
@@ -725,6 +730,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 //    1. Open file _common_data/scenario/tree_view/COI.nwk
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
 //    Expected state: philogenetic tree appears
@@ -734,7 +740,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     foreach (QGraphicsItem *item, list) {
         uiLog.trace(QString("element width = %1").arg(item->boundingRect().width()));
-        if (item->boundingRect().width() == nodeWidth) {
+        if (qRound(item->boundingRect().width()) == nodeWidth) {
             nodeList.append(item);
         }
     }
@@ -780,6 +786,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
 
 //    1. Open file _common_data/scenario/tree_view/COI.nwk
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
 //    Expected state: philogenetic tree appears
@@ -788,7 +795,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
     QList<QGraphicsItem *> nodeList;
 
     foreach (QGraphicsItem *item, list) {
-        if (item->boundingRect().width() == nodeWidth) {
+        if (qRound(item->boundingRect().width()) == nodeWidth) {
             nodeList.append(item);
         }
     }
@@ -829,6 +836,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
 
 //    1. Open file _common_data/scenario/tree_view/COI.nwk
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/tree_view", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
 //    Expected state: philogenetic tree appears
@@ -837,7 +845,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     QList<QGraphicsItem *> nodeList;
 
     foreach (QGraphicsItem * item, list) {
-        if (item->boundingRect().width() == nodeWidth) {
+        if (qRound(item->boundingRect().width()) == nodeWidth) {
             nodeList.append(item);
         }
     }
@@ -884,6 +892,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
 //1. Run Ugene.
 //   Open file _common_data/scenarios/tree_view/D120911.tre
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "D120911.tre");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //   Expected state: philogenetic tree appears
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
@@ -946,6 +955,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
 GUI_TEST_CLASS_DEFINITION( test_0023 ) {
     // 1. Open the file "data/CLUSTALW/COI.aln"
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep( 1000 );
 
     // 2. Open the "Tree settings" tab in the options panel
@@ -1005,6 +1015,7 @@ GUI_TEST_CLASS_DEFINITION( test_0023 ) {
 GUI_TEST_CLASS_DEFINITION( test_0024 ) {
     //1. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep( 500 );
 
     //2. Use context menu items { Tree -> Build tree }
@@ -1079,6 +1090,7 @@ GUI_TEST_CLASS_DEFINITION( test_0025 ) {
 //     Expected state: again "expand" button is available
 
     GTFileDialog::openFile(os, dataDir + "/samples/Newick/COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QAbstractButton* collapse = GTWidget::findButtonByText(os, "Collapse"); //GTAction::button(os, "Collapse");
@@ -1135,6 +1147,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 //    1. Open file "data/samples/Newick/COI.nwk".
 //    Expected state: a philogenetic tree appears.
     GTFileDialog::openFile(os, dataDir + "samples/Newick/COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select the parent node of "Bicolorana_bicolor_EF540830" and "Roeseliana_roeseli".
     QList<GraphicsButtonItem *> nodes = GTUtilsPhyTree::getOrderedRectangularNodes(os);
@@ -1163,6 +1176,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 //    1. Open file "data/samples/Newick/COI.nwk".
 //    Expected state: a phylogenetic tree appears.
     GTFileDialog::openFile(os, dataDir + "samples/Newick/COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select the parent node of "Bicolorana_bicolor_EF540830" and "Roeseliana_roeseli".
     QList<qreal> distances = GTUtilsPhyTree::getOrderedRectangularBranchesDistances(os);
@@ -1192,6 +1206,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028){
     //    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);
@@ -1202,6 +1217,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028){
     CHECK_SET_ERR(!distances.isEmpty(), "Distances array is empty");
     distances.swap(1, 2);
 
+    GTWidget::click(os, GTUtilsPhyTree::getTreeViewerUi(os));
     QList<GraphicsButtonItem *> nodes = GTUtilsPhyTree::getOrderedRectangularNodes(os);
     CHECK_SET_ERR(!nodes.isEmpty(), "Tree nodes are not found");
     GTUtilsPhyTree::clickNode(os, nodes.first());
@@ -1225,12 +1241,14 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
     //    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();
 
     //    2. Select the parent node of "Bicolorana_bicolor_EF540830" and "Roeseliana_roeseli".
+    GTWidget::click(os, GTUtilsPhyTree::getTreeViewerUi(os));
     QList<GraphicsButtonItem *> nodes = GTUtilsPhyTree::getOrderedRectangularNodes(os);
     CHECK_SET_ERR(!nodes.isEmpty(), "Tree nodes are not found");
     const qreal firstNodeDistance = GTUtilsPhyTree::getNodeDistance(os, nodes.first());
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
index fe88e37..cdb78c1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_tree_viewer {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_tree_viewer_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_tree_viewer"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0001_1)
@@ -60,7 +60,7 @@ GUI_TEST_CLASS_DECLARATION(test_0027)
 GUI_TEST_CLASS_DECLARATION(test_0028)
 GUI_TEST_CLASS_DECLARATION(test_0029)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 0ff7e44..7099917 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
@@ -6,7 +6,6 @@
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
-k
  * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -21,22 +20,22 @@ k
  */
 
 #include "GTTestsUndoRedo.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTAction.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTGlobals.h"
-#include "api/GTClipboard.h"
-#include "api/GTTreeWidget.h"
-#include "GTUtilsDialog.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTTreeWidget.h>
+#include "GTGlobals.h"
+#include "system/GTClipboard.h"
+#include <primitives/GTTreeWidget.h>
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
@@ -48,11 +47,13 @@ k
 namespace U2{
 
 namespace GUITest_common_scenarios_undo_redo{
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001){//DIFFERENCE: lock document is checked
 //Check Undo/Redo functional
 //1. Open document COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Insert seversl spaces somewhere
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
     for(int i=0; i<6; i++){
@@ -110,28 +111,32 @@ GUI_TEST_CLASS_DEFINITION(test_0002){//DIFFERENCE: delete sequence is checked
 //Check Undo/Redo functional
 //1. Open document COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Delete 4-th sequence
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Roeseliana_roeseli", "Roeseliana_roeseli"));
     GTMouseDriver::doubleClick(os);
+    GTGlobals::sleep(500);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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);
+    GTGlobals::sleep(500);
 
 //3. undo deletion
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
+    QAbstractButton *undo = GTAction::button(os,"msa_action_undo");
+    QAbstractButton *redo = GTAction::button(os,"msa_action_redo");
 
     GTWidget::click(os, undo);
 
-//Expected state: delition undone
+//Expected state: deletion undone
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Roeseliana_roeseli", "Roeseliana_roeseli"));
     GTMouseDriver::doubleClick(os);
+    GTGlobals::sleep(500);
 
 //4. Redo delition
     GTWidget::click(os, redo);
@@ -140,12 +145,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002){//DIFFERENCE: delete sequence is checked
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Montana_montana", "Montana_montana"));
     GTMouseDriver::doubleClick(os);
+    GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0003){//DIFFERENCE: add sequence is checked
     //Check Undo/Redo functional
 //1. Open document COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. add sequence to alignment
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_LOAD<<"Sequence from file"));
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, dataDir + "/samples/Raw/", "raw.seq");
@@ -182,6 +189,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){//DIFFERENCE: add sequence is checked
 //Check Undo/Redo functional
 //1. Open document COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. insert gap->undo->insert gap->undo->redo
     QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
@@ -203,6 +211,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){//DIFFERENCE: add sequence is checked
 GUI_TEST_CLASS_DEFINITION(test_0005){//undo remove selection
     //open file
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //remove selection
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(3,1));
@@ -245,6 +254,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){//undo replace_selected_rows_with_reverse-c
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 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"));
@@ -314,6 +324,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){//undo replace_selected_rows_with_reverse
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 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"));
@@ -385,6 +396,7 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
 
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 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
@@ -455,6 +467,7 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
 GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
@@ -499,6 +512,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
 GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
@@ -542,6 +556,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
 GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
@@ -585,6 +600,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
 GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
@@ -627,6 +643,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
 GUI_TEST_CLASS_DEFINITION(test_0009){//rename msa is tested
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //rename msa
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__EDIT_MENU<<"Rename"));
@@ -656,6 +673,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){//rename msa is tested
 GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
@@ -707,6 +725,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
 GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
@@ -725,9 +744,10 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
                         "AAGCCTTTT---AA");
 
     //Use context {Edit->Align with Kalign}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"align_with_kalign", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"align_with_kalign", GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(10000);
 
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
@@ -741,7 +761,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
     //undo
     GTWidget::click(os,undo);
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(3000);
     changedAln = GTClipboard::text(os);
 
     CHECK_SET_ERR(changedAln==initAln, "Undo works wrong\n" + changedAln);
@@ -749,7 +769,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
     //redo
     GTWidget::click(os,redo);
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(3000);
     changedAln = GTClipboard::text(os);
 
     CHECK_SET_ERR(changedAln==expectedAln, "Undo works wrong\n" + changedAln);
@@ -758,6 +778,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
 GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
@@ -809,6 +830,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
 GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
     //Open file
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
index cb873ab..32eae91 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
@@ -28,8 +28,8 @@ k
 namespace U2{
 
 namespace GUITest_common_scenarios_undo_redo {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_undo_redo_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_undo_redo"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -55,7 +55,7 @@ GUI_TEST_CLASS_DECLARATION(test_0011_1)
 
 GUI_TEST_CLASS_DECLARATION(test_0012)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }//namespace GUITest_common_scenarios_undo_redo
 
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 b43907c..9b6445e 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
@@ -21,27 +21,27 @@
 
 #include "GTTestsWorkflowDesigner.h"
 
-#include "api/GTMouseDriver.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include "api/GTMenu.h"
-#include "api/GTGlobals.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTAction.h"
-#include "api/GTFile.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTableView.h"
-#include "runnables/qt/PopupChooser.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include "primitives/GTMenu.h"
+#include "GTGlobals.h"
+#include <primitives/GTTreeWidget.h>
+#include "primitives/GTAction.h"
+#include "system/GTFile.h"
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTableView.h>
+#include "primitives/PopupChooser.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "GTUtilsApp.h"
+#include "utils/GTUtilsApp.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsProjectTreeView.h"
@@ -82,6 +82,7 @@ namespace U2 {
 
 
 namespace GUITest_common_scenarios_workflow_designer {
+using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001){
 
 
@@ -188,6 +189,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     //1. Start UGENE. Open workflow schema file from data\cmdline\pfm-build.uws
     GTFileDialog::openFile(os,dataDir + "cmdline/","pwm-build.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 //  Expected state: workflow schema opened in Workflow designer
 //    2. Change item style (Minimal - Extended - Minimal - Extended)
@@ -217,6 +219,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     //1. Start UGENE. Open workflow schema file from data\cmdline\pfm-build.uws
     GTFileDialog::openFile(os,dataDir + "cmdline/","pwm-build.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 //  Expected state: workflow schema opened in Workflow designer
 //    2. Change item style (Minimal - Extended - Minimal - Extended)
@@ -249,6 +252,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
 //    1. Start UGENE. Open workflow schema file from \common data\workflow\remoteDBReaderTest.uws
     GTFileDialog::openFile(os,testDir + "_common_data/workflow/","remoteDBReaderTest.uws");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: workflow schema opened in Workflow designer
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     CHECK_SET_ERR(table,"tableView not found");
@@ -266,6 +270,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 //    2. If you don't want result file (T1.gb) in UGENE run directory, change this property in write genbank worker.Run schema.
 //    Expected state: T1.gb file is saved to your disc
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/sandbox/","T1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0005){
@@ -278,20 +283,17 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0006){
-#ifndef Q_OS_UNIX
-    //GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
-#endif
 //1. Do menu Settings->Prefrences
     GTUtilsDialog::waitForDialog(os,new AppSettingsDialogFiller(os,AppSettingsDialogFiller::minimal));
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_SETTINGS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "action__settings");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+
 //2. Open WD settings
 //3. Change Default visualization Item style from Extended to Minimal.
 //4. Click OK button
 
 //5. Open WD
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
 //6. Load any scheme from samples tab
     GTUtilsWorkflowDesigner::addAlgorithm(os,"read alignment");
 //Expected state: item style on loaded schema must be Minimal
@@ -308,18 +310,17 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0006_1){
-    //GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
 //1. Do menu Settings->Prefrences
     GTUtilsDialog::waitForDialog(os,new AppSettingsDialogFiller(os,AppSettingsDialogFiller::extended));
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_SETTINGS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "action__settings");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+
 //2. Open WD settings
 //3. Change Default visualization Item style from Extended to Minimal.
 //4. Click OK button
 
 //5. Open WD
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
 //6. Load any scheme from samples tab
     GTUtilsWorkflowDesigner::addAlgorithm(os,"read alignment");
 //Expected state: item style on loaded schema must be Minimal
@@ -336,16 +337,15 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0007){
-//GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
 //1. Do menu {Settings->Prefrences}
     GTUtilsDialog::waitForDialog(os,new AppSettingsDialogFiller(os,255,0,0));
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_SETTINGS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "action__settings");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+
 //2. Activate WD prefrences page. Change Backgrounf color for workers.
 
 //3. Open WD and place any worker on working area.
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
 //Expected state: workers background color must be same as in prefrences
     GTUtilsWorkflowDesigner::addAlgorithm(os,"read alignment");
     QPoint p(GTUtilsWorkflowDesigner::getItemLeft(os,"Read Alignment")+20,
@@ -480,6 +480,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1){//DIFFERENCE:file is loaded
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
 //    1. open WD.
     GTFileDialog::openFile(os,dataDir + "cmdline/","pwm-build.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 //    2. Select any worker on palette.
     GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write Weight Matrix"));
@@ -527,8 +528,8 @@ GUI_TEST_CLASS_DEFINITION(test_0017){
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os, testDir + "_common_data/scenarios/sandbox/somedir"));
     //1. Open Workflow Designer
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
+
     //2. Write the path to the directory which does not exist(in the StartupDialogFiller).
     //3. Click OK(in the StartupDialogFiller).
     CHECK_SET_ERR(!l.hasError(), "There are error messages about write access in WD directory");
@@ -537,11 +538,6 @@ GUI_TEST_CLASS_DEFINITION(test_0017){
 GUI_TEST_CLASS_DEFINITION(test_0058){
     //1. Click the menu {File -> New workflow}
     //Expected: Workflow Designer is opened.
-    /*
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "New workflow");
-    */
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     QWidget *wdView = GTUtilsMdi::activeWindow(os);
@@ -578,6 +574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, sandBoxDir, "wd_test_0059.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "NC_004718 1..29751 source"), "Sequence not found" );
@@ -597,7 +594,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 
     class wd_test_0060 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QMap<QString, QVariant> parameters;
             parameters["Output file"] = QDir(sandBoxDir).absolutePath() + "/wd_test_0060";
             //! The following code will not work because of UGENE-4234
@@ -622,6 +619,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "/_common_data/bedtools/", "mutation.gff");
 
     GTUtilsWorkflowDesigner::click(os, "Write Annotations");
+    GTGlobals::sleep();
     GTUtilsWorkflowDesigner::setParameter(os, "Document format", "bed", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
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 e0fd8dc..cf32e3e 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
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_designer {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_workflow_designer_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_designer"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -51,7 +51,7 @@ GUI_TEST_CLASS_DECLARATION(test_0058)
 GUI_TEST_CLASS_DECLARATION(test_0059)
 GUI_TEST_CLASS_DECLARATION(test_0060)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 9e368b6..987c4eb 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
@@ -19,20 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTMenu.h"
-#include "api/GTWidget.h"
-#include "api/GTAction.h"
-#include "api/GTMouseDriver.h"
+#include "primitives/GTMenu.h"
+#include <primitives/GTWidget.h>
+#include "primitives/GTAction.h"
+#include <drivers/GTMouseDriver.h>
 #include "GTUtilsWorkflowDesigner.h"
 #include "GTUtilsLog.h"
-#include "GTUtilsDialog.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include "utils/GTUtilsDialog.h"
+#include <base_dialogs/MessageBoxFiller.h>
 
 #include "GTTestsWorkflowEstimating.h"
 
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_estimating {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
     //1. Open WD.
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
index ba50438..44516b7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
@@ -27,13 +27,13 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_estimating {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_workflow_estimating_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_estimating"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } // namespace U2
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 796d3ad..22fdc48 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
@@ -19,11 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTMenu.h"
-#include "api/GTWidget.h"
-#include "api/GTLineEdit.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTTabWidget.h"
+#include "primitives/GTMenu.h"
+#include <primitives/GTWidget.h>
+#include <primitives/GTLineEdit.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTTabWidget.h>
 
 #include "GTUtilsWorkflowDesigner.h"
 
@@ -31,6 +31,7 @@
 #include "GTTestsWorkflowNameFilter.h"
 
 #include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QTreeWidget>
@@ -41,13 +42,11 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_name_filter {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION( test_0001 ) {
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot( os, new StartupDialogFiller( os ) );
-
     // 1. Open WD.
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     // 2. Open the samples tab.
     QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os, "tabs"));
@@ -60,6 +59,7 @@ GUI_TEST_CLASS_DEFINITION( test_0001 ) {
     //hack. GTLineEdit can not set focus on widget. Don't know why
     GTWidget::click(os, nameFilter);
     GTKeyboardDriver::keySequence(os,"HMM");
+    GTGlobals::sleep();
     // 4. Write "HMM".
 
     // Expected: There are two samples after filtering.
@@ -80,18 +80,15 @@ GUI_TEST_CLASS_DEFINITION( test_0001 ) {
             }
         }
     }
-    CHECK_SET_ERR(count == 2, "Wrong number of visible items in sample tree");
+    CHECK_SET_ERR(count == 2, QString("Wrong number of visible items in sample tree: expected: 2, actual: %1").arg(count));
 }
 
 GUI_TEST_CLASS_DEFINITION( test_0002 ) {
-    GTUtilsDialog::waitForDialog( os, new StartupDialogFiller( os ) );
-
     // 1. Open WD.
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     // 2. Open the samples tab.
-    GTWidget::click(os, GTWidget::findWidget(os, "samples"));
+    GTUtilsWorkflowDesigner::setCurrentTab(os, GTUtilsWorkflowDesigner::samples);
 
     // 3. Press Ctrl+F.
     //Expected: the "Name filter" line edit has the focus
@@ -100,7 +97,7 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
     // 4. Write "align muscle".
     //Expected: There is the muscle alignment sample after filtering.
     GTKeyboardDriver::keySequence(os, "align muscle");
-    GTGlobals::sleep(200);
+    GTGlobals::sleep(500);
 
     // Expected: There are two samples after filtering.
     QTreeWidget *samples;
@@ -120,7 +117,7 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
             }
         }
     }
-    CHECK_SET_ERR(count == 1, "Wrong number of visible items in sample tree with 'align muscle' filter");
+    CHECK_SET_ERR(count == 1, QString("Wrong number of visible items in sample tree with 'align muscle' filter: %1").arg(count));
 
     //5. Press Esc.
     //Expected: the name filter is clear, all samples are shown.
@@ -160,7 +157,7 @@ GUI_TEST_CLASS_DEFINITION( test_0003 ) {
     //hack. GTLineEdit can not set focus on widget. Don't know why
     GTWidget::click(os,nameFilter);
     GTKeyboardDriver::keySequence(os, "NGS");
-    GTGlobals::sleep(1000);
+    GTGlobals::sleep();
 
     // Expected: There are two samples after filtering.
     QTreeWidget *samples;
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
index 6e31d24..6f1c2ac 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
@@ -28,14 +28,14 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_name_filter {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_workflow_name_filter_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_name_filter"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 }
 
 } // namespace U2
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 e09336a..13eb895 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
@@ -19,22 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#include "api/GTAction.h"
-#include "api/GTFile.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTTableView.h"
-#include "api/GTWidget.h"
-#include "GTUtilsDialog.h"
+#include "primitives/GTAction.h"
+#include "system/GTFile.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTWidget.h>
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsWorkflowDesigner.h"
 #include "GTTestsWorkflowParemeterValidation.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 
 #include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <QtCore/QDir>
 
@@ -43,6 +44,7 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_parameters_validation {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001){
     // 1. Open WD sample "Align Sequences with MUSCLE
@@ -68,7 +70,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     // 4. Move this file somewhere from its directory
     class RenameHelper {
     public:
-        RenameHelper(const QString &url, U2OpStatus &os)
+        RenameHelper(const QString &url, HI::GUITestOpStatus &os)
             : file(url), renamed(false) {
                 oldName = file.fileName();
                 renamed = file.rename("wd_pv_0001.aln");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h
index 22d3530..54466f1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h
@@ -28,8 +28,8 @@ k
 namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_parameters_validation {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_workflow_parameters_validation_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_parameters_validation"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
@@ -37,7 +37,7 @@ GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0005)
 GUI_TEST_CLASS_DECLARATION(test_0006)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 } // namespace U2
 
 } //namespace
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 7873ac3..43f1078 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
@@ -20,27 +20,27 @@
  */
 
 #include "GTTestsWorkflowScripting.h"
-#include "GTUtilsApp.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsWorkflowDesigner.h"
 
-#include "api/GTAction.h"
-#include "api/GTFile.h"
-#include "api/GTGlobals.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTableView.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
+#include "primitives/GTAction.h"
+#include "system/GTFile.h"
+#include "GTGlobals.h"
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+
+#include <base_dialogs/MessageBoxFiller.h>
+#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h"
@@ -49,6 +49,7 @@
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "../../workflow_designer/src/WorkflowViewItems.h"
+#include "GTUtilsTaskTreeView.h"
 
 #include <U2Core/AppContext.h>
 
@@ -67,6 +68,7 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_workflow_scripting {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 //    1. Open WD. Press toolbar button "Create script object".
@@ -151,13 +153,12 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTGlobals::sleep( 200 );
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa.result.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0004) {
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTGlobals::sleep(500);
 
     GTUtilsDialog::waitForDialog(os, new CreateElementWithScriptDialogFiller(os, "workflow_scripting_test_0004"));
@@ -165,15 +166,9 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os,"workflow_scripting_test_0004"));
     GTMouseDriver::click(os);
-    QString scriptText;
-#ifdef  Q_OS_MAC
-    scriptText = "if(size(in_seq) >= 10000) {out_seq = in_seq;}";
-#else
-    scriptText = "if(size(in_seq) >= 10000) {out_seq = in_seq;}";
-#endif
 
-    GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "",
-        scriptText));
+    const QString scriptText = "if(size(in_seq) >= 10000) {out_seq = in_seq;}";
+    GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "", scriptText));
     GTWidget::click(os, GTAction::button(os, "editScriptAction"));
 
     WorkflowProcessItem *script = GTUtilsWorkflowDesigner::getWorker(os, "workflow_scripting_test_0004");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
index d4b876d..020555a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
@@ -28,15 +28,15 @@ k
 namespace U2 {
 namespace GUITest_common_scenarios_workflow_scripting {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_workflow_scripting_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_scripting"
 
 GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0004)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 } // GUITest_common_scenarios_workflow_scripting
 } // U2
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 befe262..00e2741 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
@@ -21,12 +21,14 @@
 
 #include <QListWidget>
 
-#include "api/GTAction.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTWidget.h"
-#include "runnables/qt/MessageBoxFiller.h"
+#include <U2Core/global.h>
+#include <U2Core/U2SafePoints.h>
+#include "primitives/GTAction.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h"
@@ -44,10 +46,10 @@
 
 namespace U2 {
 namespace GUITest_common_scenarios_shared_db_wd {
-
+using namespace HI;
 namespace {
 
-void createTestConnection(U2OpStatus &os) {
+void createTestConnection(HI::GUITestOpStatus &os) {
     GTLogTracer lt;
     QString conName = "ugene_gui_test";
     {
@@ -55,8 +57,7 @@ void createTestConnection(U2OpStatus &os) {
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::ADD);
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, conName);
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
-        GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions,
-            QFlags<SharedConnectionsDialogFiller::Behavior>(SharedConnectionsDialogFiller::UNSAFE)));
+        GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
     {
         EditConnectionDialogFiller::Parameters params;
@@ -353,7 +354,9 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0011) {
 
 GUI_TEST_CLASS_DEFINITION(read_gui_neg_test_0012) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Alignment");
@@ -374,7 +377,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_neg_test_0012) {
 
 GUI_TEST_CLASS_DEFINITION(write_gui_test_0001_1) {
     createTestConnection(os);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Alignment");
@@ -399,7 +402,7 @@ GUI_TEST_CLASS_DEFINITION(write_gui_test_0001_1) {
 
 GUI_TEST_CLASS_DEFINITION(write_gui_test_0001_2) {
     createTestConnection(os);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Sequence");
@@ -427,7 +430,7 @@ GUI_TEST_CLASS_DEFINITION(write_gui_test_0001_2) {
 
 GUI_TEST_CLASS_DEFINITION(write_gui_test_0002) {
     createTestConnection(os);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write FASTA");
@@ -463,13 +466,14 @@ GUI_TEST_CLASS_DEFINITION(write_gui_test_0003) {
     actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLICK, connectionName);
     actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, connectionName);
     GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 }
 
 GUI_TEST_CLASS_DEFINITION(open_uwl_gui_test_0001) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "shared_db_objects_input.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
 }
 
@@ -477,6 +481,7 @@ GUI_TEST_CLASS_DEFINITION(open_uwl_gui_test_0002) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "shared_db_folders_input.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
 }
 
@@ -484,6 +489,7 @@ GUI_TEST_CLASS_DEFINITION(open_uwl_gui_test_0003) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "shared_db_output.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
 }
 
@@ -491,7 +497,7 @@ GUI_TEST_CLASS_DEFINITION(save_uwl_gui_test_0001) {
     GTLogTracer l;
 
     createTestConnection(os);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Variations");
@@ -537,6 +543,7 @@ GUI_TEST_CLASS_DEFINITION(save_uwl_gui_test_0002) {
 GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0001_1) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "read_from_shared_db_no_credentials.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Write Alignment");
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "output.aln", GTUtilsWorkflowDesigner::textValue);
@@ -556,6 +563,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0001_2) {
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "read_from_shared_db_no_credentials.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Write Alignment");
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "output.aln", GTUtilsWorkflowDesigner::textValue);
@@ -571,6 +579,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0001_2) {
 GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0002) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "read_from_inaccessible_shared_db.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Write Variations");
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "output.snp", GTUtilsWorkflowDesigner::textValue);
@@ -580,7 +589,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0002) {
         "Please fix issues listed in the error list (located under workflow)."));
 
     GTWidget::click(os, GTAction::button(os, "Run workflow"));
-    GTGlobals::sleep();
+    GTGlobals::sleep(25000);
 
     GTUtilsWorkflowDesigner::checkErrorList(os, "Unable to connect to the database");
 }
@@ -624,20 +633,22 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0004) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Plain Text");
+    GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Plain Text");
+    GTUtilsWorkflowDesigner::connect(os, GTUtilsWorkflowDesigner::getWorker(os, "Read Plain Text"),
+    GTUtilsWorkflowDesigner::getWorker(os, "Write Plain Text"));
+
+    GTUtilsWorkflowDesigner::click(os, "Read Plain Text");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/text/", "text.txt");
 
-    GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Plain Text");
+    GTUtilsWorkflowDesigner::click(os, "Write Plain Text");
     GTUtilsWorkflowDesigner::setParameter(os, "Data storage", 1, GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Database", 0, GTUtilsWorkflowDesigner::comboValue);
-
-    GTUtilsWorkflowDesigner::connect(os, GTUtilsWorkflowDesigner::getWorker(os, "Read Plain Text"),
-        GTUtilsWorkflowDesigner::getWorker(os, "Write Plain Text"));
-
+  
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok,
         "Please fix issues listed in the error list (located under workflow)."));
 
     GTWidget::click(os, GTAction::button(os, "Run workflow"));
-    GTGlobals::sleep();
+    GTGlobals::sleep(10000); //neccessary sleep
 
     GTUtilsWorkflowDesigner::checkErrorList(os, "You do not have write permissions to the database");
 }
@@ -647,6 +658,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0005_1) {
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "write_to_shared_db_no_credentials.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta/", "aaa.fa");
@@ -661,6 +673,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0005_1) {
 GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0005_2) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "write_to_shared_db_no_credentials.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta/", "aaa.fa");
@@ -677,6 +690,7 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0005_2) {
 GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0006) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/workflow/", "write_to_inaccessible_shared_db.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Read Assembly");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/ugenedb/", "1.bam.ugenedb");
@@ -690,8 +704,9 @@ GUI_TEST_CLASS_DEFINITION(run_workflow_gui_test_0006) {
 
     GTUtilsWorkflowDesigner::checkErrorList(os, "Unable to connect to the database");
 
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Close without Saving"));
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
     GTUtilsMdi::click(os, GTGlobals::Close);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3726) {
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
index 865bfd9..09244ea 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
@@ -27,8 +27,8 @@
 namespace U2 {
 
 namespace GUITest_common_scenarios_shared_db_wd {
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_common_scenarios_shared_db_wd_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_shared_db_wd"
 
 GUI_TEST_CLASS_DECLARATION(read_gui_test_0001)
 GUI_TEST_CLASS_DECLARATION(read_gui_test_0002)
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
index 4f68bce..b3b1d57 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
@@ -23,11 +23,12 @@
 #define _U2_GT_ABSTRACT_GUI_ACTION_H_
 
 #include <U2Core/U2OpStatusUtils.h>
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
 
 namespace GUITest_crazy_user {
+using namespace HI;
 
 class GTAbstractGUIAction : public Runnable {
 public:
@@ -55,7 +56,7 @@ public:
 protected:
     Priority priority;
     QObject *obj;
-    U2OpStatus2Log os;
+    HI::GUITestOpStatus os;
 private:
     GTAbstractGUIAction& operator=(GTAbstractGUIAction&);
 };
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
index 552a57d..1f85abd 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
@@ -20,15 +20,16 @@
  */
 
 #include "GTRandomGUIActionFactory.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
-#include <U2Test/GUITest.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <core/GUITest.h>
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QFileDialog>
 #else
 #include <QtWidgets/QFileDialog>
 #endif
 #include <QtCore/QDirIterator>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
index c83218a..495e984 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
@@ -21,9 +21,9 @@
 
 #include "GUICrazyUserTest.h"
 #include "GTRandomGUIActionFactory.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTWidget.h"
-#include "api/GTFileDialog.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/GTFileDialog.h>
 #include "GTRandomGUIActionFactory.h"
 
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -31,6 +31,7 @@
 #else
 #include <QtWidgets/QApplication>
 #endif
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
index 7e915e8..2e47dcf 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
@@ -23,8 +23,8 @@
 #define _U2_GT_TESTS_CRAZY_USER_H_
 
 #include <U2Test/GUITestBase.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include "GTUtilsDialog.h"
+//#include <U2Core/U2OpStatus.h>
+#include "utils/GTUtilsDialog.h"
 
 namespace U2 {
 
@@ -57,11 +57,11 @@ private:
 };
 
 
-class simple_crazy_user : public GUITest {
+class simple_crazy_user : public HI::GUITest {
 public:
-    simple_crazy_user() : GUITest("simple_crazy_user"){}
+    simple_crazy_user() : HI::GUITest("simple_crazy_user"){}
 protected:
-    virtual void run(U2OpStatus &os);
+    virtual void run(HI::GUITestOpStatus &os);
 };
 
 }
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 73ef17f..cc5ebd3 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
@@ -21,32 +21,33 @@
 
 #include "GTTestsRegressionScenarios_1001_2000.h"
 
-#include "api/GTRadioButton.h"
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
+#include <primitives/GTRadioButton.h>
+#include "primitives/GTAction.h"
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
 #include "api/GTGraphicsItem.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include "utils/GTThread.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
 #include "api/GTSequenceReadingModeDialog.h"
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTSlider.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTTextEdit.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWebView.h"
-#include "api/GTWidget.h"
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTTextEdit.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWebView.h>
+#include <primitives/GTWidget.h>
 
 #include "GTDatabaseConfig.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
@@ -55,7 +56,7 @@
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -73,14 +74,14 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
 
-#include "runnables/qt/DefaultDialogFiller.h"
+#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.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"
@@ -113,7 +114,7 @@
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
 #include "runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h"
 #include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
@@ -165,7 +166,6 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Gui/ProjectViewModel.h>
 #include <U2Gui/ToolsMenu.h>
@@ -231,12 +231,12 @@ GUI_TEST_CLASS_DEFINITION(test_1001_1) {
 GUI_TEST_CLASS_DEFINITION(test_1001_2) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProject::openFiles(os, testDir+"_common_data/fasta/human_T1_cutted.fa");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 99, 99, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTGlobals::sleep(5000);
@@ -245,12 +245,12 @@ GUI_TEST_CLASS_DEFINITION(test_1001_2) {
 GUI_TEST_CLASS_DEFINITION(test_1001_3) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProject::openFiles(os, testDir+"_common_data/fasta/human_T1_cutted.fa");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 99, 99, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
@@ -263,12 +263,12 @@ GUI_TEST_CLASS_DEFINITION(test_1001_3) {
 GUI_TEST_CLASS_DEFINITION(test_1001_4) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProject::openFiles(os, testDir+"_common_data/fasta/human_T1_cutted.fa");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 99, 99, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -281,10 +281,11 @@ GUI_TEST_CLASS_DEFINITION(test_1003) {
     // 1. Open "murine.gb", search for all available restriction sites (i.e. click "Select All" in the "Find Restriction Sites" dialog).
     // Expected state: UGENE not hangs at 100% complition of 'Auto-annotation update task'
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class Scenario_test_1003: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             QWidget *enzymesSelectorWidget = GTWidget::findWidget(os, "enzymesSelectorWidget");
             GTWidget::click(os, GTWidget::findWidget(os, "selectAllButton", enzymesSelectorWidget));
@@ -302,6 +303,7 @@ GUI_TEST_CLASS_DEFINITION(test_1003) {
 
 GUI_TEST_CLASS_DEFINITION(test_1011) {
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *pw = GTWidget::findWidget(os, "pan_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     CHECK_SET_ERR(pw != NULL, "cant get panview idget");
     QList<QScrollBar*> widgetList =  pw->findChildren<QScrollBar*>();
@@ -323,6 +325,7 @@ GUI_TEST_CLASS_DEFINITION(test_1013) {
     // Expected state: selection is present
 
     GTFileDialog::openFile(os, dataDir+"samples/MSF/", "HMA.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
@@ -334,6 +337,7 @@ GUI_TEST_CLASS_DEFINITION(test_1013) {
 GUI_TEST_CLASS_DEFINITION(test_1015) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 3));
@@ -348,6 +352,7 @@ GUI_TEST_CLASS_DEFINITION(test_1015) {
 GUI_TEST_CLASS_DEFINITION(test_1015_1) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 30, 50));
@@ -363,11 +368,11 @@ GUI_TEST_CLASS_DEFINITION(test_1015_1) {
 GUI_TEST_CLASS_DEFINITION(test_1015_2) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 100, 50, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -379,11 +384,11 @@ GUI_TEST_CLASS_DEFINITION(test_1015_2) {
 GUI_TEST_CLASS_DEFINITION(test_1015_3) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 100, 50, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -399,11 +404,11 @@ GUI_TEST_CLASS_DEFINITION(test_1015_3) {
 GUI_TEST_CLASS_DEFINITION(test_1015_4) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 100, 50, true));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "build_dotplot_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -420,6 +425,7 @@ GUI_TEST_CLASS_DEFINITION(test_1016){
 //    1) Open "\test\_common_data\scenarios\_regression\1016\eg1.sam"
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "Import BAM File", QDialogButtonBox::Cancel));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1016/eg1.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: "Import SAM File" dialog appeared, not "select format" dialog
 }
 
@@ -428,6 +434,7 @@ GUI_TEST_CLASS_DEFINITION(test_1020) {
 
     //1. Open file data / CLUSTALW / COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. In MSA context menu choose "Statistics" > "Generate distance matrix".
     //3. Try to generate distance matrix with both "Haming dissimilarity" and "Identity" algorithms.
@@ -453,9 +460,10 @@ GUI_TEST_CLASS_DEFINITION(test_1020) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
 
-    CHECK_SET_ERR(GTUtilsMdi::activeWindow(os)->windowTitle() == "Alignment profile for COI", "Unexpected active window name");
+    CHECK_SET_ERR(GTUtilsMdi::activeWindow(os)->windowTitle() == "Alignment profile for COI", "Unexpected active window name: " + GTUtilsMdi::activeWindow(os)->windowTitle());
 
     GTUtilsMdi::activateWindow(os, "COI [m] COI");
 
@@ -483,6 +491,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -520,6 +529,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_1) {
     for (int i=0; i<3; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -557,6 +567,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_2) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -584,11 +595,6 @@ GUI_TEST_CLASS_DEFINITION(test_1021_2) {
         int bookmarksCount = bookmarksTree->topLevelItemCount();
         CHECK_SET_ERR(bookmarksCount == 0, "there are bookmarks");
     }
-
-//    GTMenu::clickMenuItem(os, GTMenu::showMainMenu(os, MWMENU_FILE), ACTION__EXIT);
-//    GTGlobals::sleep();
-
-//    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1021_3) {
@@ -596,6 +602,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -628,11 +635,6 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
         int bookmarksCount = bookmarksTree->topLevelItemCount();
         CHECK_SET_ERR(bookmarksCount == 0, "there are bookmarks");
     }
-
-//    GTMenu::clickMenuItem(os, GTMenu::showMainMenu(os, MWMENU_FILE), ACTION__EXIT);
-//    GTGlobals::sleep();
-
-//    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1021_4) {
@@ -640,6 +642,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -672,14 +675,12 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
         int bookmarksCount = bookmarksTree->topLevelItemCount();
         CHECK_SET_ERR(bookmarksCount == 0, "there are bookmarks");
     }
-
-//    GTMenu::clickMenuItem(os, GTMenu::showMainMenu(os, MWMENU_FILE), ACTION__EXIT);
-//    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1022) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 3));
@@ -709,7 +710,7 @@ GUI_TEST_CLASS_DEFINITION(test_1029) {
     GTUtilsDialog::waitForDialog(os, new GTSequenceReadingModeDialogUtils(os));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, dataDir + "samples/Genbank/", QStringList() << "murine.gb" << "sars.gb" << "CVU55762.gb" << "PBR322.gb" << "NC_014267.1.gb"));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
@@ -766,9 +767,12 @@ GUI_TEST_CLASS_DEFINITION(test_1037){
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "chrM.sorted.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Open two SNP files (*.snp, *.vcf)
     GTFileDialog::openFile(os, testDir + "_common_data/snp/simple.snp");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, testDir + "_common_data/snp/valid.snp");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3) Drag-n-drop SNP object files to assembly browser
     QModelIndex simple = GTUtilsProjectTreeView::findIndex(os, "simple.snp");
     QModelIndex chr1 = GTUtilsProjectTreeView::findIndex(os, "chr1", simple);
@@ -809,6 +813,7 @@ GUI_TEST_CLASS_DEFINITION(test_1038) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, sandBoxDir, "test_1038_seq");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // get the list of sequences in file and read names in assembly
     Document* seqDoc = GTUtilsDocument::getDocument(os, "test_1038_seq");
@@ -824,12 +829,14 @@ GUI_TEST_CLASS_DEFINITION(test_1038) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_1038_bam"));
     GTFileDialog::openFile(os, testDir + "_common_data/bam", "small.bam.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
 
     AssemblyBrowserUi* ui = GTUtilsAssemblyBrowser::getView(os, "test_1038_bam [as] ref_and_others");
     QSharedPointer<AssemblyModel> model = ui->getModel();
 
-    U2DbiIterator<U2AssemblyRead> * it = model->getReads(U2Region(0, model->getModelLength(os)), os);
+    U2OpStatus2Log u2os;
+    U2DbiIterator<U2AssemblyRead> * it = model->getReads(U2Region(0, model->getModelLength(u2os)), u2os);
     CHECK_SET_ERR(it != NULL, "NULL iterator");
 
     int matchCount = 0;
@@ -846,6 +853,7 @@ GUI_TEST_CLASS_DEFINITION(test_1038) {
 GUI_TEST_CLASS_DEFINITION(test_1044) {
     //1. Open "data/samples/COI.aln".
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. In MSA context menu choose {Align -> Align with MUSCLE...}.
     //Expected state: "Align with MUSCLE" dialog appears.
@@ -864,6 +872,7 @@ GUI_TEST_CLASS_DEFINITION(test_1047){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_1047.ugenedb", dataDir + "samples/Assembly", "chrM.fa"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.sam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Choose a color scheme in options panel of assembly browser. Try zooming with mouse wheel.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ASS_SETTINGS"));
     QComboBox* colorBox = GTWidget::findExactWidget<QComboBox*>(os, "READS_HIGHLIGHTNING_COMBO");
@@ -886,10 +895,12 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/1.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/2.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* act = GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "readHintEnabledAction");
     GTWidget::click(os, act);
@@ -927,6 +938,7 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
 GUI_TEST_CLASS_DEFINITION(test_1049){
 //    1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click the "Enable collapsing" button on the toolbar.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 //    Expected state: some sequences are collapsed into two groups.
@@ -935,7 +947,7 @@ GUI_TEST_CLASS_DEFINITION(test_1049){
 //    3. Click {Statistics->Generate distance matrix} in the context menu.
     class custom: public CustomScenario{
     public:
-        void run(U2::U2OpStatus &os){
+        void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Unable to find active dialog");
             //    4. Check the "Show group statistics of multiple alignment" checkbox and press the "Generate" button.
@@ -960,10 +972,11 @@ GUI_TEST_CLASS_DEFINITION(test_1049){
 GUI_TEST_CLASS_DEFINITION(test_1052){
 //    1. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open "Find restriction sites" dialog
     class custom: public CustomScenario{
     public:
-        void run(U2::U2OpStatus &os){
+        void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Unable to find active dialog");
             //    3. Select all sites.
@@ -990,7 +1003,7 @@ GUI_TEST_CLASS_DEFINITION(test_1058) {
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/1058/", "file.gff"));
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GFF"));
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTGlobals::sleep();
     CHECK_SET_ERR(l.hasError(), "No error about opening the file");
 }
@@ -1007,10 +1020,14 @@ GUI_TEST_CLASS_DEFINITION(test_1059) {
 
     //4. Copy&Paste this worker
     GTUtilsWorkflowDesigner::click(os, GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
+    GTGlobals::sleep(1000);
+    GTUtilsWorkflowDesigner::click(os, GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
+    GTGlobals::sleep(1000);
+
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(100);
+    GTGlobals::sleep();
     GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(100);
+    GTGlobals::sleep();
 
     const QPoint workerCenterPos = GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence");
     GTMouseDriver::moveTo(os, workerCenterPos);
@@ -1027,13 +1044,13 @@ GUI_TEST_CLASS_DEFINITION(test_1059) {
 
     GTUtilsWorkflowDesigner::click(os, GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence 1"));
     const QString outputFile = GTUtilsWorkflowDesigner::getParameter(os, "Output file");
-    CHECK_SET_ERR(outputFile == "sample", "Unexpected output file parameter value");
+    CHECK_SET_ERR(outputFile == "sample", "Unexpected output file parameter value: " + outputFile);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1061) {
     class CreateMarkerDialogFiller : public Filler {
     public:
-        CreateMarkerDialogFiller(U2OpStatus &os)
+        CreateMarkerDialogFiller(HI::GUITestOpStatus &os)
             : Filler(os, "EditMarkerDialog")
         {
 
@@ -1055,7 +1072,7 @@ GUI_TEST_CLASS_DEFINITION(test_1061) {
 
     class AddMarkerDialogFiller : public Filler {
     public:
-        AddMarkerDialogFiller(U2OpStatus &os)
+        AddMarkerDialogFiller(HI::GUITestOpStatus &os)
             : Filler(os, "EditMarkerGroupDialog")
         {
 
@@ -1113,7 +1130,7 @@ GUI_TEST_CLASS_DEFINITION(test_1061) {
 GUI_TEST_CLASS_DEFINITION(test_1063) {
     class EnableWdDebuggerFiller : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1138,8 +1155,7 @@ GUI_TEST_CLASS_DEFINITION(test_1063) {
 
     //1) Set "Enable debugger" in Settings->WD
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new EnableWdDebuggerFiller()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
     //2) Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
@@ -1177,6 +1193,7 @@ GUI_TEST_CLASS_DEFINITION(test_1064) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_1064.ugenedb", dataDir + "samples/Assembly", "chrM.fa"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1065_1) {
@@ -1199,7 +1216,7 @@ GUI_TEST_CLASS_DEFINITION(test_1065_1) {
 
     GTUtilsDialog::waitForDialog(os, new BuildIndexDialogFiller(os, testDir + "_common_data/scenarios/_regression/1065/", "e_coli_1000.fa",
                                                                  "Bowtie", false, sandBoxDir, "e_colli_1000"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QDir dir(sandBoxDir);
@@ -1237,7 +1254,7 @@ GUI_TEST_CLASS_DEFINITION(test_1065_2) {
     p.resultFileName = "1065_2";
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &p));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
 
     GTUtilsLog::check(os, l);
@@ -1269,7 +1286,7 @@ GUI_TEST_CLASS_DEFINITION(test_1065_3) {
     p.resultFileName = "1065_3";
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &p));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1290,6 +1307,7 @@ GUI_TEST_CLASS_DEFINITION(test_1068){
 GUI_TEST_CLASS_DEFINITION(test_1069) {
     //1. Open any sequence
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Switch on auto-annotations
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Restriction Sites"));
@@ -1301,6 +1319,7 @@ GUI_TEST_CLASS_DEFINITION(test_1069) {
 
     //4. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state: auto-annotations are switched off
     QTreeWidgetItem *annItem =  GTUtilsAnnotationsTreeView::findFirstAnnotation(os, GTGlobals::FindOptions(false));
@@ -1310,6 +1329,7 @@ GUI_TEST_CLASS_DEFINITION(test_1069) {
 GUI_TEST_CLASS_DEFINITION(test_1071) {
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsAnnotationsTreeView::selectItems(os, QStringList() << "CDS");
 
     //1. Open edit annotation name and region dialog (by F2).
@@ -1336,7 +1356,7 @@ GUI_TEST_CLASS_DEFINITION(test_1078){ //Need to add the test
     GTUtilsDialog::waitForDialog(os, ob);
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "FASTA"));
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
 
@@ -1350,7 +1370,7 @@ GUI_TEST_CLASS_DEFINITION(test_1079){
     //Expected state: the line edit is highlighted and has tooltip that the path contains spaces. The Search button is disabled
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QLineEdit *path = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "databasePathLineEdit"));
             GTLineEdit::setText(os, path, sandBoxDir + "test_1079/s p a c e s/human_T1formatDB.log");
             bool isDisabled = !GTUtilsDialog::isButtonEnabled(os, QApplication::activeModalWidget(), QDialogButtonBox::Ok);
@@ -1359,15 +1379,14 @@ GUI_TEST_CLASS_DEFINITION(test_1079){
         }
     };
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(os, new Scenario()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCH));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST search...");
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1080) {
     class OkClicker2 : public Filler {
     public:
-        OkClicker2(U2OpStatus& _os) : Filler(_os, "EditMarkerDialog"){}
+        OkClicker2(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerDialog"){}
         virtual void run() {
             GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
             GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
@@ -1384,7 +1403,7 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
         virtual void run() {
             GTUtilsDialog::waitForDialog(os, new OkClicker2(os));
 
@@ -1412,6 +1431,7 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
 
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/regression/1080", "blast+marker_new.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Sequence Marker");
 
@@ -1432,6 +1452,7 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
 GUI_TEST_CLASS_DEFINITION(test_1083) {
 //1. open files data\samples\FASTA\human_T1.fa
     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);
@@ -1457,28 +1478,32 @@ GUI_TEST_CLASS_DEFINITION(test_1093) {
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters)) ;
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //The short reads can't be mapped to the reference sequence!
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1107){//commit GUIInitionalChecks
+GUI_TEST_CLASS_DEFINITION(test_1107) {
 //1) Open an MSA file (e.g. _common_data\scenarios\msa\ma2_gapped.aln)
-
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2) Menu File->Close Project
 //3) Press No in the Save current project dialog
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
+
 //Expected state: UGENE not crashes
+    GTGlobals::sleep();
 }
+
 GUI_TEST_CLASS_DEFINITION(test_1113){//commit AboutDialogController.cpp
 //1. Open UGENE
 //2. Press F1
     class EscClicker : public Filler {
     public:
-        EscClicker(U2OpStatus& _os) : Filler(_os, "AboutDialog"){}
+        EscClicker(HI::GUITestOpStatus& _os) : Filler(_os, "AboutDialog"){}
         virtual void run(){
 
             GTGlobals::sleep();
@@ -1532,7 +1557,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113_1){//commit AboutDialogController.cpp
 //2. Help->About
     class EscClicker : public Filler {
     public:
-        EscClicker(U2OpStatus& _os) : Filler(_os, "AboutDialog"){}
+        EscClicker(HI::GUITestOpStatus& _os) : Filler(_os, "AboutDialog"){}
         virtual void run(){
             GTGlobals::sleep();
 #ifdef Q_OS_MAC
@@ -1563,42 +1588,39 @@ GUI_TEST_CLASS_DEFINITION(test_1113_1){//commit AboutDialogController.cpp
     };
 
     GTUtilsDialog::waitForDialog(os, new EscClicker(os));
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_HELP);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ACTION__ABOUT);
-    GTGlobals::sleep(1000);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Help" << "About");
+    GTGlobals::sleep();
 //Expected state: About dialog appeared, shown info includes platform info (32/64)
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1115) {
-//    1. Open file "Genbank\murine.gb"
-    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
-
-//    2. Use menu {Analyze->Query NCBI BLAST database}
-//    3. Run Blast
-    GTUtilsSequenceView::selectSequenceRegion(os, 1, 100);
-
-    GTUtilsDialog::waitForDialog(os, new RemoteBLASTDialogFiller(os));
-    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Query NCBI BLAST database");
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/pBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/PBR322_blast_annotations.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
+//    2. Add BLAST annotations to the sequence view.
+    GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
+    const QModelIndex table = GTUtilsProjectTreeView::findIndex(os, "SYNPBR322 features", GTUtilsProjectTreeView::findIndex(os, "PBR322_blast_annotations.gb"));
+    GTUtilsProjectTreeView::dragAndDrop(os, table, GTUtilsAnnotationsTreeView::getTreeWidget(os));
+
+//    3. Select two or more BLAST annotations.
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     CHECK_SET_ERR(2 <= blastResultItems.size(), "Not enough BLAST results");
 
     const QStringList expectedNames = QStringList() << GTUtilsAnnotationsTreeView::getQualifierValue(os, "accession", blastResultItems.first())
                                                     << GTUtilsAnnotationsTreeView::getQualifierValue(os, "accession", blastResultItems.last());
-
-//    4. Select two or more BLAST annotations
     GTUtilsAnnotationsTreeView::selectItems(os, QList<QTreeWidgetItem *>() << blastResultItems.first() << blastResultItems.last());
 
-//    5. Use menu {Export->Export blast result to alignment}
-//    6. Click "Export"
+//    4. Use menu {Export->Export blast result to alignment}.
+//    5. Click "Export".
     QDir().mkpath(sandBoxDir + "test_1115");
     GTUtilsDialog::waitForDialog(os, new ExportBlastResultDialogFiller(os, sandBoxDir + "test_1115/test_1115.aln"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Export BLAST result to alignment"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, blastResultItems.first());
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-//    7. Check that annotations correctly exported
+//    6. Check that annotations are correctly exported.
     GTUtilsDocument::checkDocument(os, "test_1115.aln", MSAEditorFactory::ID);
 
     const QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -1611,6 +1633,7 @@ GUI_TEST_CLASS_DEFINITION(test_1121) {
 
     //1) Open alignment with amino alphabet
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "amino_ext.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2) join line with nucl alphabet.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_LOAD_SEQ" << "Sequence from file"));
@@ -1644,16 +1667,14 @@ GUI_TEST_CLASS_DEFINITION(test_1122){
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scenarios/CAP3/xyz.fa"
                                                                  << testDir + "_common_data/scenarios/CAP3/xyz.qual",
                                                                  sandBoxDir + "test_1122_1"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_1122_2.ugenedb"));
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scenarios/CAP3/xyz.fastq",
                                                                  sandBoxDir + "test_1122_2"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(GTFile::equals(os, sandBoxDir + "test_1122_1.ace", sandBoxDir + "test_1122_2.ace"), "Files are not equal");
@@ -1676,8 +1697,7 @@ GUI_TEST_CLASS_DEFINITION(test_1123){
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/abif/19_022.ab1"
         << testDir + "_common_data/abif/39_034.ab1",
         sandBoxDir + "1123_abi.cap.ace"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 
@@ -1698,8 +1718,7 @@ GUI_TEST_CLASS_DEFINITION(test_1123_1){
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scf/Sequence A.scf"
         << testDir + "_common_data/scf/Sequence A.scf",
         sandBoxDir + "1123_scf.cap.ace"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
@@ -1709,7 +1728,7 @@ GUI_TEST_CLASS_DEFINITION(test_1124){
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget *dialog = QApplication::activeModalWidget();
             //    2. Hover the {Input files (long DNA reads to assembly)} field with mouse and wait the tooltip appeares.
@@ -1724,9 +1743,7 @@ GUI_TEST_CLASS_DEFINITION(test_1124){
         }
     };
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, new Scenario()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU
-                                                      << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
     GTGlobals::sleep();
 }
 
@@ -1738,6 +1755,7 @@ GUI_TEST_CLASS_DEFINITION(test_1133) {
 //
 //     Expected state: Search successfully perfoms
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QString patttern = "ATGAA    GGAAAAA\nA T G CTA AG GG\nCAGC    CAGAG AGAGGTCA GGT";
     GTUtilsDialog::waitForDialog(os, new SmithWatermanDialogFiller(os, patttern));
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Find pattern [Smith-Waterman]"));
@@ -1753,6 +1771,7 @@ GUI_TEST_CLASS_DEFINITION(test_1152) {
     // 5. All the subsequences are found on right places
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep(200);
     GTKeyboardDriver::keySequence(os, "TAACG");
@@ -1781,6 +1800,7 @@ GUI_TEST_CLASS_DEFINITION(test_1152_1) {
     // Expected state: All patterns're found on their places
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern(os);
@@ -1798,6 +1818,7 @@ GUI_TEST_CLASS_DEFINITION(test_1155) {
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1155", "crash.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Sequence", dataDir + "samples/Genbank/sars.gb");
 
@@ -1827,7 +1848,7 @@ GUI_TEST_CLASS_DEFINITION(test_1154) {
     parameters.samOutput = false;
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "The short reads can't be mapped to the reference sequence!"));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::TOOLS), QStringList() << "NGS data analysis" << "Map reads to reference...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "reference.ugenedb");
@@ -1839,7 +1860,7 @@ GUI_TEST_CLASS_DEFINITION(test_1154) {
 GUI_TEST_CLASS_DEFINITION(test_1156) {
     class DigestCircularSequenceScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
 
             QListWidget *availableEnzymeWidget = GTWidget::findExactWidget<QListWidget *>(os, "availableEnzymeWidget", dialog);
@@ -1862,6 +1883,7 @@ GUI_TEST_CLASS_DEFINITION(test_1156) {
 
     // 1. Open human_T1
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Use menu{ Analyze->Find restriction sites }.
     // Expected state : "Find restriction sites" dialog has appeared
@@ -1909,6 +1931,7 @@ GUI_TEST_CLASS_DEFINITION(test_1157) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, resultFilePath);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 17)");
     GTUtilsAnnotationsTreeView::findItem(os, "mat_peptide  (0, 32)");
@@ -1921,6 +1944,7 @@ GUI_TEST_CLASS_DEFINITION(test_1163){
     // Expected state: UGENE not crashes
 
     GTFileDialog::openFile(os, testDir+"_common_data/ugenedb/", "example-alignment.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"action_project__unload_selected_action"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
@@ -1930,6 +1954,7 @@ GUI_TEST_CLASS_DEFINITION(test_1163){
 GUI_TEST_CLASS_DEFINITION(test_1165){
 //1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. open context menu in msa, "Add"->"Sequence from file...",
 //3. browse the file "data/samples/FASTA/human_T1.fa".
     QWidget *nameList;
@@ -1951,6 +1976,7 @@ GUI_TEST_CLASS_DEFINITION(test_1166) {
     //1. Open file "data/samples/CLUSTALW/COI.aln" in alignment editor
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(44,6), QPoint(49,9));
 
@@ -1983,6 +2009,7 @@ GUI_TEST_CLASS_DEFINITION(test_1172){
     // Expected state: UGENE not crashes
 
     GTFileDialog::openFile(os, dataDir+"samples/Stockholm/", "CBS.sto");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 2));
     GTGlobals::sleep();
@@ -2030,7 +2057,7 @@ GUI_TEST_CLASS_DEFINITION(test_1180) {
         "e_coli_1000.fastq",
         AlignShortReadsFiller::Parameters::Bowtie);
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters)) ;
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1182){
@@ -2081,7 +2108,7 @@ GUI_TEST_CLASS_DEFINITION(test_1186_1){
     //     Expected state: "Result file name" is 'test.sam'
     class Scenario_test_1186_1: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
 
             GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils (os, sandBoxDir, "test_1186_1.sam", GTFileDialogUtils::Save, GTGlobals::UseMouse));
@@ -2106,7 +2133,7 @@ GUI_TEST_CLASS_DEFINITION(test_1186_1){
     };
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_1186_1()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     CHECK_SET_ERR( !os.hasError(), "Uncorrect value is available");
 }
@@ -2119,7 +2146,7 @@ GUI_TEST_CLASS_DEFINITION(test_1186_2){
 
     class Scenario_test_1186_2: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
 
             QCheckBox* samBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "samBox", dialog));
@@ -2146,7 +2173,7 @@ GUI_TEST_CLASS_DEFINITION(test_1186_2){
     };
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_1186_2()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     CHECK_SET_ERR( !os.hasError(), "Uncorrect value is available");
 }
@@ -2154,6 +2181,7 @@ GUI_TEST_CLASS_DEFINITION(test_1186_2){
 GUI_TEST_CLASS_DEFINITION(test_1189){
 //1) Open samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2) Press Ctrl+F
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -2182,6 +2210,7 @@ GUI_TEST_CLASS_DEFINITION(test_1189){
 GUI_TEST_CLASS_DEFINITION(test_1189_1){
 //1) Open samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2) Press Ctrl+F
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -2220,10 +2249,9 @@ GUI_TEST_CLASS_DEFINITION(test_1190){//add AlignShortReadsFiller
                                                  testDir + "_common_data/fasta/",
                                                  "RAW.fa");
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters)) ;
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
     GTLogTracer l;
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os,QMessageBox::Ok));
 
@@ -2245,6 +2273,7 @@ GUI_TEST_CLASS_DEFINITION(test_1190){//add AlignShortReadsFiller
 GUI_TEST_CLASS_DEFINITION(test_1199) {
 //1. Open any samples/PDB/1CF7.pdb file.
     GTFileDialog::openFile(os, dataDir+"samples/PDB/", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2. Select document in project tree view. Press 'Delete'
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
@@ -2288,12 +2317,13 @@ GUI_TEST_CLASS_DEFINITION(test_1203_1) {
 GUI_TEST_CLASS_DEFINITION(test_1203_2) {
 //    1) Open data\samples\FASTA\human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2) Use context menu {Analyze -> Search NCBI BLAST database}
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active model widget is NULL");
 
@@ -2337,6 +2367,7 @@ GUI_TEST_CLASS_DEFINITION(test_1204){
     // Expected state: "max hits" spinbox can be set to 5000
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new RemoteBLASTDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE"
@@ -2388,6 +2419,7 @@ GUI_TEST_CLASS_DEFINITION(test_1210){
 GUI_TEST_CLASS_DEFINITION(test_1212){
 //    1. Open any sequence. (human_t1.fa)
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do "Select->Sequence Region..."
 //    3. In single selection mode enter any region
 //    4. Press "Go" and UGENE hangs up/crashes
@@ -2402,6 +2434,7 @@ GUI_TEST_CLASS_DEFINITION(test_1212){
 GUI_TEST_CLASS_DEFINITION(test_1212_1){
 //    1. Open any sequence. (human_t1.fa)
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Do "Select->Sequence Region..."
 //    3. In single selection mode enter any region
 //    4. Press "Go" and UGENE hangs up/crashes
@@ -2417,11 +2450,12 @@ GUI_TEST_CLASS_DEFINITION(test_1212_1){
 GUI_TEST_CLASS_DEFINITION(test_1219) {
 //    1. Open any sequence. (human_t1.fa)
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open Smith-Waterman search dialog
 //    Excepted state: default value of combobox "Save result as" is "Annotations"
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2473,9 +2507,10 @@ GUI_TEST_CLASS_DEFINITION(test_1219) {
 GUI_TEST_CLASS_DEFINITION(test_1220){
 //    1) Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Run Smith-waterman search using:
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 //    pattern: "ATCGAT"; note that pattern length is 6.
@@ -2493,8 +2528,7 @@ GUI_TEST_CLASS_DEFINITION(test_1220){
     };
 
     GTUtilsDialog::waitForDialog(os, new SmithWatermanDialogFiller(os, new Scenario));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: misc_feature annotations created with pattern subsequence length qualifiers set to 6
     QString val = GTUtilsAnnotationsTreeView::getQualifierValue(os, "pattern_match_len", "Misc. Feature");
@@ -2505,7 +2539,9 @@ GUI_TEST_CLASS_DEFINITION(test_1220){
 GUI_TEST_CLASS_DEFINITION(test_1229) {
     // 1. Open two sequences with same names in two documents.For instance, you can copy a file with a sequence to do that.
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1229", "1.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1229", "2.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. The sequences in different documents have identical names. Rename both sequence objects. Now the sequences have different name.
     const QModelIndex firstDoc = GTUtilsProjectTreeView::findIndex(os, "1.txt");
@@ -2535,47 +2571,6 @@ GUI_TEST_CLASS_DEFINITION(test_1229) {
     CHECK_SET_ERR(msaNames.contains("tub_1") && msaNames.contains("tub_2"), "Unexpected sequences names in MSA");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1232) {
-// 1. Open "human_T1.fa".
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
-// 2. Select {Actions->Statistics} from the main menu.
-// Expected state: Statistic view si shown.
-    QMenu* menu = GTMenu::showMainMenu(os, "mwmenu_actions");
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "Statistics");
-    GTGlobals::sleep();
-    QWebView *wv = qobject_cast<QWebView*>(GTWidget::findWidget(os, "DNAStatWebViewhuman_T1 (UCSC April 2002 chr7:115977709-117855134)"));
-    bool foundAtFirstWV = wv->findText("2223359500 I/mol (at 260 nm)");
-
-    GTKeyboardDriver::keyClick(os, 'w',GTKeyboardDriver::key["ctrl"]);
-    GTUtilsProjectTreeView::doubleClickItem(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
-    GTGlobals::sleep();
-
-    GTUtilsSequenceView::selectSequenceRegion(os, 100, 120);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "action_export_selected_sequence_region"));
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "test_1232.fa", GTGlobals::UseMouse));
-
-    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
-    GTGlobals::sleep(2000);
-
-    menu = GTMenu::showMainMenu(os, "mwmenu_actions");
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << "Statistics");
-
-    GTGlobals::sleep();
-    QWebView *wv2 = qobject_cast<QWebView*>(GTWidget::findWidget(os, "DNAStatWebViewregion [100 120]"));
-    bool foundAtSecondWV = wv2->findText("225500 I/mol (at 260 nm)");
-
-    CHECK_SET_ERR(foundAtSecondWV && foundAtFirstWV, "Expected molar coeffs wasn't found");
-
-// 3. Remember the "Molar ext. coef.". Close this statistics view.
-//
-// 4. Select and export some region of the sequence.
-// Expected state: new sequence viewer with part of the whole human_T1.fa.
-//
-// 5. Call statistics view for the exported part.
-// Expected state: "Molar ext. coef" should be different from the remembered value.
-
-}
-
 GUI_TEST_CLASS_DEFINITION(test_1234) {
 /* 1. Select a sequence region.
  * 2. Do {Export->Export selected sequence region...}
@@ -2583,6 +2578,7 @@ GUI_TEST_CLASS_DEFINITION(test_1234) {
  *   Expected state: no bad characters at the end of the frames. Sequences are translated correctly.
  */
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsSequenceView::selectSequenceRegion(os, 100, 120);
     //DLSAETL
     //ISRQKP
@@ -2606,9 +2602,11 @@ GUI_TEST_CLASS_DEFINITION(test_1234) {
     CHECK_SET_ERR(NULL != seq1, "Failed to find a sequence widget for seq1!");
     CHECK_SET_ERR(NULL != seq2, "Failed to find a sequence widget for seq2!");
 
-    CHECK_SET_ERR("DLSAETL" == QString(seq0->getSequenceObject()->getWholeSequenceData(os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("DLSAETL").arg(QString(seq0->getSequenceObject()->getWholeSequenceData(os))));
-    CHECK_SET_ERR("ISRQKP" == QString(seq1->getSequenceObject()->getWholeSequenceData(os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("ISRQKP").arg(QString(seq1->getSequenceObject()->getWholeSequenceData(os))));
-    CHECK_SET_ERR("SLGRNP" == QString(seq2->getSequenceObject()->getWholeSequenceData(os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("SLGRNP").arg(QString(seq2->getSequenceObject()->getWholeSequenceData(os))));
+    U2OpStatus2Log u2os;
+
+    CHECK_SET_ERR("DLSAETL" == QString(seq0->getSequenceObject()->getWholeSequenceData(u2os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("DLSAETL").arg(QString(seq0->getSequenceObject()->getWholeSequenceData(u2os))));
+    CHECK_SET_ERR("ISRQKP" == QString(seq1->getSequenceObject()->getWholeSequenceData(u2os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("ISRQKP").arg(QString(seq1->getSequenceObject()->getWholeSequenceData(u2os))));
+    CHECK_SET_ERR("SLGRNP" == QString(seq2->getSequenceObject()->getWholeSequenceData(u2os)), QString("Unexpected sequence. Expected %1, Actual %2").arg("SLGRNP").arg(QString(seq2->getSequenceObject()->getWholeSequenceData(u2os))));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1241) {
@@ -2616,6 +2614,7 @@ GUI_TEST_CLASS_DEFINITION(test_1241) {
 
     //1. Open file _common_data/scenarios/regression/1241/tt.fa.
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1241/tt.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select ma959 sequence.
     GTUtilsMsaEditor::clickSequenceName(os, "ma959");
@@ -2635,10 +2634,11 @@ GUI_TEST_CLASS_DEFINITION(test_1245){
 //    Expected state: In the "Save to file" field in the Export Document dialog path of the document "test" appears with "fa" extension
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class ExportDocumentCustomFiller : public Filler {
         public:
-            ExportDocumentCustomFiller(U2OpStatus &os)
+            ExportDocumentCustomFiller(HI::GUITestOpStatus &os)
                 : Filler(os, "ExportDocumentDialog") {}
             virtual void run() {
                 QWidget *dialog = QApplication::activeModalWidget();
@@ -2689,10 +2689,11 @@ GUI_TEST_CLASS_DEFINITION(test_1246){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "/test_1246.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class ExportDocumentCustomFiller : public Filler {
         public:
-            ExportDocumentCustomFiller(U2OpStatus &os)
+            ExportDocumentCustomFiller(HI::GUITestOpStatus &os)
                 : Filler(os, "ExportDocumentDialog") {}
             virtual void run() {
                 QWidget *dialog = QApplication::activeModalWidget();
@@ -2737,6 +2738,7 @@ GUI_TEST_CLASS_DEFINITION(test_1249){
     // Expected state: total number of enzymes is 4565(Enzymes with unknown sequence field are removed from list)
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
 //    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
 
@@ -2745,6 +2747,7 @@ GUI_TEST_CLASS_DEFINITION(test_1249){
 GUI_TEST_CLASS_DEFINITION(test_1252){
 //    1. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Find any pattern. A new annotation document is created
     GTUtilsOptionsPanel::runFindPatternWithHotKey("TTTTTAAAAA", os);
 
@@ -2785,9 +2788,11 @@ GUI_TEST_CLASS_DEFINITION(test_1252_1){
 //DIFFERENCE: DEL KEY IS USED TO DELETE ANNOTATION DOCUMENT
 //    1. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Find any pattern. A new annotation document is created
     GTUtilsOptionsPanel::runFindPatternWithHotKey("TTTTTAAAAA", os);
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
@@ -2861,6 +2866,7 @@ GUI_TEST_CLASS_DEFINITION(test_1252_real) {
 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"]);
     GTGlobals::sleep();
 //    2. Input any valid pattern
@@ -2886,6 +2892,7 @@ GUI_TEST_CLASS_DEFINITION(test_1257){
     // Expected: Search button is disabled
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep();
 
@@ -2905,6 +2912,7 @@ GUI_TEST_CLASS_DEFINITION(test_1259) {
 //    Expected state: UGENE doesn't crash and the symbol is removed
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep();
 
@@ -2924,6 +2932,7 @@ GUI_TEST_CLASS_DEFINITION(test_1259) {
 
 GUI_TEST_CLASS_DEFINITION(test_1260) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1260/", "51.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTLogTracer lt;
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_EXPORT<<"Save subalignment"));
@@ -2938,6 +2947,7 @@ GUI_TEST_CLASS_DEFINITION(test_1260) {
 GUI_TEST_CLASS_DEFINITION(test_1262) {
     //1. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Find any pattern. A new annotation document is created
     GTUtilsOptionsPanel::runFindPatternWithHotKey("AGGAAAAAATGCTAAGGGCAGCCAGAGAGAGGTCAGG", os);
     GTGlobals::sleep(1000);
@@ -2970,6 +2980,7 @@ GUI_TEST_CLASS_DEFINITION(test_1262) {
 GUI_TEST_CLASS_DEFINITION(test_1263){
 //    1. Open "human_T1"
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use tool button "Primers3"
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os));
     GTWidget::click(os, GTWidget::findWidget(os, "primer3_action_widget"));
@@ -3003,7 +3014,7 @@ GUI_TEST_CLASS_DEFINITION(test_1266) {
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -3026,7 +3037,7 @@ GUI_TEST_CLASS_DEFINITION(test_1274){
 //    1. Select "Tabbed documents" mode in the Application Settings.
     class TabbedDoc : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -3040,10 +3051,11 @@ GUI_TEST_CLASS_DEFINITION(test_1274){
 
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new TabbedDoc()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+
 //    2. Open a document
     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"]);
 //    Expected state: UGENE not crashes
@@ -3052,12 +3064,13 @@ GUI_TEST_CLASS_DEFINITION(test_1274){
 GUI_TEST_CLASS_DEFINITION(test_1273) {
     //1) Open "_common_data/genbank/JQ040024.1.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/JQ040024.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2) Switch the windows layout to the tabbed documents mode
     //(Settings -> Preferences -> General -> Windows Layout -> Tabbed documents -> OK)
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QList<QRadioButton*> buttons = GTRadioButton::getAllButtonsByText(os, "Tabbed documents", QApplication::activeModalWidget());
             foreach (QRadioButton *tabbedMode, buttons) {
                 GTRadioButton::click(os, tabbedMode);
@@ -3068,8 +3081,7 @@ GUI_TEST_CLASS_DEFINITION(test_1273) {
     };
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new Scenario()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
     //Expected: the name of the sequence view tab starts with "JQ040024.1", but not with "JQ040024".
     QTabBar *tabs = AppContext::getMainWindow()->getQMainWindow()->findChild<QTabBar*>("");
@@ -3080,6 +3092,7 @@ GUI_TEST_CLASS_DEFINITION(test_1273) {
 GUI_TEST_CLASS_DEFINITION(test_1285) {
     //1. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //3. Click {show more options}
     //4. Check comboboxes: use pattern name, load pattern from file
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
@@ -3121,11 +3134,12 @@ GUI_TEST_CLASS_DEFINITION(test_1289) {
 //    Tabs have red cross icons.
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     class TabbedDoc : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -3140,15 +3154,13 @@ GUI_TEST_CLASS_DEFINITION(test_1289) {
     GTLogTracer l;
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new TabbedDoc()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
-
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1295) {
     class CustomBuildTreeDialogFiller : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
@@ -3169,6 +3181,7 @@ GUI_TEST_CLASS_DEFINITION(test_1295) {
     GTLogTracer lt;
     // 1. Open file "data/samples/MSF/HMA.msf".
     GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Call context menu on MSA area.
     // 3. Choose { "Tree" -> "Build Tree" }.
@@ -3217,6 +3230,8 @@ GUI_TEST_CLASS_DEFINITION(test_1299) {
     QComboBox* box = qobject_cast<QComboBox*>(tw->findChild<QComboBox*>());
 
     CHECK_SET_ERR(box->itemText(3) != "Additional", "Additional item not found");
+
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1300_1) {
@@ -3225,6 +3240,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_1) {
 //    1. Open "murine.gb".
 //    Expected state: the sequence view opens.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(sequenceViewIsVisible, "Sequence view is unexpectedly not visible");
@@ -3232,6 +3248,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_1) {
 //    2. Open "COI.aln".
 //    Expected state: the MSA Editor opens, sequence view is opened, but is not shown.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool msaEditorIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "COI [m] COI");
     CHECK_SET_ERR(msaEditorIsVisible, "Msa editor is unexpectedly not visible");
@@ -3296,6 +3313,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    1. Open "murine.gb".
 //    Expected state: the sequence view opens.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(sequenceViewIsVisible, "Sequence view is unexpectedly not visible");
@@ -3310,6 +3328,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    3. Open "COI.aln".
 //    Expected state: the MSA Editor opens.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool msaEditorIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "COI [m] COI");
     CHECK_SET_ERR(msaEditorIsVisible, "Msa editor is unexpectedly not visible");
@@ -3388,9 +3407,10 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 
 GUI_TEST_CLASS_DEFINITION(test_1310) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -3414,14 +3434,14 @@ GUI_TEST_CLASS_DEFINITION(test_1315_1) {
     //Expected state: 5 primers are found
     //Bug state: no primers are found
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Primer3DialogFiller::Primer3Settings settings;
     settings.pickLeft = false;
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os, settings));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Primer3...");
 
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsAnnotationsTreeView::findItem(os, "top_primers  (0, 5)");
@@ -3434,14 +3454,14 @@ GUI_TEST_CLASS_DEFINITION(test_1315_2) {
     //Expected state: 5 primers are found
     //Bug state: no primers are found
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Primer3DialogFiller::Primer3Settings settings;
     settings.pickRight = false;
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os, settings));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Primer3...");
 
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsAnnotationsTreeView::findItem(os, "top_primers  (0, 5)");
@@ -3513,6 +3533,7 @@ GUI_TEST_CLASS_DEFINITION(test_1321_1) {
 //    This scenario is about crash found during fixing current bug
 //    1. Open file _common_data/scenarios/_regression/2187/seq.fa
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2187", "seq.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open 'find repeats' dialog, and set next parameters
 //        {Minimim repeat length} 20bp
@@ -3541,13 +3562,14 @@ GUI_TEST_CLASS_DEFINITION(test_1321_2) {
 //    1. Open "\samples\FASTA\human_T1.fa"
 //    Expected state: sequence view window appeared
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Press 'Find tandems' tool button
 //    Expected state: 'Find tandems' dialog appeared
 //    3. Go to the 'Advanced' tab of the dialog
 //    Expected state: 'Advanced' tab displayed, there is 'Advanced parameters' groupbox without 'Repeats identity' parameter
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3581,6 +3603,7 @@ GUI_TEST_CLASS_DEFINITION(test_1323) {
     // Expected state: document with file added to project
 
     GTFileDialog::openFile(os, testDir + "_common_data/regression/1323/", "sample.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     }
 GUI_TEST_CLASS_DEFINITION(test_1324) {
     // 1. Open WD
@@ -3594,7 +3617,7 @@ GUI_TEST_CLASS_DEFINITION(test_1324) {
     GTMouseDriver::click(os);
     QString val;
 
-#ifdef Q_OS_LINUX
+#if defined(Q_OS_LINUX) || defined (Q_OS_WIN)
     val = "0.00010";
 #else
     val = "0,00010";
@@ -3614,6 +3637,7 @@ GUI_TEST_CLASS_DEFINITION(test_1325) {
 
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GFF") );
     GTFileDialog::openFile(os, testDir + "_common_data/regression/1325/", "long_gff.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     CHECK_SET_ERR(l1.hasError(), "There is no error in the log");
 
@@ -3625,7 +3649,7 @@ GUI_TEST_CLASS_DEFINITION(test_1325) {
 GUI_TEST_CLASS_DEFINITION(test_1326) {
 class CallVariantsWizardFiller : public Filler {
 public:
-        CallVariantsWizardFiller(U2OpStatus &os) :
+        CallVariantsWizardFiller(HI::GUITestOpStatus &os) :
         Filler(os, "Call Variants Wizard") {}
 #define GT_CLASS_NAME "GTUtilsDialog::CallVariantsWizardFiller"
 #define GT_METHOD_NAME "run"
@@ -3669,7 +3693,7 @@ GUI_TEST_CLASS_DEFINITION( test_1337 ) {
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 
     //4) Close the project and repeat these steps.
     //Current state: the warning does not appear.
@@ -3698,7 +3722,7 @@ GUI_TEST_CLASS_DEFINITION(test_1338) {
 
 GUI_TEST_CLASS_DEFINITION(test_1342) {
     class CustomPopupChecker : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QMenu *activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget());
             CHECK_SET_ERR(NULL != activePopupMenu, "Active popup menu is NULL");
 
@@ -3735,6 +3759,7 @@ GUI_TEST_CLASS_DEFINITION(test_1347) {
 //    Expected state: selection is copied into clipboard
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(3, 0));
@@ -3766,10 +3791,11 @@ GUI_TEST_CLASS_DEFINITION(test_1348) {
     settings.input = input;
     settings.executionString = "./ugenem $in1";
 
+    GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new CreateElementWithCommandLineToolFiller(os, settings));
     QAbstractButton *createElement = GTAction::button(os, "createElementWithCommandLineTool");
     GTWidget::click(os, createElement);
-    GTGlobals::sleep();
+    GTGlobals::sleep(5000);
 
     GTUtilsWorkflowDesigner::setCurrentTab(os, GTUtilsWorkflowDesigner::algoriths);
     QTreeWidgetItem* treeItem = GTUtilsWorkflowDesigner::findTreeItem(os, settings.elementName, GTUtilsWorkflowDesigner::algoriths);
@@ -3779,11 +3805,18 @@ GUI_TEST_CLASS_DEFINITION(test_1348) {
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove"));
     GTTreeWidget::click(os, treeItem);
     GTMouseDriver::click(os, Qt::RightButton);
-    GTGlobals::sleep();
 
+    GTGlobals::sleep(4000);
+#ifdef Q_OS_UNIX
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Add element"
+        << "Custom Elements with CMD Tools" << settings.elementName, PopupChecker::NotExists));
+#endif // Q_OS_UNIX
+
+#ifdef Q_OS_WIN
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Add element"
-                                                      << "Custom Elements with CMD Tools",
-                                                      PopupChecker::NotExists));
+        << "Custom Elements with CMD Tools", PopupChecker::NotExists));
+#endif // Q_OS_UNIX
+
     GTWidget::click(os, GTWidget::findWidget(os,"sceneView"), Qt::RightButton);
 }
 
@@ -3828,6 +3861,7 @@ GUI_TEST_CLASS_DEFINITION(test_1360){
 GUI_TEST_CLASS_DEFINITION(test_1362) {
     //1) Open "_common_data/edit_alignment/COI_sub_same_with_gaps.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/edit_alignment/COI_sub_same_with_gaps.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2) MSA context menu: { Statistics -> Generate distance matrix }.
     //3) Fill in Generate distance matrix dialog:
@@ -3873,7 +3907,7 @@ GUI_TEST_CLASS_DEFINITION(test_1364) {
 //    6. Click "Add file" button again.
     class customFileDialog : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* d = QApplication::activeModalWidget();
             CHECK_SET_ERR(d, "activeModalWidget is NULL");
             QFileDialog* dialog = qobject_cast<QFileDialog*>(d);
@@ -3896,17 +3930,15 @@ GUI_TEST_CLASS_DEFINITION(test_1365){
     // Expected state: "Save all" button is still enabled
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),
-    QStringList() << ACTION_PROJECTSUPPORT__SAVE_PROJECT, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save all", GTGlobals::UseKey);
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),
-    QStringList() << ACTION_PROJECTSUPPORT__SAVE_PROJECT, GTGlobals::UseKey);
-
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save all", GTGlobals::UseKey);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1368){
@@ -3916,6 +3948,7 @@ GUI_TEST_CLASS_DEFINITION(test_1368){
     QString ugenedbFileName = testDir + "_common_data/scenarios/sandbox/test_1368.ugenedb";
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile(os, testDir + "_common_data/sam", "crash.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1371) {
@@ -3924,6 +3957,7 @@ GUI_TEST_CLASS_DEFINITION(test_1371) {
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::checkItem(os, "Contig1");
     GTUtilsProjectTreeView::checkItem(os, "Contig2");
@@ -3941,6 +3975,7 @@ GUI_TEST_CLASS_DEFINITION(test_1371) {
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_1371/test_1371.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::checkItem(os, "Contig1");
     GTUtilsProjectTreeView::checkItem(os, "ref1");
@@ -3955,6 +3990,7 @@ GUI_TEST_CLASS_DEFINITION(test_1376){
     //1. Open data/position_weight_matrix/JASPAR/fungi/MA0276.1.pfm.
     GTFileDialog::openFile(os, dataDir + "position_weight_matrix/JASPAR/fungi/MA0276.1.pfm");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected: PFM matrix view with logo and weight table is opened.
     //QWidget *mdi = GTUtilsMdi::findWindow(os, "Matrix Viewer");
@@ -3965,6 +4001,7 @@ GUI_TEST_CLASS_DEFINITION(test_1376){
 GUI_TEST_CLASS_DEFINITION(test_1386){
 //    1) Open a document (e.g. COI.aln)
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Modify it (e.g. insert a gap)
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(5,5));
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
@@ -3987,6 +4024,7 @@ GUI_TEST_CLASS_DEFINITION(test_1387) {
     // Expected state: UGENE not crashed
 
     GTFileDialog::openFile(os, testDir + "_common_data/regression/1387/", "col_of_gaps.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps"));
 
@@ -4009,6 +4047,7 @@ GUI_TEST_CLASS_DEFINITION(test_1390) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "chrM.sorted.bam" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ASS_SETTINGS"));
     QLabel* hint = qobject_cast<QLabel*>(GTWidget::findWidget(os, "HINT_HIGHLIGHTNING"));
@@ -4037,7 +4076,7 @@ QString getFileContent(const QString &path) {
 
 GUI_TEST_CLASS_DEFINITION(test_1393) {
     class ExportSeqsAsMsaScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -4054,6 +4093,7 @@ GUI_TEST_CLASS_DEFINITION(test_1393) {
     // 1. Open file "_common_data/fasta/trim_fa.fa"
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "trim_fa.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Choose{ Export->Export sequences as alignment } in context menu of project view
     // Expected state : "Export sequences as alignment" dialog appears
@@ -4078,13 +4118,14 @@ GUI_TEST_CLASS_DEFINITION(test_1396){
  * Expected state: empty alignment and UGENE not crashes
 */
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1396", "empty_rows.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsMsaEditor::getSequencesCount(os) == 0, "Wrong rows number");
 }
 
 
 GUI_TEST_CLASS_DEFINITION(test_1404) {
     class ExportMsaToSeqScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -4114,6 +4155,7 @@ GUI_TEST_CLASS_DEFINITION(test_1404) {
     // 1. Open "data/samples/CLUSTALW/COI.aln"
     // Expected state : COI.aln is opened
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select "Export > Save sequence" in the context menu
     // Expected state : Opened "Export selected sequence from alignment" dialog
@@ -4129,6 +4171,7 @@ GUI_TEST_CLASS_DEFINITION(test_1405) {
     // Expected state: Safe_point was not triggered, i.e. no error messages in log
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps"));
 
     GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Number, 1));
@@ -4138,10 +4181,11 @@ GUI_TEST_CLASS_DEFINITION(test_1405) {
 GUI_TEST_CLASS_DEFINITION(test_1408){
 //    1) Open "data/samples/FASTA/human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Right click on "human_T1.fa" in the project tab
 
     class innerScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -4151,7 +4195,7 @@ GUI_TEST_CLASS_DEFINITION(test_1408){
     };
 
     class outerScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -4188,6 +4232,7 @@ GUI_TEST_CLASS_DEFINITION(test_1408){
 GUI_TEST_CLASS_DEFINITION(test_1409){
 //    1. Open "_common_data/genbank/murine_sarcoma.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/murine_sarcoma.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: sequence viewer had opened.
 
 //    2. Click on some annotation in the sequence view (not in the annotation tree).
@@ -4207,6 +4252,7 @@ GUI_TEST_CLASS_DEFINITION(test_1419) {
     GTLogTracer lt;
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, lt);
 }
 
@@ -4231,7 +4277,7 @@ GUI_TEST_CLASS_DEFINITION(test_1420) {
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_1402/test_1402.ugenedb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
@@ -4258,6 +4304,7 @@ GUI_TEST_CLASS_DEFINITION(test_1424) {
     //Expected state: UGENE not crashes
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
@@ -4296,11 +4343,11 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
     //Expected state: there is no "add" button in property editor.
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTUtilsWorkflowDesigner::addAlgorithm(os, "Read HMM profile");
+    GTUtilsWorkflowDesigner::addAlgorithm(os, "Read HMM2 profile");
 
     CHECK_SET_ERR(GTWidget::findWidget(os, "addButton", NULL, GTGlobals::FindOptions(false)) == NULL, "addButton is shown");
 
-    GTUtilsWorkflowDesigner::click(os, "Read HMM Profile");
+    GTUtilsWorkflowDesigner::click(os, "Read HMM2 Profile");
     GTUtilsWorkflowDesigner::setParameter(os, "Input file(s)", dataDir + "samples/FASTA/HMM/aligment15900.hmm", GTUtilsWorkflowDesigner::textValue);
 #ifdef Q_OS_MAC
     GTGlobals::sleep();
@@ -4312,20 +4359,22 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
     GTUtilsMdi::click(os, GTGlobals::Close);
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTUtilsWorkflowDesigner::addAlgorithm(os, "Read HMM Profile");
-    GTUtilsWorkflowDesigner::click(os, "Read HMM Profile");
+    GTUtilsWorkflowDesigner::addAlgorithm(os, "Read HMM2 Profile");
+    GTUtilsWorkflowDesigner::click(os, "Read HMM2 Profile");
 
     CHECK_SET_ERR(GTWidget::findWidget(os, "addButton", NULL, GTGlobals::FindOptions(false)) == NULL, "addButton is shown");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1427) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1427/", "text");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "text");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1428) {
     //1. Open human_T1.fa.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the document and the sequence object itself in the Project View.
     QModelIndex docIdx = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa", QModelIndex());
@@ -4365,7 +4414,7 @@ GUI_TEST_CLASS_DEFINITION(test_1429){
     GTLogTracer lt;
     class CheckBowtie2Filler : public Filler {
     public:
-        CheckBowtie2Filler(U2OpStatus &os)
+        CheckBowtie2Filler(HI::GUITestOpStatus &os)
             : Filler (os, "BuildIndexFromRefDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -4394,7 +4443,7 @@ GUI_TEST_CLASS_DEFINITION(test_1429){
 
 
     GTUtilsDialog::waitForDialog(os, new CheckBowtie2Filler(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
     CHECK_SET_ERR(lt.hasError() == false, "Errors in log!");
 }
 
@@ -4414,7 +4463,7 @@ GUI_TEST_CLASS_DEFINITION(test_1432) {
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -4445,6 +4494,7 @@ GUI_TEST_CLASS_DEFINITION(test_1432) {
 GUI_TEST_CLASS_DEFINITION(test_1434_1) {
     //1. Open data / samples / FASTA / human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open find pattern option panel
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4480,6 +4530,7 @@ GUI_TEST_CLASS_DEFINITION(test_1434_1) {
 GUI_TEST_CLASS_DEFINITION(test_1434_2) {
     //1. Open data / samples / FASTA / human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open find pattern option panel
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4521,6 +4572,7 @@ GUI_TEST_CLASS_DEFINITION(test_1434_2) {
 GUI_TEST_CLASS_DEFINITION(test_1446){
 //    1) Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Use context menu for COI.aln in project tree view {Export/Import->Export nucleic alignment to amino}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,  QStringList() << "action_project__export_import_menu_action"
                                                       << "action_project__export_to_amino_action"));
@@ -4564,6 +4616,7 @@ GUI_TEST_CLASS_DEFINITION(test_1455) {
     //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");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(!logTracer.hasError(), QString("There is error in the log: %1").arg(logTracer.getError()));
 }
 
@@ -4571,6 +4624,7 @@ GUI_TEST_CLASS_DEFINITION(test_1457){
 //    1. Open "_common_data/ugenedb/example-alignment.ugenedb".
 //    Expected state: assymbly viewer had opened.
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb/example-alignment.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Find navigation tool on the toolbar.
 //    Expected state: navigation tool is disabled.
     QToolBar* mwtoolbar_activemdi = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
@@ -4601,6 +4655,7 @@ GUI_TEST_CLASS_DEFINITION(test_1458){
     //1. Open document "../Samples/ACE/BL060C3.ace"
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Right click on the document in project tab
     //Excepted state: popup menu has been appeared
@@ -4674,6 +4729,7 @@ GUI_TEST_CLASS_DEFINITION(test_1439) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os,
                                                                                  SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1439", "NC_000964_multi_region.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/1439", "NC_000964.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align sequences to profile with MUSCLE", GTGlobals::UseMouse));
@@ -4694,6 +4750,7 @@ GUI_TEST_CLASS_DEFINITION(test_1442_1) {
 //    In Project View not added any items.
 
     GTFileDialog::openFile(os, dataDir + "position_weight_matrix/JASPAR/fungi", "MA0265.1.pfm");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     const int projectViewItemsCount = GTUtilsProjectTreeView::getTreeView(os)->model()->rowCount();
     CHECK_SET_ERR(0 == projectViewItemsCount, "Unexpected project view items count");
@@ -4709,6 +4766,7 @@ GUI_TEST_CLASS_DEFINITION(test_1442_2) {
     // Expected state : Opened only window with position weight matrix.
     // In Project View not added any items.
     GTFileDialog::openFile(os, dataDir + "/position_weight_matrix/UniPROBE/Cell08/", "Alx3_3418.2.pwm");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     const int projectViewItemsCount = GTUtilsProjectTreeView::getTreeView(os)->model()->rowCount();
     CHECK_SET_ERR(0 == projectViewItemsCount, "Unexpected project view items count");
@@ -4722,6 +4780,7 @@ GUI_TEST_CLASS_DEFINITION(test_1442_2) {
 GUI_TEST_CLASS_DEFINITION(test_1442_3){
 //    1. Open file "data/position_weight_matrix/UniPROBE/NBT06/Cbf1.pwm"
     GTFileDialog::openFile(os, dataDir + "position_weight_matrix/UniPROBE/NBT06/Cbf1.pwm");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: Opened only window with position weight matrix.
     GTWidget::findWidget(os, "MatrixAndLogoWidget");
 //    In Project View not added any items.
@@ -4732,10 +4791,11 @@ GUI_TEST_CLASS_DEFINITION(test_1442_3){
 GUI_TEST_CLASS_DEFINITION(test_1443){
 //    1. Open the file human_T1.fa.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use popup menu {Cloning->Construct molecule}
 
     class InnerScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -4748,7 +4808,7 @@ GUI_TEST_CLASS_DEFINITION(test_1443){
     };
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -4789,6 +4849,7 @@ GUI_TEST_CLASS_DEFINITION(test_1445) {
     Expected state: UGENE doesn't crash
 */
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 17), QPoint(-4, 17));
     int numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
@@ -4802,18 +4863,20 @@ GUI_TEST_CLASS_DEFINITION(test_1461_1) {
 //    1. Open "_common_data/fasta/fa1.fa".
 //    Expected state: sequence viewer had opened.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click on toolbar "Find pattern [Smith-Waterman]".
 //    Expected state: "Smith-Waterman Search" dialog is opened.
 //    3. Check "Scoring matrix" field
 //    Expected state: "Scoring matrix" field not contain "rna" value.
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
+            GTGlobals::sleep(500);
             QComboBox *comboMatrix = GTWidget::findExactWidget<QComboBox *>(os, "comboMatrix", QApplication::activeModalWidget());
-            CHECK_SET_ERR(NULL != comboMatrix, "Matrix combobox is NULL");
-            U2OpStatusImpl innerOs;
-            GTComboBox::setIndexWithText(innerOs, comboMatrix, "rna", false);
-            CHECK_SET_ERR(innerOs.hasError(), "'rna' matrix unexpectedly presents in the matrix list");
+            for(int i=0; i<comboMatrix->count(); i++){
+                CHECK_SET_ERR(!comboMatrix->itemText(i).contains("rna", Qt::CaseInsensitive),
+                              QString("'rna' item unexpectidly found at index: %1, text is %2").arg(i).arg(comboMatrix->itemText(i)));
+            }
             GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Cancel);
         }
     };
@@ -4827,13 +4890,14 @@ GUI_TEST_CLASS_DEFINITION(test_1461_2) {
 //    1. Open "_common_data/fasta/RNA_1_seq.fa".
 //    Expected state: sequence viewer had opened.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/RNA_1_seq.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click on toolbar "Find pattern [Smith-Waterman]".
 //    Expected state: "Smith-Waterman Search" dialog is opened.
 //    3. Check "Scoring matrix" field
 //    Expected state: "Scoring matrix" field contain only "rna" value.
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QComboBox *comboMatrix = GTWidget::findExactWidget<QComboBox *>(os, "comboMatrix", QApplication::activeModalWidget());
             CHECK_SET_ERR(NULL != comboMatrix, "Matrix combobox is NULL");
             GTComboBox::setIndexWithText(os, comboMatrix, "rna");
@@ -4850,6 +4914,7 @@ GUI_TEST_CLASS_DEFINITION(test_1461_2) {
 GUI_TEST_CLASS_DEFINITION(test_1463) {
     //1. Open "human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click the "Find restriction sites" button on the toolbar.
     //Expected state: the "Find restriction sites" dialog had appeared.
@@ -4877,11 +4942,13 @@ GUI_TEST_CLASS_DEFINITION(test_1463) {
 GUI_TEST_CLASS_DEFINITION(test_1475) {
     GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/raw_sequence/", "NC_000117.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1483){
 //    1. Open "data/COI.aln" in MSA view
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Press tool button "Enable collapsing"
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 //    3. Start selection in sequences name list and then go for the lower boundary of the list
@@ -4895,7 +4962,7 @@ GUI_TEST_CLASS_DEFINITION(test_1491) {
     //3. Select more than three sequences (for instance all the sequences from samples/Genbank)
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             //4. Select "Join sequences..." mode
             GTRadioButton::click(os, dynamic_cast<QRadioButton*>(GTWidget::findWidget(os, "join2alignmentMode", QApplication::activeModalWidget())));
@@ -4970,7 +5037,7 @@ GUI_TEST_CLASS_DEFINITION(test_1497) {
 GUI_TEST_CLASS_DEFINITION(test_1499) {
     class CustomBuildTreeDialogFiller : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
@@ -4991,6 +5058,7 @@ GUI_TEST_CLASS_DEFINITION(test_1499) {
     GTLogTracer lt;
     // 1) Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2) Click the "Build Tree" button on the toolbar.
     // 3) Choose MrBayes tree building method.
@@ -5015,7 +5083,7 @@ GUI_TEST_CLASS_DEFINITION(test_1499) {
 
     const QStringList msaSequences1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(msaSequences1 != msaSequences0, "MSA is not changed");
-
+GTGlobals::sleep(5000);
     QWidget* qt_toolbar_ext_button = GTWidget::findWidget(os, "qt_toolbar_ext_button",
                                                           GTWidget::findWidget(os, "COI [m] COI"), GTGlobals::FindOptions(false));
     if(qt_toolbar_ext_button != NULL && qt_toolbar_ext_button->isVisible()){
@@ -5034,6 +5102,7 @@ GUI_TEST_CLASS_DEFINITION(test_1499) {
 GUI_TEST_CLASS_DEFINITION(test_1506){
 //    1) Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Click the "Build Tree" button on the toolbar.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/1548.nwk", 0, 0, true));
     QAbstractButton *tree= GTAction::button(os,"Build Tree");
@@ -5059,6 +5128,7 @@ GUI_TEST_CLASS_DEFINITION(test_1508) {
     //1. Open COI2.fa as an alignment
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir+"_common_data/fasta/", "COI2.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. {MSA Editor context menu} -> Align -> Align with MUSCLE
     //3. Choose the mode "Refine only"
@@ -5128,6 +5198,7 @@ GUI_TEST_CLASS_DEFINITION(test_1511) {
  * Expected state: selection is removed
 */
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2,2), QPoint(15,6));
     int numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
@@ -5149,6 +5220,7 @@ GUI_TEST_CLASS_DEFINITION(test_1511) {
 GUI_TEST_CLASS_DEFINITION(test_1514){
 //    1. Open "COI.aln".
     GTFileDialog::openFile(os,dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: the MSA Editor opens.
 
 //    2. Build a new tree or append the existing tree to this alignment.
@@ -5168,13 +5240,15 @@ GUI_TEST_CLASS_DEFINITION(test_1514){
 //    Expected state: the tree doesn't change its size, alignmnet height doesn't change, alignmnet width decreases.
     int i = 0;
     bool equalStepFound = false;
-    QPixmap pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+    GTWidget::click(os, resetZoom);
+    GTGlobals::sleep(1000);
+    QPixmap pixmap = GTWidget::getPixmap(os, treeView);
     QImage initImg = pixmap.toImage();
     while(zoomOut->isEnabled()){
-        QPixmap pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+        QPixmap pixmap = GTWidget::getPixmap(os, treeView);
         QImage initImg = pixmap.toImage();
         GTWidget::click(os, zoomOut);
-        pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+        pixmap = GTWidget::getPixmap(os, treeView);
         QImage finalImg = pixmap.toImage();
         uiLog.trace(QString("Easy to find. are images equal: %1 at step %2").arg(initImg==finalImg).arg(i));
         if(i==0){
@@ -5188,19 +5262,21 @@ GUI_TEST_CLASS_DEFINITION(test_1514){
 //    5. Click the "Reset zoom" button on the toolbar.
     GTWidget::click(os, resetZoom);
     GTGlobals::sleep(1000);
-    pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+    pixmap = GTWidget::getPixmap(os, treeView);
     QImage finalImg = pixmap.toImage();
 //    Expected state: sizes of the tree and alignment reset.
     CHECK_SET_ERR(initImg==finalImg, "reset zoom action workes wrong")
 //    6. Click the "Zoom in" button in the toolbar until alignment and tree sizes stop change.
     while(zoomIn->isEnabled()){
-        QPixmap pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+        QPixmap pixmap = GTWidget::getPixmap(os, treeView);
         QImage initImg = pixmap.toImage();
         GTWidget::click(os, zoomIn);
-        pixmap = QPixmap::grabWidget(treeView, treeView->rect());
+        pixmap = GTWidget::getPixmap(os, treeView);
         QImage finalImg = pixmap.toImage();
         uiLog.trace(QString("Easy to find. are images equal: %1 at step %2").arg(initImg==finalImg).arg(i));
-        CHECK_SET_ERR(!(initImg==finalImg), "images are unexpectidly equal at first step")
+        if (i != 12) {
+            CHECK_SET_ERR(!(initImg == finalImg), "images are unexpectidly equal at first step")
+        }
         i++;
     }
 //    Expected state: the tree and alignment are zoomed in, the "zoom in" button on the toolbar is inactive.
@@ -5209,6 +5285,7 @@ GUI_TEST_CLASS_DEFINITION(test_1514){
 GUI_TEST_CLASS_DEFINITION(test_1515){
 //    Open COI.aln
     GTFileDialog::openFile(os,dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press {build tree} button. Call tree file COI.nwk
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
     QAbstractButton *tree= GTAction::button(os,"Build Tree");
@@ -5225,6 +5302,7 @@ GUI_TEST_CLASS_DEFINITION(test_1515){
 GUI_TEST_CLASS_DEFINITION(test_1527) {
     //1. Open COI2.aln as an alignment
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. {MSA Editor context menu} -> Align -> Align profile to profile with MUSCLE
@@ -5232,12 +5310,13 @@ GUI_TEST_CLASS_DEFINITION(test_1527) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/regression/1527/", "test.aln"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
-
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1527_1) {
     //1. Open COI2.aln as an alignment
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. {MSA Editor context menu} -> Align -> Align sequences to profile with MUSCLE
@@ -5245,24 +5324,27 @@ GUI_TEST_CLASS_DEFINITION(test_1527_1) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align sequences to profile with MUSCLE", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/regression/1527/", "test.aln"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1528){
 //    1. Open "Assembly\chrM.sorted.bam" in UGENE
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Make the "chrM.sorted.bam.ugenedb" read-only
     PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "chrM.sorted.bam.ugenedb");
 //    3. Open "chrM.fa" in UGENE
 
 //    4. Drag and drop "chrM.fa" sequence object to the assembly
-    QModelIndex parentIndex = GTUtilsProjectTreeView::findIndex(os, "chrM.fa");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "This action requires changing file:"));
-    GTUtilsAssemblyBrowser::addRefFromProject(os, "chrM", parentIndex);
-    GTGlobals::sleep(1000);
+    GTUtilsProjectTreeView::click(os, "chrM", "chrM.fa");
+    p.setReadOnlyFlag(os, sandBoxDir + "chrM.sorted.bam.ugenedb");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
+
 //    Expected state: This action requires changing file:
 //    Warning with following text has been appeared "This action requires changing file ..."
 }
@@ -5273,6 +5355,7 @@ GUI_TEST_CLASS_DEFINITION(test_1529) {
     sourceFile.copy(sandBoxDir + "COI.aln");
 
     GTFileDialog::openFile(os, sandBoxDir, "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Use context menu{ Export->Amino translation... }.
     // Expected state : "Export Amino Translation" dialog has appeared.
@@ -5303,6 +5386,7 @@ GUI_TEST_CLASS_DEFINITION(test_1531) {
         //7. Activate the "Statistics" options panel.
         //Expected: the hint about reference abcense is shown.
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint(0, 17), QPoint(0, 17));
 
@@ -5325,6 +5409,7 @@ GUI_TEST_CLASS_DEFINITION(test_1533){
 //    1. Open an alignment in ClustalW format (e.g. "test.aln")
     GTFile::copy(os, dataDir+"samples/CLUSTALW/COI.aln", testDir + "_common_data/scenarios/sandbox/COI.aln");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Outside UGENE create a FASTA file with the same name as the alignment file (e.g. "test.aln", even if it is FASTA)
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::YesAll));
 //    3. Copy the second file to replace the first one outside UGENE
@@ -5340,7 +5425,7 @@ GUI_TEST_CLASS_DEFINITION(test_1533){
 
 GUI_TEST_CLASS_DEFINITION(test_1537){
 //    1. Open "_common_data/clustal/10000_sequences.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta/PF07724_full_family.fa");
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta/PF07724_full_family.fa", GTFileDialog::Open, GTGlobals::UseMouse);
 //    2. Cancel the loading task.
     GTUtilsTaskTreeView::cancelTask(os, "Loading documents");
 //    Expected: UGENE does not crash.
@@ -5349,6 +5434,7 @@ GUI_TEST_CLASS_DEFINITION(test_1537){
 GUI_TEST_CLASS_DEFINITION(test_1548) {
     // 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/1548.nwk", 0, 0, true));
@@ -5366,6 +5452,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 //    (Reproduced on MAC OS X)
 //    1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select any sequence.
     GTUtilsMsaEditor::clickSequenceName(os, "Phaneroptera_falcata");
@@ -5376,7 +5463,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 //    Expected state: there is no rename sequence dialog appeared.
 //    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os));
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() - QPoint(5, 0));
             GTMouseDriver::click(os);
             QWidget *contextMenu = QApplication::activePopupWidget();
@@ -5396,6 +5483,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 GUI_TEST_CLASS_DEFINITION(test_1554) {
 //    1. Open {data/samples/CLUSTALW/COI.aln}.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click a "Build Tree" button on the toolbar.
 //    Expected state: a "Build Philogenetic Tree" dialog appears.
@@ -5423,16 +5511,21 @@ GUI_TEST_CLASS_DEFINITION(test_1554) {
 GUI_TEST_CLASS_DEFINITION( test_1560 ){
 //    1. Open "test/_common_data/regression/1560/toy_ref.fa" in UGENE
     GTFileDialog::openFile( os, testDir + "_common_data/regression/1560/toy_ref.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Open "test/_common_data/regression/1560/toy1.bam" (convert to ugenedb)
     QString ugenedbFileName = testDir + "_common_data/scenarios/sandbox/test_1560.ugenedb";
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/regression/1560/toy1.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    3. Add "toy_ref.fa" as a reference sequence to "toy1.bam"
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTUtilsAssemblyBrowser::addRefFromProject(os, "ref2");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    Current state: UGENE crashes
-    GTGlobals::sleep();
+    GTUtilsAssemblyBrowser::hasReference(os);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_1567 ){
@@ -5443,7 +5536,7 @@ GUI_TEST_CLASS_DEFINITION( test_1567 ){
 
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
@@ -5493,6 +5586,7 @@ GUI_TEST_CLASS_DEFINITION( test_1568 ) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_1568.nwk", 0, 0, true));
     QAbstractButton *tree = GTAction::button(os,"Build Tree");
@@ -5514,6 +5608,7 @@ GUI_TEST_CLASS_DEFINITION( test_1568 ) {
 GUI_TEST_CLASS_DEFINITION(test_1573) {
     //1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select some sequences in the NameList area.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 2), QPoint(2, 6));
@@ -5528,6 +5623,7 @@ GUI_TEST_CLASS_DEFINITION(test_1573) {
 GUI_TEST_CLASS_DEFINITION(test_1574){
 //    1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn on the collapsing mode with the "Switch on/off collapsing" button on the toolbar.
 //    Expected state: there are two collapsed groups.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -5553,6 +5649,7 @@ GUI_TEST_CLASS_DEFINITION(test_1574){
 GUI_TEST_CLASS_DEFINITION(test_1575) {
 //    1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click the "Enable collapsing" button on the toolbar.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -5589,6 +5686,7 @@ GUI_TEST_CLASS_DEFINITION(test_1576) {
 
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/_regression/1576", "test.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "no error in log");
@@ -5607,6 +5705,7 @@ GUI_TEST_CLASS_DEFINITION(test_1576_1) {
 
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/_regression/1576", "test2.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "no error in log");
@@ -5638,6 +5737,7 @@ GUI_TEST_CLASS_DEFINITION(test_1584) {
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/pBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsAnnotationsTreeView::createAnnotation(os, "group", "annotation", "1..3", false);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
@@ -5658,6 +5758,7 @@ GUI_TEST_CLASS_DEFINITION(test_1584) {
 GUI_TEST_CLASS_DEFINITION(test_1585) {
     // 1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 2. Enable collapsing mode.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
@@ -5704,6 +5805,7 @@ GUI_TEST_CLASS_DEFINITION(test_1586) {
 */
 
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/msa", "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     //Save the initial content
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
@@ -5712,15 +5814,13 @@ GUI_TEST_CLASS_DEFINITION(test_1586) {
     const QString initialContent = GTClipboard::text( 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);
-    GTGlobals::sleep(5000);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align" << "Align with MUSCLE..."));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QAbstractButton *undo = GTAction::button( os, "msa_action_undo" );
-    CHECK_SET_ERR(undo != NULL, "MSA undo action not found");
-    GTWidget::click( os, undo );
+    GTUtilsMsaEditor::undo(os);
+    GTThread::waitForMainThread(os);
 
     //Deselect alignment
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15, 15));
@@ -5733,7 +5833,6 @@ GUI_TEST_CLASS_DEFINITION(test_1586) {
     const QString undoneContent = GTClipboard::text( os );
     CHECK_SET_ERR( undoneContent == initialContent,
         "Undo works wrong. Found text is: " + undoneContent );
-
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1587) {
@@ -5877,6 +5976,7 @@ GUI_TEST_CLASS_DEFINITION( test_1597 ) {
     // Expected result: the new table is created and found annotations are written to it.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep(500);
     GTKeyboardDriver::keySequence(os, "ACAATGTATGCCTCTTGGTTTCTTCTATC");
@@ -5895,6 +5995,7 @@ GUI_TEST_CLASS_DEFINITION( test_1597 ) {
 GUI_TEST_CLASS_DEFINITION( test_1600_1 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -5919,6 +6020,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_1 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_2 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -5943,6 +6045,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_2 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_3 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -5968,6 +6071,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_3 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_4 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -5988,6 +6092,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_4 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_5 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -6011,6 +6116,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_5 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_6 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -6039,6 +6145,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_6 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_7 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -6066,6 +6173,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_7 ){
 GUI_TEST_CLASS_DEFINITION( test_1600_8 ){
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
@@ -6091,6 +6199,7 @@ GUI_TEST_CLASS_DEFINITION( test_1603 ) {
     // Expected state: MSA Editor opens with the Tree View inside
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/1603.nwk", 0, 0, true));
     QAbstractButton *tree = GTAction::button(os,"Build Tree");
     GTWidget::click(os, tree);
@@ -6118,8 +6227,7 @@ GUI_TEST_CLASS_DEFINITION( test_1606 ) {
 
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1ezg", 3, true, false,
                                                                         sandBoxDir));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),
-                                QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Molecular Surface" << "SES"));
@@ -6162,10 +6270,11 @@ GUI_TEST_CLASS_DEFINITION(test_1609) {
     // 1) Open any file in UGENE
     QFile::copy(dataDir + "samples/FASTA/human_T1.fa", sandBoxDir + "human_T1.fa");
     GTFileDialog::openFile(os, sandBoxDir, "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class CustomFileDialogUtils : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
             GTWidget::click(os, GTWidget::findButtonByText(os, "Cancel", dialog));
@@ -6189,6 +6298,7 @@ GUI_TEST_CLASS_DEFINITION( test_1616 ) {
     // Expected state: UGENE not crashes
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint(0, 17), QPoint(0, 17));
 
@@ -6201,6 +6311,7 @@ GUI_TEST_CLASS_DEFINITION( test_1622 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Save the initial content
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
@@ -6238,6 +6349,7 @@ GUI_TEST_CLASS_DEFINITION(test_1626) {
     //1. Open file _common_data/regression/1626/1626.fa
     GTFileDialog::openFile(os, testDir + "_common_data/regression/1626", "1626.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Align with KAlign
     //Expected state: UGENE not crasesh, KAlign can return error message, its okay
@@ -6257,7 +6369,6 @@ GUI_TEST_CLASS_DEFINITION(test_1627) {
 
 //    1. Select {Tools->Build dotplot...} in the main menu.
 //    Expected state: the Build dotplot from the sequences" dialog appeared.
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Build dotplot...", GTGlobals::UseMouse));
 
 //    2. Fill next fields of the dialog and click the "Next" button:
 //        {File with first sequence:} _common_data/scenarios/dp_view/dpm1.fa
@@ -6275,7 +6386,7 @@ GUI_TEST_CLASS_DEFINITION(test_1627) {
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80));
 
 //    Expected state: dotplot appeared, there is not any errors in the log window.
-    GTMenu::showMainMenu(os, GTMenu::TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...", GTGlobals::UseMouse);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_1628 ) {
@@ -6287,6 +6398,7 @@ GUI_TEST_CLASS_DEFINITION( test_1628 ) {
 //    Expected state: renamed named with name given at step 2
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::renameSequence(os, "Montana_montana", "йцукен123");
 
     QAbstractButton *undo = GTAction::button( os, "msa_action_undo" );
@@ -6308,14 +6420,13 @@ GUI_TEST_CLASS_DEFINITION(test_1629) {
     //2. Close currect project if it is opened.
     //3. Click the menu item "File".
     //Expected: "Open As" sub-item exists and is available to click.
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS,
-        PopupChecker::IsEnabled, GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::checkMainMenuItemState(os, QStringList() << "File" << "Open as...", PopupChecker::IsEnabled);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1631) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open "Tree Settings" options panel tab.
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
@@ -6339,6 +6450,7 @@ GUI_TEST_CLASS_DEFINITION(test_1631) {
 GUI_TEST_CLASS_DEFINITION(test_1640) {
     //1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click the MSA Editor.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(4, 3), QPoint(4, 3));
@@ -6362,6 +6474,7 @@ GUI_TEST_CLASS_DEFINITION(test_1640) {
 GUI_TEST_CLASS_DEFINITION(test_1643) {
 //    1. Open {data/samples/CLUSTALW/COI.aln}.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Do not select any sequence, click the right mouse button at the name list area (or at the sequence area).
 //    Expected state: context menu appeared. It contains an item "Set this sequence as reference" and does not contain "unset the reference sequence".
@@ -6407,23 +6520,6 @@ GUI_TEST_CLASS_DEFINITION(test_1643) {
     GTUtilsMSAEditorSequenceArea::callContextMenu(os, QPoint(6, 20));
 }
 
-GUI_TEST_CLASS_DEFINITION( test_1644 ) {
-//    1) Run UGENE
-//    2) Choose File/Access remote database
-//    3) Choose UniProt (DAS) or Ensembl Human Genes (DAS) from combobox
-//    4) Enter Resourse Id
-//    State: if Ensembl Human Genes is choosen and example ID (ENSG00000139618) is entered then UGENE crashes
-//    trying to recognize .gb format ( failed to detect ...)
-    GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "ENSG00000139618", 7, true, false,
-                                                                        sandBoxDir));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),
-                                QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
-    GTGlobals::sleep(5000);
-
-    GTUtilsLog::check(os, l);
-}
-
 GUI_TEST_CLASS_DEFINITION(test_1645) {
     //1. Open "_common_data/fasta/base_ext_nucl_all_symb.fa".
 
@@ -6436,6 +6532,7 @@ GUI_TEST_CLASS_DEFINITION(test_1645) {
     //4. Agree to close an opened view in the appeared message box.
     //Expected state: the document unloads.
     //GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "base_ext_nucl_all_symb.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTUtilsProject::openFiles(os, testDir + "_common_data/fasta/base_ext_nucl_all_symb.fa");
     GTGlobals::sleep();
@@ -6450,14 +6547,14 @@ GUI_TEST_CLASS_DEFINITION( test_1651 ){
 //    1. Open the "Access remote database" dialog.
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
             QLabel* hintLabel = GTWidget::findExactWidget<QLabel*>(os, "hintLabel", dialog);
             //    2. There are sample IDs in the hints
-            GTWidget::clickLabelLink(os, hintLabel, 20);
+            GTWidget::clickLabelLink(os, hintLabel, 20, 6);
 
             //    3. Clicking on a sample ID must out in in the LineEdit automatically
             QLineEdit* idLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "idLineEdit", dialog);
@@ -6466,7 +6563,7 @@ GUI_TEST_CLASS_DEFINITION( test_1651 ){
         }
     };
     GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, new custom()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
 
     GTGlobals::sleep();
 }
@@ -6480,6 +6577,7 @@ GUI_TEST_CLASS_DEFINITION( test_1653 ) {
     Actual: spinbox is shown
 */
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search algorithm"));
@@ -6499,6 +6597,7 @@ GUI_TEST_CLASS_DEFINITION( test_1654 ) {
     // Actual: {Search} button is disabled
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 15));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -6528,6 +6627,7 @@ GUI_TEST_CLASS_DEFINITION( test_1654 ) {
 GUI_TEST_CLASS_DEFINITION( test_1658 ){
 //    1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Press the "Build Tree" button on the main toolbar
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI_1658.nwk", 0, 0, true));
     QAbstractButton *tree = GTAction::button(os,"Build Tree");
@@ -6564,6 +6664,7 @@ GUI_TEST_CLASS_DEFINITION( test_1660 ) {
     // Expected state: lineedit became red Actual: UGENE crashes
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 15));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -6581,6 +6682,7 @@ GUI_TEST_CLASS_DEFINITION( test_1660 ) {
 GUI_TEST_CLASS_DEFINITION(test_1661) {
     // 1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open find pattern option panel
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -6637,6 +6739,7 @@ GUI_TEST_CLASS_DEFINITION(test_1662){
 GUI_TEST_CLASS_DEFINITION(test_1664){
 //    1. Open COI.aln.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    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.
@@ -6651,6 +6754,7 @@ GUI_TEST_CLASS_DEFINITION(test_1664){
 GUI_TEST_CLASS_DEFINITION(test_1668){
 //    1) Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Activate the PWA tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    3) Click "Phaneroptera_falcata" sequence name on the MSA Editor and click the first ">" button
@@ -6699,6 +6803,7 @@ GUI_TEST_CLASS_DEFINITION(test_1672) {
     //Bug state: the reference sequence has 103% match with itself.
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-8, 8));
@@ -6714,6 +6819,7 @@ GUI_TEST_CLASS_DEFINITION(test_1672) {
 GUI_TEST_CLASS_DEFINITION(test_1673) {
 //    1. Open file COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select a options panel tab header
 //    Expected result: the tab has been opened
@@ -6744,6 +6850,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_2) {
 //    Expected result: only one selected group is shown at a time
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelMsa::toggleTab(os, GTUtilsOptionPanelMsa::General);
     bool isTabOpened = GTUtilsOptionPanelMsa::isTabOpened(os, GTUtilsOptionPanelMsa::General);
@@ -6770,6 +6877,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_2) {
 GUI_TEST_CLASS_DEFINITION(test_1673_3) {
     //1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    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"]);
@@ -6783,6 +6891,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_3) {
 GUI_TEST_CLASS_DEFINITION(test_1673_4) {
     //1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "Annotations Highlighting" tab of the Options Panel, press "Ctrl+F"
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
@@ -6801,6 +6910,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_4) {
 GUI_TEST_CLASS_DEFINITION(test_1673_5){
 //    1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    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));
@@ -6814,7 +6924,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_5){
 namespace {
 class customFileDialog_1681: public GTFileDialogUtils{
 public:
-    customFileDialog_1681(U2OpStatus &os, QString path): GTFileDialogUtils(os, path){}
+    customFileDialog_1681(HI::GUITestOpStatus &os, QString path): GTFileDialogUtils(os, path){}
     void commonScenario(){
         GTFileDialogUtils::commonScenario();
         GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
@@ -6829,7 +6939,7 @@ GUI_TEST_CLASS_DEFINITION(test_1677){
 //    2. Add sample: "Main Tuxedo: Paired-end"
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
@@ -6879,6 +6989,7 @@ GUI_TEST_CLASS_DEFINITION(test_1680) {
 
 //    1. Open "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Choose some sequence by mouse in the name list area
     GTUtilsMsaEditor::clickSequenceName(os, "Tettigonia_viridissima");
@@ -6970,7 +7081,7 @@ GUI_TEST_CLASS_DEFINITION(test_1681_1) {
 
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
@@ -7051,7 +7162,7 @@ GUI_TEST_CLASS_DEFINITION(test_1681_3) {
 //    2. Add sample: Single dataset tuxedo: Paired-end
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
@@ -7092,14 +7203,11 @@ GUI_TEST_CLASS_DEFINITION(test_1681_3) {
 
 GUI_TEST_CLASS_DEFINITION(test_1686){
 //    1. Select { Tools -> Build dotplot... } in the main menu.
-    QMenu *menu;
-    menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
     GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 8, 80,false,false));
     Runnable *filler2 = new BuildDotPlotFiller(os, testDir + "_common_data/scenarios/dp_view/dpm1.fa", testDir + "_common_data/scenarios/dp_view/dpm2.fa");
     GTUtilsDialog::waitForDialog(os, filler2);
 
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
     GTGlobals::sleep(1000);
 //    2. Set the "_common_data/scenarios/dp_view/dpm1.fa" as the first sequence,
 //    the "_common_data/scenarios/dp_view/dpm2.fa" as the second sequence.
@@ -7119,6 +7227,7 @@ GUI_TEST_CLASS_DEFINITION(test_1686){
 GUI_TEST_CLASS_DEFINITION(test_1687) {
     // 1. open samples / clustalW / COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open 'statistic tab'
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
@@ -7147,6 +7256,7 @@ GUI_TEST_CLASS_DEFINITION( test_1688 ) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os) );
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/_regression/1688/", "sr100.000.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check( os, l );
 }
 
@@ -7182,6 +7292,7 @@ GUI_TEST_CLASS_DEFINITION(test_1693) {
 GUI_TEST_CLASS_DEFINITION(test_1700) {
     //    1. Open file "https://ugene.unipro.ru/tracker/secure/attachment/12864/pdb1a07.ent.gz".
     GTFileDialog::openFile(os, testDir + "_common_data/pdb/", "pdb1a07.ent.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: UGENE displays sequence and 3d structure
     GTUtilsMdi::findWindow(os, "pdb1a07.ent.gz");
@@ -7215,7 +7326,9 @@ GUI_TEST_CLASS_DEFINITION( test_1701 ) {
     //Expected state: UGENE works fine. The opened view is displayed correctly(no black screen instead of molecule).
 
     GTFileDialog::openFile( os, testDir + "_common_data/pdb", "1A5H.pdb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile( os, testDir + "_common_data/pdb", "1CF7.pdb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* pdb1 = GTWidget::findWidget(os, "1-1A5H");
     QWidget* pdb2 = GTWidget::findWidget(os, "2-1CF7");
@@ -7227,7 +7340,7 @@ GUI_TEST_CLASS_DEFINITION( test_1701 ) {
     GTMenu::showContextMenu(os, pdb2);
 
     GTGlobals::sleep();
-    QPixmap before = QPixmap::grabWidget(pdb2, pdb2->rect());
+    const QPixmap before = GTWidget::getPixmap(os, pdb2);
 
     GTMouseDriver::moveTo( os, GTUtilsProjectTreeView::getItemCenter(os, "1A5H.pdb"));
     GTMouseDriver::doubleClick(os);
@@ -7235,10 +7348,10 @@ GUI_TEST_CLASS_DEFINITION( test_1701 ) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< "Render Style"<< "Ball-and-Stick"));
     GTMenu::showContextMenu(os, pdb1);
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList()<<"Close active view", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Close active view", GTGlobals::UseKey);
 
     GTGlobals::sleep();
-    QPixmap after = QPixmap::grabWidget(pdb2, pdb2->rect());
+    const QPixmap after = GTWidget::getPixmap(os, pdb2);
 
     GTGlobals::sleep(500);
     CHECK_SET_ERR( before.toImage() == after.toImage(), "The view has changed");
@@ -7248,6 +7361,7 @@ GUI_TEST_CLASS_DEFINITION( test_1703 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select some row in the name list area
     GTUtilsMSAEditorSequenceArea::click( os, QPoint( -5, 6 ) );
@@ -7272,14 +7386,12 @@ GUI_TEST_CLASS_DEFINITION( test_1703 )
 GUI_TEST_CLASS_DEFINITION( test_1704 ){
 //    1. Open _common_data\_regession\1704\lrr_test_new.gb
     GTFileDialog::openFile( os, testDir + "_common_data/regression/1704", "lrr_test_new.gb" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Find HMM3 signals with _common_data\_regession\1704\LRR_4.hmm model
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()
-                                                      << "ADV_MENU_ANALYSE"
-                                                      << "Find HMM signals with HMMER3"));
     GTUtilsDialog::waitForDialog(os, new UHMM3SearchDialogFiller(os, testDir + "_common_data/regression/1704/LRR_4.hmm",
                                                                  sandBoxDir + "1704.gb"));
 
-    GTMenu::showMainMenu(os, "mwmenu_actions");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find HMM signals with HMMER3...");
     GTGlobals::sleep(1000);
 //    3. Export document with annotations into genbank format. Do not add to the project
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
@@ -7288,6 +7400,7 @@ GUI_TEST_CLASS_DEFINITION( test_1704 ){
     GTGlobals::sleep();
 //    4. Open the exported file with UGENE
     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
@@ -7298,6 +7411,7 @@ GUI_TEST_CLASS_DEFINITION( test_1704 ){
 GUI_TEST_CLASS_DEFINITION(test_1708){
     //1. Open COI.aln or HIV-1.aln from samples
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,1));
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
@@ -7385,7 +7499,7 @@ GUI_TEST_CLASS_DEFINITION(test_1714){
 
     class DeselectCistromeAndPython : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QStringList cistromeTools;
             cistromeTools << "go_analysis" << "seqpos" << "conservation_plot" << "peak2gene"
                           << "MACS" << "CEAS Tools";
@@ -7406,15 +7520,14 @@ GUI_TEST_CLASS_DEFINITION(test_1714){
 
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new DeselectCistromeAndPython()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1720){
 //1. Use menu {File->Access remote database...}
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "D11266", 0));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
 
     GTLogTracer l;
     GTGlobals::sleep(8000);//some time needed for request
@@ -7422,7 +7535,7 @@ GUI_TEST_CLASS_DEFINITION(test_1720){
 
 //3. Use menu {File->Access remote database...}
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "D11266", 0));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
 
     GTGlobals::sleep(8000);
 //4. Fill field "Resource ID" with value D11266. Click "OK"
@@ -7436,6 +7549,7 @@ GUI_TEST_CLASS_DEFINITION(test_1747){
     //2. Enable the distances column in options panel or create distances matrix by using menu {statistics->Generate distance matrix}
     //Expected state: progress for "Generete distance matrix" correctly displays current state of calculation
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix"));
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
@@ -7497,6 +7611,7 @@ GUI_TEST_CLASS_DEFINITION(test_1731){
     //Expected state: identity of CopCinTy34 with each sequence is shown in the column
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 5));
     GTWidget::click(os, GTWidget::findWidget(os, "addSeq"));
@@ -7537,7 +7652,7 @@ GUI_TEST_CLASS_DEFINITION(test_1734){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
@@ -7572,7 +7687,7 @@ GUI_TEST_CLASS_DEFINITION(test_1735){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
@@ -7653,7 +7768,7 @@ GUI_TEST_CLASS_DEFINITION(test_1759){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             //    2. Go to the second page
@@ -7728,7 +7843,7 @@ GUI_TEST_CLASS_DEFINITION(test_1763_1){
 //    4. On opened tab click right mouse button
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //    5. Click on "Rename" action
             //    Expected state: Showed "Rename Dashboard" dialog
             QWidget* dialog = QApplication::activeModalWidget();
@@ -7820,7 +7935,7 @@ GUI_TEST_CLASS_DEFINITION(test_1771){
 //    2. Select tuxedo sample
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             //    2. Go to the second page
@@ -7854,6 +7969,7 @@ GUI_TEST_CLASS_DEFINITION(test_1771){
 GUI_TEST_CLASS_DEFINITION(test_1784){
     //1. Open murine.gb
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Export it as alignment
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
@@ -7862,9 +7978,8 @@ GUI_TEST_CLASS_DEFINITION(test_1784){
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
     //3. Drag and drop one more murine sequence object to the alignment
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from current project"));
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from current project...");
     GTGlobals::sleep();
 
     //4. Select the first sequence as reference
@@ -7878,17 +7993,6 @@ GUI_TEST_CLASS_DEFINITION(test_1784){
     //Expected state: The only selected sequence is the reference.
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1786){
-    // 1. Use menu {File->Access remote database...}
-    // 2. Select database UniProt(DAS)
-    // 3. Fill resource id: 1CRN. Press ok
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1CRN", 7));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    // Expected state: document P01542_das.gb appeared in project
-    GTUtilsProjectTreeView::findIndex(os, "P01542_das.gb");
-}
-
 GUI_TEST_CLASS_DEFINITION(test_1797){
     // 1) Open _common_data\scenarios\formats\test_1797 file
     // 2) Choose "BED" format at appeared format dialog
@@ -7896,14 +8000,16 @@ GUI_TEST_CLASS_DEFINITION(test_1797){
 
     GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/formats", "test_1797.svg");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1798){
     //1. Open file _common_data\scenarios\_regression\1798\1.4k.aln.
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/1798", "1.4k.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Start MAFFT with default values.
     GTUtilsDialog::waitForDialog(os, new MAFFTSupportRunDialogFiller(os, new MAFFTSupportRunDialogFiller::Parameters()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with MAFFT", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with MAFFT"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep(3000);
 
@@ -7920,22 +8026,6 @@ GUI_TEST_CLASS_DEFINITION(test_1798){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1807) {
-    //1. Open {data/samples/FASTA/human_T1.fa}
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
-
-    //Expected state: there isn't the "DAS Annotations" tab on the options panel.
-    QWidget *dasButton = GTWidget::findWidget(os, "OP_DAS", NULL, GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(NULL == dasButton, "DAS Annotations button is shown for a nucleic sequence");
-
-    //2. Open {data/samples/Swiss-Prot/P01375.txt} as Swiss-Prot file.
-    GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
-    GTFileDialog::openFile(os, dataDir + "samples/Swiss-Prot", "P01375.txt");
-
-    //Expected state: there is the "DAS Annotations' tab on the options panel.
-    dasButton = GTWidget::findWidget(os, "OP_DAS");
-}
-
 GUI_TEST_CLASS_DEFINITION(test_1808) {
     QDir outputDir(testDir + "_common_data/scenarios/sandbox");
     const QString outputFilePath = outputDir.absolutePath( ) + "/test_1808.gb";
@@ -7967,68 +8057,48 @@ GUI_TEST_CLASS_DEFINITION(test_1808) {
 GUI_TEST_CLASS_DEFINITION(test_1811_1) {
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "A0N8V2", 5));
     GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
 
     GTGlobals::sleep(10000);//some time needed for request
     GTUtilsDocument::isDocumentLoaded(os, "A0N8V2.txt");
 }
 
-GUI_TEST_CLASS_DEFINITION( test_1813 )
-{
-    // 1) Select the menu {File->Access remote database}
-    // 2) Fill the "Fetch Data from Remote Database" dialog with the next values:
-    //      Resource ID: I7G8J3
-    //      Database: UniProt (DAS)
-    // 3) Press "OK"
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "I7G8J3", 7));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseMouse);
-
-    // Expected: the sequence view with I7G8J3 sequence is opened. UGENE does not crash.
-    GTGlobals::sleep(5000);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsDocument::isDocumentLoaded(os, "I7G8J3_das.gb");
-    GTUtilsDocument::checkDocument(os, "I7G8J3_das.gb", AnnotatedDNAViewFactory::ID);
-}
-
 GUI_TEST_CLASS_DEFINITION( test_1821 ) {
     QString workflowOutputDirPath( testDir + "_common_data/scenarios/sandbox" );
     QDir workflowOutputDir( workflowOutputDirPath );
 
-    GTUtilsDialog::waitForDialog( os, new StartupDialogFiller( os,
-        workflowOutputDir.absolutePath( ) ) );
-
     //1. Open WD
-    QMenu* menu=GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    GTMenu::clickMenuItemByName( os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER );
-    GTGlobals::sleep( 500 );
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os, workflowOutputDir.absolutePath()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
+    GTUtilsMdi::waitWindowOpened(os, "Workflow Designer");
 
     //2. Select "Align sequences with MUSCLE"
-//    GTUtilsWorkflowDesigner::addSample( os, "Align sequences with MUSCLE" );
-//    GTGlobals::sleep( 500 );
+    GTUtilsWorkflowDesigner::addSample( os, "Align sequences with MUSCLE" );
+    GTGlobals::sleep( 500 );
 
-//    //3. Change the value of the scale spinbox. E.g. set it to 75%
-//    QComboBox *scaleCombo = dynamic_cast<QComboBox *>( GTWidget::findWidget( os, "wdScaleCombo" ) );
-//    CHECK_SET_ERR( NULL != scaleCombo, "Unable to find scale combobox!" );
-//    GTComboBox::setIndexWithText( os, scaleCombo, "75%" );
+    //3. Change the value of the scale spinbox. E.g. set it to 75%
+    QComboBox *scaleCombo = dynamic_cast<QComboBox *>( GTWidget::findWidget( os, "wdScaleCombo" ) );
+    CHECK_SET_ERR( NULL != scaleCombo, "Unable to find scale combobox!" );
+    GTComboBox::setIndexWithText( os, scaleCombo, "75%" );
 
     //4. Store the scheme to some file using "Save scheme as" button
-//    GTUtilsDialog::waitForDialog( os, new WorkflowMetaDialogFiller( os,
-//        workflowOutputDir.absolutePath( ) + "/" + "test.uwl", "Scheme") );
-//    GTMenu::clickMenuItemByName( os, GTMenu::showMainMenu( os, MWMENU_ACTIONS ),
-//        QStringList( ) <<  "Save workflow action", GTGlobals::UseKey );
+    GTUtilsDialog::waitForDialog( os, new WorkflowMetaDialogFiller( os,
+        workflowOutputDir.absolutePath( ) + "/" + "test.uwl", "Scheme") );
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Save workflow", GTGlobals::UseKey);
 
-//    //5. Close WD
-//    GTUtilsMdi::click( os, GTGlobals::Close );
-//    GTMouseDriver::click( os );
+    //5. Close WD
+    GTUtilsMdi::click( os, GTGlobals::Close );
+    GTMouseDriver::click( os );
 
     //6. Open the file containing the saved scheme using "Open" button
-//    GTFileDialog::openFile( os, workflowOutputDirPath, "test.uwl" );
+    GTFileDialog::openFile( os, workflowOutputDirPath, "test.uwl" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-//    //Expected state: scheme is opened in WD, its scale is 75%
-//    scaleCombo = dynamic_cast<QComboBox *>( GTWidget::findWidget( os, "wdScaleCombo" ) );
-//    CHECK_SET_ERR( NULL != scaleCombo, "Unable to find scale combobox!" );
-//    CHECK_SET_ERR( scaleCombo->currentText( ) == "75%", "Unexpected scale value!" );
-//    GTGlobals::sleep();
+    //Expected state: scheme is opened in WD, its scale is 75%
+    scaleCombo = dynamic_cast<QComboBox *>( GTWidget::findWidget( os, "wdScaleCombo" ) );
+    CHECK_SET_ERR( NULL != scaleCombo, "Unable to find scale combobox!" );
+    CHECK_SET_ERR( scaleCombo->currentText( ) == "75%", "Unexpected scale value!" );
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1831) {
@@ -8051,13 +8121,14 @@ GUI_TEST_CLASS_DEFINITION(test_1831) {
     QDir workflowOutputDir(workflowOutputDirPath);
 
     GTUtilsDialog::waitForDialog(os, new WorkflowMetaDialogFiller(os, workflowOutputDir.absolutePath() + "/" + "test.uwl", "Workflow"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() << "Save workflow action", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Save workflow", GTGlobals::UseKey);
 
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTMouseDriver::click(os);
 
     // 3) Reopen UGENE WD.
     GTFileDialog::openFile(os, workflowOutputDirPath, "test.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected: the state is saved.
     CHECK_SET_ERR(!GTUtilsWorkflowDesigner::isWorkerExtended(os, "Align with MUSCLE"), "\"Align with MUSCLE\" unexpectedly has extended style");
@@ -8148,9 +8219,7 @@ GUI_TEST_CLASS_DEFINITION( test_1859 ) {
 
 GUI_TEST_CLASS_DEFINITION(test_1860) {
     // 1) Open Workflow Designer
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
-    QMenu *menu=GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    GTMenu::clickMenuItemByName( os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER );
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     const QString textReaderName = "Read Plain Text";
     const QString textWriterName = "Write Plain Text";
@@ -8176,9 +8245,7 @@ GUI_TEST_CLASS_DEFINITION(test_1860) {
 
 GUI_TEST_CLASS_DEFINITION(test_1865) {
     // 1) Open Workflow Designer
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
-    QMenu *menu=GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    GTMenu::clickMenuItemByName( os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER );
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
     const QString sequenceWriterName = "Write Sequence";
 
@@ -8193,6 +8260,7 @@ GUI_TEST_CLASS_DEFINITION(test_1865) {
 GUI_TEST_CLASS_DEFINITION( test_1883 ){
 // 1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 // 2. Select any area in sequence view
     const int startRowNumber = 6;
     const int alignmentLength = 12;
@@ -8223,6 +8291,7 @@ GUI_TEST_CLASS_DEFINITION( test_1884 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select some row in the name list area
     const int startRowNumber = 6;
@@ -8259,6 +8328,7 @@ GUI_TEST_CLASS_DEFINITION( test_1886_1 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select a region in the sequence area
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 5, 4 ), QPoint( 10, 12 ) );
@@ -8280,6 +8350,7 @@ GUI_TEST_CLASS_DEFINITION( test_1886_2 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select a region in the sequence area
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 5, 4 ), QPoint( 10, 12 ) );
@@ -8311,6 +8382,7 @@ GUI_TEST_CLASS_DEFINITION( test_1897 ) {
     //1) Run UGENE
     //2) Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3) Selected any region on alignment view using mouse or keyboard
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 40, 4 ), QPoint( 50, 12 ) );
@@ -8432,6 +8504,7 @@ GUI_TEST_CLASS_DEFINITION( test_1924 )
 {
     //1. Open any sequence
     GTFileDialog::openFile( os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. Use context menu on the sequence     {Edit sequence -> Insert subsequence}
@@ -8440,7 +8513,7 @@ GUI_TEST_CLASS_DEFINITION( test_1924 )
         "atcgtac"
         );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseKey);
     GTGlobals::sleep();
 
     //4. Click OK
@@ -8483,7 +8556,7 @@ GUI_TEST_CLASS_DEFINITION(test_1984){
 
     class CuffDiffIncorrectPath : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             AppSettingsDialogFiller::setExternalToolPath(os, "Cuffdiff", "./");
             GTGlobals::sleep(2000);
 
@@ -8495,8 +8568,7 @@ GUI_TEST_CLASS_DEFINITION(test_1984){
 
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new CuffDiffIncorrectPath()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
     CHECK_SET_ERR(l.checkMessage("Cuffdiff validate task failed: Tool does not start."), "No error in the log!");
 }
@@ -8505,9 +8577,9 @@ 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));
-
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SEARCH_GENBANK);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...");
     GTGlobals::sleep();
+
 //Expected state: the "NCBI Sequence Search" dialog has appeared
 
 //3. Type "human" to the request string
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
index 9c9bf6a..fe90809 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_regression_scenarios {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_regression_scenarios_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_regression_scenarios"
 
 GUI_TEST_CLASS_DECLARATION(test_1001)
 GUI_TEST_CLASS_DECLARATION(test_1001_1)
@@ -118,7 +118,6 @@ GUI_TEST_CLASS_DECLARATION(test_1212_1)
 GUI_TEST_CLASS_DECLARATION(test_1219)
 GUI_TEST_CLASS_DECLARATION(test_1220)
 GUI_TEST_CLASS_DECLARATION(test_1229)
-GUI_TEST_CLASS_DECLARATION(test_1232)
 GUI_TEST_CLASS_DECLARATION(test_1234)
 GUI_TEST_CLASS_DECLARATION(test_1241)
 GUI_TEST_CLASS_DECLARATION(test_1245)
@@ -262,7 +261,6 @@ GUI_TEST_CLASS_DECLARATION(test_1629)
 GUI_TEST_CLASS_DECLARATION(test_1631)
 GUI_TEST_CLASS_DECLARATION(test_1640)
 GUI_TEST_CLASS_DECLARATION(test_1643)
-GUI_TEST_CLASS_DECLARATION(test_1644)
 GUI_TEST_CLASS_DECLARATION(test_1645)
 GUI_TEST_CLASS_DECLARATION(test_1651)
 GUI_TEST_CLASS_DECLARATION(test_1653)
@@ -313,14 +311,11 @@ GUI_TEST_CLASS_DECLARATION(test_1763_2)
 GUI_TEST_CLASS_DECLARATION(test_1764)
 GUI_TEST_CLASS_DECLARATION(test_1771)
 GUI_TEST_CLASS_DECLARATION(test_1784)
-GUI_TEST_CLASS_DECLARATION(test_1786)
 GUI_TEST_CLASS_DECLARATION(test_1797)
 GUI_TEST_CLASS_DECLARATION(test_1798)
 
-GUI_TEST_CLASS_DECLARATION(test_1807)
 GUI_TEST_CLASS_DECLARATION(test_1808)
 GUI_TEST_CLASS_DECLARATION(test_1811_1)
-GUI_TEST_CLASS_DECLARATION(test_1813)
 GUI_TEST_CLASS_DECLARATION(test_1821)
 GUI_TEST_CLASS_DECLARATION(test_1831)
 GUI_TEST_CLASS_DECLARATION(test_1834)
@@ -342,7 +337,7 @@ GUI_TEST_CLASS_DECLARATION(test_1946)
 GUI_TEST_CLASS_DECLARATION(test_1984)
 GUI_TEST_CLASS_DECLARATION(test_1986)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_regression_scenarios
 
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 693494b..9ff1c69 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
@@ -19,42 +19,48 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsRegressionScenarios_1_1000.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 "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTGroupBox.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTPlainTextEdit.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTSlider.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.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/GSequenceGraphView.h>
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorNameList.h>
+
+#include "../../workflow_designer/src/WorkflowViewItems.h"
 #include "GTDatabaseConfig.h"
+#include "GTTestsRegressionScenarios_1_1000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -72,14 +78,39 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-
-#include "runnables/qt/DefaultDialogFiller.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <primitives/GTGroupBox.h>
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include "utils/GTThread.h"
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.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"
@@ -97,8 +128,10 @@
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h"
@@ -112,7 +145,7 @@
 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
 #include "runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h"
 #include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
@@ -146,13 +179,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"
@@ -161,41 +194,6 @@
 #include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 #include "runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.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/DetView.h>
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.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 {
 
@@ -205,6 +203,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_1) {
     //Crash on a number of multisequence files opening in the merge mode
     //1. Open samples/Genbank/sars.gb.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click the right mouse button on NC_001363 annotations tree view and select menu item "Find qualifier"
     //Expected state : Opened "Find Qualifier" dialog.
@@ -230,6 +229,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_2) {
     //Crash on a number of multisequence files opening in the merge mode
     //1. Open samples/Genbank/sars.gb.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click on right mouse button on NC_001363 annotations tree view and select menu item "Find qualifier"
     //Expected state : Opened "Find Qualifier" dialog.
@@ -262,6 +262,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_3) {
     //Crash on a number of multisequence files opening in the merge mode
     //1. Open samples / Genbank / murine.gb.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click on right mouse button on NC_001363 annotations tree view and select menu item "Find qualifier"
     //Expected state : Opened "Find Qualifier" dialog.
@@ -294,6 +295,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_4) {
 //    protein_id - NP_597744.1
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QTreeWidgetItem* featuresItem = GTUtilsAnnotationsTreeView::findItem(os, "NC_001363 features [murine.gb]");
@@ -305,7 +307,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_4) {
                                                               false);
     settings.selectAll = true;
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "find_qualifier_action"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, featuresItem);
 
     QStringList qualValues;
@@ -333,6 +335,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_5) {
 //    Expected state: Showed message box with information about reaults are not found.
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QTreeWidgetItem* featuresItem = GTUtilsAnnotationsTreeView::findItem(os, "NC_001363 features [murine.gb]");
@@ -346,7 +349,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_5) {
                                                               true,
                                                               false);
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "find_qualifier_action"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, featuresItem);
     GTGlobals::sleep();
 
@@ -362,6 +365,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_6) {
     //    Crash on a number of multisequence files opening in the merge mode
     //    1. Open samples/Genbank/murine.gb.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Click on right mouse button on NC_001363 annotations tree view and select menu item "Find qualifier"
     //    Expected state: Opened "Find Qualifier" dialog.
@@ -381,7 +385,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_6) {
                                                               false,
                                                               true);
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "find_qualifier_action"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, featuresItem);
     GTGlobals::sleep();
 
@@ -431,6 +435,7 @@ GUI_TEST_CLASS_DEFINITION(test_0339) {
 //    1. Open UGENE on MacOs
 //    2. Open samples/FASTA/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Press Ctrl+Shift+F
     // hotkey replaced with Cmd+Shift+F on Mac
@@ -452,6 +457,7 @@ GUI_TEST_CLASS_DEFINITION(test_0339) {
     // hotkey replaced with Cmd+F on Mac
 //    Expected: Search pattern panel appears
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["cmd"]);
+    GTThread::waitForMainThread(os);
     const bool isTabOpened = GTUtilsOptionPanelSequenceView::isTabOpened(os, GTUtilsOptionPanelSequenceView::Search);
     CHECK_SET_ERR(isTabOpened, "'Search in sequence' tab is not opened");
 }
@@ -459,8 +465,10 @@ GUI_TEST_CLASS_DEFINITION(test_0339) {
 GUI_TEST_CLASS_DEFINITION(test_0394){
 //    1. Add to project sars.gb, murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open sars.gb in sequence view.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Drag and drop murine.gb sequence NC_001363 to opened in previous step sequence view.
     GTUtilsProjectTreeView::dragAndDrop(os, GTUtilsProjectTreeView::findIndex(os, "NC_001363"),
                                         GTUtilsMdi::activeWindow(os)->findChild<ADVSingleSequenceWidget*>());
@@ -494,6 +502,7 @@ GUI_TEST_CLASS_DEFINITION(test_0490) {
     // Expected stat:  UGENE not crashes
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/490/fasta-example.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
@@ -514,7 +523,7 @@ GUI_TEST_CLASS_DEFINITION(test_0567) {
 
     class Test_0567 : public Filler {
     public:
-        Test_0567(U2OpStatus& os)
+        Test_0567(HI::GUITestOpStatus& os)
             : Filler(os, "DotPlotDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -539,20 +548,23 @@ GUI_TEST_CLASS_DEFINITION(test_0567) {
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new Test_0567(os));
     GTWidget::click(os, GTWidget::findWidget(os, "build_dotplot_action_widget"));
+    GTGlobals::sleep(1000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0574) {
     //1. Open murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select in menu Actions->Cloning->Create fragment...
     //3. Set any region, don`t include overhangs, click OK
     GTUtilsDialog::waitForDialog(os, new CreateFragmentDialogFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Cloning" << "Create Fragment..."));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Cloning" << "Create Fragment"));
     GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -562,7 +574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0574) {
     //5. Select in menu Actions->Cloning->Construct molecule...
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //6. In dialog select your fragment in "Available fragments", click Add
             GTWidget::click(os, GTWidget::findWidget(os, "takeAllButton"));
 
@@ -595,13 +607,13 @@ GUI_TEST_CLASS_DEFINITION(test_0574) {
         }
     };
     GTUtilsDialog::waitForDialog(os, new ConstructMoleculeDialogFiller(os, new Scenario()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::CLONING_MENU << ToolsMenu::CLONING_CONSTRUCT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Construct molecule...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0587){
     class CheckBowtie2Filler : public Filler {
     public:
-        CheckBowtie2Filler(U2OpStatus &os)
+        CheckBowtie2Filler(HI::GUITestOpStatus &os)
             : Filler (os, "BuildIndexFromRefDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -635,12 +647,13 @@ GUI_TEST_CLASS_DEFINITION(test_0587){
 
     GTLogTracer lt;
     GTUtilsDialog::waitForDialog(os, new CheckBowtie2Filler(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
     CHECK_SET_ERR(!lt.hasError(), "error messages in the log");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0597) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget *sequenceWidget2 = GTWidget::findWidget(os, "ADV_single_sequence_widget_0", NULL, false);
@@ -653,7 +666,7 @@ GUI_TEST_CLASS_DEFINITION(test_0597) {
 
     class SaveGraphCutoffsDialogFiller : public Filler {
     public:
-        SaveGraphCutoffsDialogFiller(U2OpStatus &os)
+        SaveGraphCutoffsDialogFiller(HI::GUITestOpStatus &os)
             : Filler (os, "SaveGraphCutoffsDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -683,11 +696,55 @@ GUI_TEST_CLASS_DEFINITION(test_0597) {
     CHECK_SET_ERR(annotationGroup != NULL, "annotation group not found");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0598) {
+    // 1. Open file '_common_data/fasta/Mycobacterium.fna'
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "Mycobacterium.fna");
+    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);
+
+    // 2. Show DNA Flexibility graph 
+    // Expected state: 'Calculate graph points' task is started
+    QWidget *graphAction = GTWidget::findWidget(os, "GraphMenuAction", sequenceWidget, false);
+    Runnable *chooser = new PopupChooser(os, QStringList() << "DNA Flexibility");
+    GTUtilsDialog::waitForDialog(os, chooser);
+    GTWidget::click(os, graphAction);
+    GTGlobals::sleep(500);
+
+    CHECK_SET_ERR(1 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "'Calculate graph points' task is not started");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 3. Zoom graph
+    // Expected state: cached data is used and 'Calculate graph points' task is not started
+    GTWidget::click(os, GTAction::button(os, "action_zoom_in_gi|119866057|ref|NC_008705.1| Mycobacterium sp. KMS, complete genome"));
+    GTGlobals::sleep(500);
+    CHECK_SET_ERR(0 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "'Calculate graph points' task is started, but cached data should be used");
+
+    // 4. Use context menu {Graph -> Graph settings...}
+    // Expected state: 'Graph Settings' dialog is appeared
+    // 5. Set parameters: window = 1000, step = 4
+    // 6. Press 'Ok'
+    // Expected state: 'Calculate graph points' task is started
+    GTUtilsDialog::waitForDialog(os, new GraphSettingsDialogFiller(os, 100, 25));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Graph"
+        << "visual_properties_action"));
+    QWidget* graphView = GTUtilsSequenceView::getGraphView(os);
+    GTWidget::click(os, graphView, Qt::RightButton);
+    GTGlobals::sleep(500);
+
+    CHECK_SET_ERR(1 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "'Calculate graph points' task is not started");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_0605) {
 //    Crash on a number of multisequence files opening in the merge mode
 
 //    1. Open _common_data/scenarios/dp_view/EF591300.gb.
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/dp_view/EF591300.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open _common_data/scenarios/dp_view/dpm1.fa.
 //    3. Choose the "Merge sequences into single sequence to show in sequence viewer" option with any gap size in the "Sequence reading option" dialog.
@@ -703,6 +760,7 @@ GUI_TEST_CLASS_DEFINITION(test_0610) {
 
 //    1. Open any MSA, i.e. samples/ClustalW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click on any letter (it will be selected with dash rectangle)
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(1, 1));
@@ -713,7 +771,7 @@ GUI_TEST_CLASS_DEFINITION(test_0610) {
 
 //    4.  Modify MSA: aligh with any algorithm
 //    Expected state: UGENE not crased
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align" << "Align with KAlign...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
 
@@ -752,7 +810,7 @@ GUI_TEST_CLASS_DEFINITION(test_0627) {
 
     class ToolTipsChecker : public Filler {
     public:
-        ToolTipsChecker(U2OpStatus &os)
+        ToolTipsChecker(HI::GUITestOpStatus &os)
             : Filler( os, "Primer3Dialog") {}
         virtual void run() {
             QDialog *dialog = qobject_cast<QDialog*>(QApplication::activeModalWidget());
@@ -785,7 +843,8 @@ GUI_TEST_CLASS_DEFINITION(test_0627) {
             foreach (const QString& name, objsWithoutTooltips) {
                 CHECK_SET_ERR( exceptions.contains(name), QString("The following field has no tool tip: %1").arg(name));
             }
-                dialog->close();
+
+            GTWidget::close(os, dialog);
         }
 
     private:
@@ -801,6 +860,7 @@ GUI_TEST_CLASS_DEFINITION(test_0627) {
 
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 
     QAbstractButton* primer3 = GTAction::button(os, "primer3_action");
@@ -814,9 +874,11 @@ GUI_TEST_CLASS_DEFINITION(test_0627) {
 GUI_TEST_CLASS_DEFINITION(test_0652) {
     //1) Open /data/samples/fasta/human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2) Open /data/samples/gff/5prime_utr_intron_A20.gff
     GTFileDialog::openFile(os, dataDir + "samples/GFF/5prime_utr_intron_A20.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3) Drag and drop first annotation from gff file to sequence view of human_T1
     //4) On question "Found annotations that are out of sequence range, continue?" answer "Yes"
@@ -878,62 +940,6 @@ GUI_TEST_CLASS_DEFINITION(test_0659){
     CHECK_SET_ERR(list.contains("test_659_2"), "unexpected file name csv: " + list[2]);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0663) {
-    //1. open human_t1.fa
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
-
-    //2. Select region 3..50
-    GTUtilsSequenceView::selectSequenceRegion(os, 3, 50);
-
-    //3. Choose in the context menu - "Export"->"Selected sequence region"
-    //4. In the export dialog check "Translate to amino alphabet", uncheck "Save all amino frames", click "Export"
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "1.fa", true, QString(), false));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Selected sequence region..."));
-    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
-
-    //5. The protein sequence "VRFTKVEMKEKMLRAA" appear.
-    QString sequenceData;
-    GTUtilsSequenceView::getSequenceAsString(os, sequenceData);
-    CHECK_SET_ERR(sequenceData == "VRFTKVEMKEKMLRAA", "Unexpeced sequence content");
-
-    //6. Click "Statistics" in the context menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics"));
-    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
-    GTGlobals::sleep(500);
-
-    //7. It must be the same with the statistics below
-    //Sequence length : 16
-    //Molecule Type : Standard amino
-    //Molecular Weight : 1937.61
-    //Isoelectric Point(pI) : 10.65
-
-    //Symbol counts	Symbol percents %
-    //A	2	12.5
-    //E	2	12.5
-    //F	1	6.25
-    //K	3	18.75
-    //L	1	6.25
-    //M	2	12.5
-    //R	2	12.5
-    //T	1	6.25
-    //V	2	12.5
-    QWebView *statisticsView = GTWidget::findExactWidget<QWebView *>(os, "DNAStatWebViewregion [3 50]|transl");
-    const QString statisticsData = statisticsView->page()->mainFrame()->toHtml();
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>Sequence length:</b></td><td>16</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>Molecule Type:</b></td><td>Standard amino</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>Molecular Weight:</b></td><td>1937.61</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>Isoelectric Point (pI):</b></td><td>10.65</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>A</b></td><td>2</td><td>12.5</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>E</b></td><td>2</td><td>12.5</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>F</b></td><td>1</td><td>6.25</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>K</b></td><td>3</td><td>18.75</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>L</b></td><td>1</td><td>6.25</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>M</b></td><td>2</td><td>12.5</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>R</b></td><td>2</td><td>12.5</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>T</b></td><td>1</td><td>6.25</td></tr>"), "Unexpected statistics gathered");
-    CHECK_SET_ERR(statisticsData.contains("<tr><td><b>V</b></td><td>2</td><td>12.5</td></tr>"), "Unexpected statistics gathered");
-}
-
 GUI_TEST_CLASS_DEFINITION(test_0666) {
 /* Crash on removing some annotations from Primer3 result
  * 1. Open samples\FASTA\human_T1.fa
@@ -943,6 +949,7 @@ GUI_TEST_CLASS_DEFINITION(test_0666) {
 */
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QAbstractButton* primer3 = GTAction::button(os, "primer3_action");
     CHECK_SET_ERR(primer3 != NULL, "primer3_action not found");
@@ -966,6 +973,7 @@ GUI_TEST_CLASS_DEFINITION(test_0677) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_0677/test_0677.ugenedb", "", "", true));
     GTFileDialog::openFile(os, testDir + "_common_data/bam/", "1.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
 }
 GUI_TEST_CLASS_DEFINITION(test_0678) {
@@ -974,6 +982,7 @@ GUI_TEST_CLASS_DEFINITION(test_0678) {
     // Expected state: UGENE not crashes
 
     GTFileDialog::openFile(os, dataDir + "samples/PDB/1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsAnnotationsTreeView::selectItems(os, QStringList() << "chain_info");
 
 }
@@ -987,6 +996,7 @@ GUI_TEST_CLASS_DEFINITION(test_0680) {
     //4. Press "Start prediction" button
     //UGENE not crashes
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PredictSecondaryStructureDialogFiller(os, 1, 2, true));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "Predict secondary structure"));
     GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"), Qt::RightButton);
@@ -995,6 +1005,7 @@ GUI_TEST_CLASS_DEFINITION(test_0680) {
 
 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 PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -1011,6 +1022,7 @@ GUI_TEST_CLASS_DEFINITION(test_0681) {
 GUI_TEST_CLASS_DEFINITION(test_0684) {
 //    1. Open samples/Genbank/sars
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select region 2000-9000
     GTUtilsSequenceView::selectSequenceRegion(os, 2000, 9000);
@@ -1019,7 +1031,7 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
 
     class CreateFragmentScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
 
@@ -1029,12 +1041,12 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
             GTLineEdit::checkText(os, GTWidget::findExactWidget<QLineEdit *>(os, "end_edit_line", dialog), "9000");
 
 //    4. Set left overhang "AATT", forward
-            GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, "leftEndBox", dialog));
+            GTGroupBox::setChecked(os, "leftEndBox", dialog);
             GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "lDirectButton", dialog));
             GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "lCustomOverhangEdit", dialog), "AATT");
 
 //       Set right overhang "AATT", reverse-complement
-            GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, "rightEndBox", dialog));
+            GTGroupBox::setChecked(os, "rightEndBox", dialog);
             GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "rComplButton", dialog));
             GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "rCustomOverhangEdit", dialog), "AATT");
 
@@ -1043,15 +1055,14 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
         }
     };
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Cloning" << "Create Fragment..."));
     GTUtilsDialog::waitForDialog(os, new CreateFragmentDialogFiller(os, new CreateFragmentScenario));
-    GTMenu::showMainMenu(os, GTMenu::ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Cloning" << "Create fragment...");
 
 //    5. Activate "Cloning->Construct molecule"
 
     class ConstructMoleculeScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
 
@@ -1080,9 +1091,8 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
         }
     };
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Cloning" << "Construct molecule..."));
     GTUtilsDialog::waitForDialog(os, new ConstructMoleculeDialogFiller(os, new ConstructMoleculeScenario));
-    GTMenu::showMainMenu(os, GTMenu::ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Cloning" << "Construct molecule...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0685) {
@@ -1098,21 +1108,22 @@ GUI_TEST_CLASS_DEFINITION(test_0685) {
     blastParams.inputPath = testDir + "_common_data/scenarios/external_tools/blast/SequenceLength_00003000.txt";
     blastParams.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(blastParams, os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCHP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST+ search...");
+    GTGlobals::sleep();
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
-
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0688) {
 //    1. Open any sequence
     GTFileDialog::openFile(os, dataDir+ "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. do context menu {Analyzq->Search TBFS with matrices}
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -1143,7 +1154,7 @@ GUI_TEST_CLASS_DEFINITION(test_0700) {
 */
     class CancelScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             GTGlobals::sleep(500);
@@ -1158,6 +1169,7 @@ GUI_TEST_CLASS_DEFINITION(test_0702) {
     //1. open _common_data / fasta / DNA.fa in merge mode.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select first contig(1..743) region.
     GTUtilsAnnotationsTreeView::selectItems(os, QStringList() << "contig");
@@ -1180,10 +1192,12 @@ GUI_TEST_CLASS_DEFINITION(test_0703) {
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "1.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.sorted.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, sandBoxDir + "1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMdi::activateWindow(os, "1 [as] chrM");
 
@@ -1197,6 +1211,7 @@ GUI_TEST_CLASS_DEFINITION(test_0703) {
 
     //1) Opened a BAM file that had a reference sequence associated with it, but there shouldn't be such sequence anymore.
     GTFileDialog::openFile(os, sandBoxDir + "1.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state : UGENE not crashes
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
@@ -1222,6 +1237,7 @@ GUI_TEST_CLASS_DEFINITION(test_0729){
     GTWidget::findWidget(os, "includeMaskEdit");
     GTWidget::findWidget(os, "excludeMaskEdit");
     GTWidget::findWidget(os, "recursiveBox");
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 
 }
 
@@ -1305,7 +1321,7 @@ GUI_TEST_CLASS_DEFINITION(test_0750) {
 
     class Custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             GTWidget::click(os, GTWidget::findButtonByText(os, "Cancel", dialog));
@@ -1329,6 +1345,7 @@ GUI_TEST_CLASS_DEFINITION(test_0762) {
 // Expected state: UGENE not crashes
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new FindTandemsDialogFiller(os, sandBoxDir + "test_0762.gb"));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Find tandems");
@@ -1427,6 +1444,7 @@ GUI_TEST_CLASS_DEFINITION(test_0774) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, sandBoxDir + "/test_0774");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR( GTUtilsSequenceView::getSeqWidgetsNumber(os) == 2, "Incorrect count of sequences");
 }
@@ -1434,6 +1452,7 @@ GUI_TEST_CLASS_DEFINITION(test_0774) {
 GUI_TEST_CLASS_DEFINITION(test_0775){
 //    1. Open human_T1.fa sequence
     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));
@@ -1445,7 +1464,7 @@ GUI_TEST_CLASS_DEFINITION(test_0775){
 //    3. Press 'Go' button
 //    Expected state: this regions are selected on the view
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<<"Copy sequence"));
-    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"), Qt::RightButton);
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
     GTGlobals::sleep(500);
     QString text = GTClipboard::text(os);
     CHECK_SET_ERR(text == "TTCAGATTAAAGTT", "unexpected selection: " + text);
@@ -1493,12 +1512,13 @@ GUI_TEST_CLASS_DEFINITION(test_0778) {
 //    Expected state: sequence view reopened, sequence marked with two "upper_case" annotations with coodinates 5..7, 11..13
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/778/mixed.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class CaseAnnotations : public CustomScenario {
     public:
         CaseAnnotations(QString name = QString())
             : name(name) {}
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1515,8 +1535,7 @@ GUI_TEST_CLASS_DEFINITION(test_0778) {
     };
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new CaseAnnotations("Use upper case annotations")));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
     GTGlobals::sleep();
 
     QList<U2Region> regions = GTUtilsAnnotationsTreeView::getAnnotatedRegions(os);
@@ -1525,8 +1544,7 @@ GUI_TEST_CLASS_DEFINITION(test_0778) {
     CHECK_SET_ERR( regions.contains( U2Region(7, 3) ), "No annotation 8..10");
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new CaseAnnotations("Use lower case annotations")));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
     GTGlobals::sleep();
 
     regions = GTUtilsAnnotationsTreeView::getAnnotatedRegions(os);
@@ -1556,6 +1574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0779) {
 GUI_TEST_CLASS_DEFINITION(test_0782){
 //    1. Open file data/samples/FASTA/human_T1.fa in sequence view.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Build graph - {Graphs -> GC content (%)}.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"GC Content (%)"));
     GTWidget::click(os, GTWidget::findWidget(os, "GraphMenuAction"));
@@ -1566,7 +1585,7 @@ GUI_TEST_CLASS_DEFINITION(test_0782){
     init.save("/home/vmalin/init", "BMP");
     class custom: public CustomScenario{
     public:
-        void run(U2::U2OpStatus &os){
+        void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
             GTWidget::click(os, GTWidget::findButtonByText(os, "Cancel", dialog));
@@ -1630,6 +1649,7 @@ GUI_TEST_CLASS_DEFINITION(test_0792) {
     GTWidget::findExactWidget<QCheckBox*>(os, "recursiveBox");
 //            Include mask, Exclude mask lineedits;
 //            Recursive checkbox
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0798){
@@ -1638,8 +1658,7 @@ GUI_TEST_CLASS_DEFINITION(test_0798){
         SequenceReadingModeSelectorDialogFiller::Merge));
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Genbank"));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/798", "1.gb"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECTSUPPORT__OPEN_AS));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Choose the file "_common_data/scenarios/_regression/798/1.gb" as Genbank in merging mode with default parametes.
     QList<QTreeWidgetItem*> list = GTUtilsAnnotationsTreeView::findItems(os, "source");
@@ -1657,6 +1676,7 @@ GUI_TEST_CLASS_DEFINITION(test_0801) {
     // {Region} Custom region 2 5
     // Expected state: UGENE does not crash}
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionsPanel::runFindPatternWithHotKey("AAAGCTTTA", os);
     GTUtilsOptionPanelSequenceView::setRegionType(os, "Custom region");
     GTLineEdit::setText(os, qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "editStart")), "2");
@@ -1682,7 +1702,7 @@ GUI_TEST_CLASS_DEFINITION(test_0807) {
     //Expected state: the last page of the "Create Element with Command Line Tool" dialog appeared.
     class Scenario1 : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QLineEdit *templateEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "templateLineEdit"));
             GTLineEdit::setText(os, templateEdit, "testtest $in");
 
@@ -1700,7 +1720,7 @@ GUI_TEST_CLASS_DEFINITION(test_0807) {
         bool reset;
     public:
         Scenario2(bool reset) : reset(reset) {}
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTWidget::click(os, GTWidget::findWidget(os, "__qt__passive_wizardbutton0"));
 
             QWidget *addButton = GTWidget::findWidget(os, "addAttributeButton");
@@ -1818,7 +1838,7 @@ GUI_TEST_CLASS_DEFINITION(test_0814) {
     public:
         LogFile_1(QString name = QString())
             : name(name) {}
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1844,13 +1864,11 @@ GUI_TEST_CLASS_DEFINITION(test_0814) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new LogFile_1()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new LogFile_1(QDir(sandBoxDir).absolutePath() + "test_0814_log")));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
     CHECK_SET_ERR(GTFile::check(os, QDir(sandBoxDir).absolutePath() + "test_0814_log") == true, "Log file not found");
 }
@@ -1866,7 +1884,7 @@ GUI_TEST_CLASS_DEFINITION(test_0818) {
 
     class SpaceNameFiller: public Filler {
     public:
-        SpaceNameFiller(U2OpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
+        SpaceNameFiller(HI::GUITestOpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -1898,7 +1916,7 @@ GUI_TEST_CLASS_DEFINITION(test_0821) {
     GTSequenceReadingModeDialog::mode = GTSequenceReadingModeDialog::Merge;
     GTUtilsDialog::waitForDialog(os, new GTSequenceReadingModeDialogUtils(os));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, dataDir + "samples/Genbank/", QStringList() << "sars.gb" << "murine.gb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
 
     GTGlobals::sleep(5000);
 
@@ -1921,7 +1939,7 @@ GUI_TEST_CLASS_DEFINITION(test_0828) {
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -2003,8 +2021,7 @@ GUI_TEST_CLASS_DEFINITION(test_0830) {
         << testDir + "_common_data/scenarios/CAP3/region2.fa"
         << testDir + "_common_data/scenarios/CAP3/region4.fa",
         outUrl));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
 
     //3) wait for task error, ensure that no output files are in the project
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2013,6 +2030,7 @@ GUI_TEST_CLASS_DEFINITION(test_0830) {
 
 GUI_TEST_CLASS_DEFINITION(test_0834) {
     GTFileDialog::openFile(os,  testDir + "_common_data/genbank/NC_014267.1_cut.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::getQualifierValue(os, "gene", "gene  (0, 1)") == "join(1..74213,77094..140426)",
         "Annotation \"gene\" has incorrect location");
@@ -2021,7 +2039,9 @@ GUI_TEST_CLASS_DEFINITION(test_0834) {
 GUI_TEST_CLASS_DEFINITION(test_0835) {
     //1. Open, for example, "murine.gb" and "sars.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the sequence objects in one Sequence View.
     // = > Both sequences are shown in one Sequence View.
@@ -2067,7 +2087,7 @@ GUI_TEST_CLASS_DEFINITION(test_0839) {
     actions << PwmBuildDialogFiller::Action(PwmBuildDialogFiller::ClickCancel, "");
     GTUtilsDialog::waitForDialog(os, new PwmBuildDialogFiller(os, actions));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::TFBS_MENU << ToolsMenu::TFBS_WEIGHT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Search for TFBS" << "Build weight matrix...");
     GTGlobals::sleep();
 }
 
@@ -2077,7 +2097,7 @@ GUI_TEST_CLASS_DEFINITION(test_0840) {
 
     class DigestCircularSequenceScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
 
             QListWidget *availableEnzymeWidget = GTWidget::findExactWidget<QListWidget *>(os, "availableEnzymeWidget", dialog);
@@ -2092,7 +2112,7 @@ GUI_TEST_CLASS_DEFINITION(test_0840) {
 
     class CreateAnnotationScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2105,6 +2125,7 @@ GUI_TEST_CLASS_DEFINITION(test_0840) {
 
     //1. Open "_common_data/enzymes/bsai_reverse_test.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/enzymes/bsai_reverse_test.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click "Find restriction sites" on toolbar.
     //3. Click OK button in dialog appeared.
@@ -2203,9 +2224,10 @@ GUI_TEST_CLASS_DEFINITION(test_0844) {
  *   Expected state: UGENE no crashes
 */
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2232,6 +2254,7 @@ GUI_TEST_CLASS_DEFINITION(test_0844) {
 GUI_TEST_CLASS_DEFINITION(test_0846) {
 //    1. Open "samples/human_t1".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Add any annotations;
     GTUtilsAnnotationsTreeView::createAnnotation(os, "", "", "1..100");
@@ -2240,12 +2263,12 @@ GUI_TEST_CLASS_DEFINITION(test_0846) {
 //    4. Chose "csv" in combobox "File format"
 //    5. Click checkbox "Save sequence names"
 //    6. Click "OK"
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Export annotations...", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Export annotations...", GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, sandBoxDir + "test_0846.csv", ExportAnnotationsFiller::csv));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
-
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
+    GTGlobals::sleep();
 //    Expected state: Annotations with sequence names were saved
     const QString data = GTFile::readAll(os, sandBoxDir + "test_0846.csv");
     const QString expectedSubstring = "human_T1 (UCSC April 2002 chr7:115977709-117855134)";
@@ -2260,6 +2283,7 @@ GUI_TEST_CLASS_DEFINITION(test_0854) {
 */
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/PBR322.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "PBR322.gb"));
     GTMouseDriver::click(os);
@@ -2283,6 +2307,7 @@ GUI_TEST_CLASS_DEFINITION(test_0858) {
 //    Expected state: the table in the editor and in the Options Panel have the same content
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
 
     QLabel* label = GTWidget::findExactWidget<QLabel*>(os, "characters_occurrence_label");
@@ -2298,6 +2323,7 @@ GUI_TEST_CLASS_DEFINITION(test_0858) {
 GUI_TEST_CLASS_DEFINITION(test_0861_1) {
     //1. Open sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "Annotations Highlighting" bar of the Options Panel
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
@@ -2319,11 +2345,12 @@ GUI_TEST_CLASS_DEFINITION(test_0861_1) {
 GUI_TEST_CLASS_DEFINITION(test_0861_2) {
     //1. Open sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "Annotations Highlighting" bar of the Options Panel
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
     QTreeWidget *highlightTree = GTWidget::findExactWidget<QTreeWidget *>(os, "OP_ANNOT_HIGHLIGHT_TREE");
-    CHECK_SET_ERR(highlightTree->topLevelItemCount() == 8, "Unexpected number of annotations");
+    CHECK_SET_ERR(highlightTree->topLevelItemCount() == 8, QString("Unexpected number of annotations: %1").arg(highlightTree->topLevelItemCount()));
 
     //3. Switch on ORFs auto annotation
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Show ORFs"));
@@ -2331,13 +2358,14 @@ GUI_TEST_CLASS_DEFINITION(test_0861_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected : "ORF" annotation appeared in the "Annotation type" window
-    CHECK_SET_ERR(highlightTree->topLevelItemCount() == 9, "Unexpected number of annotations");
+    CHECK_SET_ERR(highlightTree->topLevelItemCount() == 9, QString("Unexpected number of annotations: %1").arg(highlightTree->topLevelItemCount()));
     CHECK_SET_ERR(highlightTree->topLevelItem(7)->text(0) == "orf", QString("Unexpected annotation name at row %1").arg(7));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0861_3) {
     //1. Open sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "Annotations Highlighting" bar of the Options Panel
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
@@ -2361,6 +2389,7 @@ GUI_TEST_CLASS_DEFINITION(test_0861_4) {
     // Expected state: the message "The sequence doesn't have any annotations." is shown on the bar
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
     GTGlobals::sleep(500);
     QLabel* noAnnotTypesLabel = GTWidget::findExactWidget<QLabel*>(os, "noAnnotTypesLabel");
@@ -2372,6 +2401,7 @@ GUI_TEST_CLASS_DEFINITION(test_0861_4) {
 GUI_TEST_CLASS_DEFINITION(test_0861_5){
 //    1. Open sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open the "Annotations Highlighting" bar of the Options Panel
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
     QLineEdit* editQualifiers = GTWidget::findExactWidget<QLineEdit*>(os, "editQualifiers");
@@ -2403,6 +2433,7 @@ GUI_TEST_CLASS_DEFINITION(test_0868){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Zoom to any covered
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     for (int i = 0;i < 24;i++){
@@ -2454,6 +2485,7 @@ GUI_TEST_CLASS_DEFINITION(test_0871) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, sandBoxDir, "/test_0871");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::rename(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134) Amino translation 0 direct", "0");
     GTUtilsProjectTreeView::rename(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134) Amino translation 1 direct", "1");
@@ -2491,8 +2523,10 @@ GUI_TEST_CLASS_DEFINITION(test_0878) {
 //    Expected state: Log view is closed, selected document is active (not first).
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* win = GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(win != NULL, "Active window not found");
@@ -2514,6 +2548,7 @@ GUI_TEST_CLASS_DEFINITION(test_0882) {
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "can't be mapped"));
     GTFileDialog::openFile(os, dataDir + "samples/FASTQ/eas.fastq");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 }
 
@@ -2527,6 +2562,7 @@ GUI_TEST_CLASS_DEFINITION(test_0886) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "Gene.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QStringList errors = GTUtilsLog::getErrors(os, l1);
     CHECK_SET_ERR(errors.size() == 1, "Wrong errors count 1");
     //CHECK_SET_ERR(errors[0].contains(""), " 1");
@@ -2539,6 +2575,7 @@ GUI_TEST_CLASS_DEFINITION(test_0886) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "Gene.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     errors = GTUtilsLog::getErrors(os, l2);
     CHECK_SET_ERR(errors.size() == 2, "Wrong errors count 2");
     GTGlobals::sleep(10000);
@@ -2585,10 +2622,11 @@ GUI_TEST_CLASS_DEFINITION(test_0889) {
 //  Expected state: UGENE not crashed
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "RNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "CreateAnnotationDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "CreateAnnotationDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -2619,12 +2657,13 @@ GUI_TEST_CLASS_DEFINITION(test_0896) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/896/_input/url_out_in_exttool.uwl");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QString outputFile = QDir(sandBoxDir).absolutePath() + "/test_0896out.bam";
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -2654,6 +2693,7 @@ GUI_TEST_CLASS_DEFINITION(test_0896) {
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_0896"));
     GTFileDialog::openFile(os, sandBoxDir, "test_0896out.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
 
@@ -2662,6 +2702,7 @@ GUI_TEST_CLASS_DEFINITION(test_0896) {
 GUI_TEST_CLASS_DEFINITION(test_0898){
 //    1. Open _common_data/ugenedb/example_alignment.ugenedb
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb/example-alignment.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Zoom in until reads appear.
 
 //    3. Try to find consensus above reads area.
@@ -2682,9 +2723,10 @@ GUI_TEST_CLASS_DEFINITION(test_0899){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2783,10 +2825,11 @@ GUI_TEST_CLASS_DEFINITION(test_0910) {
 GUI_TEST_CLASS_DEFINITION(test_0928) {
     // 1. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "ORFDialogBase"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "ORFDialogBase"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -2818,7 +2861,7 @@ GUI_TEST_CLASS_DEFINITION(test_0930){
 //    1. Open any *.bam file (e.g. "_common_data/bam/scerevisiae.bam").
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2834,6 +2877,7 @@ GUI_TEST_CLASS_DEFINITION(test_0930){
     };
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, new Scenario()));
     GTFileDialog::openFile(os, testDir + "_common_data/bam/scerevisiae.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 //    Expected state: the "Import BAM File" dialog appeared.
 }
@@ -2900,6 +2944,7 @@ GUI_TEST_CLASS_DEFINITION(test_0938) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ASS_NAVIGATION"));
@@ -2927,6 +2972,7 @@ GUI_TEST_CLASS_DEFINITION(test_0940) {
 
     GTFileDialog::openFile(os, sandBoxDir, "test_0940.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
     GTUtilsDialog::waitForDialog(os, new ExtractSelectedAsMSADialogFiller(os,
@@ -2952,6 +2998,7 @@ GUI_TEST_CLASS_DEFINITION(test_0941) {
     //3. Select the second sequence and choose {Edit->Replace slected row with complement}. Expected state: The sequences is complemented
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Phaneroptera_falcata");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse"));
@@ -2980,6 +3027,7 @@ GUI_TEST_CLASS_DEFINITION(test_0947) {
  *    Expected state: GC Content (%) graph view resized
 */
     GTFileDialog::openFile(os, dataDir + "/samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget *sequenceWidget = GTWidget::findWidget( os, "ADV_single_sequence_widget_0" );
@@ -3014,7 +3062,7 @@ GUI_TEST_CLASS_DEFINITION(test_0948) {
     GTSequenceReadingModeDialog::mode = GTSequenceReadingModeDialog::Merge;
     GTUtilsDialog::waitForDialog(os, new GTSequenceReadingModeDialogUtils(os));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, testDir + "_common_data/scenarios/_regression/948/", QStringList() << "s1.fa" << "s2.fa"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
@@ -3064,6 +3112,7 @@ GUI_TEST_CLASS_DEFINITION(test_0958) {
     file.close();
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     ImportAnnotationsToCsvFiller::RoleParameters r;
     r << ImportAnnotationsToCsvFiller::RoleColumnParameter(0,  new ImportAnnotationsToCsvFiller::NameParameter())
@@ -3081,7 +3130,7 @@ GUI_TEST_CLASS_DEFINITION(test_0958) {
                                                                             ImportAnnotationsToCsvFiller::Genbank, true, true, ",", 1, "#",
                                                                             false, true, "misc_feature", r);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Import Annotations from CSV file"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action" << "import_annotations_from_CSV_file"));
     GTUtilsProjectTreeView::click(os, "human_T1.fa", Qt::RightButton);
     GTGlobals::sleep();
 
@@ -3107,7 +3156,9 @@ GUI_TEST_CLASS_DEFINITION(test_0965) {
     //1. Open a few files supporting bookmarks.
     //Expected state: in "Bookmarks" area corresponding number of root bookmarks are created.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Create a few sub bookmarks for each view.
     GTUtilsBookmarksTreeView::addBookmark(os, GTUtilsMdi::activeWindow(os)->objectName(), "murine");
@@ -3129,6 +3180,7 @@ GUI_TEST_CLASS_DEFINITION(test_0967_1) {
  *   Expected state: Project View should be not hidden.
 */
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProject::checkProject(os);
     CHECK_SET_ERR(true == GTUtilsProjectTreeView::isVisible(os), "ProjectTreeView is not visible (check #1)");
 
@@ -3205,19 +3257,21 @@ GUI_TEST_CLASS_DEFINITION(test_0970) {
 GUI_TEST_CLASS_DEFINITION(test_0981_1) {
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     Runnable *filler1 = new InsertSequenceFiller(os,
         "qweqwea", InsertSequenceFiller::Resize, 1, "", InsertSequenceFiller::FASTA, false, false, GTGlobals::UseMouse, true
         );
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0981_2) {
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 2));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -3237,6 +3291,7 @@ GUI_TEST_CLASS_DEFINITION(test_0981_2) {
 GUI_TEST_CLASS_DEFINITION(test_0986) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     SmithWatermanDialogFiller *filler = new SmithWatermanDialogFiller(os);
@@ -3255,14 +3310,14 @@ GUI_TEST_CLASS_DEFINITION(test_0986) {
 GUI_TEST_CLASS_DEFINITION(test_0986_1) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     SmithWatermanDialogFiller *filler = new SmithWatermanDialogFiller(os);
     filler->button = SmithWatermanDialogFiller::Cancel;
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTGlobals::sleep(5000);
@@ -3271,13 +3326,13 @@ GUI_TEST_CLASS_DEFINITION(test_0986_1) {
 GUI_TEST_CLASS_DEFINITION(test_0986_2) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     GTRegionSelector::RegionSelectorSettings regionSelectorSettings(1, 2);
     GTUtilsDialog::waitForDialog(os, new SmithWatermanDialogFiller(os, "ATCG", regionSelectorSettings));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTGlobals::sleep(5000);
@@ -3286,13 +3341,13 @@ GUI_TEST_CLASS_DEFINITION(test_0986_2) {
 GUI_TEST_CLASS_DEFINITION(test_0986_3) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     GTRegionSelector::RegionSelectorSettings regionSelectorSettings(1, 2);
     GTUtilsDialog::waitForDialog(os, new SmithWatermanDialogFiller(os, "ATCGAT", regionSelectorSettings));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
@@ -3305,13 +3360,13 @@ GUI_TEST_CLASS_DEFINITION(test_0986_3) {
 GUI_TEST_CLASS_DEFINITION(test_0986_4) {
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     GTRegionSelector::RegionSelectorSettings regionSelectorSettings(1, 2);
     GTUtilsDialog::waitForDialog(os, new SmithWatermanDialogFiller(os, "ATCGAT", regionSelectorSettings));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_pattern_smith_waterman_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -3325,6 +3380,7 @@ GUI_TEST_CLASS_DEFINITION(test_0994) {
  *   Expected state: UGENE not crashes
 */
     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"));
     GTGlobals::sleep(1000);
@@ -3336,7 +3392,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_1) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3345,7 +3401,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_1) {
 //        {Custom settings} - checked
 //        {Replace unknown symbols with} - z
             GTPlainTextEdit::setPlainText(os, GTWidget::findExactWidget<QPlainTextEdit *>(os, "sequenceEdit", dialog), "AAAAAD");
-            GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, "groupBox", dialog), true);
+            GTGroupBox::setChecked(os, "groupBox", dialog);
             GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "replaceRB", dialog));
             GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "symbolToReplaceEdit", dialog), "z");
 
@@ -3359,7 +3415,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_1) {
     };
 
     GTUtilsDialog::waitForDialog(os, new CreateDocumentFiller(os, new Scenario));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0999_2) {
@@ -3368,7 +3424,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_2) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3378,7 +3434,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_2) {
 //        {Replace unknown symbols with} - T
 //        {Document Location} - %any valid filepath%
             GTPlainTextEdit::setPlainText(os, GTWidget::findExactWidget<QPlainTextEdit *>(os, "sequenceEdit", dialog), "AAAZZZZZZAAA");
-            GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, "groupBox", dialog), true);
+            GTGroupBox::setChecked(os, GTWidget::findExactWidget<QGroupBox *>(os, "groupBox", dialog));
             GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "replaceRB", dialog));
             GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "symbolToReplaceEdit", dialog), "T");
             GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "filepathEdit", dialog), sandBoxDir + "test_0999_2.fa");
@@ -3390,7 +3446,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_2) {
     };
 
     GTUtilsDialog::waitForDialog(os, new CreateDocumentFiller(os, new Scenario));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, GTMenu::FILE), QStringList() << "New document from text");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::findWindow(os, "test_0999_2 [s] test_0999_2");
@@ -3399,6 +3455,7 @@ GUI_TEST_CLASS_DEFINITION(test_0999_2) {
 GUI_TEST_CLASS_DEFINITION(test_1000) {
 //    1. Open "data/samples/3INS.PDB".
     GTFileDialog::openFile(os, dataDir + "samples/PDB/3INS.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. In the context menu of the first sequence in sequence view choose {Analize -> Predict secondary structure...}.
 //    Expected state: "Secondary structure prediction" dialog is opened.
@@ -3412,11 +3469,10 @@ GUI_TEST_CLASS_DEFINITION(test_1000) {
 
         }
 
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
-            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
             GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "algorithmComboBox", dialog), algorithm);
 
 //    3. Fill fields "Range start" and "Range end" with values "1" and "2" respectively.
@@ -3424,8 +3480,40 @@ GUI_TEST_CLASS_DEFINITION(test_1000) {
             GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "rangeEndSpinBox", dialog), 2, GTGlobals::UseKeyBoard);
 
 //    4. Press "Start prediction".
+            GTGlobals::sleep();
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+            GTGlobals::sleep(500);
+            GTThread::waitForMainThread(os);
+        }
+
+    private:
+        const QString algorithm;
+    };
+
+    class DodgeLicenceDialogScenario : public CustomScenario {
+    public:
+        DodgeLicenceDialogScenario(const QString &algorithm) :
+            CustomScenario(),
+            algorithm(algorithm) {
+
+        }
+
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(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);
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+            GTGlobals::sleep(500);
+            GTThread::waitForMainThread(os);
         }
 
     private:
@@ -3444,9 +3532,16 @@ GUI_TEST_CLASS_DEFINITION(test_1000) {
 //    6. Press "Start prediction".
 //    Expected state: Error notification appears.
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Predict secondary structure..."));
+    GTUtilsDialog::waitForDialog(os, new PredictSecondaryStructureDialogFiller(os, new DodgeLicenceDialogScenario("PsiPred")));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Predict secondary structure..."));
     GTUtilsDialog::waitForDialog(os, new PredictSecondaryStructureDialogFiller(os, new Scenario("PsiPred")));
     GTUtilsNotifications::waitForNotification(os, true, "'Secondary structure predict' task failed: The size of sequence is less then minimal allowed size (5 residues).");
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
+
+    GTGlobals::sleep();
 }
 
 }
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
index 8379e0f..2c4eace 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_regression_scenarios {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_regression_scenarios_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_regression_scenarios"
 
 GUI_TEST_CLASS_DECLARATION(test_0057_1)
 GUI_TEST_CLASS_DECLARATION(test_0057_2)
@@ -50,13 +50,13 @@ GUI_TEST_CLASS_DECLARATION(test_0567)
 GUI_TEST_CLASS_DECLARATION(test_0574)
 GUI_TEST_CLASS_DECLARATION(test_0587)
 GUI_TEST_CLASS_DECLARATION(test_0597)
+GUI_TEST_CLASS_DECLARATION(test_0598)
 
 GUI_TEST_CLASS_DECLARATION(test_0605)
 GUI_TEST_CLASS_DECLARATION(test_0610)
 GUI_TEST_CLASS_DECLARATION(test_0627)
 GUI_TEST_CLASS_DECLARATION(test_0652)
 GUI_TEST_CLASS_DECLARATION(test_0659)
-GUI_TEST_CLASS_DECLARATION(test_0663)
 GUI_TEST_CLASS_DECLARATION(test_0666)
 GUI_TEST_CLASS_DECLARATION(test_0677)
 GUI_TEST_CLASS_DECLARATION(test_0678)
@@ -154,7 +154,7 @@ GUI_TEST_CLASS_DECLARATION(test_0999_1)
 GUI_TEST_CLASS_DECLARATION(test_0999_2)
 GUI_TEST_CLASS_DECLARATION(test_1000)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_regression_scenarios
 
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 140a4ad..afc6799 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
@@ -19,41 +19,46 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsRegressionScenarios_2001_3000.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 "api/GTRadioButton.h"
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTSlider.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWebView.h"
-#include "api/GTWidget.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/MSAEditor.h>
+#include <U2View/MSAEditorNameList.h>
 
+#include "../../workflow_designer/src/WorkflowViewItems.h"
 #include "GTDatabaseConfig.h"
-#include "GTUtilsAnnotationsTreeView.h"
+#include "GTTestsRegressionScenarios_2001_3000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
+#include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -62,8 +67,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"
@@ -71,14 +76,38 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-
-#include "runnables/qt/DefaultDialogFiller.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTRadioButton.h>
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include "utils/GTThread.h"
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWebView.h>
+#include <primitives/GTWidget.h>
+#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.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"
@@ -110,7 +139,7 @@
 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
 #include "runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h"
 #include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
@@ -144,13 +173,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,39 +189,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 <U2Core/U2OpStatusUtils.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 <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 {
@@ -204,6 +200,7 @@ GUI_TEST_CLASS_DEFINITION( test_2006 )
 
     // 1. Open "data/samples/CLUSTAL/COI.aln" and save it's part to a string
     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"] );
     GTGlobals::sleep(200);
@@ -242,6 +239,7 @@ GUI_TEST_CLASS_DEFINITION( test_2007 )
 {
     // 1. Open "_common_data/scenarios/msa/ma_empty_line.aln (and save it to string)
     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"] );
     GTGlobals::sleep(200);
@@ -274,7 +272,7 @@ GUI_TEST_CLASS_DEFINITION( test_2009 ){
 //    2) Set correct BWA or any other tool path (preferably just executable)
     class BWAInactivation : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //    3) Clear set path
             AppSettingsDialogFiller::clearToolPath(os, "BWA");
 
@@ -287,8 +285,7 @@ GUI_TEST_CLASS_DEFINITION( test_2009 ){
     GTLogTracer l;
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new BWAInactivation()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 //    4) Look at UGENE log
     GTUtilsLog::check(os, l);
 //    Expected state: UGENE doesn't write any error to log
@@ -297,6 +294,7 @@ GUI_TEST_CLASS_DEFINITION( test_2009 ){
 GUI_TEST_CLASS_DEFINITION( test_2012 ){
     //1. Open {data/samples/CLUSTALW/COI.aln}.
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "General" tab on the options panel.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_GENERAL"));
@@ -329,6 +327,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_1 )
 {
     // 1. Open document "ma.aln" and save it to string
     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"] );
     GTGlobals::sleep(200);
@@ -372,6 +371,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_2 )
 {
     // 1. Open document "ma.aln" and save it to string
     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"] );
     GTGlobals::sleep(200);
@@ -423,6 +423,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_3 )
 {
     // 1. Open document "ma2_gap_8_col.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma2_gap_8_col.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select a column in the sequence area
     GTUtilsMSAEditorSequenceArea::moveTo( os, QPoint( 0, 0 ) );
@@ -455,6 +456,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_4 )
 {
     // 1. Open document "ma2_gap_8_col.aln" and save it to string
     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"] );
     GTGlobals::sleep(200);
@@ -486,6 +488,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_5 )
 {
     // 1. Open document "ma2_gap_8_col.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma2_gap_8_col.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select a column in the sequence area
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 9, 0 ), QPoint( 16, 9 ) );
@@ -509,6 +512,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_6 )
 {
     // 1. Open "data/samples/CLUSTAL/COI.aln".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Set cursor to the position 45 of the first line (after gaps).
     const QPoint initialSelectionPos( 44, 0 );
@@ -532,6 +536,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_7 )
 {
     // 1. Open test/_common_data/scenarios/msa/ma2_gap_col.aln.
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma2_gap_col.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the 8 and 9 of the third line (two symbols after gaps).
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 7, 2 ), QPoint( 8, 2 ) );
@@ -555,6 +560,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_8 )
 {
     // 1. Open "data/samples/CLUSTAL/COI.aln".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the 45 and 46 of the second line (two symbols after gaps).
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 44, 1 ), QPoint( 45, 1 ) );
@@ -577,6 +583,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_9 )
 {
     // 1. Open "data/samples/CLUSTAL/COI.aln".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the 45 and 46 of the second line (two symbols after gaps).
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 44, 2 ), QPoint( 46, 2 ) );
@@ -599,7 +606,7 @@ GUI_TEST_CLASS_DEFINITION(test_2024){
 //    1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
-//    2. Add element "Local BLAST Search"
+//    2. Add element "Local BLAST search"
     GTUtilsWorkflowDesigner::addAlgorithm( os, "Local BLAST search" );
     GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os, "Local BLAST search"));
     GTMouseDriver::click(os);
@@ -613,6 +620,7 @@ GUI_TEST_CLASS_DEFINITION(test_2024){
 GUI_TEST_CLASS_DEFINITION( test_2026 ) {
     // 1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select Montana_montana in name list
     GTUtilsMSAEditorSequenceArea::selectSequence(os, QString("Montana_montana"));
@@ -655,6 +663,7 @@ GUI_TEST_CLASS_DEFINITION( test_2026 ) {
 GUI_TEST_CLASS_DEFINITION( test_2030 ) {
     // 1. Open {_common_data/scenarios/msa/ma_one_line.aln}
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma_one_line.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Set cursor to the end of the line
     const QPoint endLinePos( 11, 0 );
@@ -685,6 +694,7 @@ GUI_TEST_CLASS_DEFINITION( test_2032 ) {
     // 1. Open {_common_data/fasta/abcd.fa} as separate sequences
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "abcd.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     // Expected result: order of sequences in the project view is {d, a, c, b}
@@ -715,6 +725,7 @@ GUI_TEST_CLASS_DEFINITION( test_2032 ) {
 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"));
@@ -761,20 +772,6 @@ GUI_TEST_CLASS_DEFINITION( test_2053 ){
 //    Expected state: dashboard view has opened, no hint has appeared
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2070 ){
-    GTLogTracer lt;
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "Q9IGQ6", 7));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
-    GTGlobals::sleep();
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
-
-    GTUtilsDocument::isDocumentLoaded(os, "Q9IGQ6_das.gb");
-    GTUtilsDocument::checkDocument(os, "Q9IGQ6_das.gb", AnnotatedDNAViewFactory::ID);
-
-    GTUtilsLog::check(os, lt);
-}
-
 GUI_TEST_CLASS_DEFINITION( test_2076 ){
 //    1) Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
@@ -795,7 +792,7 @@ GUI_TEST_CLASS_DEFINITION( test_2076 ){
 //    Expected state: 'Dashboards manager' dialog appeared
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //    4) Select some dashboards in the dialog
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
@@ -857,51 +854,52 @@ GUI_TEST_CLASS_DEFINITION( test_2077 ){
     GTUtilsWorkflowDesigner::checkErrorList( os, "file '../human_T1.fa' was specified several times" );
     }
 
-GUI_TEST_CLASS_DEFINITION( test_2078 ){
+GUI_TEST_CLASS_DEFINITION(test_2078) {
     //    1. Go to the WD samples. Double click on the Chip-Seq WD sample.
-        GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     //    Expexted: setup dialog appears.
-        GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Cistrome Workflow", QStringList()<<
-                                                                       "Only treatment tags"));
+    GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Cistrome Workflow", QStringList()<<
+                                                                   "Only treatment tags"));
 
-        class customWizard : public CustomScenario {
-        public:
-            void run(U2OpStatus &os) {
-                QWidget* dialog = QApplication::activeModalWidget();
-                CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-                QWizard* wizard = qobject_cast<QWizard*>(dialog);
-                CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
+    class customWizard : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget* dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+            QWizard* wizard = qobject_cast<QWizard*>(dialog);
+            CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-                GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
-                GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
-                GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
-                GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
-                GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
 
-                QComboBox* combo = GTWidget::findExactWidget<QComboBox*>(os, "Motif database widget", dialog);
-                GTComboBox::checkValues(os, combo, QStringList()<<"cistrome.xml"<<"jaspar.xml");
-
-                QList<QLabel*> labelList = wizard->currentPage()->findChildren<QLabel*>();
-                bool found = false;
-                foreach (QLabel* l, labelList) {
-                    if(l->text().contains("Use 'cistrome.xml' to descrease the computation time")){
-                        CHECK_SET_ERR(l->isVisible(), "hint is invisiable");
-                        found = true;
-                        break;
-                    }
+            QComboBox* combo = GTWidget::findExactWidget<QComboBox*>(os, "Motif database widget", dialog);
+            GTComboBox::checkValues(os, combo, QStringList()<<"cistrome.xml"<<"jaspar.xml");
+
+            QList<QLabel*> labelList = wizard->currentPage()->findChildren<QLabel*>();
+            bool found = false;
+            foreach (QLabel* l, labelList) {
+                if(l->text().contains("Use 'cistrome.xml' to descrease the computation time")){
+                    CHECK_SET_ERR(l->isVisible(), "hint is invisiable");
+                    found = true;
+                    break;
                 }
-                CHECK_SET_ERR(found, "hint label not found");
+            }
+            CHECK_SET_ERR(found, "hint label not found");
 
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
+            dialog = QApplication::activeModalWidget();
+            if(dialog != NULL){
                 GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
-                dialog = QApplication::activeModalWidget();
-                if(dialog != NULL){
-                    GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
-                }
-
             }
-        };
-        GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "ChIP-seq Analysis Wizard", new customWizard));
-        GTUtilsWorkflowDesigner::addSample(os, "Cistrome");
+
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "ChIP-seq Analysis Wizard", new customWizard));
+    GTUtilsWorkflowDesigner::addSample(os, "Cistrome");
+    GTGlobals::sleep();
 
 //    4. In 'Motif database' combobox select following databases: 'cistrome.xml', 'jaspar.xml'
 //    Expected state: hint was appeared and contains following text "Use 'cistrome.xml' to decrease computation time..."
@@ -914,13 +912,14 @@ GUI_TEST_CLASS_DEFINITION( test_2089 )
 
     // 2. Open WD
     // 3. Set any folder without write access as workflow output directory. Click OK.
-    QMenu *menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2100_1 ){
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select Hetrodes_pupus_EF540832
     GTUtilsMSAEditorSequenceArea::selectSequence(os, QString("Hetrodes_pupus_EF540832"));
@@ -936,6 +935,7 @@ GUI_TEST_CLASS_DEFINITION( test_2100_1 ){
 GUI_TEST_CLASS_DEFINITION( test_2100_2 ){
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click toolbutton "Enable collapsing"
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -958,6 +958,7 @@ GUI_TEST_CLASS_DEFINITION( test_2100_2 ){
 GUI_TEST_CLASS_DEFINITION( test_2100_3 ){
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click toolbutton "Enable collapsing"
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -970,27 +971,10 @@ GUI_TEST_CLASS_DEFINITION( test_2100_3 ){
 
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2122 ){
-//    1. Open some sequence translated to amino
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "AMINO.fa");
-//    2. Click Option panel button "das annotations"
-    GTWidget::click(os,GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-//    3. Click "show more options"
-    GTWidget::click(os,GTWidget::findWidget(os,"lblShowMoreLess"),Qt::LeftButton,QPoint(10,10));
-//    Expected state:Algorithm settings, DAS features sourses, Annotation settings submenus appeared
-    QWidget* settingsContainerWidget = GTWidget::findWidget(os,"settingsContainerWidget");
-    QWidget* sourcesContainerWidget = GTWidget::findWidget(os,"sourcesContainerWidget");
-    QWidget* annotationsSettingsContainerWidget = GTWidget::findWidget(os,"annotationsSettingsContainerWidget");
-
-    CHECK_SET_ERR(settingsContainerWidget->isVisible(), "settingsContainerWidget is not visible");
-    CHECK_SET_ERR(sourcesContainerWidget->isVisible(), "sourcesContainerWidget is not visible");
-    CHECK_SET_ERR(annotationsSettingsContainerWidget->isVisible(), "annotationsSettingsContainerWidget is not visible");
-}
-
 GUI_TEST_CLASS_DEFINITION( test_2124 ) {
     // 1. Open "data/samples/CLUSTALW/ty3.aln.gz".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "ty3.aln.gz" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Call the context menu on the sequence area.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
@@ -1011,6 +995,7 @@ GUI_TEST_CLASS_DEFINITION( test_2124 ) {
 GUI_TEST_CLASS_DEFINITION(test_2091) {
     //1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state: document are opened in the project view; MSA Editor are shown with test_alignment.
     GTUtilsProjectTreeView::findIndex(os, "COI.aln");
@@ -1088,6 +1073,7 @@ GUI_TEST_CLASS_DEFINITION( test_2128 )
 {
     // 1. Open document "ma.aln" and save it to string
     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"] );
     GTGlobals::sleep(200);
@@ -1132,6 +1118,7 @@ GUI_TEST_CLASS_DEFINITION( test_2128_1 )
 {
     // 1. Open "data/samples/CLUSTAL/COI.aln".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the six first symbols in the first sequence and press Space.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 5, 0 ) );
@@ -1238,8 +1225,7 @@ GUI_TEST_CLASS_DEFINITION( test_2140 )
 
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ConvertAssemblyToSAMDialogFiller(os, dataDir + "samples/FASTA/", "human_T1.fa"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS),
-        QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_CONVERT_SAM);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Convert UGENE assembly database to SAM...");
 
     CHECK_SET_ERR(l.hasError() == true, "There is no error message in log");
 }
@@ -1282,16 +1268,18 @@ GUI_TEST_CLASS_DEFINITION( test_2150 ){
     GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
     GTMouseDriver::click(os);
     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");
+//    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(os,GTTableView::getCellPosition(os,table,1,1));
+//    GTMouseDriver::click(os);
     QString s = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
     GTKeyboardDriver::keySequence(os, s+"/2150_0001.sto");
+    GTUtilsWorkflowDesigner::setParameter(os, "Output file", s+"/2150_0001.aln", GTUtilsWorkflowDesigner::textValue);
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
     // 5. Run the workflow.
@@ -1301,6 +1289,7 @@ GUI_TEST_CLASS_DEFINITION( test_2150 ){
 
     // 6. During the workflow execution open the "Tasks" panel in the bottom, find in the task tree the "MUSCLE alignment" subtask and cancel it.
     GTUtilsTask::cancelSubTask(os, "MUSCLE alignment");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2152 ){
@@ -1344,6 +1333,7 @@ GUI_TEST_CLASS_DEFINITION( test_2152 ){
 GUI_TEST_CLASS_DEFINITION( test_2156 ){
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/","COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::openView(os);
     GTUtilsProjectTreeView::toggleView(os);
     GTGlobals::sleep(500);
@@ -1364,6 +1354,7 @@ GUI_TEST_CLASS_DEFINITION( test_2157 )
 {
 //    1. Open file "https://ugene.unipro.ru/tracker/secure/attachment/12864/pdb1a07.ent.gz".
     GTFileDialog::openFile(os, testDir + "_common_data/pdb/", "pdb1a07.ent.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    Expected state: UGENE displays sequence and 3d structure
     GTUtilsMdi::findWindow(os, "pdb1a07.ent.gz");
@@ -1373,6 +1364,7 @@ GUI_TEST_CLASS_DEFINITION( test_2160 )
 {
     // 1. Open document "ma.aln"
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select whole msa
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
@@ -1397,86 +1389,11 @@ GUI_TEST_CLASS_DEFINITION( test_2160 )
         "MSA row count unexpectedly changed" );
 }
 
-
-GUI_TEST_CLASS_DEFINITION( test_2163 ) {
-    // 1. Open "_common_data/fasta/AMINO.fa".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
-
-    // 2. Open the DAS widget on the options panel
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-    QWidget *dasPanel = GTWidget::findWidget(os, "DasOptionsPanelWidget");
-    CHECK(NULL != dasPanel, );
-
-    //3. Press "Fetch IDs".
-    QWidget *searchIdsButton = GTWidget::findWidget(os, "searchIdsButton");
-    GTWidget::click(os, searchIdsButton);
-    GTGlobals::sleep(500);
-
-   //4. Double click on the results table.
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    QTableWidget *idList = qobject_cast<QTableWidget*>(GTWidget::findWidget(os, "idList"));
-
-    GTGlobals::sleep();
-
-    QPoint p1 = idList->mapFromGlobal(GTTableView::getCellPosition(os, idList, 0, 0));
-    GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, idList, 0, 0 ));
-    QString value1 = idList->itemAt(p1)->text();
-    GTMouseDriver::doubleClick(os);
-
-
-    // 4. Try to delete value from table
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-
-    //Expected state: value not deleted
-    QString value2 = idList->itemAt(p1)->text();
-    CHECK_SET_ERR(value1 == value2, "Results differ!");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2164 ) {
-    // 1. Open "_common_data/fasta/AMINO.fa".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
-
-    // 2. Open the DAS widget on the options panel
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-    QWidget *dasPanel = GTWidget::findWidget(os, "DasOptionsPanelWidget");
-    CHECK(NULL != dasPanel, );
-
-    //3. Press "Fetch IDs".
-    QWidget *searchIdsButton = GTWidget::findWidget(os, "searchIdsButton");
-    GTWidget::click(os, searchIdsButton);
-    GTGlobals::sleep(500);
-
-    //Expected: the "Fetch ID" button is disabled until the task is finished or canceled.
-    CHECK_SET_ERR(!searchIdsButton->isEnabled(), "Fetch IDs is enabled!");
-    TaskScheduler* scheduller = AppContext::getTaskScheduler();
-    GTGlobals::sleep(5000);
-    while(!scheduller->getTopLevelTasks().isEmpty()){
-        GTGlobals::sleep();
-    }
-    CHECK_SET_ERR(searchIdsButton->isEnabled(), "Fetch IDs is disabled!");
-    //4. Right click on the results table.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() <<"Fetch IDs"));
-    GTWidget::click(os, GTWidget::findWidget(os, "idList"), Qt::RightButton);
-
-    //Expected: the context menu action "Fetch IDs" is disabled until the task is finished or canceled.
-    CHECK_SET_ERR(!searchIdsButton->isEnabled(), "Fetch IDs is enabled!");
-    GTGlobals::sleep(500);
-    TaskScheduler* scheduller1 = AppContext::getTaskScheduler();
-    GTGlobals::sleep(5000);
-    while(!scheduller1->getTopLevelTasks().isEmpty()){
-       GTGlobals::sleep();
-    }
-    CHECK_SET_ERR(searchIdsButton->isEnabled(), "Fetch IDs is disabled!");
-    GTGlobals::sleep(500);
-}
-
 GUI_TEST_CLASS_DEFINITION( test_2165 ) {
     GTLogTracer l;
     //1. Open human_t1
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Copy the whole sequence to the clipboard
     GTWidget::click(os, GTWidget::findWidget(os, "annotated_DNA_scrollarea"));
@@ -1491,10 +1408,9 @@ GUI_TEST_CLASS_DEFINITION( test_2165 ) {
     GTWidget::click(os, GTWidget::findWidget(os, "textPattern"));
 
     GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(5000);
+    GTThread::waitForMainThread(os);
 
     //4. Press the "Search" button
-    //GTWidget::click(os, GTWidget::findWidget(os, "btnSearch"));
 
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -1503,190 +1419,10 @@ GUI_TEST_CLASS_DEFINITION( test_2165 ) {
     CHECK_SET_ERR(l.hasError() == true, "Error message expected in log");
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2167 ) {
-    GTLogTracer logTracer;
-
-    // 1. Open "_common_data/fasta/AMINO.fa".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
-
-    // 2. Open the DAS widget on the options panel
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-    QWidget *dasPanel = GTWidget::findWidget(os, "DasOptionsPanelWidget");
-    CHECK_SET_ERR(NULL != dasPanel, "DasOptionsPanelWidget is NULL!");
-
-    // 3. Click "Fetch ids".
-    QWidget *searchIdsButton = GTWidget::findWidget(os, "searchIdsButton");
-    GTWidget::click(os, searchIdsButton);
-    GTGlobals::sleep(500);
-
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    // 4. Select a result id in the table.
-    QTableWidget* resultsView = qobject_cast<QTableWidget*>(GTWidget::findWidget(os, "idList"));
-    CHECK_SET_ERR(NULL != resultsView, "Results widget is NULL!");
-    QPoint p1 = resultsView->mapFromGlobal(GTTableView::getCellPosition(os, resultsView, 0, 3));
-    GTWidget::click(os, resultsView, Qt::LeftButton, p1);
-
-    int count1 = resultsView->model()->rowCount();
-    QString value1 = resultsView->itemAt(p1)->text();
-
-    // 5. Click "Fetch ids" once again.
-    GTWidget::click(os, searchIdsButton);
-    GTGlobals::sleep(500);
-
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    // Expected: the table contains only the last results. There are no previous items and additional empty lines.
-    QPoint p2 = resultsView->mapFromGlobal(GTTableView::getCellPosition(os, resultsView, 0, 3));
-    GTWidget::click(os, resultsView, Qt::LeftButton, p2);
-
-    int count2 = resultsView->model()->rowCount();
-    QString value2 = resultsView->itemAt(p2)->text();
-
-    CHECK_SET_ERR(count1 == count2, "There are empty rows!");
-    CHECK_SET_ERR(value1 == value2, "Results differ!");
-
-    GTUtilsLog::check(os, logTracer);
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2169 ) {
-    // 1. Open "data/PDB/1CF7.pdb".
-    GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
-
-    // 2. Open the DAS widget on the options panel
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-
-    QWidget *dasPanel = GTWidget::findWidget(os, "DasOptionsPanelWidget");
-    CHECK(NULL != dasPanel, );
-    QWidget *regionSelector = GTWidget::findWidget(os, "range_selector");
-    CHECK(NULL != regionSelector, );
-
-    GTWidget::click(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
-    GTGlobals::sleep(500);
-    CHECK_SET_ERR(dasPanel->isEnabled(), "DAS panel is disabled for amino acid sequence");
-    CHECK_SET_ERR(regionSelector->isEnabled(), "DAS panel child is disabled for amino acid sequence");
-
-    GTWidget::click(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_2"));
-    GTGlobals::sleep(500);
-    CHECK_SET_ERR(!dasPanel->isEnabled(), "DAS panel is enabled for nucleic acid sequence");
-    CHECK_SET_ERR(!regionSelector->isEnabled(), "DAS panel child is enabled for nucleic acid sequence");
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2171 )
-{
-    //1. Open file _common_data/fasta/AMINO.fa
-    GTFileDialog::openFile( os, testDir + "_common_data/fasta", "AMINO.fa");
-    //2. Open DAS option panel
-    GTWidget::click( os, GTWidget::findWidget( os, "OP_DAS" ) );
-    //3. Click fetch IDs
-    GTWidget::click( os, GTWidget::findWidget( os, "searchIdsButton" ) );
-    //4. Cancel task  "Fetch IDs"
-    GTUtilsTaskTreeView::cancelTask(os, "Get an ID for the sequence");
-    //Expected state: task canceled
-    QTreeWidget *taskTreeWidget = GTUtilsTaskTreeView::getTreeWidget(os);
-    CHECK_SET_ERR(taskTreeWidget->invisibleRootItem()->childCount() == 0, "Task is not canceled");
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2172 ) {
-    GTLogTracer logTracer;
-
-    // 1. Open file _common_data/fasta/amino_multy.fa
-    GTUtilsDialog::waitForDialog( os, new SequenceReadingModeSelectorDialogFiller( os ) );
-    const QString filePath = testDir + "_common_data/fasta/amino_multy.fa";
-    GTUtilsProject::openFiles(os, QList<QUrl>( ) << filePath );
-    GTGlobals::sleep( );
-
-    // 2. Open DAS option panel
-    GTWidget::click( os, GTWidget::findWidget( os, "OP_DAS" ) );
-    GTGlobals::sleep( 200 );
-
-    // 3. Check that warning message exists
-    const QLabel *warnignLabel = qobject_cast<QLabel*>( GTWidget::findWidget( os, "hintLabel" ) );
-    CHECK_SET_ERR( NULL != warnignLabel, "Cannot find the hint label" );
-
-    QString warningText = warnignLabel->text( );
-    CHECK_SET_ERR( warningText.startsWith( "Warning" ), "No warning message found" );
-
-    // 4. Press the "Fetch IDs" button
-    QPushButton *fetchButton = qobject_cast<QPushButton *>( GTWidget::findWidget( os,
-        "searchIdsButton" ) );
-    CHECK_SET_ERR( NULL != fetchButton, "Cannot find the \"Fetch IDs\" button" );
-    fetchButton->click( );
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    // 5. Check error message in log
-    CHECK_SET_ERR( logTracer.hasError( ), "Error message expected in log" );
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2174 ) {
-    //1. Open file _common_data/fasta/AMINO.fa
-    GTFileDialog::openFile( os, testDir + "_common_data/fasta/", "AMINO.fa");
-    GTGlobals::sleep();
-
-    //2. Open DAS option panel
-    GTWidget::click(os,GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-
-    //3. Select region 1-2
-    GTRegionSelector::RegionSelectorSettings regionSelectorSettings(1, 2);
-    RegionSelector *regionSelector = qobject_cast<RegionSelector*>(GTWidget::findWidget(os, "range_selector"));
-    GTRegionSelector::setRegion(os, regionSelector, regionSelectorSettings);
-
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["enter"] );
-    GTGlobals::sleep( 200 );
-
-    //Expected state: warning message appeares
-
-    QLabel *warnignLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "hintLabel"));
-    CHECK_SET_ERR(warnignLabel != NULL, "Cannot find the hint label");
-
-    QString warningText = warnignLabel->text();
-    CHECK_SET_ERR( warningText.startsWith("Warning"), "No warning message found");
-}
-
-GUI_TEST_CLASS_DEFINITION( test_2186 ) {
-//    1. Open file _common_data/fasta/amino_multy.fa
-    GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
-    GTFileDialog::openFile( os, testDir + "_common_data/fasta", "amino_multy.fa");
-    GTGlobals::sleep(500);
-//    2. Open the DAS widget on the options panel
-    GTWidget::click(os,GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
-    GTWidget::click(os,GTWidget::findWidget(os, "OP_DAS"));
-    GTGlobals::sleep(500);
-//    3. Select first sequence, select region 1-100
-    GTRegionSelector::RegionSelectorSettings regionSelectorSettings(1, 100);
-    RegionSelector *regionSelector = qobject_cast<RegionSelector*>(GTWidget::findWidget(os, "range_selector"));
-    GTRegionSelector::setRegion(os, regionSelector, regionSelectorSettings);
-
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["enter"] );
-    GTGlobals::sleep( 200 );
-//    4. Click fetch IDs
-    GTWidget::click( os, GTWidget::findWidget( os, "searchIdsButton" ) );
-    TaskScheduler* scheduller = AppContext::getTaskScheduler();
-    while(!scheduller->getTopLevelTasks().isEmpty()){
-        GTGlobals::sleep();
-    }
-//    Expected state:2 IDs are found
-    GTGlobals::sleep();
-    QTableWidget* idList = qobject_cast<QTableWidget*>(GTWidget::findWidget(os, "idList"));
-    CHECK_SET_ERR(idList,"idList widget not found");
-    CHECK_SET_ERR(idList->rowCount()==2,QString("idList contains %1 rows, expected 2").arg(idList->rowCount()));
-
-//    5. select second sequence
-    GTWidget::click(os,GTWidget::findWidget(os,"ADV_single_sequence_widget_1"));
-    GTGlobals::sleep(500);
-//    Expected state: IDs table on option panel cleared
-     CHECK_SET_ERR(idList->rowCount()==0,QString("idList contains %1 rows, expected 0").arg(idList->rowCount()));
-
-
-}
-
 GUI_TEST_CLASS_DEFINITION( test_2188 ) {
     class Helper {
     public:
-        Helper(const QString &dataDir, const QString &testDir, U2OpStatus &os) {
+        Helper(const QString &dataDir, const QString &testDir, HI::GUITestOpStatus &os) {
             dir = testDir + "_common_data/scenarios/sandbox/";
             fileName = "regression_test_2188.fa";
             url = dir + fileName;
@@ -1706,6 +1442,7 @@ GUI_TEST_CLASS_DEFINITION( test_2188 ) {
     Helper helper(dataDir, testDir, os);
     CHECK_OP(os, );
     GTFileDialog::openFile( os, helper.dir, helper.fileName );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     // 2. At the same time open the file with a text editor
@@ -1732,6 +1469,7 @@ GUI_TEST_CLASS_DEFINITION( test_2187 ) {
     //d:\src\ugene\trunk\test\_common_data\scenarios\_regression\2187\seq.fa
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2187/", "seq.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "seq.fa");
 
     //2. Open {Actions -> Analyze -> Find tandems...}
@@ -1740,9 +1478,7 @@ GUI_TEST_CLASS_DEFINITION( test_2187 ) {
     Runnable * tDialog = new FindTandemsDialogFiller(os, testDir + "_common_data/scenarios/sandbox/result_2187.gb");
     GTUtilsDialog::waitForDialog(os, tDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE
-        << "find_tandems_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find tandems...", GTGlobals::UseMouse);
     GTGlobals::sleep(200);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1821,9 +1557,7 @@ GUI_TEST_CLASS_DEFINITION( test_2202 )
     CHECK_SET_ERR(!workflowOutputDir.exists(), "Dir already exists");
 
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os, workflowOutputDir.absolutePath()));
-    QMenu* menu = GTMenu::showMainMenu(os, MWMENU_TOOLS);
-
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
 
     GTGlobals::sleep();
     CHECK_SET_ERR(workflowOutputDir.exists(), "Dir wasn't created");
@@ -1838,7 +1572,7 @@ GUI_TEST_CLASS_DEFINITION( test_2204 ){
 
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1875,7 +1609,7 @@ GUI_TEST_CLASS_DEFINITION( test_2225_1 ){
 
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SEARCH_GENBANK, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
@@ -1884,7 +1618,7 @@ GUI_TEST_CLASS_DEFINITION( test_2225_2 ){
 
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SEARCH_GENBANK, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 GUI_TEST_CLASS_DEFINITION( test_2259 ){
@@ -1899,11 +1633,10 @@ GUI_TEST_CLASS_DEFINITION( test_2259 ){
     }
 
 GUI_TEST_CLASS_DEFINITION( test_2266_1 ){
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os, testDir + "_common_data/scenarios/sandbox"));
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
+    GTGlobals::sleep();
 
     GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
     GTMouseDriver::click(os);
@@ -1913,13 +1646,15 @@ GUI_TEST_CLASS_DEFINITION( test_2266_1 ){
     GTMouseDriver::click(os);
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/ugenedb/", "Klebsislla_ref.fa");
 
-    //this is the name of output dir. Created here: WorkflowContextCMDLine::createSubDirectoryForRun
-    QString baseDirName = QDateTime::currentDateTime().toString("yyyy.MM.dd_hh-mm");
-    GTWidget::click(os,GTAction::button(os,"Run workflow"));
+    GTUtilsWorkflowDesigner::click(os, "Call Variants");
+    GTUtilsWorkflowDesigner::setParameter(os, "Output variants file", QDir(sandBoxDir).absolutePath() + "/test_2266_1.vcf", GTUtilsWorkflowDesigner::lineEditWithFileSelector);
+
+    GTWidget::click(os,GTAction::button(os, "Run workflow"));
 
     GTUtilsTaskTreeView::waitTaskFinished(os, 6000000);
 
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/" + baseDirName + "/", "variations.vcf");
+    GTFileDialog::openFile(os, sandBoxDir + "test_2266_1.vcf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::findIndex(os, "pkF70");
     GTUtilsProjectTreeView::findIndex(os, "pkf140");
@@ -1928,12 +1663,12 @@ GUI_TEST_CLASS_DEFINITION( test_2267_1 ){
 //     1. Open human_T1.fa
 //
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //     2. Select random subsequence, press Ctrl+N, press Enter
 //
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "DDD", "D", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 //     3. Press Insert, press '1' key until there is no new symbols in lineedit
 //
@@ -1951,11 +1686,11 @@ GUI_TEST_CLASS_DEFINITION( test_2267_2 ){
 //     1. Open human_T1.fa
 //
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //     2. Select random subsequence, press Ctrl+N, press Enter
 //
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "DDD", "D", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 //     3. Press Insert, set the name of qualifier: '))()((_'
 //
@@ -1982,17 +1717,25 @@ GUI_TEST_CLASS_DEFINITION( test_2268 ) {
     CHECK_SET_ERR(toolPath.exists(), "T-coffee tool is not set");
 
     QDir toolDir = toolPath.dir();
+    QString newToolPath = sandBoxDir + "GUITest_regression_scenarios_test_2268/t_coffee";
+#ifdef Q_OS_LINUX
     toolDir.cdUp();
+    newToolPath = sandBoxDir + "GUITest_regression_scenarios_test_2268/bin/t_coffee";
+#elif defined(Q_OS_WIN)
+    newToolPath = sandBoxDir + "GUITest_regression_scenarios_test_2268/t_coffee.bat";
+#endif
     QString s = toolDir.absolutePath();
     GTFile::copyDir(os, toolDir.absolutePath(), sandBoxDir + "GUITest_regression_scenarios_test_2268/");
 
     // Hack, it is better to set the tool path via the preferences dialog
-    toolPath.setFile(sandBoxDir + "GUITest_regression_scenarios_test_2268/bin/t_coffee");
+    toolPath.setFile(newToolPath);
     CHECK_SET_ERR(toolPath.exists(), "The copied T-coffee tool does not exist");
-    tCoffee->setPath(toolPath.absoluteFilePath());
+    tCoffee->setPath(QFileInfo(newToolPath).absoluteFilePath());
 
     toolDir = toolPath.dir();
+#ifdef Q_OS_LINUX
     toolDir.cdUp();
+#endif
 
 //    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.
@@ -2001,12 +1744,13 @@ GUI_TEST_CLASS_DEFINITION( test_2268 ) {
 
 //    2. Open "sample/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Right click on the MSA -> Align -> Align with T-Coffee.
 //    4. Click the "Align" button.
     GTLogTracer lt;
     GTUtilsDialog::waitForDialog(os, new TCoffeeDailogFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with T-Coffee", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with T-Coffee"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
 //    Expected: the t-coffee task started and finished well.
@@ -2023,6 +1767,7 @@ GUI_TEST_CLASS_DEFINITION( test_2268 ) {
 GUI_TEST_CLASS_DEFINITION( test_2314 ){
 //    1. Open 'COI.aln'
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Scroll sequence area to the last columns
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 604));
     GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
@@ -2042,6 +1787,7 @@ GUI_TEST_CLASS_DEFINITION( test_2314 ){
 GUI_TEST_CLASS_DEFINITION( test_2316 ) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, dataDir+"samples/../workflow_samples/Alignment", "basic_align.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep(5000);
 
@@ -2066,7 +1812,7 @@ GUI_TEST_CLASS_DEFINITION( test_2269 ){
 
     class Scenario_test_2269: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
 
             QComboBox* methodNamesBox = GTWidget::findExactWidget<QComboBox*>(os, "methodNamesBox", dialog);
@@ -2093,7 +1839,7 @@ GUI_TEST_CLASS_DEFINITION( test_2269 ){
     };
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_2269()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     CHECK_SET_ERR( !os.hasError(), "Uncorrect value is available");
 }
@@ -2104,15 +1850,14 @@ GUI_TEST_CLASS_DEFINITION( test_2270 ){
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTLogTracer lt;
     GTFileDialog::openFile(os, dataDir+"cmdline/", "snp.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTUtilsLog::check(os, lt);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2281 ){
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     //1. Open WD
-    QMenu* menu=GTMenu::showMainMenu(os, MWMENU_TOOLS);
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::WORKFLOW_DESIGNER);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os,"tabs"));
     CHECK_SET_ERR(tabs!=NULL, "tabs widget not found");
 
@@ -2162,31 +1907,33 @@ GUI_TEST_CLASS_DEFINITION( test_2281 ){
     GTGlobals::sleep(1000);
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2292 ){
-    GTLogTracer l;
-
+GUI_TEST_CLASS_DEFINITION(test_2292) {
     QString destName = testDir + "_common_data/ugenedb/example-alignment.ugenedb";
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, destName));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "There is opened view with destination file"));
-    GTFileDialog::openFile(os, testDir+"_common_data/ugenedb/", "example-alignment.ugenedb");
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTFileDialog::openFile(os, dataDir+"samples/ACE", "K26.ace");
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb/", "example-alignment.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    GTFileDialog::openFile(os, dataDir + "samples/ACE", "K26.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
 
     GTGlobals::sleep();
-    //CHECK_SET_ERR( l.hasError( ), "Error message expected!" );
 }
 
 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();
 //    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);
@@ -2216,7 +1963,7 @@ GUI_TEST_CLASS_DEFINITION( test_2293 ){
 
     class CheckBowtie2Filler : public Filler {
     public:
-        CheckBowtie2Filler(U2OpStatus &os)
+        CheckBowtie2Filler(HI::GUITestOpStatus &os)
             : Filler (os, "BuildIndexFromRefDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -2249,7 +1996,7 @@ GUI_TEST_CLASS_DEFINITION( test_2293 ){
 
 
     GTUtilsDialog::waitForDialog(os, new CheckBowtie2Filler(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2282) {
@@ -2264,6 +2011,7 @@ GUI_TEST_CLASS_DEFINITION(test_2282) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, assFileName));
     GTFileDialog::openFile(os, testDir + "_common_data/bam", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3) The Project View with document "chrM.sorted.bam.ugenedb" has been opened.
     GTUtilsProjectTreeView::findIndex(os, assDocName);
@@ -2281,6 +2029,7 @@ GUI_TEST_CLASS_DEFINITION(test_2282) {
 GUI_TEST_CLASS_DEFINITION(test_2284) {
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press the "Switch on/off collapsing" button
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -2308,6 +2057,7 @@ GUI_TEST_CLASS_DEFINITION(test_2284) {
 GUI_TEST_CLASS_DEFINITION( test_2285 ){
 //    1. Open {data/samples/CLUSTALW/COI.aln}
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click the "Switch on/off collapsing" button on the toolbar.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -2344,6 +2094,7 @@ GUI_TEST_CLASS_DEFINITION( test_2285 ){
 GUI_TEST_CLASS_DEFINITION( test_2306 ) {
     // 1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Turn on collapsing mode in MSA
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -2377,6 +2128,7 @@ GUI_TEST_CLASS_DEFINITION( test_2306 ) {
 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));
@@ -2423,7 +2175,7 @@ GUI_TEST_CLASS_DEFINITION( test_2309 ) {
 GUI_TEST_CLASS_DEFINITION( test_2318 ) {
     class FirstItemPopupChooser : public PopupChooser {
     public:
-        FirstItemPopupChooser(U2OpStatus& os) :
+        FirstItemPopupChooser(HI::GUITestOpStatus& os) :
             PopupChooser(os, QStringList()) {}
 
         virtual void run() {
@@ -2436,7 +2188,7 @@ GUI_TEST_CLASS_DEFINITION( test_2318 ) {
 
     class PlusClicker : public FindAnnotationCollocationsDialogFiller {
     public:
-        PlusClicker(U2OpStatus& os, const QString& _annName) :
+        PlusClicker(HI::GUITestOpStatus& os, const QString& _annName) :
             FindAnnotationCollocationsDialogFiller(os),
             annName(_annName) {}
 
@@ -2471,6 +2223,7 @@ GUI_TEST_CLASS_DEFINITION( test_2318 ) {
 
 //    1) Open {data/samples/murine.gb}
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2) Use context menu: {Analyze -> Find annotated regions}
 //    3) Click plus button, select any annotation
@@ -2494,7 +2247,7 @@ GUI_TEST_CLASS_DEFINITION( test_2351 ) {
 //    Expected state: UGENE does not crash
     class RapidProjectCreator : public Filler {
     public:
-        RapidProjectCreator(U2OpStatus& os, const QString& _projectName, const QString& _projectFolder, const QString& _projectFile) :
+        RapidProjectCreator(HI::GUITestOpStatus& os, const QString& _projectName, const QString& _projectFolder, const QString& _projectFile) :
             Filler(os, "CreateNewProjectDialog"),
             projectName(_projectName),
             projectFolder(_projectFolder),
@@ -2638,8 +2391,7 @@ GUI_TEST_CLASS_DEFINITION( test_2352 ) {
                                                             true));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 
-    QMenu *menu=GTMenu::showMainMenu( os, MWMENU_TOOLS );
-    GTMenu::clickMenuItemByName(os, menu, QStringList() << ToolsMenu::DOTPLOT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
 
     GTGlobals::sleep();
 }
@@ -2647,6 +2399,7 @@ GUI_TEST_CLASS_DEFINITION( test_2352 ) {
 GUI_TEST_CLASS_DEFINITION( test_2360 ) {
     // 1. Open "data/samples/COI.aln".
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Right click on document in project.
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
@@ -2704,6 +2457,7 @@ GUI_TEST_CLASS_DEFINITION(test_2373) {
 
 //    1. Open "COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Move 'Mecopoda_elongata__Ishigaki__J' and 'Mecopoda_elongata__Sumatra_' to the end of name list
     GTUtilsMsaEditor::replaceSequence(os, "Mecopoda_elongata__Ishigaki__J", 17);
@@ -2751,6 +2505,7 @@ GUI_TEST_CLASS_DEFINITION( test_2375 ) {
     GTLogTracer logtracer;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, destUrl));
     GTFileDialog::openFile(os, testDir + "_common_data/sam/", "broken_invalid_cigar.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     TaskScheduler* scheduler = AppContext::getTaskScheduler();
     CHECK_SET_ERR(scheduler, "Task scheduler is NULL");
@@ -2799,6 +2554,7 @@ GUI_TEST_CLASS_DEFINITION( test_2378 ) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, testDir + "_common_data/scenarios/sandbox/test_2378.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/sam/", "scerevisiae.sam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(!l.hasError( ), "Error message");
 }
 
@@ -2835,7 +2591,7 @@ GUI_TEST_CLASS_DEFINITION( test_2379 ) {
         // I know that it is bad practice to create so useless classes, but I don't need to extend the original class.
         // Do not move it to another place: if you need the same filler than extand the original class.
     public:
-        CreateProjectFiller(U2OpStatus &_os,
+        CreateProjectFiller(HI::GUITestOpStatus &_os,
                             const QString &_projectName,
                             const QString &_projectFolder,
                             const QString &_projectFile) :
@@ -2882,9 +2638,9 @@ GUI_TEST_CLASS_DEFINITION( test_2379 ) {
     const QString projectFile = "test_2379";
 
     GTUtilsDialog::waitForDialog(os, new CreateProjectFiller(os, projectName, projectFolder, projectFile));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__NEW_PROJECT);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_PROJECT);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New project...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save all");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 
 //    1. Press "Create new project" button
 //    2. Specify the path to an existing project
@@ -2893,7 +2649,7 @@ GUI_TEST_CLASS_DEFINITION( test_2379 ) {
     GTUtilsDialog::waitForDialog(os, new CreateProjectFiller(os, projectName, projectFolder, projectFile));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes, "Project file already exists"));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__NEW_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New project...");
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2382 ) {
@@ -2908,6 +2664,7 @@ GUI_TEST_CLASS_DEFINITION( test_2382 ) {
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandboxDir + assDocName));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "capres4.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     CHECK_SET_ERR( !l.hasError( ), "There must be no errors!" );
@@ -2927,6 +2684,7 @@ GUI_TEST_CLASS_DEFINITION( test_2382_1 ) {
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandboxDir + assDocName));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "test_new.cap.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     CHECK_SET_ERR( !l.hasError( ), "There must be no errors!" );
@@ -2951,8 +2709,8 @@ GUI_TEST_CLASS_DEFINITION( test_2387 ) {
 
     class SequenceReadingModeDialogUtils : public CustomScenario {
     public:
-        //SequenceReadingModeDialogUtils(U2OpStatus& _os) : GTSequenceReadingModeDialogUtils(_os){}
-        virtual void run(U2OpStatus &os){
+        //SequenceReadingModeDialogUtils(HI::GUITestOpStatus& _os) : GTSequenceReadingModeDialogUtils(_os){}
+        virtual void run(HI::GUITestOpStatus &os){
             GTSequenceReadingModeDialog::mode = GTSequenceReadingModeDialog::Merge;
             GTFile::copy(os, testDir + "_common_data/scenarios/_regression/2387/binary.dll", testDir + "_common_data/scenarios/sandbox/sars.gb");
             GTSequenceReadingModeDialogUtils(os).commonScenario();
@@ -2971,6 +2729,7 @@ GUI_TEST_CLASS_DEFINITION( test_2392 ) {
     // 2. Select "Join sequences into alignment" option and press OK
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir+"_common_data/genbank/", "multi.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: Document opened in MSA view
     QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -2985,6 +2744,7 @@ GUI_TEST_CLASS_DEFINITION( test_2400 ){
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: assembly view for Contig_1 opened with refrence sequence added to it
     bool ref = GTUtilsAssemblyBrowser::hasReference(os, "2400 [as] 1");
     CHECK_SET_ERR(ref, "no reference")
@@ -3001,13 +2761,13 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected: the file is imported without errors, the assembly is opened.
     // 4. Close the project.
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
 #ifdef Q_OS_MAC
-        QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-        GTMenu::clickMenuItem(os, menu, ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
     GTKeyboardDriver::keyClick(os, 'q', GTKeyboardDriver::key["ctrl"]);
 #endif
@@ -3021,6 +2781,7 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb, ConvertAceToSqliteDialogFiller::APPEND));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_11_(error).ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected: the file is not imported but "2401.ugenedb" still exists.
     QString s = GUrl(ugenedb).getURLString();
@@ -3028,6 +2789,7 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
 
     // 9. Open the file "2401.ugenedb".
     GTFileDialog::openFile(os, sandbox, fileName);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected: assembly is opened without errors.
     GTUtilsProjectTreeView::findIndex(os, fileName);
 }
@@ -3059,6 +2821,33 @@ GUI_TEST_CLASS_DEFINITION(test_2402) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Well done!"));
     GTWidget::click( os,GTAction::button( os,"Validate workflow" ) );
 }
+
+GUI_TEST_CLASS_DEFINITION(test_2403) {
+    // 1. Open "human_T1.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Resize the main UGENE window that not all buttons will be visible on the sequence toolbar.
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    GTWidget::showNormal(os, mw);
+    GTWidget::resizeWidget(os, mw, QSize(300, mw->size().height()));
+
+    // 3. Click on the "Show full toolbar" button.
+    QWidget *toolbarWidget = GTWidget::findWidget(os, "mwtoolbar_activemdi");
+    CHECK_SET_ERR( NULL != toolbarWidget, "Toolbar  is not present");
+    QWidget *expandWidget = GTWidget::findWidget(os, "qt_toolbar_ext_button", toolbarWidget);
+    CHECK_SET_ERR( NULL != expandWidget, "\"Show full toolbar\" button  is not present");
+
+    GTWidget::click( os, expandWidget);
+    GTGlobals::sleep();
+
+    //Expected: all toolbar actions appears.
+    QWidget *toggleWidget = GTWidget::findWidget(os, "toggleViewButton", toolbarWidget);
+    CHECK_SET_ERR( NULL != toggleWidget, "\"Toggle view\" button  is not present");
+
+    GTWidget::click(os, expandWidget);
+}
+
 GUI_TEST_CLASS_DEFINITION( test_2404 ) {
 /*  1. Open human_T1.fa
     2. Open Search in sequence OP tab
@@ -3069,6 +2858,7 @@ GUI_TEST_CLASS_DEFINITION( test_2404 ) {
     Current: layout breaks
 */
     GTFileDialog::openFile( os, dataDir + "samples/FASTA/", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTUtilsOptionsPanel::runFindPatternWithHotKey("AAAAA", os);
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search algorithm"));
@@ -3077,34 +2867,14 @@ GUI_TEST_CLASS_DEFINITION( test_2404 ) {
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Save annotation(s) to"));
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Annotation parameters"));
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
-    mw->showNormal();
-    mw->resize(800,600);
+    GTWidget::showNormal(os, mw);
+    GTWidget::resizeWidget(os, mw, QSize(800, 800));
     GTGlobals::sleep();
     QScrollArea* sa = qobject_cast<QScrollArea*>(GTWidget::findWidget( os, "OP_SCROLL_AREA" ));
     QScrollBar* scroll = sa->verticalScrollBar();
     CHECK_SET_ERR( scroll != NULL, "Scroll bar is NULL");
     CHECK_SET_ERR( scroll->isVisible(), "Scroll bar is visible!");
 }
-GUI_TEST_CLASS_DEFINITION(test_2403) {
-    //1. Open "human_T1.fa".
-    //    2. Resize the main UGENE window that not all buttons will be visible on the sequence toolbar.
-    //    3. Click on the "Show full toolbar" button.
-    //Expected: all toolbar actions appears.
-
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa" );
-    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
-    mw->resize(300, mw->size().height());
-
-    QWidget *toolbarWidget = GTWidget::findWidget(os, "mwtoolbar_activemdi");
-    CHECK_SET_ERR( NULL != toolbarWidget, "Toolbar  is not present");
-    QWidget *expandWidget = GTWidget::findWidget(os, "qt_toolbar_ext_button", toolbarWidget);
-    CHECK_SET_ERR( NULL != expandWidget, "\"Show full toolbar\" button  is not present");
-
-    GTWidget::click( os, expandWidget);
-    GTGlobals::sleep();
-    QWidget *toggleWidget = GTWidget::findWidget(os, "toggleViewButton", toolbarWidget);
-    CHECK_SET_ERR( NULL != toggleWidget, "\"Toggle view\" button  is not present");
-}
 
 GUI_TEST_CLASS_DEFINITION( test_2406 ) {
 //    1. Create the {Read Sequence -> Write Sequence} workflow.
@@ -3154,6 +2924,7 @@ GUI_TEST_CLASS_DEFINITION( test_2406 ) {
 GUI_TEST_CLASS_DEFINITION(test_2407) {
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir+"_common_data/clustal/", "10000_sequences.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -3176,6 +2947,7 @@ GUI_TEST_CLASS_DEFINITION(test_2407) {
 
 GUI_TEST_CLASS_DEFINITION( test_2410 ) {
     GTFileDialog::openFile( os, dataDir + "samples/FASTA/", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep( );
 
@@ -3213,6 +2985,7 @@ GUI_TEST_CLASS_DEFINITION( test_2410 ) {
 GUI_TEST_CLASS_DEFINITION( test_2415 ) {
     // 1. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    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)"));
@@ -3340,8 +3113,7 @@ GUI_TEST_CLASS_DEFINITION(test_2437) {
     p.outputDirPath = sandBoxDir + "test_2437";
     QDir().mkpath(p.outputDirPath);
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_DB));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST make database...");
 
     //3. Wait for the task end.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -3351,7 +3123,7 @@ GUI_TEST_CLASS_DEFINITION(test_2437) {
     //Expected state: {Database path} and {Base name for BLAST DB files} fields are correctly filled.
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir + "test_2437/human_T1formatDB.log"));
             GTWidget::click(os, GTWidget::findWidget(os, "selectDatabasePushButton"));
 
@@ -3364,18 +3136,18 @@ GUI_TEST_CLASS_DEFINITION(test_2437) {
         }
     };
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(os, new Scenario()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCH));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST search...");
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2449 ) {
 //    1. Open "COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Create a phylogenetic tree for the alignment.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_2449.nwk", 0, 0, true));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() << "Tree" << "Build Tree");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Tree" << "Build Tree");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Open tree options panel widget (it can be opened automatically after tree building).
@@ -3412,7 +3184,7 @@ GUI_TEST_CLASS_DEFINITION(test_2451){
 
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
         //    4. Select input MSA "samples\CLUSTALW\COI.aln"
@@ -3436,6 +3208,7 @@ GUI_TEST_CLASS_DEFINITION(test_2451){
 GUI_TEST_CLASS_DEFINITION(test_2459) {
 //    1. Open "COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Set any reference sequence.
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference"));
@@ -3464,6 +3237,7 @@ GUI_TEST_CLASS_DEFINITION( test_2460 ) {
 
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList list = GTUtilsMSAEditorSequenceArea::getNameList(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 1), QPoint(-5, list.size() - 1));
@@ -3486,12 +3260,13 @@ GUI_TEST_CLASS_DEFINITION( test_2460 ) {
 
 GUI_TEST_CLASS_DEFINITION(test_2470) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2470", "blast_result.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     GTUtilsAnnotationsTreeView::selectItems(os, blastResultItems);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os, const QString &dbPath, const QString &outputPath)
+        OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
             : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath){};
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
@@ -3528,12 +3303,13 @@ GUI_TEST_CLASS_DEFINITION(test_2470) {
 GUI_TEST_CLASS_DEFINITION(test_2470_1) {
     GTUtilsExternalTools::removeTool(os, "BlastAll");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2470", "blast_result.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     GTUtilsAnnotationsTreeView::selectItems(os, blastResultItems);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os, const QString &dbPath, const QString &outputPath)
+        OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
             : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath){};
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
@@ -3599,6 +3375,7 @@ GUI_TEST_CLASS_DEFINITION( test_2475 ) {
 GUI_TEST_CLASS_DEFINITION( test_2482 ) {
     // 1. Open "COI.nwk".
     GTFileDialog::openFile(os, dataDir + "samples/Newick/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Change the tree layout to unrooted.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< "Unrooted"));
@@ -3612,21 +3389,16 @@ GUI_TEST_CLASS_DEFINITION( test_2482 ) {
     GTMouseDriver::moveTo(os, nodeCoords);
 
     GTMouseDriver::click(os);
-    GTMouseDriver::click(os, Qt::RightButton);
-    GTGlobals::sleep();
 
     // 4. Call context menu on the Tree Viewer.
     // Expected state: menu items "Swap Sublings" and "Reroot tree" are disabled.
-    QMenu* activePopupMenu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
-    CHECK_SET_ERR(activePopupMenu != NULL, "There is no popup menu appeared");
-
-    const QList<QAction*> menuActions = activePopupMenu->actions();
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Reroot tree", PopupChecker::IsDisabled));
+    GTMouseDriver::click(os, Qt::RightButton);
+    GTGlobals::sleep();
 
-    foreach (QAction* a, menuActions) {
-        if (a->text() == "Reroot tree" || a->text() == "Swap Sublings") {
-            CHECK_SET_ERR( !a->isEnabled(), a->text() + " action is enabled");
-        }
-    }
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Swap Sublings", PopupChecker::IsDisabled));
+    GTMouseDriver::click(os, Qt::RightButton);
+    GTGlobals::sleep();
 }
 
 
@@ -3637,27 +3409,22 @@ GUI_TEST_CLASS_DEFINITION( test_2487 ) {
     // 'Reroot tree' and 'Collapse ' options must be disabled
 
     GTFileDialog::openFile(os, dataDir + "samples/Newick/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QList<QGraphicsItem*> items = GTUtilsPhyTree::getNodes(os);
     CHECK_SET_ERR(items.size() != 0, "Tree is empty");
 
     QPoint rootCoords = GTUtilsPhyTree::getGlobalCoord(os, items.first());
     GTMouseDriver::moveTo(os, rootCoords);
-
     GTMouseDriver::click(os);
+
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Reroot tree", PopupChecker::IsDisabled));
     GTMouseDriver::click(os, Qt::RightButton);
     GTGlobals::sleep();
 
-    QMenu* activePopupMenu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
-    CHECK_SET_ERR(activePopupMenu != NULL, "There is no popup menu appeared");
-
-    const QList<QAction*> menuActions = activePopupMenu->actions();
-
-    foreach (QAction* a, menuActions) {
-        if (a->text() == "Reroot tree" || a->text() == "Collapse") {
-            CHECK_SET_ERR( !a->isEnabled(), a->text() + " action is enabled");
-        }
-    }
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Collapse", PopupChecker::IsDisabled));
+    GTMouseDriver::click(os, Qt::RightButton);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2496 ) {
@@ -3667,6 +3434,7 @@ GUI_TEST_CLASS_DEFINITION( test_2496 ) {
     GTUtilsDialog::waitForDialog(os,
                                  new ImportBAMFileFiller(os, testDir + "_common_data/scenarios/sandbox/example-alignment.bam.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2498 ) {
@@ -3675,6 +3443,8 @@ GUI_TEST_CLASS_DEFINITION( test_2498 ) {
     //
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
 
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows",
@@ -3690,6 +3460,7 @@ GUI_TEST_CLASS_DEFINITION( test_2506 ) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/vcf_consensus/", "vcf_cons_out_damaged_1.vcf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(l.hasError() == true, "There is no expected error message in log");
 }
@@ -3700,6 +3471,7 @@ GUI_TEST_CLASS_DEFINITION( test_2506_1 ) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/vcf_consensus/", "vcf_cons_out_damaged_2.vcf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(l.hasError() == true, "There is no expected error message in log");
 }
@@ -3707,6 +3479,7 @@ GUI_TEST_CLASS_DEFINITION( test_2506_1 ) {
 GUI_TEST_CLASS_DEFINITION( test_2513 ){
 //    Open COI.nwk.
     GTFileDialog::openFile(os, dataDir + "/samples/Newick/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Switch to the circular layout on the tree view.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_TREES_WIDGET"));
     QComboBox* layoutCombo = GTWidget::findExactWidget<QComboBox*>(os, "layoutCombo");
@@ -3738,6 +3511,7 @@ GUI_TEST_CLASS_DEFINITION( test_2513 ){
 GUI_TEST_CLASS_DEFINITION( test_2519 ) {
     // 1. Open {data/samples/FASTA/human_T1.fa}.
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Go to position 20000.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 20000));
@@ -3763,6 +3537,7 @@ GUI_TEST_CLASS_DEFINITION( test_2519 ) {
 GUI_TEST_CLASS_DEFINITION( test_2538 ){
 //    1. Open file "_common_data/scenarios/tree_view/COI.nwk"
     GTFileDialog::openFile(os, dataDir + "/samples/Newick/", "COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Call context menu on node just near root. Click "Collapse"
     GTGlobals::sleep(1000);
     GTMouseDriver::moveTo(os, GTUtilsPhyTree::getGlobalCoord(os, GTUtilsPhyTree::getNodes(os).at(1)));
@@ -3797,6 +3572,7 @@ GUI_TEST_CLASS_DEFINITION( test_2540 ){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, sandBoxDir + "test_2540/chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: an import dialog appeared.
 //    3. Set the destination location with enough permissions.
 //    4. Click "Import" button.
@@ -3807,6 +3583,7 @@ GUI_TEST_CLASS_DEFINITION( test_2540 ){
 GUI_TEST_CLASS_DEFINITION( test_2542 ) {
     // 1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Lock the document
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__edit_menu"
@@ -3833,7 +3610,7 @@ GUI_TEST_CLASS_DEFINITION( test_2542 ) {
 GUI_TEST_CLASS_DEFINITION( test_2543 ) {
     class BuildTreeDialogFiller_test_2543 : public Filler {
     public:
-        BuildTreeDialogFiller_test_2543(U2OpStatus &os, QString _saveTree="default") : Filler(os, "CreatePhyTree"),
+        BuildTreeDialogFiller_test_2543(HI::GUITestOpStatus &os, QString _saveTree="default") : Filler(os, "CreatePhyTree"),
             saveTree(_saveTree){}
         virtual void run(){
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3847,18 +3624,8 @@ GUI_TEST_CLASS_DEFINITION( test_2543 ) {
             GTUtilsDialog::waitForDialogWhichMayRunOrNot( os, new LicenseAgreemntDialogFiller( os ) );
             //Expected state: UGENE does not allow to create tree, the message dialog appears
             GTUtilsNotifications::waitForNotification(os, true);
-            //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller( os, QMessageBox::Ok ) );
-
-            QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-            CHECK_SET_ERR(box != NULL, "buttonBox is NULL");
-            QPushButton* button = box->button(QDialogButtonBox::Ok);
-            CHECK_SET_ERR(button !=NULL, "cancel button is NULL");
-            GTWidget::click(os, button);
 
-            GTGlobals::sleep(1000);
-            button = box->button(QDialogButtonBox::Cancel);
-            CHECK_SET_ERR(button !=NULL, "cancel button is NULL");
-            GTWidget::click(os, button);
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
     private:
         QString saveTree;
@@ -3866,6 +3633,7 @@ GUI_TEST_CLASS_DEFINITION( test_2543 ) {
 
     //1. Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Click the "Build tree" button on the toolbar.
     //Expected state: a "Build Phylogenetic Tree" dialog appeared.
@@ -3890,6 +3658,7 @@ GUI_TEST_CLASS_DEFINITION( test_2544 ){
 //    1. Open "data/samples/FASTA/human_T1.fa"
     GTFile::copy(os, dataDir + "samples/FASTA/human_T1.fa", sandBoxDir + "test_2544.fa");
     GTFileDialog::openFile(os, sandBoxDir + "test_2544.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu { Edit sequence -> Remove subsequence... }
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << "action_edit_remove_sub_sequences"));
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "10..20"));
@@ -3902,12 +3671,12 @@ GUI_TEST_CLASS_DEFINITION( test_2544 ){
 
 //    4. Change permissions to the file to read-only
     PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "test_2544.fa");
+    p.setReadOnlyFlag(os, sandBoxDir + "test_2544.fa");
 //    5. Use context menu on the document item in project view { Save selected documents }
 
     class innerMessageBoxFiller: public MessageBoxDialogFiller{
     public:
-        innerMessageBoxFiller(U2OpStatus &os): MessageBoxDialogFiller(os, QMessageBox::Yes){}
+        innerMessageBoxFiller(HI::GUITestOpStatus &os): MessageBoxDialogFiller(os, QMessageBox::Yes){}
         void run(){
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Cancel, "", "permissionBox"));
             MessageBoxDialogFiller::run();
@@ -3915,10 +3684,12 @@ GUI_TEST_CLASS_DEFINITION( test_2544 ){
     };
     class customSaver: public GTFileDialogUtils{
     public:
-        customSaver(U2OpStatus &os): GTFileDialogUtils(os, sandBoxDir, "test_2544.fa", GTFileDialogUtils::Save){}
+        customSaver(HI::GUITestOpStatus &os): GTFileDialogUtils(os, sandBoxDir, "test_2544.fa", GTFileDialogUtils::Save){}
         void commonScenario(){
+            fileDialog = QApplication::activeModalWidget();
             GTUtilsDialog::waitForDialog(os, new innerMessageBoxFiller(os));
-            GTFileDialogUtils::commonScenario();
+            setName();
+            clickButton(button);
         }
     };
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"action_prpject__save_document"));
@@ -3947,6 +3718,7 @@ GUI_TEST_CLASS_DEFINITION(test_2545) {
 
     //2. Open "human_t1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Call context menu, select the {Align -> Align sequence to mRna} menu item.
     //Expected state: UGENE offers to select the "spidey" external tool.
@@ -3963,7 +3735,7 @@ GUI_TEST_CLASS_DEFINITION(test_2549) {
     //this needed to ensure that log view has text
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/gtf/invalid", "AB375112_annotations.gtf"));
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GTF"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTGlobals::sleep();
 
     GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
@@ -3979,72 +3751,6 @@ GUI_TEST_CLASS_DEFINITION(test_2549) {
     CHECK_SET_ERR(!clipboardContent.isEmpty(), "Clipboard is empty");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_2562) {
-    GTLogTracer l;
-
-    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Swiss-Prot"));
-    // 1. Open any amino sequence, e.g. "data/samples/Swiss-Prot/D0VTW9.txt" in the Sequence View.
-    GTFileDialog::openFile(os, dataDir + "samples/Swiss-Prot/", "D0VTW9.txt");
-
-    // 2. Open "DAS Annotations" options panel widget.
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-
-    // 3. Press "Fetch IDs" button
-    // Expected state : task "Get an ID for the sequence" started
-    GTWidget::click(os, GTWidget::findWidget(os, "searchIdsButton"));
-    GTGlobals::sleep(500);
-
-    GTUtilsTaskTreeView::checkTask(os, "Get an ID for the sequence");
-
-    // 4. Cancel the task
-    // Expected state : the task has been canceled
-    GTUtilsTaskTreeView::cancelTask(os, "Get an ID for the sequence");
-    CHECK_SET_ERR(0 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "Uniprot BLAST task has not been cancelled");
-    GTUtilsLog::check(os, l);
-
-    // 5. Press "Fetch IDs" again
-    // Expected state : task "Get an ID for the sequence" started
-    // 6. Wait until the task is completed
-    GTWidget::click(os, GTWidget::findWidget(os, "searchIdsButton"));
-    GTGlobals::sleep(500);
-
-    GTUtilsTaskTreeView::checkTask(os, "Get an ID for the sequence");
-    GTUtilsTaskTreeView::waitTaskFinished(os, 240000);
-
-    // 7. Choose any id and press "Fetch Annotations" button
-    // Expected state : task "Load DAS annotations for current sequence" started
-    QTableWidget *idTable = qobject_cast<QTableWidget *>(GTWidget::findWidget(os, "idList"));
-    const QString selectedFeatureId = idTable->selectionModel()->selectedRows().first().data(Qt::DisplayRole).toString();
-
-    GTWidget::click(os, GTWidget::findWidget(os, "annotateButton"));
-    const QString annotateTaskName = "Convert ID and load DAS features for: " + selectedFeatureId;
-    GTUtilsTask::checkTask(os, annotateTaskName);
-
-    // 9. Cancel the task
-    // Expected state : the task cancelled
-    GTUtilsTask::cancelTask(os, annotateTaskName);
-    GTGlobals::sleep(500);
-    CHECK_SET_ERR(0 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "Load DAS annotations task has not been cancelled");
-    GTUtilsLog::check(os, l);
-}
-
-GUI_TEST_CLASS_DEFINITION(test_2562_1) {
-    GTLogTracer l;
-    // 1. Open "File -> Access Remote Database..." from the main menu.
-    // 2. Get something adequate from the Uniprot(DAS) database(e.g.use example ID : P05067).
-    // Expected state : "Download remote documents" task has been started
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "P05067", 7));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB);
-    GTUtilsTaskTreeView::checkTask(os, "Load DAS Documents");
-
-    // 3. Cancel task
-    // Expected state : task has been canceled.
-    GTUtilsTask::cancelTask(os, "Load DAS Documents");
-    GTGlobals::sleep(500);
-    CHECK_SET_ERR(0 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "Load DAS documents task has not been cancelled");
-    GTUtilsLog::check(os, l);
-}
-
 GUI_TEST_CLASS_DEFINITION( test_2565 ) {
     //    1. Open "samples/Genbank/murine.gb".
     //    2. Press Ctrl+F.
@@ -4053,6 +3759,7 @@ GUI_TEST_CLASS_DEFINITION( test_2565 ) {
     //    Expected: the pattern is not found. Notification with this information appears.
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionsPanel::runFindPatternWithHotKey("GCTAGCTTAAGTAACGCCACTTTT", os);
     CHECK_SET_ERR(l.checkMessage(QString("Searching patterns in sequence task: No results found.")),
                   "No expected message in the log");
@@ -4063,6 +3770,7 @@ GUI_TEST_CLASS_DEFINITION(test_2566) {
 //1. Open "samples/Genbank/murine.gb".
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2. Press Ctrl+F.
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4098,6 +3806,7 @@ GUI_TEST_CLASS_DEFINITION( test_2567 ) {
     //1. Open "samples/Genbank/murine.gb".
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press Ctrl+F.
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4134,7 +3843,7 @@ GUI_TEST_CLASS_DEFINITION( test_2568 ){
 
     class customFileDialog : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* d = QApplication::activeModalWidget();
             CHECK_SET_ERR(d, "activeModalWidget is NULL");
             QFileDialog* dialog = qobject_cast<QFileDialog*>(d);
@@ -4148,7 +3857,7 @@ GUI_TEST_CLASS_DEFINITION( test_2568 ){
 
     class customWizard : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             //    4. Click to browse a reference file and choose a reference
@@ -4176,6 +3885,7 @@ GUI_TEST_CLASS_DEFINITION( test_2569 ){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Add the Call Variants sample.
     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);
@@ -4203,6 +3913,7 @@ GUI_TEST_CLASS_DEFINITION( test_2569 ){
 GUI_TEST_CLASS_DEFINITION( test_2570 ) {
     GTLogTracer l;
     GTFileDialog::openFile( os, dataDir + "samples/FASTA/", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -4222,6 +3933,7 @@ GUI_TEST_CLASS_DEFINITION( test_2577 ) {
     //1. Open {data/samples/CLUSTALW/COI.aln}.
     GTLogTracer l;
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Call context menu somewhere on the alignment, select {Consenssus mode...} menu item.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Consensus mode",GTGlobals::UseMouse));
@@ -4237,6 +3949,7 @@ GUI_TEST_CLASS_DEFINITION( test_2577 ) {
 GUI_TEST_CLASS_DEFINITION( test_2578 ) {
 //    1. Open {data/samples/CLUSTALW/COI.aln}.
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open options panel 'Highlighting' tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
@@ -4277,7 +3990,7 @@ GUI_TEST_CLASS_DEFINITION( test_2579 ) {
 
     class MafftInactivation : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QString path = AppSettingsDialogFiller::getExternalToolPath(os, "MAFFT");
             AppSettingsDialogFiller::clearToolPath(os, "MAFFT");
             AppSettingsDialogFiller::setExternalToolPath(os, "MAFFT", path);
@@ -4291,8 +4004,7 @@ GUI_TEST_CLASS_DEFINITION( test_2579 ) {
     GTLogTracer l;
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new MafftInactivation()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
     GTUtilsLog::check(os, l);
 }
@@ -4306,9 +4018,10 @@ GUI_TEST_CLASS_DEFINITION(test_2581) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped_same_names.aln");
+    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));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle"));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
     GTMouseDriver::click(os, Qt::RightButton);
@@ -4328,6 +4041,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_1) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped_same_names.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new ClustalWDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with ClustalW", GTGlobals::UseMouse));
@@ -4342,6 +4056,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_1) {
 GUI_TEST_CLASS_DEFINITION(test_2581_2) {
 //    1. Open file "_common_data/scenarios/msa/ma2_gapped_same_names.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped_same_names.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Use context menu { Align -> Align with ClustalO }
 //    Expected state: the "Align with Clustal Omega" dialog has appeared
@@ -4359,6 +4074,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_2) {
 GUI_TEST_CLASS_DEFINITION(test_2581_3) {
 //    1. Open file "_common_data/scenarios/msa/ma2_gapped_same_names.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped_same_names.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Use context menu { Align -> Align with MAFFT }
 //    Expected state: the "Align with MAFFT" dialog has appeared
@@ -4384,6 +4100,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_4) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped_same_names.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new TCoffeeDailogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with T-Coffee", GTGlobals::UseMouse));
@@ -4405,6 +4122,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_5) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped_same_names.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign", GTGlobals::UseMouse));
@@ -4419,8 +4137,10 @@ GUI_TEST_CLASS_DEFINITION(test_2581_5) {
 GUI_TEST_CLASS_DEFINITION(test_2583){
 //    1. Open file data/samples/EMBL/AL000263.emb
     GTFileDialog::openFile(os, dataDir + "samples/EMBL/AL000263.emb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open file test/_common_data/regression/2583/My_Document_2.gb
     GTFileDialog::openFile(os, testDir + "_common_data/regression/2583/MyDocument_2.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Drag "AB000263 standart annotations" AL000263.emb sequence view
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "AB000263 standard annotations");
     QWidget* sequence = GTUtilsSequenceView::getSeqWidgetByNumber(os);
@@ -4452,6 +4172,7 @@ GUI_TEST_CLASS_DEFINITION( test_2605 ) {
     // 1. Open file _common_data/fasta/multy_fa.fa as multiple alignment
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "multy_fa.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 2. Export subalignment from this msa to any MSA format
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_EXPORT<<"Save subalignment"));
     GTUtilsDialog::waitForDialog(os,new ExtractSelectedAsMSADialogFiller(os,
@@ -4466,6 +4187,7 @@ GUI_TEST_CLASS_DEFINITION( test_2605 ) {
 GUI_TEST_CLASS_DEFINITION( test_2612 ) {
     // 1. Open sequence "samples/fasta/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 2. Search for 20 first nucleotides (TTGTCAGATTCACCAAAGTT) using Find Pattern.
     GTUtilsOptionsPanel::runFindPatternWithHotKey("TTGTCAGATTCACCAAAGTT", os);
     GTGlobals::sleep(1000);
@@ -4487,6 +4209,7 @@ GUI_TEST_CLASS_DEFINITION( test_2612 ) {
 GUI_TEST_CLASS_DEFINITION(test_2619) {
 //    1. Open file samples/genbank/sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open context menu for any qualifier on annotation table view.
 //    Expected state: submenu "Copy" didn't contains items "Edit qualifier" and "Add 'evidence' column"
@@ -4506,6 +4229,7 @@ GUI_TEST_CLASS_DEFINITION(test_2622) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge, 100));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "multy_fa.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Press Ctrl + F.
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4532,6 +4256,7 @@ GUI_TEST_CLASS_DEFINITION(test_2622_1) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge, 100));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "multy_fa.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Press Ctrl + F.
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
@@ -4567,7 +4292,7 @@ GUI_TEST_CLASS_DEFINITION(test_2632){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             //    2. Go to the second page
@@ -4591,6 +4316,7 @@ GUI_TEST_CLASS_DEFINITION(test_2632){
                                                                    "Full"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", new custom()));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2638){
@@ -4632,7 +4358,7 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
 //    0. Set CPU optimisation in settings dialog
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog is NULL");
 
@@ -4644,8 +4370,7 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
         }
     };
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new custom));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 //    1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Select "tuxedo" sample
@@ -4681,7 +4406,7 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2651) {
-    // 1. File->Search NCBI Genbank...
+    // 1. File->Search NCBI GenBank...
     // 2. In the search field paste
     // AB797204.1 AB797210.1 AB797201.1
     // 3. Click Search
@@ -4707,7 +4432,7 @@ GUI_TEST_CLASS_DEFINITION(test_2651) {
         << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::ClickClose, QVariant());
     GTUtilsDialog::waitForDialog(os, new NcbiSearchDialogFiller(os, actions));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__SEARCH_GENBANK);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...");
 
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4750,10 +4475,11 @@ GUI_TEST_CLASS_DEFINITION( test_2656 ) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class DotplotLoadSequenceFiller : public Filler {
     public:
-        DotplotLoadSequenceFiller(U2OpStatus &os, const QString seqPath, const QString seqName)
+        DotplotLoadSequenceFiller(HI::GUITestOpStatus &os, const QString seqPath, const QString seqName)
             : Filler(os, "DotPlotDialog"), seqPath(seqPath), seqName(seqName) {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -4786,6 +4512,7 @@ GUI_TEST_CLASS_DEFINITION( test_2662 ){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Open Call Variants sample.
     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);
@@ -4813,6 +4540,7 @@ GUI_TEST_CLASS_DEFINITION( test_2667 ) {
 //    1. Open {/data/samples/genbank/murine.gb}.
 //    Expected state: a document was added, it contains two object: an annotation and a sequence
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select the annotation object in the project view.
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
@@ -4832,7 +4560,7 @@ GUI_TEST_CLASS_DEFINITION(test_2683){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
 
             QWidget* dialog = QApplication::activeModalWidget();
@@ -4857,14 +4585,15 @@ GUI_TEST_CLASS_DEFINITION(test_2683){
 GUI_TEST_CLASS_DEFINITION(test_2690){
 //    1. Open "human_t1.fa".
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Create an annotation: Group name - "1", location - "1..1".
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "1", "ann1", "1..1"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
+
 //    3. Create an annotation: Group name - "2", location - "5..5, 6..7".
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "2", "ann2", "5..5, 6..7"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
+
 //    4. Open the "Annotation highlighting" OP widget.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
 //    5. Select the first annotation.
@@ -4901,13 +4630,14 @@ GUI_TEST_CLASS_DEFINITION(test_2701) {
 //    4. Select jpeg format
 //    Expected state: Quality tuning slider is showed.
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     ADVSingleSequenceWidget* wgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
     CHECK_SET_ERR( wgt != NULL, "No sequence widget");
     CHECK_SET_ERR( GTUtilsCv::isCvPresent(os, wgt), "No CV opened");
 
     class ImageQualityChecker : public Filler {
     public:
-        ImageQualityChecker(U2OpStatus &os)
+        ImageQualityChecker(HI::GUITestOpStatus &os)
             : Filler(os, "ImageExportForm") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -4952,7 +4682,7 @@ GUI_TEST_CLASS_DEFINITION(test_2709) {
 
     class test_2709_canceler : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTGlobals::sleep();
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
         }
@@ -4978,11 +4708,12 @@ GUI_TEST_CLASS_DEFINITION(test_2711){
 
     class test_2711DialogFiller : public CustomScenario {
     public:
-        void run(U2OpStatus &os){
+        void run(HI::GUITestOpStatus &os){
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
             QString rScriptPath = AppSettingsDialogFiller::getExternalToolPath(os, "Rscript");
+            CHECK_SET_ERR(!rScriptPath.isEmpty(), "Rscript path is empty");
             QString rPath = rScriptPath.left(rScriptPath.length() - QString("script").length());
             AppSettingsDialogFiller::setExternalToolPath(os, "Rscript", rPath);
             GTGlobals::sleep(500);
@@ -4995,9 +4726,8 @@ GUI_TEST_CLASS_DEFINITION(test_2711){
     };
 //    Expected state: Rscript doesn't pass validation
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new test_2711DialogFiller()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
-    GTGlobals::sleep(500);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2713) {
@@ -5006,10 +4736,12 @@ GUI_TEST_CLASS_DEFINITION(test_2713) {
     GTFile::copy(os, dataDir + "samples/Genbank/murine.gb", sandBoxDir + "test_2713/murine.gb");
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTFileDialog::openFile(os, sandBoxDir + "test_2713", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open file {data/samples/FASTA/human_T1.fa}
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Drag and drop annotation object "NC_001363 features" from project view to sequence view
 //    Expected state: the "Edit Object Relations" dialog has appeared
@@ -5047,7 +4779,7 @@ GUI_TEST_CLASS_DEFINITION(test_2721){
 //2. Select Cistrome example.
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
         //Expected state: wizard appeared - on the first page "Cistrome data directory" is set to "data/cistrome".
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog!=NULL, "activeModalWidget is NULL");
@@ -5069,6 +4801,7 @@ GUI_TEST_CLASS_DEFINITION(test_2726) {
     //3. Press backspace twice.
     //Expected state: undo and redo buttons are disabled.
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1,0), QPoint(1,0));
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["backspace"]);
@@ -5086,6 +4819,7 @@ GUI_TEST_CLASS_DEFINITION(test_2729) {
 //    1. Open {_common_data/fasta/AMINO.fa}
 //    Expected state: there is a "Graphs" button on the sequence toolbar, it is enabled.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QAbstractButton *graphsButton = GTAction::button(os, "GraphMenuAction", GTUtilsSequenceView::getSeqWidgetByNumber(os));
     CHECK_SET_ERR(NULL != graphsButton, "Graphs button is NULL");
     CHECK_SET_ERR(graphsButton->isEnabled(), "Graphs button is unexpectedly disabled");
@@ -5106,6 +4840,7 @@ GUI_TEST_CLASS_DEFINITION(test_2730) {
 */
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir +"_common_data/fasta/", "abcd.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
     QWidget* parent=GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     CHECK_SET_ERR( parent != NULL, "ADV_single_sequence_widget_0 not found!");
@@ -5125,11 +4860,13 @@ GUI_TEST_CLASS_DEFINITION(test_2730) {
 GUI_TEST_CLASS_DEFINITION(test_2737) {
     //1. Open any sequence without annotations (e.g. "_common_data/fasta/AMINO.fa")
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Add few annotations with different names.
     GTUtilsAnnotationsTreeView::createAnnotation(os, "group", "name1", "1..10");
     GTUtilsAnnotationsTreeView::createAnnotation(os, "group", "name2", "11..20", false);
     GTUtilsAnnotationsTreeView::createAnnotation(os, "group", "name3", "21..30", false);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Open Annotation Highlighting tab.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
@@ -5148,6 +4885,9 @@ GUI_TEST_CLASS_DEFINITION(test_2737_1) {
     GTLogTracer l;
     //1. Open "murine.gb";
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //1.1. Open Annotation Highlighting tab.
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::AnnotationsHighlighting);
 
     //2. Delete all annotations in random order;
     QTreeWidgetItem *annotation = NULL;
@@ -5164,6 +4904,7 @@ GUI_TEST_CLASS_DEFINITION(test_2737_1) {
 GUI_TEST_CLASS_DEFINITION(test_2754) {
     //1. Open "murine.gb";
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTMouseDriver::doubleClick(os);
@@ -5171,7 +4912,7 @@ GUI_TEST_CLASS_DEFINITION(test_2754) {
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog!=NULL, "activeModalWidget is NULL");
 
@@ -5198,6 +4939,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_1) {
     PermissionsSetter p;
     p.setReadOnly(os, sandBoxDir + "test_2761_1");
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select some area in the MSA.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2,2), QPoint(5,5));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
@@ -5205,7 +4947,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_1) {
 
     class customFiller: public ExtractSelectedAsMSADialogFiller{
     public:
-        customFiller(U2OpStatus &os): ExtractSelectedAsMSADialogFiller(os,testDir + "_common_data/scenarios/sandbox/test_2761_1/2761.aln",
+        customFiller(HI::GUITestOpStatus &os): ExtractSelectedAsMSADialogFiller(os,testDir + "_common_data/scenarios/sandbox/test_2761_1/2761.aln",
                                                        QStringList() << "Bicolorana_bicolor_EF540830" << "Roeseliana_roeseli"){}
         void run(){
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "No write permission to"));
@@ -5226,6 +4968,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_1) {
 GUI_TEST_CLASS_DEFINITION(test_2761_2) {
     //    1. Open "samples/CLUSTALW/COI.aln".
         GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    2. Select some area in the MSA.
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2,2), QPoint(5,5));
         GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
@@ -5233,7 +4976,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_2) {
 
         class customFiller: public ExtractSelectedAsMSADialogFiller{
         public:
-            customFiller(U2OpStatus &os): ExtractSelectedAsMSADialogFiller(os,testDir + "_common_data/scenarios/sandbox/test_2761_2/2761.aln",
+            customFiller(HI::GUITestOpStatus &os): ExtractSelectedAsMSADialogFiller(os,testDir + "_common_data/scenarios/sandbox/test_2761_2/2761.aln",
                                                            QStringList() << "Bicolorana_bicolor_EF540830" << "Roeseliana_roeseli"){}
             void run(){
                 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Directory to save does not exist"));
@@ -5260,7 +5003,7 @@ GUI_TEST_CLASS_DEFINITION(test_2762) {
 */
     class EscClicker : public Filler {
     public:
-        EscClicker(U2OpStatus& _os) : Filler(_os, "SaveProjectDialog"){}
+        EscClicker(HI::GUITestOpStatus& _os) : Filler(_os, "SaveProjectDialog"){}
         virtual void run(){
 
             GTGlobals::sleep();
@@ -5275,9 +5018,10 @@ GUI_TEST_CLASS_DEFINITION(test_2762) {
     };
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new EscClicker(os));
     GTGlobals::sleep(1000);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 
     GTUtilsProject::checkProject(os);
 }
@@ -5300,13 +5044,12 @@ GUI_TEST_CLASS_DEFINITION(test_2770) {
         CreateDocumentFiller::FASTA,
         "result", true
         );
-    GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, filler);
-    GTGlobals::sleep();
 
-    GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
 
     GTUtilsDocument::checkDocument(os, "result");
 
@@ -5347,6 +5090,7 @@ GUI_TEST_CLASS_DEFINITION(test_2773) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/cmdline/custom-script-worker-functions/translateTest/", "translateTest.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/cmdline/", "DNA.fa" );
@@ -5380,7 +5124,7 @@ GUI_TEST_CLASS_DEFINITION(test_2778) {
     parameters.samOutput = false;
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsLog::check(os, l);
@@ -5391,6 +5135,7 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
 
     //1. Open the file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state : MSA view has opened, the "Undo" button is disabled.
     QAbstractButton *undoButton = GTAction::button(os, "msa_action_undo");
@@ -5457,6 +5202,7 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
 GUI_TEST_CLASS_DEFINITION(test_2796) {
     //1. Open file "_common_data/fasta/fa2.fa"
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "fa2.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Use main menu { Actions -> Analyse -> Find pattern[Smith-Waterman]... }
     //Expected state: the "Smith-Waterman Search" dialog has appeared
@@ -5465,17 +5211,17 @@ GUI_TEST_CLASS_DEFINITION(test_2796) {
     SmithWatermanDialogFiller *filler = new SmithWatermanDialogFiller(os);
     filler->button = SmithWatermanDialogFiller::Cancel;
     GTUtilsDialog::waitForDialog(os, filler);
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Find pattern [Smith-Waterman]", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2801 ){
     //1. Open {_common_data/clustal/100_sequences.aln}.
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "3000_sequences.aln");
-    GTGlobals::sleep(30000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Start MAFFT with default values.
     GTUtilsDialog::waitForDialog(os, new MAFFTSupportRunDialogFiller(os, new MAFFTSupportRunDialogFiller::Parameters()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with MAFFT", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with MAFFT"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep(5000);
     //3. Cancel the align task.
@@ -5498,6 +5244,7 @@ GUI_TEST_CLASS_DEFINITION( test_2801 ){
 GUI_TEST_CLASS_DEFINITION( test_2801_1 ){
     //1. Open {_common_data/clustal/100_sequences.aln}.
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "3000_sequences.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(30000);
     //2. Start MAFFT with default values.
     GTUtilsDialog::waitForDialog(os, new MAFFTSupportRunDialogFiller(os, new MAFFTSupportRunDialogFiller::Parameters()));
@@ -5552,7 +5299,7 @@ GUI_TEST_CLASS_DEFINITION( test_2808 ){
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -5604,7 +5351,7 @@ GUI_TEST_CLASS_DEFINITION( test_2809 ){
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerGroupDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -5648,7 +5395,9 @@ GUI_TEST_CLASS_DEFINITION(test_2811) {
 GUI_TEST_CLASS_DEFINITION(test_2829) {
     //1) Open files "data/samples/Genbank/murine.gb" and "data/samples/Genbank/sars.gb" in separated views
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2) Click on toolbar 'Build dotplot' button
     //3) In opened dialog click 'OK' button
@@ -5679,7 +5428,7 @@ GUI_TEST_CLASS_DEFINITION( test_2853 ){
 
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SEARCH_GENBANK, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 }
@@ -5727,7 +5476,7 @@ GUI_TEST_CLASS_DEFINITION(test_2866) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Yes"));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_2866.ugenedb"));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTGlobals::sleep(5000);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -5767,6 +5516,7 @@ GUI_TEST_CLASS_DEFINITION(test_2891) {
     // Expected state: there is no messages about the "Read tags" element on the "Error list" tab
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, dataDir + "/workflow_samples/NGS/cistrome/", "chip_seq.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Read Tags");
@@ -5788,6 +5538,7 @@ GUI_TEST_CLASS_DEFINITION(test_2891) {
     // Expected state: there is a warning about possible incompatibilities of the "Read tags" element on the "Error list" tab
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, dataDir + "/workflow_samples/NGS/cistrome/", "chip_seq.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Read Tags");
@@ -5804,6 +5555,7 @@ GUI_TEST_CLASS_DEFINITION(test_2894){
 //    1. Open {_common_data/clustal/100_sequences.aln}.
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "100_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu {Tree->Build Tree}.
 //    Expected state: "Build phylogenetic tree" dialog has been appeared.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_2894_COI.nwk", 0, 0, true));
@@ -5849,12 +5601,13 @@ GUI_TEST_CLASS_DEFINITION(test_2895){
     //2. Open "_common_data/fasta/amino_multy_ext.fa" as separate sequences.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, testDir+"_common_data/fasta/", "amino_multy_ext.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir+"_common_data/fasta/", "amino_multy.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //3. Try to add to the amino_multy.fa document, any sequence from the amino_multy_ext.fa document.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from current project"));
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "amino_multy_ext.fa", "chr1_gl000191_random Amino translation 0 direct"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from current project...");
     GTGlobals::sleep();
     //Expected: an object will be added.
 }
@@ -5862,6 +5615,7 @@ GUI_TEST_CLASS_DEFINITION(test_2895){
 GUI_TEST_CLASS_DEFINITION(test_2897) {
     //    1. Open {data/samples/CLUSTALW/COI.aln}.
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Open options panel 'Highlighting' tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
@@ -5900,7 +5654,7 @@ GUI_TEST_CLASS_DEFINITION(test_2899){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
 //    4. Go to the "Cuffmerge settings" page and click the "Defaults" button.
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog!=NULL, "activeModalWidget is NULL");
@@ -5936,6 +5690,7 @@ GUI_TEST_CLASS_DEFINITION(test_2899){
 GUI_TEST_CLASS_DEFINITION(test_2900) {
 //    1. Open "samples/Genbank/murine.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Sequence view context menu -> Analyze -> Restriction sites.
 //    3. Press "OK".
@@ -5964,6 +5719,7 @@ GUI_TEST_CLASS_DEFINITION(test_2903) {
 //    1. Open the attached file
     GTLogTracer l;
     GTFileDialog::openFile( os, testDir + "_common_data/regression/2903", "unknown_virus.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new RemoteBLASTDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE"
@@ -5980,6 +5736,7 @@ GUI_TEST_CLASS_DEFINITION(test_2903) {
 GUI_TEST_CLASS_DEFINITION(test_2907) {
     //1. Open file _common_data/genbank/pBR322.gb
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/", "pBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. In annotations tree view go to element Auto - annotations->enzyme->EcoRI(0, 1)->EcoRI
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Restriction Sites"));
@@ -6003,6 +5760,7 @@ GUI_TEST_CLASS_DEFINITION(test_2907) {
 GUI_TEST_CLASS_DEFINITION(test_2910) {
     // 1. Open {data/samples/FASTA/human_T1.fa}.
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Press Ctrl+A.
     // 3. Select a "Multiple Range Selection" mode, enter the region: 10000..15000
@@ -6021,6 +5779,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910) {
 GUI_TEST_CLASS_DEFINITION(test_2910_1) {
     // 1. Open {data/samples/FASTA/human_T1.fa}.
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Press Ctrl+A.
     // 3. Select a "Multiple Range Selection" mode, enter the region: 2000..5000,100000..110000
@@ -6043,6 +5802,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910_1) {
 GUI_TEST_CLASS_DEFINITION(test_2910_2) {
     // 1. Open {data/samples/FASTA/human_T1.fa}.
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(2000);
 
     // 2. Press Ctrl+A.
@@ -6051,7 +5811,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910_2) {
     // Expected state: the region is invalid, a "Go" button is disabled.
     class CancelClicker : public Filler {
     public:
-        CancelClicker(U2OpStatus& _os) : Filler(_os, "RangeSelectionDialog"){}
+        CancelClicker(HI::GUITestOpStatus& _os) : Filler(_os, "RangeSelectionDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -6080,6 +5840,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910_2) {
 GUI_TEST_CLASS_DEFINITION(test_2910_3) {
     // 1. Open {data/samples/FASTA/human_T1.fa}.
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(2000);
 
     // 2. Press Ctrl+A.
@@ -6088,13 +5849,14 @@ GUI_TEST_CLASS_DEFINITION(test_2910_3) {
     // Expected state: the region is invalid, a "Go" button is disabled.
     class CancelClicker : public Filler {
     public:
-        CancelClicker(U2OpStatus& _os) : Filler(_os, "RangeSelectionDialog"){}
+        CancelClicker(HI::GUITestOpStatus& _os) : Filler(_os, "RangeSelectionDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
             QRadioButton *multipleButton = w->findChild<QRadioButton*>("miltipleButton");
             CHECK_SET_ERR(multipleButton != NULL, "RadioButton \"miltipleButton\" not found");
             GTRadioButton::click(os, multipleButton);
+            GTGlobals::sleep();
 
             QLineEdit *regionEdit= w->findChild<QLineEdit*>("multipleRegionEdit");
             CHECK_SET_ERR(regionEdit != NULL, "QLineEdit \"multipleRegionEdit\" not foud");
@@ -6110,8 +5872,8 @@ GUI_TEST_CLASS_DEFINITION(test_2910_3) {
         }
     };
     GTUtilsDialog::waitForDialog(os, new CancelClicker(os));
-    GTKeyboardDriver::keyClick(os, 'A', GTKeyboardDriver::key["ctrl"]);
-    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2923) {
@@ -6121,6 +5883,7 @@ GUI_TEST_CLASS_DEFINITION(test_2923) {
     //2. Press Ctrl+W.
     //Expected: the sequence view is closed.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::activeWindow(os);
 
     GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
@@ -6132,9 +5895,11 @@ GUI_TEST_CLASS_DEFINITION(test_2923) {
 GUI_TEST_CLASS_DEFINITION(test_2924) {
     //1. Open "_common_data/scenarios/_regression/2924/human_T1_cutted.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2924/", "human_T1_cutted.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "_common_data/scenarios/_regression/2924/MyDocument_3.gb".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/2924/", "MyDocument_3.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Drag'n'drop the annotation object from the project to the sequence view.
     //Expected: the dialog appears.
@@ -6169,10 +5934,11 @@ GUI_TEST_CLASS_DEFINITION(test_2929){
 //        Current state: the message box is closed, UGENE crashed.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class SiteconCustomFiller : public Filler {
     public:
-        SiteconCustomFiller(U2OpStatus &os)
+        SiteconCustomFiller(HI::GUITestOpStatus &os)
             : Filler(os, "SiteconSearchDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -6201,8 +5967,10 @@ GUI_TEST_CLASS_DEFINITION(test_2930){
                                  (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_2930"));
     GTFileDialog::openFile(os, dataDir+"samples/ACE", "K26.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
 }
@@ -6213,11 +5981,11 @@ GUI_TEST_CLASS_DEFINITION(test_2931){
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_2931"));
     GTFileDialog::openFile(os, dataDir+"samples/ACE", "K26.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ConvertAssemblyToSAMDialogFiller(os, sandBoxDir, "test_2931"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS),
-        QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_CONVERT_SAM);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Convert UGENE assembly database to SAM...");
 
     CHECK_SET_ERR(!l.hasError(), "There is error message in log");
 }
@@ -6232,6 +6000,7 @@ GUI_TEST_CLASS_DEFINITION(test_2945){
     // New state of UGENE: seq.view is resizable now, so CV will not be visible by dragging splitter between SV and AE
 
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTAction::button(os, "CircularViewAction"));
     QWidget* zoomIn = GTAction::button(os, "tbZoomIn_murine [s] NC_001363");
     CHECK_SET_ERR(zoomIn != NULL, "zoomIn action on CV not found");
@@ -6249,7 +6018,8 @@ GUI_TEST_CLASS_DEFINITION(test_2945){
     GTMouseDriver::press(os);
     GTMouseDriver::moveTo(os, bottomLeftToolBar);
     GTMouseDriver::release(os);
-    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
+    GTGlobals::sleep(5000);
     QPoint handlePosition = splitterHandler->pos();
 
     QAbstractButton* cvButton = GTAction::button(os, "CircularViewAction");
@@ -6268,9 +6038,10 @@ GUI_TEST_CLASS_DEFINITION(test_2945){
     GTMouseDriver::press(os);
     GTMouseDriver::moveTo(os, p + QPoint(0, 50));
     GTMouseDriver::release(os);
-    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
+    GTGlobals::sleep(5000);
 
-    CHECK_SET_ERR(handlePosition == splitterHandler->pos(), "Handler was moved");
+    CHECK_SET_ERR(handlePosition == splitterHandler->pos(), QString("Handler was moved: expected: %1, actual: %2").arg(splitter->pos().y()).arg(handlePosition.y()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2951) {
@@ -6338,8 +6109,7 @@ GUI_TEST_CLASS_DEFINITION(test_2962_1) {
     CHECK_SET_ERR(GTUtilsCv::isCvPresent(os, seqWidget), "Unexpected state of CV widget!");
 
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECTSUPPORT__CLOSE_PROJECT, GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project", GTGlobals::UseMouse);
 
     seqWidget = GTUtilsProject::openFileExpectSequence(os,
                                                        testDir + "_common_data/scenarios/_regression/2924",
@@ -6363,6 +6133,7 @@ GUI_TEST_CLASS_DEFINITION(test_2962_2) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "GXL_141618");
     GTMouseDriver::moveTo(os, p);
@@ -6381,6 +6152,7 @@ GUI_TEST_CLASS_DEFINITION(test_2971) {
     Expected: UGENE does not crash.
 */
     GTFileDialog::openFile(os, dataDir +"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     GTWidget::click(os, GTAction::button(os, "Show overview"));//needed to swith off rendering overview
@@ -6401,10 +6173,10 @@ GUI_TEST_CLASS_DEFINITION(test_2972){
 //    1. Open "samples/FASTA/human_T1.fa".
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir +"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click the menu Tools -> HMMER tools -> HMM3 -> Search with HMM3 phmmer.
     GTUtilsDialog::waitForDialog(os, new UHMM3PhmmerDialogFiller(os, dataDir + "samples/Newick/COI.nwk"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::HMMER_MENU << ToolsMenu::HMMER_SEARCH3P));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "HMMER tools" << "Search with HMMER3 phmmer...");
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "no error in log");
@@ -6439,6 +6211,7 @@ GUI_TEST_CLASS_DEFINITION(test_2975) {
 GUI_TEST_CLASS_DEFINITION(test_2981) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click a "Build Tree" button on the main toolbar.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_3276_COI.wnk", 0, 0, true));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
@@ -6480,6 +6253,7 @@ GUI_TEST_CLASS_DEFINITION(test_2987) {
     GTLogTracer logTracer;
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "RAW2.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QDir().mkpath(sandBoxDir + "test_3305");
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "misc_feature", "complement(1..5)", sandBoxDir + "test_2987/test_2987.gb"));
@@ -6500,6 +6274,7 @@ GUI_TEST_CLASS_DEFINITION(test_2991) {
     Expected state: Alphabet of opened sequence must be [amino ext]
 */
     GTFileDialog::openFile(os, testDir +"_common_data/alphabets/", "extended_amino_1000.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
     QWidget* w=GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     QLabel* label = qobject_cast<QLabel*>(GTWidget::findWidget(os, "nameLabel",w));
@@ -6510,6 +6285,7 @@ GUI_TEST_CLASS_DEFINITION(test_2998) {
     // 1. Open human_T1.fa
     GTLogTracer l;
     GTFileDialog::openFile(os, dataDir +"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     // 2. Find any pattern
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
index 0331a4b..a43baa8 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_regression_scenarios {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_regression_scenarios_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_regression_scenarios"
 
 GUI_TEST_CLASS_DECLARATION(test_2006)
 GUI_TEST_CLASS_DECLARATION(test_2007)
@@ -50,7 +50,6 @@ GUI_TEST_CLASS_DECLARATION(test_2030)
 GUI_TEST_CLASS_DECLARATION(test_2032)
 GUI_TEST_CLASS_DECLARATION(test_2049)
 GUI_TEST_CLASS_DECLARATION(test_2053)
-GUI_TEST_CLASS_DECLARATION(test_2070)
 GUI_TEST_CLASS_DECLARATION(test_2076)
 GUI_TEST_CLASS_DECLARATION(test_2077)
 GUI_TEST_CLASS_DECLARATION(test_2078)
@@ -62,7 +61,6 @@ GUI_TEST_CLASS_DECLARATION(test_2093_2)
 GUI_TEST_CLASS_DECLARATION(test_2100_1)
 GUI_TEST_CLASS_DECLARATION(test_2100_2)
 GUI_TEST_CLASS_DECLARATION(test_2100_3)
-GUI_TEST_CLASS_DECLARATION(test_2122)
 GUI_TEST_CLASS_DECLARATION(test_2124)
 GUI_TEST_CLASS_DECLARATION(test_2128)
 GUI_TEST_CLASS_DECLARATION(test_2128_1)
@@ -74,15 +72,7 @@ GUI_TEST_CLASS_DECLARATION(test_2152)
 GUI_TEST_CLASS_DECLARATION(test_2156)
 GUI_TEST_CLASS_DECLARATION(test_2157)
 GUI_TEST_CLASS_DECLARATION(test_2160)
-GUI_TEST_CLASS_DECLARATION(test_2163)
-GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_2164, 360000)
 GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_2165, 480000)
-GUI_TEST_CLASS_DECLARATION(test_2167)
-GUI_TEST_CLASS_DECLARATION(test_2169)
-GUI_TEST_CLASS_DECLARATION(test_2171)
-GUI_TEST_CLASS_DECLARATION(test_2172)
-GUI_TEST_CLASS_DECLARATION(test_2174)
-GUI_TEST_CLASS_DECLARATION(test_2186)
 GUI_TEST_CLASS_DECLARATION(test_2187)
 GUI_TEST_CLASS_DECLARATION(test_2188)
 GUI_TEST_CLASS_DECLARATION(test_2192)
@@ -165,8 +155,6 @@ GUI_TEST_CLASS_DECLARATION(test_2543)
 GUI_TEST_CLASS_DECLARATION(test_2544)
 GUI_TEST_CLASS_DECLARATION(test_2545)
 GUI_TEST_CLASS_DECLARATION(test_2549)
-GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_2562, 480000)
-GUI_TEST_CLASS_DECLARATION(test_2562_1)
 GUI_TEST_CLASS_DECLARATION(test_2565)
 GUI_TEST_CLASS_DECLARATION(test_2566)
 GUI_TEST_CLASS_DECLARATION(test_2567)
@@ -258,7 +246,7 @@ GUI_TEST_CLASS_DECLARATION(test_2987)
 GUI_TEST_CLASS_DECLARATION(test_2991)
 GUI_TEST_CLASS_DECLARATION(test_2998)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_regression_scenarios
 
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 9f8dc61..c0c1537 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
@@ -21,29 +21,31 @@
 
 #include "GTTestsRegressionScenarios_3001_4000.h"
 
-#include "api/GTRadioButton.h"
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTGlobals.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTKeyboardUtils.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
+#include "primitives/GTAction.h"
+#include <primitives/GTCheckBox.h>
+#include "system/GTClipboard.h"
+#include <primitives/GTComboBox.h>
+#include "system/GTFile.h"
+#include <base_dialogs/GTFileDialog.h>
+#include "GTGlobals.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "utils/GTKeyboardUtils.h"
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
 #include "api/GTSequenceReadingModeDialog.h"
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include "api/GTSlider.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
 
 #include "GTDatabaseConfig.h"
 #include "GTUtilsAnnotationsTreeView.h"
@@ -52,7 +54,7 @@
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "GTUtilsDialog.h"
+#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -70,14 +72,15 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsToolTip.h"
+#include "utils/GTUtilsToolTip.h"
+#include "utils/GTThread.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
 
-#include "runnables/qt/DefaultDialogFiller.h"
+#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.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"
@@ -110,7 +113,7 @@
 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreemntDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
 #include "runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h"
 #include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
@@ -160,7 +163,6 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Gui/ProjectViewModel.h>
 #include <U2Gui/ToolsMenu.h>
@@ -199,6 +201,7 @@ namespace GUITest_regression_scenarios {
 GUI_TEST_CLASS_DEFINITION(test_3006){
 //    1. Open the data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click on the Switch on/off collapsing button
     GTUtilsMsaEditor::toggleCollapsingMode(os);
 //    Expected state: Mecopoda_elongata_IshigakiJ and Mecopoda_elongataSumatra will be collapsed
@@ -220,6 +223,7 @@ GUI_TEST_CLASS_DEFINITION(test_3014) {
     //1. Open the _common_data/scenarios/_regression/3014/pdb2q41.ent.gz
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir +"_common_data/scenarios/_regression/3014/", "pdb2q41.ent.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(10000);
 
     // 2. In context menu go to 'Molecular surface'->'SES'
@@ -238,26 +242,28 @@ GUI_TEST_CLASS_DEFINITION(test_3017) {
     //3. Run ClastulW, ClustalO, Mafft or T-Coffee alignment task;
     //4. Try to change an alignment while the task is running: move region, delete region etc.;
     //Current state: there is no results of your actions because msa is blocked, overview is not recalculated.
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Refine));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(3000);
 
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(1,1));
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(13,8));
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
 
     GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep();
     QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR("T" == clipboardText, "Alignment is not locked" + clipboardText);
+    CHECK_SET_ERR("S" == clipboardText, "Alignment is not locked" + clipboardText);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3031){
     //    Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    Open "Statistics" options panel tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
     //    Set "Montatna_montana" reference sequence.
@@ -276,6 +282,7 @@ GUI_TEST_CLASS_DEFINITION(test_3034) {
 //    Expected: the dialog will appear. There are no human_T1 objects.
     GTLogTracer l;
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog( os, new ProjectTreeItemSelectorDialogFiller(os, QMap<QString, QStringList>(),
                                                                               QSet<GObjectType>(),
@@ -300,7 +307,7 @@ GUI_TEST_CLASS_DEFINITION(test_3035){
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CONNECT, conName);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
     // import, remove, drag'n'drop, empty recycle bin, restore from recycle bin. is prohibited
     GTUtilsProjectTreeView::click(os, "Recycle bin", Qt::RightButton);
     CHECK_SET_ERR(QApplication::activePopupWidget()==NULL, "popup menu unexpectidly presents on recyble bin");
@@ -318,6 +325,7 @@ GUI_TEST_CLASS_DEFINITION(test_3035){
     GTMouseDriver::click(os, Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view"));
     GTMouseDriver::click(os, Qt::RightButton);
+    GTGlobals::sleep();
     QString name = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(name == " [s] et0001_sequence", QString("unexpected window title:%1").arg(name));
 
@@ -367,6 +375,7 @@ GUI_TEST_CLASS_DEFINITION(test_3052) {
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "chrM.sorted.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::closeWindow(os, "test_3052 [as] chrM");
@@ -374,6 +383,7 @@ GUI_TEST_CLASS_DEFINITION(test_3052) {
     GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, "Append" ) );
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "scerevisiae.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
     GTMouseDriver::click(os);
@@ -382,6 +392,7 @@ GUI_TEST_CLASS_DEFINITION(test_3052) {
 
     GTUtilsDocument::removeDocument(os, docName);
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/sandbox", "test_3052.ugenedb" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsLog::check(os, l);
 }
@@ -394,6 +405,7 @@ GUI_TEST_CLASS_DEFINITION(test_3052_1) {
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "chrM.sorted.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::closeWindow(os, "test_3052 [as] chrM");
@@ -401,6 +413,7 @@ GUI_TEST_CLASS_DEFINITION(test_3052_1) {
     GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, "Append" ) );
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, ugenedbFileName));
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "scerevisiae.bam" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
     GTMouseDriver::click(os);
@@ -431,6 +444,7 @@ GUI_TEST_CLASS_DEFINITION(test_3073) {
 //    Expected state: both files are loaded;
     GTLogTracer l;
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "group", "annotation_1",
                                                                       "10..20", sandBoxDir + "test_3073.gb"));
@@ -447,24 +461,23 @@ GUI_TEST_CLASS_DEFINITION(test_3073) {
 
     GTUtilsDocument::saveDocument(os, "test_3073.gb");
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj_test_3073", sandBoxDir, "proj_test_3073"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT, GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...", GTGlobals::UseMouse);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECTSUPPORT__CLOSE_PROJECT, GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTFileDialog::openFile( os, sandBoxDir, "proj_test_3073.uprj" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDocument::loadDocument(os, "human_T1.fa");
     CHECK_SET_ERR( GTUtilsDocument::isDocumentLoaded(os, "test_3073.gb"), "Annotation file is not loaded!");
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECTSUPPORT__CLOSE_PROJECT, GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_FILE);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project", GTGlobals::UseMouse);
     GTGlobals::sleep();
 
     GTFileDialog::openFile( os, sandBoxDir, "proj_test_3073.uprj" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDocument::loadDocument(os, "test_3073.gb");
@@ -516,6 +529,7 @@ GUI_TEST_CLASS_DEFINITION(test_3085_1) {
 
     //1. Open samples/genbank/murine.gb.
     GTFileDialog::openFile(os, sandBoxDir + "murine_3085_1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *sv = GTUtilsMdi::activeWindow(os);
 
     //2. Change the sequence outside UGENE.
@@ -549,6 +563,7 @@ GUI_TEST_CLASS_DEFINITION(test_3085_2) {
 
     //1. Open "_common_data/regression/test.gb".
     GTFileDialog::openFile(os, sandBoxDir + "murine_3085_2.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Append another sequence to the file outside of UGENE.
     //3. Click "Yes" in the appeared dialog in UGENE.
@@ -565,6 +580,7 @@ GUI_TEST_CLASS_DEFINITION(test_3086) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_3086/test_3086.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/3086/", "UGENE-3086.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3092) {
@@ -574,10 +590,10 @@ GUI_TEST_CLASS_DEFINITION(test_3092) {
 //    Expected state: a dialog "Request to Local BLAST Database" appears, UGENE doesn't crash.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(BlastAllSupportDialogFiller::Parameters(), os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "query_with_blast+", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST+...", GTGlobals::UseMouse);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3101){
@@ -585,13 +601,14 @@ GUI_TEST_CLASS_DEFINITION(test_3101){
     //Expected state : "Document format selection" dialog appeared
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Newick Standard"));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/3101", "enzymes");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select "Newick" format
     //Expected state : Task finished with error, but without assert call
     GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3102) {
-    //1. Go to 'File->Connect to shared database...'
+    //1. Go to 'File->Connect to UGENE shared database...'
     //    Expected state: Showed dialog 'Shared Databases Connections'
     //    In list of connections showed 'UGENE public database'
     GTLogTracer logTracer;
@@ -601,13 +618,14 @@ GUI_TEST_CLASS_DEFINITION(test_3102) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3103) {
-    //1. Go to 'File->Connect to shared database...'
+    //1. Go to 'File->Connect to UGENE shared database...'
     //Expected state: Showed dialog 'Shared Databases Connections'
     //2. Click on 'Add' button
     //Expected state: Showed dailog 'Connection Settings' and 'Port' field filled with port 3306
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::ADD);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
     {
@@ -616,7 +634,7 @@ GUI_TEST_CLASS_DEFINITION(test_3103) {
         params.accept = false;
         GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params, EditConnectionDialogFiller::FROM_SETTINGS));
     }
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3112) {
@@ -626,6 +644,7 @@ GUI_TEST_CLASS_DEFINITION(test_3112) {
 //     Expected state: the overview widget hides, the render task cancels.
 //     Current state: the overview widget hides, the render task still works. If you change the msa (insert a gap somewhere), a safe point triggers.
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "10000_sequences.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep(20000); //in case of failing test try to increase this pause
 
@@ -695,6 +714,7 @@ GUI_TEST_CLASS_DEFINITION(test_3126) {
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os,
                                                                         sandBoxDir + "test_3126"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsLog::check(os, l);
 }
@@ -705,6 +725,7 @@ GUI_TEST_CLASS_DEFINITION(test_3128) {
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/cmdline/read-write/", "read_db_write_gen.uws");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 
     // 2. Set parameters:     db="NCBI protein sequence database", id="AAA59172.1"
@@ -725,6 +746,7 @@ GUI_TEST_CLASS_DEFINITION(test_3128_1) {
 
     // 1. Open any genbank file with a COMMENT section
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Find the "comment" annotation, click it.
     QTreeWidgetItem *item2 = GTUtilsAnnotationsTreeView::findItem(os, "comment");
@@ -759,10 +781,11 @@ GUI_TEST_CLASS_DEFINITION(test_3130) {
     connectAction.expectedResult = SharedConnectionsDialogFiller::Action::WRONG_DATA;
     actions << connectAction;
     actions << connectAction;
+    actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
 
     GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
     GTGlobals::sleep();
 }
 
@@ -774,11 +797,13 @@ GUI_TEST_CLASS_DEFINITION(test_3133) {
     CHECK_OP(os, );
     //2. Save the project.
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "test_3133", testDir + "_common_data/scenarios/sandbox/", "test_3133"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
+
     //3. Close the project.
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     //4. Open the saved project.
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/", "test_3133.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state: project view is present, there are no documents presented.
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, dbName, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(!idx.isValid(), "The database document is in the project");
@@ -822,6 +847,7 @@ GUI_TEST_CLASS_DEFINITION(test_3138) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "abcd.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
     GTGlobals::sleep(200);
@@ -859,7 +885,7 @@ GUI_TEST_CLASS_DEFINITION(test_3139) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* seqArea = GTWidget::findWidget(os, "msa_editor_sequence_area");
@@ -871,6 +897,7 @@ GUI_TEST_CLASS_DEFINITION(test_3140) {
     GTUtilsTaskTreeView::openView(os);
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select the first symbol of the first line.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(0, 0));
@@ -905,6 +932,7 @@ GUI_TEST_CLASS_DEFINITION(test_3142) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_ADD_TREE_WIDGET"));
@@ -924,6 +952,7 @@ GUI_TEST_CLASS_DEFINITION(test_3143){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 //    Expected state: Showed Import BAM File dialog.
 //    2. Click Import;
@@ -938,6 +967,7 @@ GUI_TEST_CLASS_DEFINITION(test_3143){
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.sorted.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 //    4. Click Import;
 //    Expected state: Showed message box with question about overwriting of existing file..
@@ -985,11 +1015,12 @@ GUI_TEST_CLASS_DEFINITION(test_3155) {
     // 1. Open "humam_T1"
     // Expected state: "Circular search" checkbox does not exist
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     // 2. Press "Find ORFs" tool button
     class CancelClicker : public Filler {
     public:
-        CancelClicker(U2OpStatus& _os) : Filler(_os, "ORFDialogBase"){}
+        CancelClicker(HI::GUITestOpStatus& _os) : Filler(_os, "ORFDialogBase"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -1015,6 +1046,7 @@ GUI_TEST_CLASS_DEFINITION(test_3156){
 //    2. Open file "data/samples/Genbank/murine.gb"
     GTFile::copy(os, dataDir + "samples/Genbank/murine.gb", sandBoxDir + "test_3156_murine.gb");
     GTFileDialog::openFile(os, sandBoxDir, "test_3156_murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Drag the document item onto the DB item in project view
     QModelIndex from = GTUtilsProjectTreeView::findIndex(os, "test_3156_murine.gb");
     QModelIndex to = GTUtilsProjectTreeView::findIndex(os, "test_3156");
@@ -1027,7 +1059,7 @@ GUI_TEST_CLASS_DEFINITION(test_3156){
 
 class test_3165_messageBoxDialogFiller: public MessageBoxDialogFiller{
 public:
-    test_3165_messageBoxDialogFiller(U2OpStatus &os, QMessageBox::StandardButton _b):
+    test_3165_messageBoxDialogFiller(HI::GUITestOpStatus &os, QMessageBox::StandardButton _b):
         MessageBoxDialogFiller(os, _b){}
     virtual void run(){
         QWidget* activeModal = QApplication::activeModalWidget();
@@ -1051,6 +1083,8 @@ GUI_TEST_CLASS_DEFINITION(test_3165){
     //PermissionsSetter::setPermissions(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"]);
@@ -1058,7 +1092,7 @@ GUI_TEST_CLASS_DEFINITION(test_3165){
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
     GTUtilsDialog::waitForDialog(os, new test_3165_messageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir, "test_3165_out.aln", GTFileDialogUtils::Save));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Save));
 //    Expected state: you are offered to save the project.
@@ -1071,30 +1105,31 @@ GUI_TEST_CLASS_DEFINITION(test_3165){
     //TODO: add this check after UGENE-3200 fix
     //GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + "test_3165_out.aln"), "file not saved");
+    GTGlobals::sleep();
 //    Current state: file is successfully saved, then UGENE crashes.
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3170) {
     // 1. Open human_T1.fa.
-    // 2. Select the region [301..350].
-    // 3. Context menu -> Analyze -> Query with BLAST+.
-    // 5. Select the database.
-    // 6. Run.
-    // Expected: the found annotations don't start from the position 1.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
+    // 2. Select the region [301..350].
     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"));
 
+    // 3. Context menu -> Analyze -> Query with BLAST+.
+    // 5. Select the database.
+    // 6. Run.
     BlastAllSupportDialogFiller::Parameters blastParams;
     blastParams.runBlast = true;
     blastParams.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(blastParams, os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "query_with_blast+", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST+...", GTGlobals::UseMouse);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
+    // Expected: the found annotations don't start from the position 1.
     bool found1 = GTUtilsAnnotationsTreeView::findRegion(os, "blast result", U2Region(51, 51));
     CHECK_OP(os, );
     CHECK_SET_ERR(found1, "Can not find the blast result");
@@ -1106,6 +1141,7 @@ GUI_TEST_CLASS_DEFINITION(test_3170) {
 GUI_TEST_CLASS_DEFINITION(test_3175) {
     // 1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     // Expected: the first sequence is "TAAGACTTCTAA".
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 12, 0 ) );
@@ -1121,6 +1157,7 @@ GUI_TEST_CLASS_DEFINITION(test_3180) {
     //3. Accept the dialog.
     //Expected: the task becomes cancelled.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Restriction Sites"));
     GTWidget::click(os, GTWidget::findWidget(os, "AutoAnnotationUpdateAction"));
     GTGlobals::systemSleep();
@@ -1143,9 +1180,8 @@ GUI_TEST_CLASS_DEFINITION(test_3187) {
     p.outputDirPath = sandBoxDir + "test_3187";
     QDir().mkpath(p.outputDirPath);
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_DB));
     GTUtilsNotifications::waitForNotification(os, false);
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST make database...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *reportWidget = GTWidget::findWidget(os, "qt_scrollarea_viewport");
@@ -1162,46 +1198,6 @@ GUI_TEST_CLASS_DEFINITION(test_3187) {
     CHECK_SET_ERR(reportText.contains("Formatdb log file path:"), "report didn't contain expected text");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_3207){
-//    Steps to reproduce:
-//    1. Open "\samples\PDB\1CF7.PDB"
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
-//    2. Select region [30..31] in "1CF7 chain 1" sequence
-    GTUtilsSequenceView::selectSequenceRegion(os, 30,31);
-//    3. Open "DAS annotaions" OP
-    GTWidget::click(os, GTWidget::findWidget(os, "OP_DAS"));
-//    Expected state:
-//    The options panel appeared, selected region in OP [30..31], there is warning, that region is too short
-    QLineEdit* start_edit_line = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "start_edit_line"));
-    CHECK_SET_ERR(start_edit_line != NULL, "start_edit_line not found");
-    QString start = start_edit_line->text();
-    CHECK_SET_ERR(start == "30", QString("unexpected start value: %1").arg(start));
-
-    QLineEdit* end_edit_line = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "end_edit_line"));
-    CHECK_SET_ERR(end_edit_line != NULL, "end_edit_line not found");
-    QString end = end_edit_line->text();
-    CHECK_SET_ERR(end == "31", QString("unexpected end value: %1").arg(end));
-
-    QLabel* hintLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "hintLabel"));
-    CHECK_SET_ERR(hintLabel != NULL, "hintLabel not found");
-    QString hint = hintLabel->text();
-    CHECK_SET_ERR(hint == "Warning: Selected region is too short. It should be from 4 to 1900 amino acids.",
-                  QString("unexpected hint: %1").arg(hint));
-//    4. Select region [20..40] in the sequence
-    GTUtilsSequenceView::selectSequenceRegion(os, 20, 40);
-//    Expected state:
-//    Selected region in OP is [20..40], warning is not shown
-    start = start_edit_line->text();
-    CHECK_SET_ERR(start == "20", QString("unexpected start value: %1").arg(start));
-
-    end = end_edit_line->text();
-    CHECK_SET_ERR(end == "40", QString("unexpected end value: %1").arg(end));
-
-    CHECK_SET_ERR(hintLabel->isHidden(), "hintLabel unexpectidly presents");
-//    Current state:
-//    Selected region in OP is [30..31], warning is shown
-}
-
 GUI_TEST_CLASS_DEFINITION(test_3209_1) {
     // BLAST+ from file
     BlastAllSupportDialogFiller::Parameters blastParams;
@@ -1211,7 +1207,7 @@ GUI_TEST_CLASS_DEFINITION(test_3209_1) {
     blastParams.withInputFile = true;
     blastParams.inputPath = dataDir + "samples/FASTA/human_T1.fa";
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(blastParams, os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCHP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST+ search...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool found = GTUtilsAnnotationsTreeView::findRegion(os, "blast result", U2Region(5061, 291));
@@ -1228,7 +1224,7 @@ GUI_TEST_CLASS_DEFINITION(test_3209_2) {
     blastParams.withInputFile = true;
     blastParams.inputPath = dataDir + "samples/FASTA/human_T1.fa";
     GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(blastParams, os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCH);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST search...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep(50000);
@@ -1243,9 +1239,10 @@ GUI_TEST_CLASS_DEFINITION(test_3211) {
     BlastAllSupportDialogFiller::Parameters parameters;
     parameters.test_3211 = true;
     parameters.inputPath = dataDir + "samples/FASTA/human_T1.fa";
-    GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(parameters, os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::BLAST_MENU << ToolsMenu::BLAST_SEARCH);
+    GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No), 480000);
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(parameters, os), 480000);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST search...");
+    GTGlobals::sleep();
     //Expected state: there is a "Request to Local BLAST Database" dialog without an annotation widget.
     //2. Set any input sequence.
     //Expected state: an annotation widget was added.
@@ -1278,6 +1275,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_1) {
     QDir().mkpath(sandBoxDir + "test_3216");
     GTFile::copy(os, testDir + "_common_data/genbank/1anot_1seq.gen", sandBoxDir + "test_3216/test_3216_1.gen");
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_1.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Add a qualifier with the value "012345678901234567890123456789012345678901234567890123456789".
     const QString expectedValue = "012345678901234567890123456789012345678901234567890123456789";
@@ -1290,6 +1288,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_1) {
     GTUtilsDocument::removeDocument(os, "test_3216_1.gen");
 
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_1.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const QString actualValue = GTUtilsAnnotationsTreeView::getQualifierValue(os, "test_3216_1", "CDS");
     CHECK_SET_ERR(expectedValue == actualValue, QString("The qualifier value is incorrect: expect '%1', got '%2'").arg(expectedValue).arg(actualValue));
 }
@@ -1299,6 +1298,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_2) {
     QDir().mkpath(sandBoxDir + "test_3216");
     GTFile::copy(os, testDir + "_common_data/genbank/1anot_1seq.gen", sandBoxDir + "test_3216/test_3216_2.gen");
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_2.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Add a qualifier with the value "012345678901234567890123456789 012345678901234567890123456789".
     const QString expectedValue = "012345678901234567890123456789 012345678901234567890123456789";
@@ -1311,6 +1311,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_2) {
     GTUtilsDocument::removeDocument(os, "test_3216_2.gen");
 
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_2.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const QString actualValue = GTUtilsAnnotationsTreeView::getQualifierValue(os, "test_3216_2", "CDS");
     CHECK_SET_ERR(expectedValue == actualValue, QString("The qualifier value is incorrect: expect '%1', got '%2'").arg(expectedValue).arg(actualValue));
 }
@@ -1320,6 +1321,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_3) {
     QDir().mkpath(sandBoxDir + "test_3216");
     GTFile::copy(os, testDir + "_common_data/genbank/1anot_1seq.gen", sandBoxDir + "test_3216/test_3216_3.gen");
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_3.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Add a qualifier with the value "012345678901234567890123456789 0  1 2345678901234567890123456789".
     const QString expectedValue = "012345678901234567890123456789 0  1 2345678901234567890123456789";
@@ -1332,6 +1334,7 @@ GUI_TEST_CLASS_DEFINITION(test_3216_3) {
     GTUtilsDocument::removeDocument(os, "test_3216_3.gen");
 
     GTFileDialog::openFile(os, sandBoxDir + "test_3216", "test_3216_3.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const QString actualValue = GTUtilsAnnotationsTreeView::getQualifierValue(os, "test_3216_3", "CDS");
     CHECK_SET_ERR(expectedValue == actualValue, QString("The qualifier value is incorrect: expect '%1', got '%2'").arg(expectedValue).arg(actualValue));
 }
@@ -1340,6 +1343,7 @@ GUI_TEST_CLASS_DEFINITION(test_3218) {
     // 1. Open "test/_common_data/genbank/big_feature_region.gb".
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/", "big_feature_region.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state : file is opened, there are no errors in the log
     GTUtilsLog::check(os, l);
@@ -1349,11 +1353,11 @@ GUI_TEST_CLASS_DEFINITION(test_3220){
     //1. Open human_T1.fa
     //
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
     //2. Add an annotation
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "DDD", "D", "10..16"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
     //2. Add qualifier with quotes
     Runnable *filler = new EditQualifierFiller(os, "newqualifier", "val\"", GTGlobals::UseMouse, false);
@@ -1405,6 +1409,7 @@ GUI_TEST_CLASS_DEFINITION(test_3221) {
     //    Expected state: annotations created without errors.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -1425,6 +1430,7 @@ GUI_TEST_CLASS_DEFINITION(test_3221) {
 
 GUI_TEST_CLASS_DEFINITION(test_3223){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     QString pattern = ">zzz\n"
             "ACCTGAA\n"
@@ -1502,6 +1508,7 @@ GUI_TEST_CLASS_DEFINITION(test_3229){
 GUI_TEST_CLASS_DEFINITION(test_3245) {
     // 1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Ensure that there is a single menu item (Create new color scheme) in the {Colors -> Custom schemes}
     // submenu of the context menu. Click it.
@@ -1546,14 +1553,11 @@ GUI_TEST_CLASS_DEFINITION(test_3250) {
     //2. Right click on the document in the project view.
     //Expected: there are no the "Export/Import" menu for the database connection.
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
-    CHECK_OP(os, );
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "ugene_gui_test");
-    CHECK_OP(os, );
     GTMouseDriver::moveTo(os, p);
-    U2OpStatus2Log opStatus;
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(opStatus, QStringList() << "Export/Import"));
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Export/Import", PopupChecker::NotExists));
     GTMouseDriver::click(os, Qt::RightButton);
-    CHECK_SET_ERR(opStatus.hasError(), "Export item exists");
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3253) {
@@ -1563,6 +1567,7 @@ GUI_TEST_CLASS_DEFINITION(test_3253) {
 */
 
     GTFileDialog::openFile(os, dataDir + "/samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     QSplitterHandle *splitterHandle = qobject_cast<QSplitterHandle*>(GTWidget::findWidget(os, "qt_splithandle_"));
     CHECK_SET_ERR( NULL != splitterHandle, "splitterHandle is not present" );
@@ -1591,6 +1596,7 @@ GUI_TEST_CLASS_DEFINITION(test_3253_1) {
  *    Expected state: Detail View view resized
 */
     GTFileDialog::openFile(os, dataDir + "/samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
     QWidget *annotationTreeWidget = GTWidget::findWidget( os, "annotations_tree_widget");
 
@@ -1617,6 +1623,8 @@ GUI_TEST_CLASS_DEFINITION(test_3253_1) {
     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);
+    GTGlobals::sleep(5000);
     QSize endSize=detView->size();
     CHECK_SET_ERR( startSize != endSize, "detView is not resized" );
 }
@@ -1627,6 +1635,7 @@ GUI_TEST_CLASS_DEFINITION(test_3253_2) {
  *    Expected state: GC Content (%) graph view resized
 */
     GTFileDialog::openFile(os, dataDir + "/samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     QWidget *sequenceWidget = GTWidget::findWidget( os, "ADV_single_sequence_widget_0" );
@@ -1643,9 +1652,20 @@ GUI_TEST_CLASS_DEFINITION(test_3253_2) {
     QSplitterHandle *splitterHandle = qobject_cast<QSplitterHandle*>(GTWidget::findWidget(os, "qt_splithandle_chromatogram_view_A1#berezikov"));
     CHECK_SET_ERR( NULL != splitterHandle, "splitterHandle is not present" );
 
-    QWidget *graphView = GTWidget::findWidget( os, "GSequenceGraphViewRenderArea");
-    QSize startSize=graphView->size();
+    QWidget *graphView = GTWidget::findWidget(os, "GSequenceGraphViewRenderArea");
+    QSize startSize = graphView->size();
+
+    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));
+    GTGlobals::sleep(100);
+    GTMouseDriver::press(os);
+    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);
+    GTGlobals::sleep();
+
     QSize endSize=graphView->size();
     CHECK_SET_ERR( startSize != endSize, "graphView is not resized" );
 }
@@ -1659,6 +1679,7 @@ GUI_TEST_CLASS_DEFINITION(test_3255) {
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_3255/test_3255.ugenedb",
                                                              "", "", true));
     GTFileDialog::openFile(os, testDir + "_common_data/bam/", "1.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsLog::check(os, l);
 }
@@ -1667,6 +1688,7 @@ GUI_TEST_CLASS_DEFINITION(test_3263){
 //    1. Open "_common_data/alphabets/standard_dna_rna_amino_1000.fa"
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "standard_dna_rna_amino_1000.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open CV for the first sequence
     QWidget* cvButton1 = GTWidget::findWidget(os, "CircularViewAction", GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     QWidget* cvButton2 = GTWidget::findWidget(os, "CircularViewAction", GTWidget::findWidget(os, "ADV_single_sequence_widget_1"));
@@ -1721,6 +1743,7 @@ GUI_TEST_CLASS_DEFINITION(test_3266){
 GUI_TEST_CLASS_DEFINITION(test_3270) {
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open "Search in Sequence" options panel tab.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
@@ -1799,7 +1822,7 @@ GUI_TEST_CLASS_DEFINITION(test_3274) {
     CHECK_OP_SET_ERR(os, "Failed to open circular view!");
 
     GTUtilsDialog::waitForDialog(os, new CircularViewExportImage(os, testDir + "_common_data/scenarios/sandbox/image.jpg", "", "seq3"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< ADV_MENU_EXPORT << "Save circular view as image", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< ADV_MENU_EXPORT << "Save circular view as image"));
 
     GTWidget::click(os, circularView, Qt::RightButton);
 }
@@ -1807,6 +1830,7 @@ GUI_TEST_CLASS_DEFINITION(test_3274) {
 GUI_TEST_CLASS_DEFINITION(test_3276) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Build a phylogenetic tree synchronized with the alignment.
     QDir().mkdir(QFileInfo(sandBoxDir + "test_3276/COI.nwk").dir().absolutePath());
@@ -1830,6 +1854,7 @@ GUI_TEST_CLASS_DEFINITION(test_3276) {
 GUI_TEST_CLASS_DEFINITION(test_3277){
 //    Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* seqArea = GTWidget::findWidget(os, "msa_editor_sequence_area");
     QColor before = GTWidget::getColor(os, seqArea, QPoint(1,1));
@@ -1854,6 +1879,7 @@ GUI_TEST_CLASS_DEFINITION(test_3277){
 GUI_TEST_CLASS_DEFINITION(test_3279){
 //    Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open "Statistics" options panel tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
 //    Set any reference sequence.
@@ -1875,6 +1901,7 @@ GUI_TEST_CLASS_DEFINITION(test_3279){
 GUI_TEST_CLASS_DEFINITION(test_3283) {
     //    1. Open "data/Samples/MMDB/1CRN.prt".
     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"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "sec_struct  (0, 5)");
@@ -1884,6 +1911,7 @@ GUI_TEST_CLASS_DEFINITION(test_3283) {
 
 GUI_TEST_CLASS_DEFINITION(test_3287) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_OP(os, );
 
     ImageExportFormFiller::Parameters params;
@@ -1905,6 +1933,7 @@ GUI_TEST_CLASS_DEFINITION(test_3287) {
 GUI_TEST_CLASS_DEFINITION(test_3288){
 //1. Open "data/samples/CLUSTALW/HIV-1.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Click the "Build tree" button on the main toolbar.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFillerPhyML(os, true));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
@@ -1922,6 +1951,7 @@ GUI_TEST_CLASS_DEFINITION(test_3305) {
 
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Create an annotation.
     QDir().mkpath(sandBoxDir + "test_3305");
@@ -1948,6 +1978,7 @@ GUI_TEST_CLASS_DEFINITION(test_3305) {
 
 GUI_TEST_CLASS_DEFINITION(test_3306) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS  (0, 14)");
     GTUtilsAnnotationsTreeView::getItemCenter(os, "gene  (0, 13)");
@@ -1999,6 +2030,7 @@ GUI_TEST_CLASS_DEFINITION(test_3307){
 GUI_TEST_CLASS_DEFINITION(test_3308) {
 //    1. Open "data/samples/PDB/1CF7.PDB".
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on the 3dview, select {Structural Alignment -> Align With...} menu item.
 //    3. Accept the dialog.
@@ -2037,6 +2069,7 @@ GUI_TEST_CLASS_DEFINITION(test_3312){
 GUI_TEST_CLASS_DEFINITION(test_3313){
     //1. Open "data/samples/CLUSTALW/ty3.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Open "Statistics" options panel tab.
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
@@ -2062,10 +2095,12 @@ GUI_TEST_CLASS_DEFINITION(test_3313){
 GUI_TEST_CLASS_DEFINITION(test_3318) {
     // 1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_OP(os, );
 
     // 2. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_OP(os, );
 
     // 3. Drag the sequence to the alignment
@@ -2107,6 +2142,7 @@ GUI_TEST_CLASS_DEFINITION(test_3318) {
 GUI_TEST_CLASS_DEFINITION(test_3321){
 //    Open sequence
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open Circular View
     QWidget* parent = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     QWidget* CircularViewAction = GTWidget::findWidget(os, "CircularViewAction", parent);
@@ -2127,7 +2163,7 @@ GUI_TEST_CLASS_DEFINITION(test_3321){
 GUI_TEST_CLASS_DEFINITION(test_3328) {
     class TestBody_3328 : public QRunnable {
     public:
-        TestBody_3328(U2OpStatus &os, QEventLoop *waiter) :
+        TestBody_3328(HI::GUITestOpStatus &os, QEventLoop *waiter) :
             QRunnable(),
             os(os),
             waiter(waiter) {}
@@ -2138,6 +2174,7 @@ GUI_TEST_CLASS_DEFINITION(test_3328) {
         void run() {
         //    1. Open "test/_common_data/fasta/human_T1_cutted.fa".
             GTFileDialog::openFile(os, GUITest::testDir + "/_common_data/fasta/", "human_T1_cutted.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
         //    2. Click the "Find restriction sites" button on the main toolbar.
         //    3. Select a single enzyme: "AbaBGI". Start the search.
@@ -2154,7 +2191,7 @@ GUI_TEST_CLASS_DEFINITION(test_3328) {
         }
 
     private:
-        U2OpStatus &os;
+        HI::GUITestOpStatus &os;
         QEventLoop *waiter;
     };
 
@@ -2169,6 +2206,7 @@ GUI_TEST_CLASS_DEFINITION(test_3328) {
 GUI_TEST_CLASS_DEFINITION(test_3332) {
     //1. Open "data/sample/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select {Edit -> Remove columns of gaps...} menu item from the context menu.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps"));
     //3. Select the "all-gaps columns" option and accept the dialog.
@@ -2205,11 +2243,11 @@ GUI_TEST_CLASS_DEFINITION(test_3335) {
 
     //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Create an annotation.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "test_3335", "misc_feature", "50..100", sandBoxDir + "test_3335/annotationTable.gb"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
 
     //    Expected state: an annotation table object appears in a new document.
     GTUtilsDocument::checkDocument(os, "annotationTable.gb");
@@ -2243,6 +2281,7 @@ GUI_TEST_CLASS_DEFINITION(test_3342) {
 //    Current state: the view can't be closed
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     const GTGlobals::FindOptions fo(false);
     QWidget* dotplotWgt = GTWidget::findWidget(os, "dotplot widget", NULL, fo);
     CHECK_SET_ERR(dotplotWgt == NULL, "There should be NO dotpot widget");
@@ -2275,14 +2314,13 @@ GUI_TEST_CLASS_DEFINITION(test_3344) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     Runnable * tDialog = new FindRepeatsDialogFiller(os, testDir + "_common_data/scenarios/sandbox/test_3344.gb",
                                                      false, 10);
     GTUtilsDialog::waitForDialog(os, tDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE
-        << "find_repeats_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find repeats...", GTGlobals::UseMouse);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2307,6 +2345,7 @@ GUI_TEST_CLASS_DEFINITION(test_3346) {
     CHECK_SET_ERR(copiedFile.exists(), "Unable to copy file");
 
     GTFileDialog::openFile(os, sandBoxDir, "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_OP(os, );
 
     if (!copiedFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
@@ -2335,13 +2374,13 @@ GUI_TEST_CLASS_DEFINITION(test_3346) {
 
 GUI_TEST_CLASS_DEFINITION(test_3348) {
     GTFileDialog::openFile(os, testDir + "_common_data/cmdline/", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "DNA.fa");
 
     Runnable * findDialog = new FindRepeatsDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", true, 10, 75, 100);
     GTUtilsDialog::waitForDialog(os, findDialog);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "find_repeats_action", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find repeats...", GTGlobals::UseMouse);
     GTGlobals::sleep(6000);
 
     QTreeWidget *treeWidget = GTUtilsAnnotationsTreeView::getTreeWidget(os);
@@ -2367,6 +2406,7 @@ GUI_TEST_CLASS_DEFINITION(test_3357) {
 */
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir +"_common_data/alphabets/", "standard_dna_rna_amino_1000.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
     QWidget* w=GTWidget::findWidget(os, "ADV_single_sequence_widget_1");
     GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction",w));
@@ -2439,6 +2479,7 @@ GUI_TEST_CLASS_DEFINITION(test_3379) {
 
     //3.Add more files to the project and open a few more views
     GTFileDialog::openFile(os, testDir + "_common_data/cmdline/", "DNA.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     //4. Return to 'abcd.fa' view
@@ -2456,6 +2497,7 @@ GUI_TEST_CLASS_DEFINITION(test_3384){
     GTLogTracer l;
 //    Open sequence data/samples/Genbank/murine.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open CV
     GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction"));
 //    Insert at least one symbol to the sequence
@@ -2496,6 +2538,7 @@ GUI_TEST_CLASS_DEFINITION(test_3398_1) {
 //    2. Select "As separate sequences" mode.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/broken", "data_in_the_name_line.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    Expected state: an unloaded document appears, there are no objects within.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2515,6 +2558,7 @@ GUI_TEST_CLASS_DEFINITION(test_3398_2) {
     //    2. Select "As separate sequences" mode.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge, 10));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/broken", "data_in_the_name_line.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    Expected state: an unloaded document appears, there are no objects within.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2534,6 +2578,7 @@ GUI_TEST_CLASS_DEFINITION(test_3398_3) {
     //    2. Select "Merge into one sequence" mode, set 10 'unknown' symbols.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge, 0));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/broken", "data_in_the_name_line.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    Expected state: an unloaded document appears, there are no objects within.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2553,6 +2598,7 @@ GUI_TEST_CLASS_DEFINITION(test_3398_4) {
     //    2. Select "As separate sequences" mode.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/broken", "data_in_the_name_line.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    Expected state: an unloaded document appears, there are no objects within.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2570,6 +2616,7 @@ GUI_TEST_CLASS_DEFINITION(test_3398_4) {
 GUI_TEST_CLASS_DEFINITION(test_3437){
 //    1. Open file test/_common_data/fasta/empty.fa
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected: file opened in msa editor
     QWidget* w = GTWidget::findWidget(os,"msa_editor_sequence_area");
     CHECK_SET_ERR(w != NULL, "msa editor not opened");
@@ -2579,6 +2626,7 @@ GUI_TEST_CLASS_DEFINITION(test_3402){
 //    Open "test/_common_data/clustal/100_sequences.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "3000_sequences.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Call context menu on the "100_sequences" object.
 
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, sandBoxDir, "test_3402.fa",
@@ -2735,6 +2783,7 @@ GUI_TEST_CLASS_DEFINITION(test_3439){
 GUI_TEST_CLASS_DEFINITION(test_3441) {
     //    Open file test_common_data\fasta\empty.fa
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    Open "Statistics" options panel tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_GENERAL"));
     //Sequence count is 0
@@ -2755,6 +2804,7 @@ GUI_TEST_CLASS_DEFINITION(test_3443) {
     CHECK_SET_ERR(!logViewWidget->isVisible(), "Log view is expected to be visible");
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     QWidget *projectViewWidget = GTWidget::findWidget(os, "project_view");
@@ -2805,6 +2855,7 @@ GUI_TEST_CLASS_DEFINITION(test_3450) {
 //    Current state: file is empty, but error is not appeared
 
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTWidget::click(os, GTWidget::findWidget(os, "sequenceLineEdit"));
     GTKeyboardDriver::keySequence(os, "Montana_montana");
@@ -2820,7 +2871,7 @@ GUI_TEST_CLASS_DEFINITION(test_3450) {
 
     class ExportHighlightedDialogFiller : public Filler {
     public:
-        ExportHighlightedDialogFiller(U2OpStatus &os)
+        ExportHighlightedDialogFiller(HI::GUITestOpStatus &os)
             : Filler(os, "ExportHighlightedDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -2862,6 +2913,7 @@ GUI_TEST_CLASS_DEFINITION(test_3451) {
 
 
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTWidget::click(os, GTWidget::findWidget(os, "sequenceLineEdit"));
     GTKeyboardDriver::keySequence(os, "Montana_montana");
@@ -2877,7 +2929,7 @@ GUI_TEST_CLASS_DEFINITION(test_3451) {
 
     class CancelExportHighlightedDialogFiller : public Filler {
     public:
-        CancelExportHighlightedDialogFiller(U2OpStatus &os)
+        CancelExportHighlightedDialogFiller(HI::GUITestOpStatus &os)
             : Filler(os, "ExportHighlightedDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -2912,6 +2964,7 @@ GUI_TEST_CLASS_DEFINITION(test_3451) {
 GUI_TEST_CLASS_DEFINITION(test_3452) {
     //1. Open "samples/Genbank/murine.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Find the annotation: NC_001363 -> CDS (0, 4) -> CDS.
     //Expected state: qualifiers of CDS are shown.
@@ -2967,6 +3020,7 @@ GUI_TEST_CLASS_DEFINITION(test_3471) {
 //    Expected state: assembly is empty, there is text "Assembly has no mapped reads. Nothing to visualize."
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_3471/test_3471.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/bam/", "1.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Add bookmark
 //    Expected state: UGENE doesn't crash
@@ -2975,6 +3029,7 @@ GUI_TEST_CLASS_DEFINITION(test_3471) {
 
 GUI_TEST_CLASS_DEFINITION(test_3472) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 
     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Conocephalus_discolor");
@@ -3040,6 +3095,7 @@ GUI_TEST_CLASS_DEFINITION(test_3473) {
         Expected state: the hint is "Show circular view"
 */
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
     QToolButton* a = qobject_cast<QToolButton*>(GTWidget::findWidget(os, "CircularViewAction"));
     CHECK_SET_ERR(a->toolTip() == "Show circular view", QString("Unexpected tooltip: %1, must be %2").arg(a->toolTip()).arg("Show circular view"));
@@ -3053,6 +3109,7 @@ GUI_TEST_CLASS_DEFINITION(test_3473) {
 GUI_TEST_CLASS_DEFINITION(test_3477) {
 //    1. Open "data/samples/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Press "Find restriction sites" tool button.
 //    Expected state: "Find restriction sites" dialog appeared.
@@ -3065,7 +3122,7 @@ GUI_TEST_CLASS_DEFINITION(test_3477) {
 //    Expected state: "Digest sequence into fragments" dialog appeared.
 //    5. Add "TaaI" to selected enzymes and accept the dialog.
     GTUtilsDialog::waitForDialog(os, new DigestSequenceDialogFiller(os));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::CLONING_MENU << ToolsMenu::CLONING_FRAGMENTS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Digest into fragments...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    6. Select {Tools -> Cloning -> Construct molecule} menu item in the main menu.
@@ -3088,7 +3145,7 @@ GUI_TEST_CLASS_DEFINITION(test_3477) {
     actions << ConstructMoleculeDialogFiller::Action(ConstructMoleculeDialogFiller::ClickCancel, "");
 
     GTUtilsDialog::waitForDialog(os, new ConstructMoleculeDialogFiller(os, actions));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::CLONING_MENU << ToolsMenu::CLONING_CONSTRUCT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Construct molecule...");
     GTGlobals::sleep();
 }
 
@@ -3115,6 +3172,7 @@ GUI_TEST_CLASS_DEFINITION(test_3480) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
 
     GTFileDialog::openFile(os, testDir + "_common_data/bwa/workflow/", "bwa-mem.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Align reads with BWA MEM");
@@ -3133,6 +3191,7 @@ GUI_TEST_CLASS_DEFINITION(test_3484) {
     GTFile::copy(os, dataDir + "samples/CLUSTALW/COI.aln", testDir + "_common_data/scenarios/sandbox/COI_3484.aln");
 
     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));
@@ -3172,6 +3231,7 @@ GUI_TEST_CLASS_DEFINITION(test_3484_1) {
     GTFile::copy(os, dataDir + "samples/CLUSTALW/COI.aln", testDir + "_common_data/scenarios/sandbox/COI_3484_1.aln");
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/", "COI_3484_1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os,
                                                                testDir + "_common_data/scenarios/sandbox/COI_3484_1.nwk",
                                                                0, 0, true));
@@ -3184,12 +3244,14 @@ GUI_TEST_CLASS_DEFINITION(test_3484_1) {
     GTUtilsDialog::waitForDialog(os, new SaveProjectAsDialogFiller(os, "proj_3484_1",
                                                                    testDir + "_common_data/scenarios/sandbox/",
                                                                    "proj_3484_1"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_AS_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save project as...");
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
+
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/sandbox/", "proj_3484_1.uprj"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTWidget::clickWindowTitle(os, AppContext::getMainWindow()->getQMainWindow());
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
     GTGlobals::sleep();
 
     GTUtilsDocument::loadDocument(os, "COI_3484_1.aln");
@@ -3197,11 +3259,13 @@ GUI_TEST_CLASS_DEFINITION(test_3484_1) {
     CHECK_SET_ERR(treeView1 != NULL,"TreeView not found");
 
     GTUtilsDocument::removeDocument(os, "COI_3484_1.nwk");
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__SAVE_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Save all");
+
+    GTWidget::clickWindowTitle(os, AppContext::getMainWindow()->getQMainWindow());
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/sandbox/", "proj_3484_1.uprj"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<ACTION_PROJECTSUPPORT__OPEN_PROJECT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open...");
     GTGlobals::sleep();
 
     GTUtilsDocument::loadDocument(os, "COI_3484_1.aln");
@@ -3218,6 +3282,7 @@ GUI_TEST_CLASS_DEFINITION(test_3504) {
 //    Expected state: horizontal scroll bar is present
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os,
                                                                sandBoxDir + "COI_3504.nwk",
@@ -3254,7 +3319,7 @@ GUI_TEST_CLASS_DEFINITION(test_3518) {
     actions << PwmBuildDialogFiller::Action(PwmBuildDialogFiller::ClickCancel, "");
     GTUtilsDialog::waitForDialog(os, new PwmBuildDialogFiller(os, actions));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::TFBS_MENU << ToolsMenu::TFBS_WEIGHT);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Search for TFBS" << "Build weight matrix...");
     GTGlobals::sleep();
 }
 
@@ -3268,10 +3333,11 @@ GUI_TEST_CLASS_DEFINITION(test_3519_1) {
 //    Current state: GUI waits until all annotations are drawn, then react on the button click.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class SiteconCustomFiller : public Filler {
     public:
-        SiteconCustomFiller(U2OpStatus &os)
+        SiteconCustomFiller(HI::GUITestOpStatus &os)
             : Filler(os, "SiteconSearchDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3298,8 +3364,7 @@ GUI_TEST_CLASS_DEFINITION(test_3519_1) {
     };
 
     GTUtilsDialog::waitForDialog(os, new SiteconCustomFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "SITECON", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find TFBS with SITECON...", GTGlobals::UseMouse);
 
     CHECK_SET_ERR(GTUtilsTaskTreeView::getTopLevelTasksCount(os) == 0, "Some task is still running");
 }
@@ -3312,11 +3377,12 @@ GUI_TEST_CLASS_DEFINITION(test_3519_2) {
 //                   dialog can't be closed until the search task finish,
 //                   the search task waits until the "auto-annotation update" task finish.
 
-    GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTFileDialog::openFile(os, testDir + "_common_data/FASTA/", "Mycobacterium.fna");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class SiteconCustomFiller : public Filler {
     public:
-        SiteconCustomFiller(U2OpStatus &os)
+        SiteconCustomFiller(HI::GUITestOpStatus &os)
             : Filler(os, "SiteconSearchDialog") {}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
@@ -3327,19 +3393,20 @@ GUI_TEST_CLASS_DEFINITION(test_3519_2) {
                                                                    "CLOCK.sitecon.gz"));
             QWidget* modelButton = GTWidget::findWidget(os, "pbSelectModelFile", dialog);
             GTWidget::click(os, modelButton);
+            GTGlobals::sleep();
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-
-            CHECK_SET_ERR(GTUtilsTaskTreeView::getTopLevelTasksCount(os) == 2, "Some task is still running");
-
             GTGlobals::sleep();
 
+            CHECK_SET_ERR(GTUtilsTaskTreeView::getTopLevelTasksCount(os) == 2, QString("Incorrect top-level task counts: %1").arg(GTUtilsTaskTreeView::getTopLevelTasksCount(os)));
+            GTGlobals::sleep(500);
+
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
         }
     };
 
     class AllEnzymesSearchScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -3351,11 +3418,12 @@ 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);
+    GTGlobals::sleep(20000);
 
     GTUtilsTaskTreeView::openView(os);
     GTUtilsDialog::waitForDialog(os, new SiteconCustomFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ANALYSE << "SITECON", GTGlobals::UseMouse));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find TFBS with SITECON...");
 
     GTGlobals::sleep();
     CHECK_SET_ERR( GTUtilsTaskTreeView::checkTask(os, "SITECON search") == false, "SITECON task is still running");
@@ -3368,6 +3436,7 @@ GUI_TEST_CLASS_DEFINITION(test_3545){
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/big.aln", sandBoxDir + "big.aln");
     GTFileDialog::openFile(os, sandBoxDir , "big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Use context menu
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/fasta", "NC_008253.fna" ));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_LOAD_SEQ"
@@ -3404,8 +3473,7 @@ GUI_TEST_CLASS_DEFINITION(test_3545){
         GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
         GTGlobals::sleep(500);
 #ifdef Q_OS_MAC
-        QMenu *menu = GTMenu::showMainMenu(os, MWMENU_FILE);
-        GTMenu::clickMenuItem(os, menu, ACTION_PROJECTSUPPORT__CLOSE_PROJECT);
+        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
         GTKeyboardDriver::keyClick(os, 'q', key);
         GTGlobals::sleep(100);
@@ -3425,6 +3493,7 @@ GUI_TEST_CLASS_DEFINITION(test_3551){
     //Expected: the "Select input file(s)" tool button is enabled.
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
     FormatDBSupportRunDialogFiller::Parameters p;
     p.customFiller_3551 = true;
@@ -3435,7 +3504,7 @@ GUI_TEST_CLASS_DEFINITION(test_3551){
 
 GUI_TEST_CLASS_DEFINITION(test_3552){
 //1. Open "_common_data\clustal\fungal - all.aln"
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "10000_sequences.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "10000_sequences.aln", GTFileDialog::Open, GTGlobals::UseMouse);
 
     QLabel* taskInfoLabel = GTWidget::findExactWidget<QLabel*>(os, "taskInfoLabel");
     while (!taskInfoLabel->text().contains("Render")) {
@@ -3456,6 +3525,7 @@ GUI_TEST_CLASS_DEFINITION(test_3552){
 GUI_TEST_CLASS_DEFINITION(test_3553) {
     //1. Open "_common_data/clustal/big.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal", "big.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select both sequences.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1, 0), QPoint(1, 1));
     //3. Open the "Pairwise Alignment" OP tab.
@@ -3479,6 +3549,7 @@ GUI_TEST_CLASS_DEFINITION(test_3555) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/muscul4/", "prefab_1_ref.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
     GTUtilsMSAEditorSequenceArea::scrollToBottom(os);
@@ -3502,6 +3573,7 @@ GUI_TEST_CLASS_DEFINITION(test_3556) {
     //Expected state: the sequence became reference.
 
     GTFileDialog::openFile(os, testDir + "_common_data/muscul4/", "prefab_1_ref.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTAction::button(os, "Enable collapsing"));
 
     GTUtilsMSAEditorSequenceArea::scrollToBottom(os);
@@ -3524,6 +3596,7 @@ GUI_TEST_CLASS_DEFINITION(test_3557) {
     //Expected: "2|1a0cA|gi|32470780" and "1a0cA" are in the OP.
 
     GTFileDialog::openFile(os, testDir + "_common_data/muscul4/", "prefab_1_ref.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTAction::button(os, "Enable collapsing"));
     GTUtilsMSAEditorSequenceArea::scrollToBottom(os);
     GTGlobals::sleep(500);
@@ -3553,6 +3626,7 @@ GUI_TEST_CLASS_DEFINITION(test_3563_1) {
     GTFile::copy(os, testDir + "_common_data/clustal/dna.fasta.aln",
                  testDir + "_common_data/scenarios/sandbox/test_3563_1.aln");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/", "test_3563_1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/test_3563_1.nwk", 0, 0, true));
     QAbstractButton *tree= GTAction::button(os,"Build Tree");
@@ -3580,7 +3654,9 @@ GUI_TEST_CLASS_DEFINITION(test_3563_2) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QModelIndex idxGff = GTUtilsProjectTreeView::findIndex(os, "Ca21chr5 features");
     CHECK_SET_ERR( idxGff.isValid(), "Can not find 'Ca21 chr5 features' object");
@@ -3606,7 +3682,7 @@ GUI_TEST_CLASS_DEFINITION(test_3571_1) {
     // 1. Open file "test/_common_data/fasta/numbers_in_the_middle.fa" in sequence view
     class Custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -3621,6 +3697,7 @@ GUI_TEST_CLASS_DEFINITION(test_3571_1) {
     };
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, new Custom()));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "numbers_in_the_middle.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select first sequence
     ADVSingleSequenceWidget *firstSeqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os, 0);
@@ -3649,7 +3726,7 @@ GUI_TEST_CLASS_DEFINITION(test_3571_2) {
     // 1. Open file test/_common_data/fasta/numbers_in_the_middle.fa in sequence view
     class Custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -3664,6 +3741,7 @@ GUI_TEST_CLASS_DEFINITION(test_3571_2) {
     };
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, new Custom()));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "numbers_in_the_middle.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select second sequence
     ADVSingleSequenceWidget *secondSeqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os, 1);
@@ -3687,19 +3765,6 @@ GUI_TEST_CLASS_DEFINITION(test_3571_2) {
     CHECK_SET_ERR(!charOccurWidget->isVisible(), "Character Occurrence section is unexpectedly visible");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_3585) {
-    GTLogTracer l;
-    // 1. Open "File -> Access Remote Database..." from the main menu.
-    // 2. Get something adequate from the Uniprot(DAS) database(e.g.use example ID : P05067).
-    // Expected state : "Download remote documents" task has been started
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "P05067", 7));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB);
-    GTGlobals::sleep(500);
-    GTUtilsTaskTreeView::checkTask(os, "Load DAS Documents");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsLog::check(os, l);
-}
-
 GUI_TEST_CLASS_DEFINITION(test_3589) {
     // 0. Copy "data/samples/Assembly/chrM.sam" to a new directory to avoid UGENE conversion cache.
     // 1. Create a workflow: Read assembly.
@@ -3737,6 +3802,7 @@ GUI_TEST_CLASS_DEFINITION(test_3603) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     QComboBox* regionComboBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "boxRegion"));
@@ -3772,6 +3838,7 @@ GUI_TEST_CLASS_DEFINITION(test_3609_1) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* seqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REMOVE_SUBSEQUENCE));
@@ -3796,6 +3863,7 @@ GUI_TEST_CLASS_DEFINITION(test_3609_2) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* seqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE));
@@ -3825,6 +3893,7 @@ GUI_TEST_CLASS_DEFINITION(test_3609_3) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* seqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE));
@@ -3845,6 +3914,7 @@ GUI_TEST_CLASS_DEFINITION(test_3610) {
     // Replace whole sequence with any inappropriate symbol, e.g. '='. Accept the dialog, agree with message box.
     // Expected state: UGENE doesn't crash.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 199950));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -3852,11 +3922,11 @@ GUI_TEST_CLASS_DEFINITION(test_3610) {
     GTGlobals::sleep(1000);
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
-//            GTPlainTextEdit::setText(os, GTWidget::findExactWidget<QPlainTextEdit *>(os, "sequenceEdit", dialog), "=");
+            GTPlainTextEdit::setPlainText(os, GTWidget::findExactWidget<QPlainTextEdit *>(os, "sequenceEdit", dialog), "=");
 
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Ok"));
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Ok"));
@@ -3872,6 +3942,7 @@ GUI_TEST_CLASS_DEFINITION(test_3610) {
 GUI_TEST_CLASS_DEFINITION(test_3612) {
 //    1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Turn on the collapsing mode.
     GTUtilsMsaEditor::toggleCollapsingMode(os);
@@ -3918,9 +3989,11 @@ GUI_TEST_CLASS_DEFINITION(test_3613) {
     GTUtilsDialog::waitForDialog(os,
                                  new ImportBAMFileFiller(os, sandBoxDir + "test_3613.bam.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
     GTUtilsAssemblyBrowser::zoomToMax(os);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Current Read"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Current read"));
     GTUtilsDialog::waitForDialog(os, new ExportReadsDialogFiller(os, sandBoxDir + "test_3613.fa"));
     QWidget* readsArea = GTWidget::findWidget(os, "assembly_reads_area");
     CHECK_SET_ERR(readsArea != NULL, "Assembly reads area not found");
@@ -3931,6 +4004,7 @@ GUI_TEST_CLASS_DEFINITION(test_3613) {
 
 GUI_TEST_CLASS_DEFINITION(test_3619) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
     QWidget* progressLabel = GTWidget::findWidget(os, "progressLabel");
@@ -3974,6 +4048,7 @@ GUI_TEST_CLASS_DEFINITION(test_3622) {
 //    Expected state: a new search task is launched.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     SchedulerListener listener;
 
@@ -4025,6 +4100,7 @@ GUI_TEST_CLASS_DEFINITION(test_3622) {
 
 GUI_TEST_CLASS_DEFINITION(test_3623) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::enterPattern(os, "AAAAAAAAAAAAAAAAAAAAAAAAAAA");
     GTUtilsOptionPanelSequenceView::toggleSaveAnnotationsTo(os);
@@ -4037,6 +4113,7 @@ GUI_TEST_CLASS_DEFINITION(test_3623) {
 
 GUI_TEST_CLASS_DEFINITION(test_3625) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::enterPattern(os, "ACACACACACACACACACACACACACAC", true);
 
@@ -4063,6 +4140,7 @@ GUI_TEST_CLASS_DEFINITION(test_3625) {
 GUI_TEST_CLASS_DEFINITION(test_3629) {
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select {Add->New annotation...} menu item in the context menu.
 //    Expected state: "Create Annotation" dialog appeared, "create new table" option is selected.
@@ -4076,6 +4154,7 @@ GUI_TEST_CLASS_DEFINITION(test_3629) {
 
 //    4. Open "data/samples/Genbank/sars.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    5. Add the annotation object to "sars" sequence.
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
@@ -4084,14 +4163,15 @@ 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");
-    U2OpStatusImpl opStatus;
-    GTUtilsAnnotationsTreeView::findItems(opStatus, "misc_feature");
-    CHECK_SET_ERR(opStatus.isCoR(), "The annotaion table is unexpectedly attached");
+    GTThread::waitForMainThread(os);
+    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()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3645) {
     //checking results with diffirent algorithms
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
@@ -4116,7 +4196,7 @@ GUI_TEST_CLASS_DEFINITION(test_3634) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/gtf/invalid", "AB375112_annotations.gtf"));
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GTF"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTGlobals::sleep();
     CHECK_SET_ERR(l.hasError(), "No error about opening the file");
 }
@@ -4126,6 +4206,7 @@ GUI_TEST_CLASS_DEFINITION(test_3639) {
 
     //2. Open "human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //1. Connect to any shared database with write permissions.
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
@@ -4157,6 +4238,7 @@ GUI_TEST_CLASS_DEFINITION(test_3640) {
 
     //2. Open any document.
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //1. Connect to a read-only shared database (e.g. to the UGENE public database).
     GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(os);
@@ -4192,6 +4274,7 @@ GUI_TEST_CLASS_DEFINITION(test_3640) {
 GUI_TEST_CLASS_DEFINITION(test_3649) {
     //1. Open "_common_data/smith-waterman2/simple/05/search.txt".
     GTFileDialog::openFile(os, testDir + "_common_data/smith_waterman2/simple/05", "search.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //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));
@@ -4231,12 +4314,14 @@ GUI_TEST_CLASS_DEFINITION(test_3656) {
     GTLogTracer lt;
     GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(os);
     CHECK_OP(os, );
+    GTGlobals::sleep(5000);
 
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
     QModelIndex prnt = GTUtilsProjectTreeView::findIndex(os, "Human (hg19)");
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "chr2", prnt);
+    GTThread::waitForMainThread(os);
 
     GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, idx));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
@@ -4281,6 +4366,7 @@ GUI_TEST_CLASS_DEFINITION(test_3675){
     Actual state: error messagebox appeares: "you don't have permission to write to this folder"
 */
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    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();
@@ -4297,6 +4383,7 @@ GUI_TEST_CLASS_DEFINITION(test_3676){
     //Current state: a group name is correct, but annotations name is 'primer'
     //Expected state: all items have corresponding values from the dialog.
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     Primer3DialogFiller::Primer3Settings settings;
     settings.primersName = "testPrimer";
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os, settings));
@@ -4316,6 +4403,7 @@ GUI_TEST_CLASS_DEFINITION(test_3687_1) {
     GTUtilsNotifications::waitForNotification(os, true, "contains too many sequences to be displayed");
     GTFileDialog::openFile(os, testDir + "_common_data/NGS_tutorials/RNA-Seq_Analysis/Prepare_Raw_Data/lymph.fastq");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3687_2) {
@@ -4328,6 +4416,7 @@ GUI_TEST_CLASS_DEFINITION(test_3687_2) {
     GTUtilsNotifications::waitForNotification(os, true, "contains too many sequences to be displayed");
     GTFileDialog::openFile(os, testDir + "_common_data/NGS_tutorials/RNA-Seq_Analysis/Prepare_Raw_Data/lymph.fastq");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3690){
@@ -4339,6 +4428,7 @@ GUI_TEST_CLASS_DEFINITION(test_3690){
 //    Expected state: current active MDI window is changed back to human_T1
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* wgt = GTUtilsMdi::activeWindow(os);
     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!");
@@ -4379,6 +4469,7 @@ GUI_TEST_CLASS_DEFINITION(test_3697){
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::ADD);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
 
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
@@ -4392,12 +4483,14 @@ GUI_TEST_CLASS_DEFINITION(test_3697){
     params1.password = "password";
     GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params1, EditConnectionDialogFiller::MANUAL));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
+    GTGlobals::sleep();
 
     QString conName2 = "test_3697: ugene_gui_test II";
     {
         QList<SharedConnectionsDialogFiller::Action> actions;
         actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::ADD);
+        actions << SharedConnectionsDialogFiller::Action(SharedConnectionsDialogFiller::Action::CLOSE);
 
         GTUtilsDialog::waitForDialog(os, new SharedConnectionsDialogFiller(os, actions));
     }
@@ -4407,7 +4500,7 @@ GUI_TEST_CLASS_DEFINITION(test_3697){
     EditConnectionDialogFiller::Parameters params2 = params1;
     params2.connectionName = conName2;
     GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params2, EditConnectionDialogFiller::MANUAL));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, "Ok"));
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
@@ -4425,6 +4518,7 @@ GUI_TEST_CLASS_DEFINITION(test_3702){
     // Expected state: sequence view is opened
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::closeWindow(os, "human_T1 [s] human_T1 (UCSC April 2002 chr7:115977709-117855134)");
 
     QWidget* welcomePage = GTUtilsMdi::findWindow(os, "Start Page");
@@ -4445,6 +4539,7 @@ GUI_TEST_CLASS_DEFINITION(test_3702){
 GUI_TEST_CLASS_DEFINITION(test_3710){
 //    1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open the Highlighting option panel tab.
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 //    3. Select "Phaneroptera_falcata" as the reference sequence.
@@ -4483,6 +4578,7 @@ GUI_TEST_CLASS_DEFINITION(test_3715) {
 GUI_TEST_CLASS_DEFINITION(test_3717){
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    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.
@@ -4517,6 +4613,7 @@ GUI_TEST_CLASS_DEFINITION(test_3723) {
 GUI_TEST_CLASS_DEFINITION(test_3724) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Use sequence area context menu:
 //    { Statistics -> Generate distance matrix }
@@ -4560,6 +4657,7 @@ GUI_TEST_CLASS_DEFINITION(test_3730) {
 
 //  1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //  2. Create new custom nucleotide color scheme.
     GTUtilsMSAEditorSequenceArea::createColorScheme(os, "test_3730_scheme_1", NewColorSchemeCreator::nucl);
@@ -4585,6 +4683,7 @@ GUI_TEST_CLASS_DEFINITION(test_3731) {
     //Expected state: you get annotation(s) in range 20..46
     //Current state for GOR IV: you get annotations with ranges 11..15 and 24..25
     GTFileDialog::openFile(os, dataDir + "samples/MMDB", "1CRN.prt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QPoint itemCenter = GTUtilsAnnotationsTreeView::getItemCenter(os, "1CRN chain 1 annotation [1CRN.prt]");
     itemCenter.setX(itemCenter.x() + 10);
@@ -4609,7 +4708,7 @@ GUI_TEST_CLASS_DEFINITION(test_3731) {
 GUI_TEST_CLASS_DEFINITION(test_3732) {
 //    1. Open UGENE preferences, open "Resources" tab, set UGENE memory limit to 200Mb.
     class MemoryLimitSetScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -4633,6 +4732,7 @@ GUI_TEST_CLASS_DEFINITION(test_3732) {
 
 GUI_TEST_CLASS_DEFINITION(test_3736) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::setAlgorithm(os, "Regular expression");
@@ -4648,8 +4748,7 @@ GUI_TEST_CLASS_DEFINITION(test_3738) {
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList()<<testDir + "_common_data/scf/Sequence A.scf"
                                                                  <<testDir + "_common_data/scf/Sequence B.scf",
                                                                  sandBoxDir + "test_3738.ace"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ToolsMenu::SANGER_MENU << ToolsMenu::SANGER_DENOVO));
-    GTMenu::showMainMenu(os, "mwmenu_tools");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
 
 //    menu item in the main menu.
 //    Set sequences "_common_data/scf/Sequence A.scf" and "_common_data/scf/Sequence B.scf" as input, set any valid output path and run the task.
@@ -4672,6 +4771,7 @@ GUI_TEST_CLASS_DEFINITION(test_3744) {
     // Expected state: "Previous" and "Next" buttons are disabled
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
 
@@ -4688,13 +4788,14 @@ GUI_TEST_CLASS_DEFINITION(test_3744) {
 GUI_TEST_CLASS_DEFINITION(test_3749) {
     // 1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select any base.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
     GTMouseDriver::click(os, Qt::LeftButton);
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() - QPoint(5, 0));
             GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 10));
             GTMouseDriver::click(os);
@@ -4740,6 +4841,7 @@ GUI_TEST_CLASS_DEFINITION(test_3753) {
 
 GUI_TEST_CLASS_DEFINITION(test_3755){
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget* seqArea = GTWidget::findWidget(os, "msa_editor_sequence_area");
     QColor before = GTWidget::getColor(os, seqArea, QPoint(2,1));
@@ -4760,6 +4862,7 @@ GUI_TEST_CLASS_DEFINITION(test_3757) {
     // Open some specific PDB file and ensure that UGENE doesn't crash
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/pdb/", "water.pdb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "water.pdb", QModelIndex());
     GTUtilsLog::check(os, l);
 }
@@ -4767,6 +4870,7 @@ GUI_TEST_CLASS_DEFINITION(test_3757) {
 GUI_TEST_CLASS_DEFINITION(test_3760) {
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/phylip/", "Three Kingdoms.phy");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "Three Kingdoms.phy", QModelIndex());
     GTUtilsLog::check(os, l);
 }
@@ -4783,10 +4887,11 @@ GUI_TEST_CLASS_DEFINITION(test_3768) {
 //and accept the dialog.
 //Current state: UGENE crashes.
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "ORFDialogBase"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "ORFDialogBase"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -4826,8 +4931,7 @@ GUI_TEST_CLASS_DEFINITION(test_3770) {
 
     GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "NW_003943623", 0, true, false,
                                                                         sandBoxDir));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE),
-                                QStringList() << ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::cancelTask(os, "Download remote documents");
     GTGlobals::sleep();
 
@@ -4837,6 +4941,7 @@ GUI_TEST_CLASS_DEFINITION(test_3770) {
 GUI_TEST_CLASS_DEFINITION(test_3772) {
     //1. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Ctrl + F.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
@@ -4870,6 +4975,7 @@ GUI_TEST_CLASS_DEFINITION(test_3773) {
 */
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, dataDir + "samples/HMM", "aligment15900.hmm");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     GTUtilsProjectTreeView::click(os, "aligment15900.hmm");
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
@@ -4880,7 +4986,7 @@ GUI_TEST_CLASS_DEFINITION(test_3773) {
 GUI_TEST_CLASS_DEFINITION(test_3773_1) {
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "UHMM3BuildDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "UHMM3BuildDialog"){}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK(dialog, );
@@ -4902,6 +5008,7 @@ GUI_TEST_CLASS_DEFINITION(test_3773_1) {
         }
     };
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTLogTracer logTracer;
     //QMenu* menu = GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
     //GTMenu::clickMenuItemByName(os, menu, QStringList() << "Build HMMER3 profile");
@@ -4921,6 +5028,7 @@ GUI_TEST_CLASS_DEFINITION(test_3776) {
 //    Expected state: the last found result is selected
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QLineEdit *searchPattern = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "searchEdit"));
     CHECK_SET_ERR(searchPattern != NULL, "searchedit not found");
@@ -4940,6 +5048,7 @@ GUI_TEST_CLASS_DEFINITION(test_3776) {
 GUI_TEST_CLASS_DEFINITION(test_3778) {
     //1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open Circular View.
     QWidget* button = GTWidget::findWidget(os, "globalToggleViewAction_widget");
@@ -4957,7 +5066,7 @@ GUI_TEST_CLASS_DEFINITION(test_3778) {
     //Expected state: the message about file name appears, the dialog is not closed (the export task does not start).
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "dialog is NULL");
             QLineEdit* fileNameEdit = GTWidget::findExactWidget<QLineEdit*>(os, "fileNameEdit", dialog);
@@ -4976,6 +5085,7 @@ GUI_TEST_CLASS_DEFINITION(test_3779) {
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
     GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "regression_test_3779.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_4.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool assemblyOverviewFound = !AppContext::getMainWindow()->getQMainWindow()->findChildren<CoveredRegionsLabel *>().isEmpty();
     CHECK_SET_ERR(assemblyOverviewFound, "Assembly overview not found");
@@ -4990,6 +5100,7 @@ GUI_TEST_CLASS_DEFINITION(test_3779) {
 GUI_TEST_CLASS_DEFINITION(test_3785_1) {
     //1. Open "_common_data/clustal/fungal - all.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/fungal - all.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     //2. Align with ClustalW.
@@ -5019,6 +5130,7 @@ GUI_TEST_CLASS_DEFINITION(test_3785_1) {
 GUI_TEST_CLASS_DEFINITION(test_3785_2) {
     //1. Open "_common_data/clustal/fungal - all.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/fungal - all.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(3000);
 
     //2. Align with ClustalW.
@@ -5050,6 +5162,7 @@ GUI_TEST_CLASS_DEFINITION(test_3788) {
 
 //    1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Create an annotation on region 199950..199950.
     GTUtilsAnnotationsTreeView::createAnnotation(os, "<auto>", "misc_feature", "199950..199950");
@@ -5076,6 +5189,7 @@ GUI_TEST_CLASS_DEFINITION(test_3797) {
     // Click the "end" or "page down" key.
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
     GTUtilsMSAEditorSequenceArea::selectSequence(os, QString("Mecopoda_sp.__Malaysia_"));
@@ -5083,13 +5197,12 @@ GUI_TEST_CLASS_DEFINITION(test_3797) {
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageDown"]);
 
     GTGlobals::sleep(5000);
-
-
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3805){
     // 1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Save the initial content
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 51, 102));
@@ -5101,40 +5214,42 @@ GUI_TEST_CLASS_DEFINITION(test_3805){
     const QString initialContent = GTClipboard::text( os );
 
     //3. Reverse sequence
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_RESERVE_SEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Reverse sequence", GTGlobals::UseKey);
 
     //4. Complement sequence
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_COMPLEMENT_SEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Complement sequence", GTGlobals::UseKey);
 
     //5. Reverse complement sequence
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_RESERVE_COMPLEMENT_SEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Reverse-complement sequence", GTGlobals::UseKey);
 
     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"] );
-    GTGlobals::sleep(500);
+    GTGlobals::sleep(400);
     const QString newContent = GTClipboard::text( os );
 
-    CHECK_SET_ERR(initialContent == newContent, "Result of actions is incorrect");
+    CHECK_SET_ERR(initialContent == newContent, "Result of actions is incorrect. Expected: " + initialContent +  ", found: " + newContent);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3809){
     GTFileDialog::openFile(os, testDir + "_common_data/regression/3809/zF849G6-6a01.p1k.scf.ab1");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3813) {
     //1. Open "samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press "Find restriction sites" toolbutton
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //3. Press "Select by length"
             //4. Input "7" and press "Ok"
-            GTUtilsDialog::waitForDialog(os, new InputIntFiller(os, 7));
+            GTUtilsDialog::waitForDialog(os, new InputIntFiller(os, 6));
             GTWidget::click(os, GTWidget::findWidget(os, "selectByLengthButton"));
 
             //5. Run search
@@ -5177,6 +5292,7 @@ GUI_TEST_CLASS_DEFINITION(test_3815) {
     GTLogTracer l;
     //1. Open "_common_data/fasta/cant_translate.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "cant_translate.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Context menu of the document -> Export/Import -> Export sequences.
     //Expected state: the "Export Selected Sequences" dialog appears.
@@ -5195,21 +5311,23 @@ GUI_TEST_CLASS_DEFINITION(test_3816) {
     // Open some specific file with a tree and ensure that UGENE doesn't crash
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/newick/", "arb-silva.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "arb-silva.nwk", QModelIndex());
     GTUtilsLog::check(os, l);
 }
 
 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"]);
+    GTGlobals::sleep(1000);
 
     GTKeyboardDriver::keySequence(os, "ACTGCT");
 
     GTUtilsOptionPanelSequenceView::openSearchInShowHideWidget(os);
 
     QComboBox *boxRegion = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "boxRegion"));
-    GTWidget::click(os, boxRegion);
 
     GTComboBox::setIndexWithText(os, boxRegion, "Custom region");
 
@@ -5233,6 +5351,7 @@ GUI_TEST_CLASS_DEFINITION(test_3821) {
 
     // 1. Open any genbank file with a COMMENT section
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 2));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
@@ -5249,13 +5368,15 @@ GUI_TEST_CLASS_DEFINITION(test_3821) {
 GUI_TEST_CLASS_DEFINITION(test_3829){
 //    Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Open "data/samples/GFF/5prime_utr_intron_A20.gff".
     GTFileDialog::openFile(os, dataDir + "samples/GFF/5prime_utr_intron_A20.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Attach the first annotation object to the sequence.
     QModelIndex index = GTUtilsProjectTreeView::findIndex(os, "Ca20Chr1 features");
 //    Expected state: UGENE warning about annotation is out of range.
     class scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -5270,6 +5391,7 @@ GUI_TEST_CLASS_DEFINITION(test_3829){
     };
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os, new scenario()));
     GTUtilsProjectTreeView::dragAndDrop(os, index, GTUtilsSequenceView::getSeqWidgetByNumber(os, 0));
+    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);
@@ -5322,6 +5444,7 @@ GUI_TEST_CLASS_DEFINITION(test_3819) {
 GUI_TEST_CLASS_DEFINITION(test_3843) {
     // 1. Open file "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Turn the collapsing mode on.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
@@ -5340,6 +5463,7 @@ GUI_TEST_CLASS_DEFINITION(test_3850) {
 
     //1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "Search in Sequence" options panel tab.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
@@ -5369,6 +5493,7 @@ GUI_TEST_CLASS_DEFINITION(test_3850) {
 GUI_TEST_CLASS_DEFINITION(test_3862) {
     //1. Open any sequence
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Switch on auto-annotations
     GTLogTracer l;
@@ -5385,6 +5510,7 @@ GUI_TEST_CLASS_DEFINITION(test_3868) {
     //1. Open "VectorNTI_CAN_READ.gb"
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/", "VectorNTI_CAN_READ.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //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
@@ -5399,6 +5525,7 @@ GUI_TEST_CLASS_DEFINITION(test_3868) {
 GUI_TEST_CLASS_DEFINITION(test_3869){
     //check comments for vector-nti format
     GTFileDialog::openFile(os, testDir + "_common_data/vector_nti_sequence/unrefined.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QString name = GTUtilsAnnotationsTreeView::getQualifierValue(os, "Author name", "comment");
     CHECK_SET_ERR(name == "Demo User", "unexpected qualifier value: " + name)
 }
@@ -5407,6 +5534,7 @@ GUI_TEST_CLASS_DEFINITION(test_3870) {
     //1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
 
     //2. Insert gaps
@@ -5441,7 +5569,7 @@ GUI_TEST_CLASS_DEFINITION(test_3886) {
     //3. Show wizard.
     class TestWizardFiller : public Filler {
     public:
-        TestWizardFiller(U2OpStatus &os)
+        TestWizardFiller(HI::GUITestOpStatus &os)
         : Filler(os, "Extract Alignment Consensus as Sequence")
         {
 
@@ -5460,41 +5588,12 @@ GUI_TEST_CLASS_DEFINITION(test_3886) {
     GTGlobals::sleep();
 }
 
-GUI_TEST_CLASS_DEFINITION(test_3891) {
-//    1. Open "_common_data/fasta/AMINO.fa".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "AMINO.fa");
-
-//    2. Open DAS options panel tab.
-    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Das);
-
-//    3. Find IDs.
-    QWidget *fetchAnnotationsButton = GTWidget::findButtonByText(os, "Fetch annotations");
-    CHECK_SET_ERR(NULL != fetchAnnotationsButton, "Fetch annotations button is NULL");
-    CHECK_SET_ERR(!fetchAnnotationsButton->isEnabled(), "Fetch annotations button is unexpectedly enabled");
-
-    GTUtilsOptionPanelSequenceView::fetchDasIds(os);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    const int originIdsCount = GTUtilsOptionPanelSequenceView::getDasIdsCount(os);
-    CHECK_SET_ERR(originIdsCount > 0, "");
-    CHECK_SET_ERR(fetchAnnotationsButton->isEnabled(), "Fetch annotations button is unexpectedly disabled");
-
-//    4. Close the tab, then open it again.
-//    Expected state: table stores found IDs, "annotate" button is active.
-    GTUtilsOptionPanelSequenceView::closeTab(os, GTUtilsOptionPanelSequenceView::Das);
-    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Das);
-
-    const int savedIdsCount = GTUtilsOptionPanelSequenceView::getDasIdsCount(os);
-    CHECK_SET_ERR(savedIdsCount == originIdsCount, QString("Incorrect DAS IDs count after widget state restoration: expect %1, got %2").arg(originIdsCount).arg(savedIdsCount));
-    fetchAnnotationsButton = GTWidget::findButtonByText(os, "Fetch annotations");
-    CHECK_SET_ERR(NULL != fetchAnnotationsButton, "Fetch annotations button is NULL");
-    CHECK_SET_ERR(fetchAnnotationsButton->isEnabled(), "Fetch annotations button is unexpectedly disabled");
-}
-
 GUI_TEST_CLASS_DEFINITION(test_3895) {
     //1. Open '_common_data/genbank/pBR322.gb' (file contains circular marker)
     GTGlobals::sleep();
     GTFileDialog::openFile(os, testDir + "_common_data/genbank", "pBR322.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Export document to genbank format
     //Current state: there are two circular markers in the first line
@@ -5520,14 +5619,14 @@ GUI_TEST_CLASS_DEFINITION(test_3895) {
 GUI_TEST_CLASS_DEFINITION(test_3901) {
     //1. Open "_common_data/fasta/human_T1_cutted.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/human_T1_cutted.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Toggle circular view.
     GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction"));
 
     //3. Create an annotation with region: join(50..60,20..30,80..90).
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "group", "feature", "join(50..60,20..30,80..90)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //GTGlobals::sleep(500000);
 
@@ -5550,8 +5649,10 @@ GUI_TEST_CLASS_DEFINITION(test_3902) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
@@ -5580,6 +5681,7 @@ GUI_TEST_CLASS_DEFINITION(test_3903) {
 */
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
@@ -5603,6 +5705,7 @@ GUI_TEST_CLASS_DEFINITION(test_3903) {
 GUI_TEST_CLASS_DEFINITION(test_3904) {
     //1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
     GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
@@ -5618,6 +5721,7 @@ GUI_TEST_CLASS_DEFINITION(test_3904) {
 GUI_TEST_CLASS_DEFINITION(test_3905) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Remove the first sequence.
     GTUtilsMSAEditorSequenceArea::removeSequence(os, "Phaneroptera_falcata");
@@ -5643,10 +5747,11 @@ GUI_TEST_CLASS_DEFINITION(test_3920) {
 //    Current state: ORFs on the whole sequence are found.
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class ORFDialogFiller : public Filler {
     public:
-        ORFDialogFiller(U2OpStatus& _os) : Filler(_os, "ORFDialogBase"){}
+        ORFDialogFiller(HI::GUITestOpStatus& _os) : Filler(_os, "ORFDialogBase"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -5682,6 +5787,7 @@ GUI_TEST_CLASS_DEFINITION(test_3920) {
 GUI_TEST_CLASS_DEFINITION(test_3924){
     //check comments for vector-nti format
     GTFileDialog::openFile(os, testDir + "_common_data/vector_nti_sequence/unrefined.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QString name = GTUtilsAnnotationsTreeView::getQualifierValue(os, "vntifkey", "CDS");
     CHECK_SET_ERR(name == "4", "unexpected qualifier value: " + name)
 }
@@ -5689,6 +5795,7 @@ GUI_TEST_CLASS_DEFINITION(test_3924){
 GUI_TEST_CLASS_DEFINITION(test_3927) {
     // 1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 2. Enable collapsing mode.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
     // 3. Remove the first sequence. x3
@@ -5710,6 +5817,7 @@ GUI_TEST_CLASS_DEFINITION(test_3928) {
     // Expected state: new reference sequence is shown in the "Reference sequence" section
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference"));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os, QPoint(5, 5));
     QString currentReference = GTUtilsMsaEditor::getReferenceSequenceName(os);
@@ -5751,12 +5859,13 @@ GUI_TEST_CLASS_DEFINITION(test_3950) {
     GTFile::copy(os, testDir + "_common_data/bwa/NC_000021.gbk.fa", sandBoxDir + "test_3950.fa");
 
     GTUtilsDialog::waitForDialog(os, new BuildIndexDialogFiller(os, sandBoxDir, "test_3950.fa", "BWA MEM"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_INDEX);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Build index for reads mapping...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/bwa/workflow/", "bwa-mem.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "File List");
@@ -5786,6 +5895,7 @@ GUI_TEST_CLASS_DEFINITION(test_3953) {
 */
     QString pattern("TTGTCAGATTCACCA");
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
@@ -5827,7 +5937,7 @@ GUI_TEST_CLASS_DEFINITION(test_3959) {
     GTGlobals::sleep();
 
     GTGlobals::sleep();
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //QToolBar* mwtoolbar_activemdi = GTToolbar::getToolbar(os, MWTOOLBAR_MAIN);
@@ -5839,11 +5949,10 @@ GUI_TEST_CLASS_DEFINITION(test_3959) {
         "AAAA"
         );
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList() <<  ADV_MENU_EDIT << ACTION_EDIT_INSERT_SUBSEQUENCE, GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert subsequence...", GTGlobals::UseKey);
     GTGlobals::sleep();
-
-
 }
+
 GUI_TEST_CLASS_DEFINITION(test_3960) {
 /* 1. Open _common_data/scenarios/_regression/3960/all.gb
  *   Expected state: No error messages in log
@@ -5856,7 +5965,7 @@ GUI_TEST_CLASS_DEFINITION(test_3960) {
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << ACTION_PROJECTSUPPORT__OPEN_AS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(logTracer.hasError() == false, QString("Error message found: %1, but not expected.").arg(logTracer.getError()));
@@ -5866,8 +5975,7 @@ GUI_TEST_CLASS_DEFINITION(test_3967){
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new SpadesGenomeAssemblyDialogFiller(os, "Paired-end (Interlaced)", QStringList()<<testDir + "_common_data/cmdline/external-tool-support/spades/ecoli_1K_1.fq",
                                                                           QStringList(), sandBoxDir));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ToolsMenu::NGS_MENU<<ToolsMenu::NGS_DENOVO));
-    GTMenu::showMainMenu(os, MWMENU_TOOLS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Genome de novo assembly...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
 ////  1. Open workflow designer
@@ -5893,7 +6001,9 @@ GUI_TEST_CLASS_DEFINITION(test_3975) {
     // 3. Open the file in some text editor
     // Current state: there is annotation "chromosome"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, testDir + "_common_data/gff/", "noheader.gff");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QModelIndex idxGff = GTUtilsProjectTreeView::findIndex(os, "scaffold_1 features");
     CHECK_SET_ERR( idxGff.isValid(), "Can not find 'scaffold_1 features' object");
@@ -5918,6 +6028,7 @@ GUI_TEST_CLASS_DEFINITION(test_3983) {
     GTLogTracer l;
 
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "amino_multy.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "chr1_gl000191_random_Amino_translation_");
@@ -5937,6 +6048,7 @@ GUI_TEST_CLASS_DEFINITION(test_3988) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "File is empty:"));
     GTFileDialog::openFile(os, testDir + "_common_data", "zero");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     GTUtilsLog::checkContainsError(os, logTracer, "File is empty:");
@@ -5945,6 +6057,7 @@ GUI_TEST_CLASS_DEFINITION(test_3988) {
 
 GUI_TEST_CLASS_DEFINITION(test_3994){
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTWidget::findWidget(os, "msa_editor_sequence_area");
     QColor before = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(1,0));
@@ -5966,6 +6079,7 @@ GUI_TEST_CLASS_DEFINITION(test_3995) {
 
 //    1. Open "human_T1.fa"
     GTFileDialog::openFile( os, dataDir + "samples/FASTA", "human_T1.fa" );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open circular view
     GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction"));
@@ -5989,6 +6103,7 @@ GUI_TEST_CLASS_DEFINITION(test_3996) {
 
     //1. Open "samples/ABIF/A01.abi"
     GTFileDialog::openFile(os, dataDir + "/samples/ABIF/", "A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Zoom In
     GTWidget::click(os, GTAction::button(os, "action_zoom_in_A1#berezikov"));
@@ -6007,6 +6122,7 @@ GUI_TEST_CLASS_DEFINITION(test_3996) {
 
 GUI_TEST_CLASS_DEFINITION(test_3997){
      GTFileDialog::openFile(os, testDir + "_common_data/clustal", "3000_sequences.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
      GTUtilsDocument::removeDocument(os, "3000_sequences.nwk");
 }
 
@@ -6016,8 +6132,8 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
 //    2. a) Use menu
 //    {Edit sequence->Reverse complement sequence}
     GTFileDialog::openFile(os, testDir + "_common_data/regression/3998/sequence.fasta");
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_EDIT<<ACTION_EDIT_RESERVE_COMPLEMENT_SEQUENCE));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Reverse-complement sequence");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
@@ -6027,8 +6143,8 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
 //    b) Use menu
 //    {Edit sequence->Reverse sequence}
     GTFileDialog::openFile(os, testDir + "_common_data/regression/3998/sequence.fasta");
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_EDIT<<ACTION_EDIT_RESERVE_SEQUENCE));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Reverse sequence");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
@@ -6038,8 +6154,8 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
 //    c) Use menu
 //    {Edit sequence->Complement sequence}
     GTFileDialog::openFile(os, testDir + "_common_data/regression/3998/sequence.fasta");
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_EDIT<<ACTION_EDIT_COMPLEMENT_SEQUENCE));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Complement sequence");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
index d67006a..fdfe371 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_regression_scenarios {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_regression_scenarios_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_regression_scenarios"
 
 GUI_TEST_CLASS_DECLARATION(test_3006)
 GUI_TEST_CLASS_DECLARATION(test_3014)
@@ -73,10 +73,9 @@ GUI_TEST_CLASS_DECLARATION(test_3175)
 GUI_TEST_CLASS_DECLARATION(test_3180)
 GUI_TEST_CLASS_DECLARATION(test_3187)
 
-GUI_TEST_CLASS_DECLARATION(test_3207)
 GUI_TEST_CLASS_DECLARATION(test_3209_1)
 GUI_TEST_CLASS_DECLARATION(test_3209_2)
-GUI_TEST_CLASS_DECLARATION(test_3211)
+GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_3211, 480000)
 GUI_TEST_CLASS_DECLARATION(test_3214)
 GUI_TEST_CLASS_DECLARATION(test_3216_1)
 GUI_TEST_CLASS_DECLARATION(test_3216_2)
@@ -106,7 +105,7 @@ GUI_TEST_CLASS_DECLARATION(test_3288)
 
 GUI_TEST_CLASS_DECLARATION(test_3305)
 GUI_TEST_CLASS_DECLARATION(test_3306)
-GUI_TEST_CLASS_DECLARATION(test_3307)
+GUI_TEST_CLASS_DECLARATION_SET_TIMEOUT(test_3307, 480000)
 GUI_TEST_CLASS_DECLARATION(test_3308)
 GUI_TEST_CLASS_DECLARATION(test_3312)
 GUI_TEST_CLASS_DECLARATION(test_3313)
@@ -166,7 +165,6 @@ GUI_TEST_CLASS_DECLARATION(test_3563_1)
 GUI_TEST_CLASS_DECLARATION(test_3563_2)
 GUI_TEST_CLASS_DECLARATION(test_3571_1)
 GUI_TEST_CLASS_DECLARATION(test_3571_2)
-GUI_TEST_CLASS_DECLARATION(test_3585)
 GUI_TEST_CLASS_DECLARATION(test_3589)
 
 GUI_TEST_CLASS_DECLARATION(test_3603)
@@ -242,7 +240,6 @@ GUI_TEST_CLASS_DECLARATION(test_3868)
 GUI_TEST_CLASS_DECLARATION(test_3869)
 GUI_TEST_CLASS_DECLARATION(test_3870)
 GUI_TEST_CLASS_DECLARATION(test_3886)
-GUI_TEST_CLASS_DECLARATION(test_3891)
 GUI_TEST_CLASS_DECLARATION(test_3895)
 GUI_TEST_CLASS_DECLARATION(test_3901)
 GUI_TEST_CLASS_DECLARATION(test_3902)
@@ -268,7 +265,7 @@ GUI_TEST_CLASS_DECLARATION(test_3996)
 GUI_TEST_CLASS_DECLARATION(test_3997)
 GUI_TEST_CLASS_DECLARATION(test_3998)
 
-#undef GUI_TEST_PREFIX
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_regression_scenarios
 
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 d6631a1..a9bbd1b 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
@@ -35,12 +35,37 @@
 #include <U2View/MSAEditorTreeViewer.h>
 #include <U2View/MSAGraphOverview.h>
 
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTTextEdit.h>
+#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/GTThread.h>
+#include <utils/GTUtilsDialog.h>
+
 #include "GTTestsRegressionScenarios_4001_5000.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "GTUtilsDialog.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -63,35 +88,12 @@
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
 
-#include "api/GTAction.h"
-#include "api/GTCheckBox.h"
-#include "api/GTClipboard.h"
-#include "api/GTComboBox.h"
-#include "api/GTFile.h"
-#include "api/GTFileDialog.h"
-#include "api/GTKeyboardDriver.h"
-#include "api/GTLineEdit.h"
-#include "api/GTListWidget.h"
-#include "api/GTMenu.h"
-#include "api/GTMouseDriver.h"
-#include "api/GTRadioButton.h"
-#include "api/GTSlider.h"
-#include "api/GTSpinBox.h"
-#include "api/GTTabWidget.h"
-#include "api/GTTableView.h"
-#include "api/GTTextEdit.h"
-#include "api/GTToolbar.h"
-#include "api/GTTreeWidget.h"
-#include "api/GTWidget.h"
-
-#include "runnables/qt/DefaultDialogFiller.h"
-#include "runnables/qt/MessageBoxFiller.h"
-#include "runnables/qt/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
@@ -110,21 +112,26 @@
 #include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h"
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h"
 #include "runnables/ugene/plugins/orf_marker/OrfDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 #include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
 #include "runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h"
+#include "runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
 namespace U2 {
 
 namespace GUITest_regression_scenarios {
+using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_4007) {
     GTLogTracer l;
@@ -133,10 +140,12 @@ GUI_TEST_CLASS_DEFINITION(test_4007) {
     GTFile::copy(os, dataDir + "samples/Genbank/murine.gb", sandBoxDir + "test_4007/murine.gb");
     GTFileDialog::openFile(os, sandBoxDir + "test_4007", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Open file {data/samples/FASTA/human_T1.fa}
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    3. Drag and drop annotations object to the human_T1 sequence.
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
@@ -180,6 +189,7 @@ GUI_TEST_CLASS_DEFINITION(test_4008) {
 //    Current: "Show offsets" option is disabled.
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "MSAE_MENU_VIEW" << "show_offsets",
                                                             PopupChecker::IsEnabled | PopupChecker::IsChecable));
@@ -188,6 +198,7 @@ GUI_TEST_CLASS_DEFINITION(test_4008) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "MSAE_MENU_VIEW" << "show_offsets",
@@ -198,6 +209,7 @@ GUI_TEST_CLASS_DEFINITION(test_4008) {
 GUI_TEST_CLASS_DEFINITION(test_4009) {
     //1. Open file "_common_data/clustal/big.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/big.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     //2. Open "Export Consensus" OP tab
@@ -213,7 +225,7 @@ GUI_TEST_CLASS_DEFINITION(test_4009) {
     //Current state: the task hangs, debug error occured with message "Infinite wait has timed out"
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             GTUtilsDialog::clickButtonBox(os, QApplication::activeModalWidget(), QDialogButtonBox::Cancel);
         }
     };
@@ -224,6 +236,7 @@ GUI_TEST_CLASS_DEFINITION(test_4009) {
 GUI_TEST_CLASS_DEFINITION(test_4010) {
 //    1. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open the PCR OP tab.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
@@ -237,7 +250,7 @@ GUI_TEST_CLASS_DEFINITION(test_4010) {
 //    5. Click the Primers Details dialog.
 //    Expected: the primers are whole dimers, 14 red lines.
     class Scenario : public CustomScenario {
-        void run(U2::U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -269,6 +282,7 @@ GUI_TEST_CLASS_DEFINITION(test_4011){
 GUI_TEST_CLASS_DEFINITION(test_4013) {
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
 
     GTUtilsMSAEditorSequenceArea::scrollToPosition(os, QPoint(length - 1, 1));
@@ -304,7 +318,7 @@ GUI_TEST_CLASS_DEFINITION(test_4022) {
     //Expected: UGENE does not crash.
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
             QPlainTextEdit *plainText = dialog->findChild<QPlainTextEdit*>("sequenceEdit");
@@ -325,7 +339,7 @@ GUI_TEST_CLASS_DEFINITION(test_4022) {
     GTUtilsDialog::waitForDialog(os, new CreateDocumentFiller(os, new Scenario()));
     GTGlobals::sleep();
 
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList()<<"NewDocumentFromText", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "New document from text...", GTGlobals::UseKey);
     GTGlobals::sleep();
 }
 
@@ -333,12 +347,14 @@ GUI_TEST_CLASS_DEFINITION(test_4026) {
     //1. Open "samples/Genbank/sars.gb".
     //Expected: there are a lot of annotations in the panoramic and details views.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Close the MDI window.
     GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
 
     //3. Double click the sequence in the project.
     GTUtilsProjectTreeView::doubleClickItem(os, "NC_004718");
+    GTGlobals::sleep(1000);
 
     //Expected: there is the same amount of annotations in the panoramic and details views.
     //Actual: annotations are now shown in the views. Their locations and qualifier names are deleted.
@@ -349,6 +365,7 @@ GUI_TEST_CLASS_DEFINITION(test_4026) {
 GUI_TEST_CLASS_DEFINITION(test_4030) {
     //1. Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "Statistics" tab.
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
@@ -365,7 +382,7 @@ GUI_TEST_CLASS_DEFINITION(test_4030) {
 GUI_TEST_CLASS_DEFINITION(test_4033) {
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -388,6 +405,7 @@ GUI_TEST_CLASS_DEFINITION(test_4033) {
 
     //1. Open "samples/Genbank/murine.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Ctrl + N.
     //Expected: if the "Existing table" radio button is not checked, then the URL line edit is disabled.
@@ -404,6 +422,7 @@ GUI_TEST_CLASS_DEFINITION(test_4034) {
     //It is a wrong behavior for this graphic primitive
     //Solution: replace the check boxes with radio buttons.
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "exon", "annotation", "200..300",
         sandBoxDir + "ann_test_4034.gb"));
@@ -414,6 +433,7 @@ GUI_TEST_CLASS_DEFINITION(test_4034) {
 GUI_TEST_CLASS_DEFINITION(test_4035) {
     //1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Click the "Build tree" button on the main toolbar.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFillerPhyML(os, false, 10));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
@@ -434,6 +454,7 @@ GUI_TEST_CLASS_DEFINITION(test_4036) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/", "gap_column.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps"));
     GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os, 1));
@@ -450,10 +471,11 @@ GUI_TEST_CLASS_DEFINITION(test_4045) {
     //Current state: SAFE_POINT is triggered
     GTLogTracer logTracer;
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "ORFDialogBase"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "ORFDialogBase"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -480,10 +502,10 @@ GUI_TEST_CLASS_DEFINITION(test_4045) {
 GUI_TEST_CLASS_DEFINITION(test_4046){
 //    Open 'human_T1.fa'
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Create a new annotation
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann1", "complement(1.. 20)"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTGlobals::sleep();
 //    Current state: new annotation has an empty qualifier 'note'
     QTreeWidgetItem* ann = GTUtilsAnnotationsTreeView::findItem(os, "ann1");
@@ -496,8 +518,16 @@ GUI_TEST_CLASS_DEFINITION(test_4047){
 
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
+            GTGlobals::sleep(500);
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
+#ifdef Q_OS_MAC
+            //dirty hack for mac
+            GTGlobals::sleep(500);
+            if(QApplication::activeModalWidget() != NULL){
+                GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
+            }
+#endif
         }
     };
 
@@ -505,6 +535,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);
 
     CHECK_SET_ERR(GTAction::button(os, "Show wizard")->isVisible() == false, "'Show wizard' button should not be at toolbar!");
 }
@@ -514,6 +545,7 @@ GUI_TEST_CLASS_DEFINITION(test_4059) {
     //1. Open "_common_data/text/text.txt".
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Plain text"));
     GTFileDialog::openFile(os, testDir + "_common_data/text/text.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Delete the "Text" object.
     GTUtilsProjectTreeView::click(os, "text");
@@ -543,7 +575,7 @@ GUI_TEST_CLASS_DEFINITION(test_4064) {
 
     class CustomImportBAMDialogFiller : public Filler {
     public:
-        CustomImportBAMDialogFiller(U2OpStatus &os, bool warningExistence)
+        CustomImportBAMDialogFiller(HI::GUITestOpStatus &os, bool warningExistence)
             : Filler(os, "Import BAM File"),
               warningExistence(warningExistence) {}
         virtual void run() {
@@ -565,10 +597,12 @@ GUI_TEST_CLASS_DEFINITION(test_4064) {
 
     GTUtilsDialog::waitForDialog(os, new CustomImportBAMDialogFiller(os, true));
     GTFileDialog::openFile(os, sandBoxDir, "test_4064.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFile::copy(os, testDir + "_common_data/bam/scerevisiae.bam.bai", sandBoxDir + "test_4064.bai");
     GTUtilsDialog::waitForDialog(os, new CustomImportBAMDialogFiller(os, false));
     GTFileDialog::openFile(os, sandBoxDir, "test_4064.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4065) {
@@ -579,6 +613,7 @@ GUI_TEST_CLASS_DEFINITION(test_4065) {
     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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool hasMessage = l.checkMessage("No bam index given");
     CHECK_SET_ERR(false == hasMessage , "Error message is found. Bam index file not found.");
@@ -587,6 +622,7 @@ GUI_TEST_CLASS_DEFINITION(test_4065) {
 GUI_TEST_CLASS_DEFINITION(test_4070) {
 //    1. Open file "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Switch on collapsing mode.
     GTUtilsMsaEditor::toggleCollapsingMode(os);
@@ -616,6 +652,7 @@ GUI_TEST_CLASS_DEFINITION(test_4071) {
     GTLogTracer l;
     //1. Open any file (for example, human_T1.fa).
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Select the object "[s] human_T1 (UCSC April 2002 chr7:115977709-117855134)".
     GTUtilsProjectTreeView::click(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -637,6 +674,7 @@ GUI_TEST_CLASS_DEFINITION(test_4071) {
 
 GUI_TEST_CLASS_DEFINITION(test_4072) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QWidget *hSeqScroll = GTWidget::findWidget(os, "horizontal_sequence_scroll");
     CHECK_SET_ERR(hSeqScroll != NULL, "No scroll bar at the bottom of sequence area");
@@ -670,6 +708,7 @@ GUI_TEST_CLASS_DEFINITION(test_4072) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/fungal - all.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     hNameScroll = GTWidget::findWidget(os, "horizontal_names_scroll");
     CHECK_SET_ERR(hNameScroll != NULL, "No scroll bar at the bottom of name list area");
     CHECK_SET_ERR(hNameScroll->isVisible(), "Scroll bar at the botton of name list area is visible");
@@ -679,13 +718,13 @@ GUI_TEST_CLASS_DEFINITION(test_4084) {
     //1. Open "_common_data/fasta/human_T1_cutted.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/human_T1_cutted.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Create any annotation.
     //Expected state: there is an annotation group with an annotation within.
     //Current state: there is an annotation group with two similar annotations within.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "group", "feature", "50..60"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "create_annotation_action"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "New annotation...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
@@ -695,10 +734,15 @@ GUI_TEST_CLASS_DEFINITION(test_4084) {
 
 GUI_TEST_CLASS_DEFINITION(test_4091) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/PBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QSet<GObjectType> acceptableTypes;
     acceptableTypes << GObjectTypes::SEQUENCE << GObjectTypes::ANNOTATION_TABLE;
@@ -731,6 +775,7 @@ GUI_TEST_CLASS_DEFINITION(test_4091) {
 GUI_TEST_CLASS_DEFINITION(test_4093) {
     //1. Open "human_T1.fa"
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Call context menu on the document
     //{ Export / Import->Import annotations from CSV... }
@@ -763,6 +808,7 @@ GUI_TEST_CLASS_DEFINITION(test_4095) {
  *   Current state: nothing happens
 */
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_EDIT<<ACTION_EDIT_RESERVE_SEQUENCE));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -794,7 +840,7 @@ GUI_TEST_CLASS_DEFINITION(test_4096) {
     // Current state: only part of human_T1(128000 nb) exported to alignment
 
     class ExportSeqsAsMsaScenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -810,6 +856,7 @@ GUI_TEST_CLASS_DEFINITION(test_4096) {
 
     //GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     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));
@@ -830,6 +877,7 @@ GUI_TEST_CLASS_DEFINITION(test_4097) {
  *   Expected state: the saved file contains only 8 entries in the COMMENT section and doesn't contain "Vector_NTI_Display_Data_(Do_Not_Edit!)" comment.
 */
     GTFileDialog::openFile(os, testDir + "_common_data/vector_nti_sequence", "unrefined.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "test_4097.gb", ExportDocumentDialogFiller::VectorNTI, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
@@ -857,6 +905,7 @@ GUI_TEST_CLASS_DEFINITION(test_4099) {
  *   Note: The value of the "label" qualifier is displayed both on the circular view and the zoom view as annotation names.
 */
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4099", "p4228.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem*> items = GTUtilsAnnotationsTreeView::findItems(os,"CDS");
     CHECK_SET_ERR( 2 == items.length(), "CDS annotations count is not 2");
     foreach (QTreeWidgetItem* item, items) {
@@ -888,7 +937,7 @@ GUI_TEST_CLASS_DEFINITION(test_4100) {
     actions << ImportToDatabaseDialogFiller::Action(ImportToDatabaseDialogFiller::Action::IMPORT, QVariantMap());
 
     GTUtilsDialog::waitForDialog(os, new ImportToDatabaseDialogFiller(os, actions));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Add" << "Import to the database"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__add_menu" << "action_project__import_to_database"));
     GTUtilsProjectTreeView::click(os, "ugene_gui_test", Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
@@ -935,6 +984,7 @@ GUI_TEST_CLASS_DEFINITION(test_4104) {
     //1. Open the attached workflow file.
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4104/test.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Set file "data/samples/Genbank/murine.gb" as input.
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
@@ -953,7 +1003,7 @@ GUI_TEST_CLASS_DEFINITION(test_4104) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     const QString activeWindowName = GTUtilsMdi::activeWindow(os)->windowTitle();
-    CHECK_SET_ERR(activeWindowName == "Dataset 1 [s] NC_001363", "Unexpected active window name");
+    CHECK_SET_ERR(activeWindowName == "Dataset 1 [s] NC_001363", "Unexpected active window name: " + activeWindowName);
     GTUtilsProjectTreeView::findIndex(os, "NC_001363");
     GTUtilsProjectTreeView::findIndex(os, "NC_001363 features");
 }
@@ -970,6 +1020,7 @@ GUI_TEST_CLASS_DEFINITION(test_4106){
 */
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW", "ty3.aln.gz" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     MSAEditorSequenceArea* msaEdistorSequenceAres = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
 
@@ -1013,6 +1064,7 @@ GUI_TEST_CLASS_DEFINITION(test_4110){
     CHECK_SET_ERR(num == 14, QString("1: unexpected annotations number: %1").arg(num));
 //    3. Open file "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, sandBoxDir + "test_4110_human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    4. Drag&drop annotation object "ugene_gui_test_win:/view_test_0001/NC_001363 features" to the sequence view.
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, annFol, GTWidget::findWidget(os, "ADV_single_sequence_widget_0", GTUtilsMdi::activeWindow(os)));
@@ -1044,7 +1096,7 @@ GUI_TEST_CLASS_DEFINITION(test_4111){
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_4111.ugenedb"));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
@@ -1077,7 +1129,7 @@ GUI_TEST_CLASS_DEFINITION(test_4116) {
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
 //    Expected: the dialog is modal, the "OK" button is disabled.
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
@@ -1182,7 +1234,7 @@ GUI_TEST_CLASS_DEFINITION(test_4121) {
     public:
         test_4121(bool isRawPresent)
             : isRawPresent(isRawPresent) {}
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -1225,6 +1277,7 @@ GUI_TEST_CLASS_DEFINITION(test_4122) {
  *   Current state: annotations are not created, a safe point is triggered
 */
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTUtilsOptionPanelSequenceView::enterPattern(os, "GAGTTCTGAACACCCGGC", true);
     GTUtilsOptionPanelSequenceView::clickGetAnnotation(os);
@@ -1253,7 +1306,7 @@ GUI_TEST_CLASS_DEFINITION(test_4124) {
 
     class Scenario_test_4124: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
             QComboBox* methodNamesBox = GTWidget::findExactWidget<QComboBox*>(os, "methodNamesBox", dialog);
             GTComboBox::setIndexWithText(os, methodNamesBox, "UGENE Genome Aligner");
@@ -1278,7 +1331,7 @@ GUI_TEST_CLASS_DEFINITION(test_4124) {
     };
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_4124()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     GTUtilsProjectTreeView::click(os, "out.ugenedb");
@@ -1288,7 +1341,7 @@ GUI_TEST_CLASS_DEFINITION(test_4124) {
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_4124()));
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 }
@@ -1304,9 +1357,10 @@ GUI_TEST_CLASS_DEFINITION(test_4127) {
  *   Expected state: UGENE does not crash
 */
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4127", "merged_document.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     class OrfScenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog != NULL, "dialog not found");
 
@@ -1331,6 +1385,7 @@ GUI_TEST_CLASS_DEFINITION(test_4131) {
     //1. Open "data/samples/FASTA/human_T1.fa".
     QString pattern("ATCGTAC");
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "Search in Sequence" options panel tab.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
@@ -1356,7 +1411,7 @@ GUI_TEST_CLASS_DEFINITION(test_4134) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     class custom : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1379,6 +1434,7 @@ GUI_TEST_CLASS_DEFINITION(test_4141) {
     QWidget *appWindow = QApplication::activeWindow();
     //1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open the "Statistics" tab on the Options panel
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
@@ -1408,7 +1464,7 @@ GUI_TEST_CLASS_DEFINITION(test_4148) {
 
     class Scenario_test_4148: public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os){
+        virtual void run(HI::GUITestOpStatus &os){
             QWidget* dialog = QApplication::activeModalWidget();
 
             GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/FASTA/human_T1.fa"));
@@ -1433,7 +1489,7 @@ GUI_TEST_CLASS_DEFINITION(test_4148) {
     };
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_4148()));
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << ToolsMenu::NGS_MENU << ToolsMenu::NGS_MAP);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4150) {
@@ -1446,6 +1502,7 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 
     // Open file "data/samples/Genbank/murine.gb"
     GTFileDialog::openFile(os, sandBoxDir, "test_4150_murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Close the sequence view
     GTUtilsMdi::click(os, GTGlobals::Close);
@@ -1456,7 +1513,7 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 
     class scenario_4150_proj_selector : public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
         GTGlobals::sleep(1000);
         QWidget *dialog = QApplication::activeModalWidget();
 
@@ -1472,7 +1529,7 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 
     class scenario_4150 : public CustomScenario {
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1519,6 +1576,7 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 GUI_TEST_CLASS_DEFINITION(test_4151) {
     //1. Open samples / Genbank / murine.gb.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Hide all views.
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_NC_001363");
@@ -1533,6 +1591,7 @@ GUI_TEST_CLASS_DEFINITION(test_4151) {
 GUI_TEST_CLASS_DEFINITION(test_4153) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     QWidget *overview = GTWidget::findWidget(os, "msa_overview_area_graph");
@@ -1570,7 +1629,7 @@ GUI_TEST_CLASS_DEFINITION(test_4156) {
 
     class scenario_4156 : public CustomScenario {
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
@@ -1586,7 +1645,7 @@ GUI_TEST_CLASS_DEFINITION(test_4156) {
 
     class filler_4156 : public Filler {
     public:
-        filler_4156(U2OpStatus& os)
+        filler_4156(HI::GUITestOpStatus& os)
             : Filler(os, "RunQueryDlg") {}
         virtual void run() {
             QWidget *dialog = QApplication::activeModalWidget();
@@ -1606,11 +1665,11 @@ GUI_TEST_CLASS_DEFINITION(test_4156) {
     GTLogTracer l;
 
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new scenario_4156()));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action__settings"));
-    GTMenu::showMainMenu(os, MWMENU_SETTINGS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, testDir + "_common_data/query/crash_4156.uql");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new filler_4156(os));
@@ -1626,6 +1685,7 @@ GUI_TEST_CLASS_DEFINITION(test_4156) {
 GUI_TEST_CLASS_DEFINITION(test_4160) {
     QString pattern("TTGTCAGATTCACCA");
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
@@ -1672,6 +1732,7 @@ GUI_TEST_CLASS_DEFINITION(test_4170) {
 */
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
     GTKeyboardDriver::keyClick( os, 'f', GTKeyboardDriver::key["ctrl"] );
@@ -1711,6 +1772,7 @@ GUI_TEST_CLASS_DEFINITION(test_4179) {
     //1. Open file "data/samples/Genabnk/sars.gb"
     //Current state: Two words are merged into a single one, in the file they are separated by a newline symbol.
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem* item = GTUtilsAnnotationsTreeView::findItem(os,"comment");
     CHECK_SET_ERR(item != NULL, "Can't find \"comment\" item");
@@ -1738,6 +1800,7 @@ GUI_TEST_CLASS_DEFINITION(test_4194) {
 GUI_TEST_CLASS_DEFINITION(test_4209) {
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4209/", "crash.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Align to Reference");
@@ -1751,6 +1814,7 @@ GUI_TEST_CLASS_DEFINITION(test_4218) {
     // Check that "Write Annotations" worker takes into account object names of incoming annotation tables
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/regression/4218/test.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Annotations",
@@ -1763,6 +1827,7 @@ GUI_TEST_CLASS_DEFINITION(test_4218) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, sandBoxDir + "out.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "chr2 features");
 }
 
@@ -1770,6 +1835,7 @@ GUI_TEST_CLASS_DEFINITION(test_4218_1) {
     // Check that an output annotation object has a default name if incoming annotation objects have different names
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, testDir + "_common_data/regression/4218/test.uwl");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Annotations", testDir + "_common_data/regression/4218/test.bed");
@@ -1781,6 +1847,7 @@ GUI_TEST_CLASS_DEFINITION(test_4218_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, sandBoxDir + "out.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkItem(os, "Annotations features");
 }
 
@@ -1802,7 +1869,7 @@ GUI_TEST_CLASS_DEFINITION(test_4221) {
     parameters.indexAlgorithm = AlignShortReadsFiller::BwaParameters::Is;
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_4221.ugenedb"));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, MWMENU_TOOLS), QStringList() << "NGS data analysis" << "Map reads to reference...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "test_4221.ugenedb");
@@ -1813,16 +1880,19 @@ GUI_TEST_CLASS_DEFINITION(test_4221) {
 GUI_TEST_CLASS_DEFINITION(test_4232) {
     // 1. Open a file with variations
     GTFileDialog::openFile(os, testDir + "_common_data/vcf/valid.vcf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 2. Open a file with a sequence
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/illumina.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     // 3. Open a file with an assembly
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb/scerevisiae.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 4. Drag&drop the sequence object from the project view on the assembly view
     const QModelIndex sequenceDocIndex = GTUtilsProjectTreeView::findIndex(os, "illumina.fa");
     const QModelIndex sequenceObjIndex = sequenceDocIndex.child(0, 0);
 
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+    GTUtilsNotifications::waitForNotification(os, true, "It seems that sequence");
     GTUtilsProjectTreeView::dragAndDrop(os, sequenceObjIndex, GTWidget::findWidget(os, "assembly_reads_area"));
 
     // Expected state: sequence object and document are highlighted in the Project view
@@ -1861,6 +1931,7 @@ GUI_TEST_CLASS_DEFINITION(test_4232) {
 GUI_TEST_CLASS_DEFINITION(test_4232_1) {
     // 1. Open file with a chromatogram
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: a chromatogram object and a sequence object are highlighted in the Project view
     const QModelIndex seqObjIndex = GTUtilsProjectTreeView::findIndex(os, "A1#berezikov");
@@ -1875,10 +1946,12 @@ GUI_TEST_CLASS_DEFINITION(test_4232_1) {
 GUI_TEST_CLASS_DEFINITION(test_4244){
     //1. Open human_T1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class Scenario : public CustomScenario {
-        void run(U2::U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QString s;
             for(int i = 0; i<32000; i++){
                 s.append("a");
@@ -1923,6 +1996,7 @@ GUI_TEST_CLASS_DEFINITION(test_4244){
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir + "test_4244.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"action_project__unload_selected_action",
                                                       PopupChecker::IsEnabled));
     GTUtilsProjectTreeView::click(os, "test_4244.gb", Qt::RightButton);
@@ -1955,6 +2029,7 @@ GUI_TEST_CLASS_DEFINITION(test_4266) {
 GUI_TEST_CLASS_DEFINITION(test_4272){
 //    Open any sequence
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* mainTb = GTWidget::findWidget(os, "mwtoolbar_activemdi");
     QWidget* qt_toolbar_ext_button = GTWidget::findWidget(os, "qt_toolbar_ext_button", mainTb, GTGlobals::FindOptions(false));
     if(qt_toolbar_ext_button != NULL && qt_toolbar_ext_button->isVisible()){
@@ -1978,6 +2053,7 @@ GUI_TEST_CLASS_DEFINITION(test_4272){
 GUI_TEST_CLASS_DEFINITION(test_4276) {
     //1. Open "COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Use context menu
     //{Add->Sequence from file...}
@@ -2010,6 +2086,7 @@ GUI_TEST_CLASS_DEFINITION(test_4284){
 */
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW", "ty3.aln.gz" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     MSAEditorSequenceArea* msaEdistorSequenceAres = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
 
@@ -2078,7 +2155,7 @@ GUI_TEST_CLASS_DEFINITION(test_4295) {
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "CreateExternalProcessWorkerDialog"){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -2107,6 +2184,7 @@ GUI_TEST_CLASS_DEFINITION(test_4295) {
 GUI_TEST_CLASS_DEFINITION(test_4302_1) {
     //1. Open samples/Genbank/sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select any region
     GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 4));
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2114,26 +2192,26 @@ GUI_TEST_CLASS_DEFINITION(test_4302_1) {
     //3. Open main menu "Actions"
     //Expected state: "Replace subsequence" menu item enabled
     GTUtilsDialog::waitForDialog(os, new ReplaceSubsequenceDialogFiller(os, "ACCCT"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EDIT << ACTION_EDIT_REPLACE_SUBSEQUENCE));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace subsequence...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4302_2) {
     //1. Open samples/Genbank/sars.gb
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select any annotation
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
     GTMouseDriver::click(os);
     //3. Open main menu "Actions"
     //Expected state: menu item {Remove->Selected annotation and qualifiers} are enabled
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_REMOVE << "Selected annotations and qualifiers"));
-    GTMenu::showMainMenu(os, MWMENU_ACTIONS);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Remove" << "Selected annotations and qualifiers");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4306_1) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Build a tree with default parameters.
 //    Expected state: a tree view is displayed with the alignment editor.
@@ -2158,6 +2236,7 @@ GUI_TEST_CLASS_DEFINITION(test_4306_1) {
 GUI_TEST_CLASS_DEFINITION(test_4306_2) {
 //    1. Open "data/samples/Newick/COI.nwk".
     GTFileDialog::openFile(os, dataDir + "samples/Newick/COI.nwk");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Use context menu on the tree view.
 //    Expected state: there are "Zoom in", "Zoom out" and "Reset zooming" actions in the menu.
@@ -2172,7 +2251,7 @@ GUI_TEST_CLASS_DEFINITION(test_4306_2) {
 
 GUI_TEST_CLASS_DEFINITION(test_4308) {
 //    1. Open "_common_data/clustal/10000_sequences.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal/10000_sequences.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/10000_sequences.aln", GTFileDialog::Open, GTGlobals::UseMouse);
     GTUtilsTask::waitTaskStart(os, "Loading documents");
 
 //    2. Remove the document while the file is opening.
@@ -2196,11 +2275,12 @@ GUI_TEST_CLASS_DEFINITION(test_4309) {
     // Expected state: Vector NTI format is abcent
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     class VectorNTIFormatChecker : public Filler {
     public:
-        VectorNTIFormatChecker(U2OpStatus &os)
+        VectorNTIFormatChecker(HI::GUITestOpStatus &os)
             : Filler(os, "U2__ExportAnnotationsDialog") {}
         virtual void run() {
             QWidget *dialog = QApplication::activeModalWidget();
@@ -2265,6 +2345,7 @@ GUI_TEST_CLASS_DEFINITION(test_4323_1) {
 
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click "Align sequence to this alignment" and select "_common_data/database.ini".
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/database.ini"));
@@ -2279,6 +2360,7 @@ GUI_TEST_CLASS_DEFINITION(test_4323_1) {
 GUI_TEST_CLASS_DEFINITION(test_4323_2) {
 //    1. Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click "Align sequence to this alignment" button on the toolbar, select "samples/PDB/1CF7.pdb".
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/PDB/1CF7.PDB"));
@@ -2298,13 +2380,14 @@ GUI_TEST_CLASS_DEFINITION(test_4323_2) {
     QLabel *errorLabel = GTWidget::findExactWidget<QLabel *>(os, "lblMessage");
     CHECK_SET_ERR(NULL != errorLabel, "Error label is NULL");
     CHECK_SET_ERR(errorLabel->isVisible(), "Error label is invisible");
-    CHECK_SET_ERR(errorLabel->text().contains("Current alphabet does not correspond the requirements."),
+    CHECK_SET_ERR(errorLabel->text().contains("Pairwise alignment is not available for alignments with \"Raw\" alphabet."),
                   QString("An unexpected error message: '%1'").arg(errorLabel->text()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4323_3) {
 //    1. Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Click "Align sequence to this alignment" button on the toolbar, select "samples/PDB/1CF7.pdb".
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/PDB/1CF7.PDB"));
@@ -2321,6 +2404,7 @@ GUI_TEST_CLASS_DEFINITION(test_4323_3) {
 GUI_TEST_CLASS_DEFINITION(test_4323_4) {
 //    1. Open "samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Rename the first two sequences to "1".
     GTUtilsMSAEditorSequenceArea::renameSequence(os, "Phaneroptera_falcata", "1");
@@ -2375,6 +2459,7 @@ GUI_TEST_CLASS_DEFINITION(test_4325) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialog::openFile(os, sandBoxDir, "test_4325.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(GTUtilsSequenceView::getLengthOfSequence(os) == 150, "Product size is incorrect");
     QList<U2Region> regions = GTUtilsAnnotationsTreeView::getAnnotatedRegions(os);
@@ -2383,19 +2468,41 @@ GUI_TEST_CLASS_DEFINITION(test_4325) {
     CHECK_SET_ERR(regions.contains(U2Region(110, 40)), "There is no (111, 150) annotated primer region");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4334) {
+    //1. Open "_common_data/fasta/empty.fa" as msa.
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta/empty.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTLogTracer lt;
+    //    2. Add human_t1.fa sequence throu context menu {Add->Sequence from file}
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, dataDir + "samples/FASTA", "human_T1.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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(!lt.hasError(), "log should not contain errors");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4345) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTMenu::clickMenuItemByName(os, GTMenu::showMainMenu(os, MWMENU_ACTIONS), QStringList()<<"Close active view", GTGlobals::UseKey);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Close active view", GTGlobals::UseKey);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "PBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4352) {
     //1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Toggle the Circular View for the sequence.
     GTUtilsCv::commonCvBtn::click(os);
@@ -2430,10 +2537,11 @@ GUI_TEST_CLASS_DEFINITION(test_4359) {
  *   Expected state: the "Pick primers" button should be in focus
  */
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     class EscClicker : public Filler {
     public:
-        EscClicker(U2OpStatus& _os) : Filler(_os, "Primer3Dialog"){}
+        EscClicker(HI::GUITestOpStatus& _os) : Filler(_os, "Primer3Dialog"){}
         virtual void run() {
             GTGlobals::sleep();
             QWidget *w = QApplication::activeWindow();
@@ -2456,6 +2564,7 @@ GUI_TEST_CLASS_DEFINITION(test_4368) {
  * 4. Set "Show distances column" option.
  */
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
 
@@ -2490,6 +2599,7 @@ GUI_TEST_CLASS_DEFINITION(test_4373) {
     // Expected state: there is a button with an arrows at the bottom of toolbar and it shows the hidden action
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsCv::commonCvBtn::click(os);
 
@@ -2510,7 +2620,8 @@ GUI_TEST_CLASS_DEFINITION(test_4373) {
     GTMouseDriver::press(os);
     GTMouseDriver::moveTo(os, point);
     GTMouseDriver::release(os);
-    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
+    GTGlobals::sleep(5000);//splitter is moved slowly on some versions of linux
 
     QWidget* toolBar = GTWidget::findWidget(os, "circular_view_local_toolbar");
     CHECK_SET_ERR(toolBar != NULL, "Cannot find circular_view_local_toolbar");
@@ -2521,6 +2632,7 @@ GUI_TEST_CLASS_DEFINITION(test_4373) {
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Show/hide restriction sites map"));
     GTWidget::click(os, extButton);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4377) {
@@ -2534,6 +2646,7 @@ GUI_TEST_CLASS_DEFINITION(test_4377) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/Gene.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 
     GTGlobals::sleep();
@@ -2543,6 +2656,7 @@ GUI_TEST_CLASS_DEFINITION(test_4377) {
 
 GUI_TEST_CLASS_DEFINITION(test_4383) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::scrollToPosition(os, QPoint(603, 1));
 
@@ -2573,6 +2687,7 @@ GUI_TEST_CLASS_DEFINITION(test_4383) {
 GUI_TEST_CLASS_DEFINITION(test_4386_1) {
     //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Change this alignment by adding random gaps.
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 5));
@@ -2602,6 +2717,7 @@ GUI_TEST_CLASS_DEFINITION(test_4386_1) {
 GUI_TEST_CLASS_DEFINITION(test_4386_2) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Rename the alignment, a new name should contain spaces.
     GTUtilsProjectTreeView::rename(os, "COI", "C O I");
@@ -2642,6 +2758,7 @@ GUI_TEST_CLASS_DEFINITION(test_4391) {
 
 GUI_TEST_CLASS_DEFINITION(test_4400) {
     GTFileDialog::openFile(os, testDir + "_common_data/genbank/VectorNTI_CAN_READ.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QTreeWidgetItem* commentItem = GTUtilsAnnotationsTreeView::findItem(os, "comment");
     QString qualValue = GTUtilsAnnotationsTreeView::getQualifierValue(os, "Original database", commentItem);
@@ -2651,11 +2768,12 @@ GUI_TEST_CLASS_DEFINITION(test_4400) {
 GUI_TEST_CLASS_DEFINITION(test_4439) {
 //    1. Open "data/samples/Genbank/sars.gb".
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call context menu on "NC_004718 features [sars.gb]" item in the Annotations tree view, select "Find qualifier..." menu item.
 
     class Scenario : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2697,6 +2815,7 @@ GUI_TEST_CLASS_DEFINITION(test_4440) {
 //    Expected state: object should be named "COI".
 
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os,"COI.aln");
     GTUtilsProjectTreeView::checkItem(os, GTUtilsProjectTreeView::getTreeView(os), "COI", idx);
@@ -2716,11 +2835,14 @@ GUI_TEST_CLASS_DEFINITION(test_4463) {
 //    Expected state: "Save document" dialog appeared
 //    4. Press "Yes"
 //    Expected state: UGENE does not crash
+//    5. Load the document again
+//    Expected state: the document is succesfully loaded
 
     GTFile::copy(os, testDir + "_common_data/genbank/gbbct131.gb.gz", sandBoxDir + "/test_4463.gb.gz");
 
     GTFileDialog::openFile(os, sandBoxDir, "test_4463.gb.gz");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "10..20"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove subsequence..."));
@@ -2728,10 +2850,11 @@ GUI_TEST_CLASS_DEFINITION(test_4463) {
     GTMouseDriver::click(os, Qt::RightButton);
 
     GTUtilsMdi::closeWindow(os, "test_4463.gb.gz");
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Yes"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList("Unload selected document")));
-    GTUtilsProjectTreeView::click(os, "test_4463.gb.gz", Qt::RightButton);
+    GTUtilsDocument::unloadDocument(os, "test_4463.gb.gz", true);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsDocument::loadDocument(os, "test_4463.gb.gz");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(NULL != GTUtilsSequenceView::getSeqWidgetByNumber(os), "Can't find sequence view widget");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4486) {
@@ -2740,6 +2863,7 @@ GUI_TEST_CLASS_DEFINITION(test_4486) {
     QDir().mkpath(sandBoxDir + "test_4486");
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "test_4486/test_4486.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.sorted.bam");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Zoom in assembly view while reads are not visible.
     bool readsAreVisible = !GTUtilsAssemblyBrowser::isWelcomeScreenVisible(os);
@@ -2765,6 +2889,7 @@ GUI_TEST_CLASS_DEFINITION(test_4486) {
 GUI_TEST_CLASS_DEFINITION(test_4488) {
     //1. Open COI.aln.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Set a sequence as reference.
     GTUtilsMsaEditor::setReference(os, "Phaneroptera_falcata");
@@ -2792,6 +2917,7 @@ GUI_TEST_CLASS_DEFINITION(test_4488) {
 GUI_TEST_CLASS_DEFINITION(test_4489) {
     //1. Open COI.aln.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select some region
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 5), QPoint(10, 10));
     //3. Move it to the right with a mouse.
@@ -2815,18 +2941,22 @@ 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);
+    //GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Press "Undo"
     GTUtilsMsaEditor::undo(os);
-    GTGlobals::sleep();
+    GTThread::waitForMainThread(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
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Consensus mode"));
     GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton);
 //    Bug state: UGENE crashes
+    GTGlobals::sleep();
 
 }
 
@@ -2835,6 +2965,7 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
 
 //    1. Open "_common_data/fasta/400000_symbols_msa.fasta".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/400000_symbols_msa.fasta");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2.  Click "Export as image" button on the toolbar.
 //    Expected state: an "Export Image" dialog appears.
@@ -2842,7 +2973,7 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
 //    Expected state: a warning appears, the dialog can't be accepted.
 
     class Scenario1 : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2859,6 +2990,13 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
         }
     };
 
+    for (int i = 0; i < 6; i++) {
+        QWidget* zoomOutAction = GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Zoom Out");
+        CHECK_BREAK(zoomOutAction->isEnabled());
+        GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Zoom Out"));
+        GTGlobals::sleep(500);
+    }
+
     GTUtilsDialog::waitForDialog(os, new ExportImage(os, new Scenario1));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Export as image");
 
@@ -2867,9 +3005,10 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
 //    5. Accept the dialog.
 
     GTUtilsMsaEditor::removeColumn(os, 1);
+    GTThread::waitForMainThread(os);
 
     class Scenario2 : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -2904,6 +3043,7 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
 GUI_TEST_CLASS_DEFINITION(test_4524) {
     // Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Remove the first sequence.
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Phaneroptera_falcata");
@@ -2929,7 +3069,7 @@ GUI_TEST_CLASS_DEFINITION(test_4537) {
     //1. Open it in UGENE with Ctrl + Shift + O.
     class Scenario : public CustomScenario{
     public:
-        virtual void run(U2OpStatus &os) {
+        virtual void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
             QComboBox *userSelectedFormat = GTWidget::findExactWidget<QComboBox*>(os, "userSelectedFormat", dialog);
@@ -2943,12 +3083,13 @@ GUI_TEST_CLASS_DEFINITION(test_4537) {
     //Expected: format selector dialog appears.
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, new Scenario()));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Assembly/chrM.sam"));
-    GTMenu::clickMenuItemByText(os, GTMenu::showMainMenu(os, MWMENU_FILE), QStringList() << "Open as");
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4557){
 //    1. Open "samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open the PCR OP tab.
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
@@ -2975,22 +3116,36 @@ GUI_TEST_CLASS_DEFINITION(test_4557){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4563) {
-    // 1. Open Workflow Designer.
+    // 1. Set memory limit to 200 mb.
+    class MemoryLimitSetScenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            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);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new MemoryLimitSetScenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    // 2. Open Workflow Designer.
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    // 2. Open the "Align sequences with MUSCLE" sample scheme.
+    // 3. Open the "Align sequences with MUSCLE" sample scheme.
     GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
 
-    // 3. Set "_common_data/scenarios/_regression/4563/test_ma.fa" as the input file.
+    // 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);
     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;
-    // 4. Run the workflow.
+    // 5. Run the workflow.
     GTWidget::click(os, GTAction::button(os, "Run workflow"));
     GTGlobals::sleep(5000);
 
-    // 5. check log message
+    // 6. check log message
     GTUtilsTaskTreeView::waitTaskFinished(os);
     l.checkMessage("Can't allocate enough memory");
 }
@@ -2999,6 +3154,7 @@ GUI_TEST_CLASS_DEFINITION(test_4587) {
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4587/", "extended_dna.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkObjectTypes(os,
         QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT,
         GTUtilsProjectTreeView::findIndex(os, "Contig1"));
@@ -3007,12 +3163,13 @@ GUI_TEST_CLASS_DEFINITION(test_4587) {
 
 GUI_TEST_CLASS_DEFINITION(test_4588) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4588", "4588.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     GTUtilsAnnotationsTreeView::selectItems(os, blastResultItems);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os, const QString &dbPath, const QString &outputPath)
+        OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
             : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath) {};
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
@@ -3047,12 +3204,13 @@ GUI_TEST_CLASS_DEFINITION(test_4588) {
 GUI_TEST_CLASS_DEFINITION(test_4588_1) {
     GTUtilsExternalTools::removeTool(os, "BlastAll");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4588", "4588_1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     GTUtilsAnnotationsTreeView::selectItems(os, blastResultItems);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os, const QString &dbPath, const QString &outputPath)
+        OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
             : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath) {}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
@@ -3086,12 +3244,13 @@ GUI_TEST_CLASS_DEFINITION(test_4588_1) {
 
 GUI_TEST_CLASS_DEFINITION(test_4588_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4588", "4588_1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QList<QTreeWidgetItem *> blastResultItems = GTUtilsAnnotationsTreeView::findItems(os, "blast result");
     GTUtilsAnnotationsTreeView::selectItems(os, blastResultItems);
 
     class OkClicker : public Filler {
     public:
-        OkClicker(U2OpStatus& _os, const QString &dbPath, const QString &outputPath)
+        OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
             : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath) {}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
@@ -3127,13 +3286,14 @@ GUI_TEST_CLASS_DEFINITION(test_4588_2) {
 GUI_TEST_CLASS_DEFINITION(test_4620) {
 //    1. Open "data/samples/ABIF/A01.abi".
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call a context menu on the chromatogram, select {Edit new sequence} menu item.
 //    Expected state: an "Add new document" dialog appears.
 
     class Scenario : public CustomScenario {
     public:
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
@@ -3159,7 +3319,7 @@ GUI_TEST_CLASS_DEFINITION(test_4620) {
         }
     };
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit new s"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit new sequence"));
     GTUtilsDialog::waitForDialog(os, new AddNewDocumentDialogFiller(os, new Scenario));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 
@@ -3169,10 +3329,11 @@ GUI_TEST_CLASS_DEFINITION(test_4620) {
 GUI_TEST_CLASS_DEFINITION(test_4621) {
     //1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Find some restriction sites.
     class Scenario : public CustomScenario {
-        void run(U2::U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
@@ -3197,8 +3358,9 @@ GUI_TEST_CLASS_DEFINITION(test_4621) {
 GUI_TEST_CLASS_DEFINITION(test_4624) {
     //1. Open assembly with DNA extended alphabet
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "extended_dna.ace.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Open view" << "Open new view: Assembly" ));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Open view" << "Open new view: Assembly Browser" ));
     GTUtilsProjectTreeView::click(os, "extended_dna.ace.ugenedb", Qt::RightButton);
 
     QList<ExportCoverageDialogFiller::Action> actions;
@@ -3219,6 +3381,19 @@ GUI_TEST_CLASS_DEFINITION(test_4624) {
     CHECK_SET_ERR(templateCoverage == resCoverage, "Incorrect coverage has been exported");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4628) {
+    GTUtilsNotifications::waitForNotification(os, false);
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4628", "cow.chr13.repeats.shifted.bed");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTGlobals::sleep();
+    QTextEdit *textEdit = dynamic_cast<QTextEdit*>(GTWidget::findWidget(os, "reportTextEdit", GTUtilsMdi::activeWindow(os)));
+    CHECK_SET_ERR(textEdit->toPlainText().contains("incorrect strand value '+379aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...' at line 5333"),
+        "Expected message is not found in the report text");
+
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4674) {
     // 1. Open COI.aln
     // 2. Build the tree and synchronize it with the alignment
@@ -3232,6 +3407,7 @@ GUI_TEST_CLASS_DEFINITION(test_4674) {
     // Expected state: the connection with the tree is broken, the sequence is removed
 
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4674", 0, 0, true));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
@@ -3257,9 +3433,100 @@ GUI_TEST_CLASS_DEFINITION(test_4674) {
     CHECK_SET_ERR(seqNumber != GTUtilsMsaEditor::getSequencesCount(os), "The sequence was not removed");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4674_1) {
+    // 1. Open COI.aln
+    // 2. Align the sequence to alignment
+    // 3. Build the tree and synchronize it with the alignment
+    // 4. Click Undo
+    // Expected state: message box appears
+    // 4. Cancel message box
+    // Expected state: the undoing is undone and the tree is still connected with the alignment
+    // 5. Click Undo one more time
+    // Expected state: message box appears
+    // 6. Confirm the modification
+    // Expected state: the connection with the tree is broken, the aligned sequence is removed
+
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, dataDir + "samples/Genbank/", "murine.gb");
+    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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4674_1", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    int seqNumber = GTUtilsMsaEditor::getSequencesCount(os);
+
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["z"], Qt::CTRL);
+    GTGlobals::sleep();
+
+    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");
+
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["z"], Qt::CTRL);
+    GTGlobals::sleep();
+
+    CHECK_SET_ERR(!ui->isCurTreeViewerSynchronized(), "The connection with the tree is still there");
+    CHECK_SET_ERR(seqNumber != GTUtilsMsaEditor::getSequencesCount(os), "Undo was not undone");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4674_2) {
+    // 1. Open COI.aln
+    // 2. Build the tree and synchronize it with the alignment
+    // 3. Insert a gap
+    // Expected state: message box appears
+    // 4. Cancel message box
+    // Expected state: the insertion is undone and the tree is still connected with the alignment
+    // 5. Insert a gap again
+    // Expected state: message box appears
+    // 6. Confirm the modification
+    // Expected state: the connection with the tree is broken, the gap is removed
+    // 7. Delete some character
+    // Expected state: no message box
+
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4674_2", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    int alnLen = GTUtilsMSAEditorSequenceArea::getLength(os);
+
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(10, 10));
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Space"]);
+    GTGlobals::sleep();
+
+    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(alnLen == GTUtilsMSAEditorSequenceArea::getLength(os), "Undo was not undone");
+
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(10, 10));
+    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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"]);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4687) {
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Open OP and select pairwice alignment tab, select sequences to align
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
@@ -3291,6 +3558,7 @@ GUI_TEST_CLASS_DEFINITION(test_4687) {
 GUI_TEST_CLASS_DEFINITION(test_4689_1) {
     //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
     QComboBox* consensusType = GTWidget::findExactWidget<QComboBox*>(os, "consensusType");
@@ -3324,6 +3592,7 @@ GUI_TEST_CLASS_DEFINITION(test_4689_1) {
 GUI_TEST_CLASS_DEFINITION(test_4689_2) {
     //    1. Open data/samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Add amino extended sequence
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/fasta/amino_ext.fa"));
@@ -3364,6 +3633,7 @@ GUI_TEST_CLASS_DEFINITION(test_4689_2) {
 GUI_TEST_CLASS_DEFINITION(test_4694) {
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Open OP and select pairwice alignment tab, select sequences to align, set "in new window" parameter to "false"
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
@@ -3389,42 +3659,201 @@ GUI_TEST_CLASS_DEFINITION(test_4694) {
     CHECK_SET_ERR(!undo->isEnabled(), "Button should be disabled");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_4702) {
+GUI_TEST_CLASS_DEFINITION(test_4702_1) {
+    // 1. Open "samples/Genbank/NC_014267.1.gb"
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
+    // 2. Select one annotation
     QList<QTreeWidgetItem *> commentItem = GTUtilsAnnotationsTreeView::findItems(os, "comment");
     GTUtilsAnnotationsTreeView::selectItems(os, commentItem);
+    int selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
+    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);
+    // 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));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_4714_1) {
-//    1. Open "data/samples/ABIF/A01.abi".
-    GTFileDialog::openFile(os, dataDir + "samples/ABIF/A01.abi");
+GUI_TEST_CLASS_DEFINITION(test_4702_2) {
+    // 1. Open "samples/Genbank/NC_014267.1.gb"
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+    // 2. Select two annotation from different groups (denote them as "A" and "B").
+    QList<QTreeWidgetItem *> annotationItems = GTUtilsAnnotationsTreeView::findItems(os, "comment");
+    annotationItems << GTUtilsAnnotationsTreeView::findItems(os, "source");
+    GTUtilsAnnotationsTreeView::selectItems(os, annotationItems);
+    int selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
+    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);
+    // 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));
+}
 
-//    2. Call a context menu on the chromatogram, select {Edit new sequence} menu item.
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit new sequence"));
-    GTUtilsDialog::waitForDialog(os, new AddNewDocumentDialogFiller(os, "FASTA", sandBoxDir + "test_4714_1.fa"));
-    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 
+GUI_TEST_CLASS_DEFINITION(test_4702_3) {
+    // 1. Open "samples/Genbank/NC_014267.1.gb"
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+    // 2. Make sure nothing is selected in the Annotations Editor.
+    int selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
+    CHECK_SET_ERR(0 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(0).arg(selectedItemsCount));
+    // 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);
+    // 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));
+}
 
-//    Expected state: a new sequence is added to the project and to the current sequence view.
-//    3. Lock the added document.
-    GTUtilsDocument::lockDocument(os, "test_4714_1.fa");
-
-//    4. Call a context menu on the chromatogram, select {Remove edited sequence} menu item.
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove edited sequence"));
-    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
+GUI_TEST_CLASS_DEFINITION(test_4702_4) {
+    // 1. Open "samples/Genbank/NC_014267.1.gb"
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+    // 2. Select an annotations group in the Annotations Editor.
+    QList<QTreeWidgetItem *> annotationGroup;
+    annotationGroup  << GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 139)");
+    CHECK_SET_ERR(1 == annotationGroup.size(), QString("CDS group is not found"));
+    GTUtilsAnnotationsTreeView::selectItems(os, annotationGroup);
+    int selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
+    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);
+    // 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));
+}
 
-//    Expected state: the sequence is removed from the view,
-//                    context menu contains "Edit new sequence" and "Edit existing sequence" items
-//                    and doesn't contain "Remove edited sequence" and "Undo changes" actions.
-    int sequencesCount = GTUtilsSequenceView::getSeqWidgetsNumber(os);
-    CHECK_SET_ERR(1 == sequencesCount, QString("An incorrect vount of sequences in the view: expect %1, got %2")
-                  .arg(1).arg(sequencesCount));
+GUI_TEST_CLASS_DEFINITION(test_4702_5) {
+    // 1. Open "samples/Genbank/NC_014267.1.gb"
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+    // 2. Select an annotations document in the Annotations Editor.
+    QList<QTreeWidgetItem *> annotationGroup;
+    annotationGroup << GTUtilsAnnotationsTreeView::findItem(os, "NC_014267 features [NC_014267.1.gb]");
+    CHECK_SET_ERR(1 == annotationGroup.size(), QString("NC_014267 features group is not found"));
+    GTUtilsAnnotationsTreeView::selectItems(os, annotationGroup);
+    int selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
+    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);
+    // 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));
+}
 
-    const QList<QStringList> visibleItems = QList<QStringList>() << (QStringList() << "Edit new sequence")
+GUI_TEST_CLASS_DEFINITION(test_4710){
+//    1) Make sure to have several dashboards for different workflows runs.
+//    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);
+    GTUtilsWorkflowDesigner::click(os, "Input Variations File");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf", "valid.vcf");
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTGlobals::sleep();
+
+    QTabWidget* tabs = GTUtilsDashboard::getTabWidget(os);
+    //int initialIndex = tabs->count();
+    QString initTabName = GTTabWidget::getTabName(os, tabs, tabs->currentIndex());
+//    3) During the workflow run open the "Dashboard Manager", select one of the several dashboard, and click "Remove selected."
+    QWidget* dmButton = GTAction::button(os, GTAction::findAction(os, "Dashboards manager"));
+
+    class custom : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //    4) Select some dashboards in the dialog
+            GTGlobals::sleep(500);
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+
+            QTreeWidget* listWidget = GTWidget::findExactWidget<QTreeWidget*>(os, "listWidget", dialog);
+            GTTreeWidget::click(os, listWidget->invisibleRootItem()->child(0));
+            GTGlobals::sleep(500);
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Confirm"));
+            GTWidget::click(os, GTWidget::findWidget(os, "removeButton", dialog));
+            GTGlobals::sleep(500);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new DashboardsManagerDialogFiller(os, new custom()));
+    GTWidget::click(os, dmButton);
+//    Expected result: the selected dashboard was removed, the current workflow execution is proceeding and its dashboard is shown.
+//    Actual result: the workflow execution is proceeding, but the current dashboard is removed.
+    GTGlobals::sleep();
+
+    //int finalIndex = tabs->count();
+    QString finalTabName = GTTabWidget::getTabName(os, tabs, tabs->currentIndex());
+
+    GTGlobals::sleep();
+    CHECK_SET_ERR(initTabName == finalTabName, "tab name changed. Initial: " + initTabName + ", actual: " + finalTabName);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4710_1){
+//    1) Run "Align with MUSCLE" with "_common_data\fasta\PF07724_full_family.fa".
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
+    GTUtilsWorkflowDesigner::click(os, "Read alignment");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta", "PF07724_full_family.fa");
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTGlobals::sleep();
+//    Expected state: Close dashboard tab button is disabled
+
+    QTabWidget* dashboardWidget = GTUtilsDashboard::getTabWidget(os);
+    QWidget* corner = GTTabWidget::getTabCornerWidget(os, dashboardWidget, dashboardWidget->currentIndex());
+    CHECK_SET_ERR(!corner->isEnabled(), "close tab button is unexpectidly enabled");
+
+//    2) Stop the workflow execution
+    GTWidget::click(os, GTAction::button(os, "Stop workflow"));
+    GTGlobals::sleep(500);
+    corner = GTTabWidget::getTabCornerWidget(os, dashboardWidget, dashboardWidget->currentIndex());
+    CHECK_SET_ERR(corner->isEnabled(), "close tab button is unexpectidly disabled");
+//    Expected result: Close dashboard tab button is enabled
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4714_1) {
+//    1. Open "data/samples/ABIF/A01.abi".
+    GTFileDialog::openFile(os, dataDir + "samples/ABIF/A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Call a context menu on the chromatogram, select {Edit new sequence} menu item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit new sequence"));
+    GTUtilsDialog::waitForDialog(os, new AddNewDocumentDialogFiller(os, "FASTA", sandBoxDir + "test_4714_1.fa"));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: a new sequence is added to the project and to the current sequence view.
+//    3. Lock the added document.
+    GTUtilsDocument::lockDocument(os, "test_4714_1.fa");
+
+//    4. Call a context menu on the chromatogram, select {Remove edited sequence} menu item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove edited sequence"));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
+
+//    Expected state: the sequence is removed from the view,
+//                    context menu contains "Edit new sequence" and "Edit existing sequence" items
+//                    and doesn't contain "Remove edited sequence" and "Undo changes" actions.
+    int sequencesCount = GTUtilsSequenceView::getSeqWidgetsNumber(os);
+    CHECK_SET_ERR(1 == sequencesCount, QString("An incorrect vount of sequences in the view: expect %1, got %2")
+                  .arg(1).arg(sequencesCount));
+
+    const QList<QStringList> visibleItems = QList<QStringList>() << (QStringList() << "Edit new sequence")
                                                                  << (QStringList() << "Edit existing sequence");
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, visibleItems));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
@@ -3438,6 +3867,7 @@ GUI_TEST_CLASS_DEFINITION(test_4714_1) {
 GUI_TEST_CLASS_DEFINITION(test_4714_2) {
 //    1. Open "data/samples/ABIF/A01.abi".
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/A01.abi");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Call a context menu on the chromatogram, select {Edit new sequence} menu item.
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit new sequence"));
@@ -3474,9 +3904,32 @@ GUI_TEST_CLASS_DEFINITION(test_4714_2) {
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4718) {
+    GTLogTracer logTracer;
+
+//    1. Open "data/samples/FASTA/human_T1.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open "Search in Sequence" options panel tab.
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
+    GTGlobals::sleep(500);
+
+//    3. Close the tab.
+    GTUtilsOptionPanelSequenceView::closeTab(os, GTUtilsOptionPanelSequenceView::Search);
+    GTGlobals::sleep(500);
+
+//    4. Open the tab again.
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
+
+//    Expected state: log does not contain errors.
+    GTUtilsLog::check(os, logTracer);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4719_1) {
     //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
@@ -3493,7 +3946,7 @@ GUI_TEST_CLASS_DEFINITION(test_4719_1) {
     GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
 
     //    4. Undo changes
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsMsaEditor::undo(os);
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -3507,6 +3960,7 @@ GUI_TEST_CLASS_DEFINITION(test_4719_1) {
 GUI_TEST_CLASS_DEFINITION(test_4719_2) {
     //    1. Open "_common_data/clustal/amino_ext.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/amino_ext.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
@@ -3523,7 +3977,7 @@ GUI_TEST_CLASS_DEFINITION(test_4719_2) {
     GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
 
     //    4. Undo changes
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsMsaEditor::undo(os);
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -3534,9 +3988,40 @@ GUI_TEST_CLASS_DEFINITION(test_4719_2) {
     GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4719_3) {
+    //    1. Open "data/samples/CLUSTALW/ty3.aln.gz".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    2. Click "Align sequence to this alignment" and select "data/samples/Genbank/PBR322.gb".
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Genbank/PBR322.gb"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    3. Open/close highlighting option panel tab
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+    GTUtilsOptionPanelMsa::closeTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
+    //    4. Undo changes
+    GTUtilsMsaEditor::undo(os);
+    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    5. Open/close highlighting option panel tab
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
+    //    Expected state: "UGENE" color scheme is selected, "No highlighting" highlight scheme is selected
+    QComboBox* colorScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "colorScheme"));
+    QComboBox* highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
+
+    GTComboBox::checkCurrentValue(os, colorScheme, "UGENE");
+    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4728) {
     //1. Open 'fa1.fa'
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "fa1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 
     //2. Select all sequence by mouse
@@ -3565,6 +4050,7 @@ GUI_TEST_CLASS_DEFINITION(test_4732) {
     QFile::copy(dataDir + "samples/FASTA/human_T1.fa", sandBoxDir + "test_4732.fa");
     //1. Open "data/samples/FASTA/human_T1.fa".
     GTFileDialog::openFile(os, sandBoxDir + "test_4732.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Document context menu -> Export / Import -> Export sequences.
     //Expected: "Export selected sequences" dialog appears.
@@ -3573,7 +4059,7 @@ GUI_TEST_CLASS_DEFINITION(test_4732) {
     public:
         Scenario() : filler(NULL) {}
         void setFiller(ExportSelectedRegionFiller *value) { filler = value; }
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             //3. Delete "human_T1.fa" document from the file system.
             bool removed = QFile::remove(sandBoxDir + "test_4732.fa");
             CHECK_SET_ERR(removed, "Can't remove the file");
@@ -3606,10 +4092,11 @@ GUI_TEST_CLASS_DEFINITION(test_4734) {
     //    1. Open file {data/samples/FASTA/human_T1.fa}
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    2. Open {Context menu -> Analyze menu} and check menu item "Show circular view" is not present there
 
     class AllPopupChecker : public CustomScenario {
-        void run(U2OpStatus &os) {
+        void run(HI::GUITestOpStatus &os) {
             QMenu *activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget());
             CHECK_SET_ERR(NULL != activePopupMenu, "Active popup menu is NULL");
             GTMenu::clickMenuItemByText(os, activePopupMenu, QStringList() << "Analyze");
@@ -3630,10 +4117,13 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     //1. Open "_common_data/fasta/empty.fa" as msa.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/empty.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open "Simple overview"
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+    GTGlobals::sleep();
+    GTThread::waitForMainThread(os);
     QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
     CHECK_SET_ERR(simple->isVisible(), "simple overveiw is not visiable");
 
@@ -3642,7 +4132,7 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     QImage img = pixmap.toImage();
     QRgb rgb = img.pixel(simple->rect().topLeft() + QPoint(5, 5));
     QColor c(rgb);
-    CHECK_SET_ERR(c.name() == "#ededed", "simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+    CHECK_SET_ERR(c.name() == "#ededed", "First check: simple overview has wrong color. Expected: #ededed, Found: " + c.name());
 
     //3. Add sequence eas.fastq to alignment
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from file"));
@@ -3650,7 +4140,7 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     GTUtilsDialog::waitForDialog(os, ob);
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    
+
     //check not empty overview color
     pixmap = QPixmap::grabWidget(simple, simple->rect());
     img = pixmap.toImage();
@@ -3661,22 +4151,148 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     //4. Undo changes
     GTUtilsMsaEditor::undo(os);
     GTGlobals::sleep();
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTThread::waitForMainThread(os);
 
     //Check empty simple overview gray color again
     pixmap = QPixmap::grabWidget(simple, simple->rect());
     img = pixmap.toImage();
     rgb = img.pixel(simple->rect().topLeft() + QPoint(5, 5));
     c = QColor(rgb);
-    CHECK_SET_ERR(c.name() == "#ededed", "simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+    CHECK_SET_ERR(c.name() == "#ededed", "Second check: simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4784_1) {
+    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_1.fa");
+
+    //1. Click the menu Tools -> BLAST-> BLAST Search...
+    //2. Select "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa" as input file.
+    //3. Press "Select a database file".
+    //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
+    //6. Press "Search".
+    BlastAllSupportDialogFiller::Parameters settings;
+    settings.runBlast = true;
+    settings.withInputFile = true;
+    settings.inputPath = sandBoxDir + "regression_test_4784_1.fa";
+    settings.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST search...");
+    GTGlobals::sleep(3000);
+    //5. Delete "chr6.fa" in file browser.
+    //7. Click "No" in the appeared message box.
+    //Expected result: An error notification appears - "A problem occurred during doing BLAST. The sequence is no more available".
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No, "was removed from"));
+    GTUtilsNotifications::waitForNotification(os, true, "The sequence is no more available");
+    QFile::remove(sandBoxDir + "regression_test_4784_1.fa");
+    GTGlobals::sleep(5000);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4784_2) {
+    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_2.fa");
+
+    //1. Open "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa".
+    GTFileDialog::openFile(os, sandBoxDir + "regression_test_4784_2.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Sequence context menu Analyze -> Query with local BLAST+...
+    //3. Press "Select a database file".
+    //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
+    //6. Press "Search".
+    BlastAllSupportDialogFiller::Parameters settings;
+    settings.runBlast = true;
+    settings.inputPath = sandBoxDir + "regression_test_4784_2.fa";
+    settings.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST+...", GTGlobals::UseMouse);
+
+    //5. Delete "chr6.fa" in file browser.
+    //7. Click "No" in the appeared message box.
+    //Expected result: An error notification appears - "A problem occurred during doing BLAST. The sequence is no more available".
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No, "was removed from"));
+    GTUtilsNotifications::waitForNotification(os, true, "The sequence is no more available");
+    QFile::remove(sandBoxDir + "regression_test_4784_2.fa");
+    GTGlobals::sleep(5000);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4784_3) {
+    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_3.fa");
+
+    //1. Open "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa".
+    GTFileDialog::openFile(os, sandBoxDir + "regression_test_4784_3.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Sequence context menu Analyze -> Query with local BLAST...
+    //3. Press "Select a database file".
+    //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
+    //5. Press "Search".
+    BlastAllSupportDialogFiller::Parameters settings;
+    settings.runBlast = true;
+    settings.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST...", GTGlobals::UseMouse);
+
+    //6. Remove "chr6.fa" from project.
+    //Expected result: An error notification appears - "A problem occurred during doing BLAST. The sequence is no more available".
+    GTUtilsNotifications::waitForNotification(os, true, "The sequence is no more available");
+    GTUtilsDocument::removeDocument(os, "regression_test_4784_3.fa");
+    GTGlobals::sleep(5000);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4784_4) {
+    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_4.fa");
+
+    //1. Click the menu Tools -> BLAST-> BLAST+ Search...
+    //2. Select "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa" as input file.
+    //3. Press "Select a database file".
+    //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
+    //5. Press "Search".
+    BlastAllSupportDialogFiller::Parameters settings;
+    settings.runBlast = true;
+    settings.withInputFile = true;
+    settings.inputPath = sandBoxDir + "regression_test_4784_4.fa";
+    settings.dbPath = testDir + "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr";
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST+ search...");
+
+    //6. Remove "chr6.fa" from project.
+    //Expected result: An error notification appears - "A problem occurred during doing BLAST. The sequence is no more available".
+    GTUtilsNotifications::waitForNotification(os, true, "The sequence is no more available");
+    GTUtilsDocument::removeDocument(os, "regression_test_4784_4.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4785) {
+    //1. Open "COI.aln"
+    //Expected state : a file browser appeared
+    GTFile::copy(os, testDir + "_common_data/clustal/1000_sequences.aln", sandBoxDir + "test_4785.aln");
+    GTFileDialog::openFile(os, sandBoxDir, "test_4785.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //2. Use context menu { Align->Align profile to profile with MUSCLE }
+    //3. Select any alignment and press "Ok"
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW", "COI.aln"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep(500);
+
+    //4. Delete "test_4785.aln"
+    //Expected result : An error notification appears :
+    //A problem occurred during aligning profile to profile with MUSCLE.The original alignment is no more available.
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No, "was removed from"));
+    GTUtilsNotifications::waitForNotification(os, true, "A problem occurred during aligning profile to profile with MUSCLE. The original alignment is no more available.");
+    QFile::remove(sandBoxDir + "test_4785.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
+
 GUI_TEST_CLASS_DEFINITION(test_4795) {
     //    1. Open "_common_data/clustal/amino_ext.fa".
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/amino_ext.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //    2. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     QModelIndex aminoExtIdx = GTUtilsProjectTreeView::findIndex(os, "amino_ext");
     GTUtilsProjectTreeView::dragAndDrop(os, aminoExtIdx, GTWidget::findWidget(os, "msa_editor_sequence_area"));
 
@@ -3690,6 +4306,490 @@ GUI_TEST_CLASS_DEFINITION(test_4795) {
     GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4803_1) {
+    //1. Open COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Build tree, display it with msa.
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4803/COI.nwk", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Call context menu on tree tab.Press "Close tab" menu item
+    //bug state : tab is colsed, but tree view is empty, and tree settings on options panel still present.Any change of tree settings causes crash
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Close tab"));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+    GTGlobals::sleep();
+    CHECK_SET_ERR(NULL == GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab", NULL, GTGlobals::FindOptions(false)), "Msa editor tree tab widget is not closed");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4803_2) {
+    //1. Open COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Build tree, display it with msa.
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4803/COI.nwk", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Call context menu on tree tab. Check that there are not items "Add horizontal splitter" or "Add vertical splitter"
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Add horizontal splitter", PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Add vertical splitter", PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+    //3. Call context menu on tree tab. Check that "Close other tabs" is disabled
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Close other tabs", PopupChecker::CheckOptions(PopupChecker::IsDisabled)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4803_3) {
+    //1. Open COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Build tree, display it with msa.
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4803/COI.nwk", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Build tree, display it with msa.
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4803/COI.nwk", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //4. Call context menu on tree tab.Press "Close other tabs" menu item
+    //bug state : UGENE hangs up
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Close other tabs"));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+
+    //5. Call context menu on tree tab. Check that "Close other tabs" item is disabled.
+    //Bug state : both tabs are closed
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Close other tabs", PopupChecker::CheckOptions(PopupChecker::IsDisabled)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+
+    //6. Call context menu on tree tab. Press "Close tab".
+    //Expected state: tree tab widget is closed 
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Close tab"));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+
+    GTGlobals::sleep();
+    CHECK_SET_ERR(NULL == GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab", NULL, GTGlobals::FindOptions(false)), "Msa editor tree tab widget is not closed");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4803_4) {
+    //1. Open COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Build tree, display it with msa.
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4803/COI.nwk", 0, 0, true));
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //3. Call context menu on tree tab. Check that there are not items "Refresh tab" and "Refresh all tabs"
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Refresh tab", PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Refresh all tabs", PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    GTTabWidget::clickTab(os, GTWidget::findExactWidget<QTabWidget *>(os, "MsaEditorTreeTab"), 0, Qt::RightButton);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_1) {
+    //    1. Open _common_data/scenarios/_regression/4804/standard_dna.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_dna.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    2. Add dna extended sequence throu context menu {Add->Sequence from file}
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804/ext_dna.fa"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from file"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep();
+
+    //    3. Add dna extended sequence throu context menu {Add->Sequence from file}
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Extended DNA\" to \"All symbols\"");
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804/ext_rna.fa"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from file"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_2) {
+    //    1. Open _common_data/scenarios/_regression/4804/standard_rna.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_rna.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    2. Add rna extended sequence throu menu {Actions->Add->Sequence from file}
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804/ext_rna.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard RNA\" to \"Extended RNA\"");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from file...");
+    GTGlobals::sleep();
+
+    //    3. Add dna extended sequence throu context menu {Add->Sequence from file}
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804/standard_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Extended RNA\" to \"All symbols\"");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from file...");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_3) {
+    //    1. Open _common_data/scenarios/_regression/4804/standard_amino.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "ext_dna.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    2. Add  extended amino sequence by drag and drop
+    QModelIndex toDragNDrop = GTUtilsProjectTreeView::findIndex(os, "ext_amino_seq");
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsProjectTreeView::dragAndDrop(os, toDragNDrop, GTWidget::findWidget(os, "msa_editor_sequence_area"));
+    GTGlobals::sleep();
+
+    //    3. Add  extended DNA sequence by drag and drop
+    toDragNDrop = GTUtilsProjectTreeView::findIndex(os, "ext_dna_seq");
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Extended amino acid\" to \"Raw\"");
+    GTUtilsProjectTreeView::dragAndDrop(os, toDragNDrop, GTWidget::findWidget(os, "msa_editor_sequence_area"));
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_4) {
+    //    1. Open _common_data/scenarios/_regression/4804/standard_dna.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_dna.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //    2. Check what MAFFT tool is set up 
+    //    3. Use 'Align sequence to this alignment' toolbar button to align Extended rna sequence to alignment
+    //Expected state: corresponding notification message has appeared
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_rna.fa");
+    GTUtilsDialog::waitForDialog(os, ob);
+
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Raw\"");
+
+    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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_5) {
+    //    1. Check what MAFFT tool is not set up  
+    //    2. Open _common_data/scenarios/_regression/4804/standard_rna.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_rna.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //    3. Use 'Align sequence to this alignment' toolbar button to align Extended rna sequence to alignment
+    //Expected state: corresponding notification message has appeared
+    GTUtilsExternalTools::removeTool(os, "MAFFT");
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_dna.fa");
+    GTUtilsDialog::waitForDialog(os, ob);
+
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard RNA\" to \"Raw\". Use \"Undo\", if you'd like to restore the original alignment.");
+
+    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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4804_6) {
+    //    1. Open _common_data/scenarios/_regression/4804/standard_dna.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_dna.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    2. Add amino extended sequence throu context menu {Add->Sequence from file}
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804/ext_amino.fa"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from file"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep();
+
+    //   4. Undo changes
+    GTUtilsMsaEditor::undo(os);
+    GTThread::waitForMainThread(os);
+    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);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_1) {
+    //Add sequence from curent project by main menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "ext_dna.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ext_dna.fa", "ext_dna_seq"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Raw\"");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Add" << "Sequence from current project...");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_2) {
+    //Add sequence from curent project by context menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ext_amino.fa", "ext_amino_seq"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_LOAD_SEQ" << "Sequence from current project"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_3) {
+    //align sequences to profile by MUSCLE by main menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align sequences to profile with MUSCLE", GTGlobals::UseMouse));
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_4) {
+    //align sequences to profile by MUSCLE by context menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align sequences to profile with MUSCLE", GTGlobals::UseMouse));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_5) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Align sequences to profile with MUSCLE", GTGlobals::UseMouse));
+    QAbstractButton* button = GTAction::button(os, "Align");
+    GTWidget::click(os, button);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_6) {
+    //align sequences to profile by MUSCLE by main menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE", GTGlobals::UseMouse));
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_7) {
+    //align sequences to profile by MUSCLE by context menu
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE", GTGlobals::UseMouse));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4833_8) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4804", "standard_amino.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/4804", "ext_amino.fa"));
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard amino acid\" to \"Extended amino acid\"");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Align profile to profile with MUSCLE", GTGlobals::UseMouse));
+    QAbstractButton* button = GTAction::button(os, "Align");
+    GTWidget::click(os, button);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4885_1) {
+//    1. Open "data/samples/CLUSTALW/ty3.aln.gz".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Wait until overview finishes rendering.
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    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);
+
+    QWidget *graphOverview = GTUtilsMsaEditor::getGraphOverview(os);
+    CHECK_SET_ERR(NULL != graphOverview, "Graph overview is NULL");
+    const QColor actualColor = GTUtilsMsaEditor::getGraphOverviewPixelColor(os, QPoint(graphOverview->width() / 2, 2));
+    CHECK_SET_ERR("#ffffff" == actualColor.name(), QString("Incorrect color of the graph overview ('%1'). Does it render now?").arg(actualColor.name()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4885_2) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Build a tree. The result tree should be synchronised with the msa.
+    GTUtilsMsaEditor::buildPhylogeneticTree(os, sandBoxDir + "test_4885_2.nwk");
+
+//    3. Doubleclick the first symbol of the first sequence.
+//    Expected state: UGENE doesn't ask about confirmation of the modification.
+    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Cancel, "The alignment has been modified"));
+
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
+    GTMouseDriver::doubleClick(os);
+
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4885_3) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFile::copy(os, dataDir + "samples/CLUSTALW/COI.aln", sandBoxDir + "test_4885_3.aln");
+    GTFileDialog::openFile(os, sandBoxDir + "test_4885_3.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Build a tree. The result tree should be synchronised with the msa.
+    GTUtilsMsaEditor::buildPhylogeneticTree(os, sandBoxDir + "test_4885_3.nwk");
+
+//    3. Save the project.
+    GTUtilsProject::saveProjectAs(os, sandBoxDir + "test_4885_3.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    4. Close the project.
+    GTUtilsProject::closeProject(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    5. Open the saved project.
+//    Expected state: there are two unloaded documents in a project: COI.aln and its tree.
+    GTFileDialog::openFile(os, sandBoxDir + "test_4885_3.uprj");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    6. Doubleclick the COI.aln document.
+    GTUtilsProjectTreeView::doubleClickItem(os, "test_4885_3.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: MSA Editor opens, there is an attached tree in it. The msa object in the project view is not modified.
+    GTUtilsProjectTreeView::itemModificationCheck(os, "test_4885_3", false);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4886) {
+    GTFileDialog::openFile(os, dataDir + "samples/SCF/", "90-JRI-07.scf");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTLogTracer lt;
+    QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
+    CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
+
+    GTMouseDriver::moveTo(os, 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);
+    GTGlobals::sleep(5000);
+
+    GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
+    CHECK_OP(os, );
+    CHECK_SET_ERR(!lt.hasError(), "errors in log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4908) {
+    GTUtilsProject::openFiles(os, testDir + "_common_data/fasta/multy_fa.fa");
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os, 0));
+    GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
+
+    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os, 1));
+    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    int len = GTUtilsSequenceView::getSequenceAsString(os, 0).length();
+    CHECK_SET_ERR(len > 199950, "No sequences pasted");
+}
+
+
+GUI_TEST_CLASS_DEFINITION(test_4913) {
+    /* 1. Open an amino acid sequence: data/samples/Swiss-Prot/P16152.txt
+    * 2. Open the NCBI BLAST dialog.
+    *   Expected result: the "blastp" tool is set up.
+    * 3. Open the "Advanced options" tab.
+    *   Expected result: The "Word size" parameter is set to "6".
+    * 4. Press "Esc" button.
+    */
+    GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
+    GTFileDialog::openFile(os, dataDir + "samples/Swiss-Prot", "P16152.txt");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    class CheckWordSizeScenario : public CustomScenario {
+    public:
+        CheckWordSizeScenario() {}
+        void run(HI::GUITestOpStatus &os) {
+            QComboBox* comboAlg = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "dataBase"));
+            CHECK_SET_ERR(comboAlg != NULL, "dataBase not found!");
+            CHECK_SET_ERR(comboAlg->currentText() == "blastp", QString("Value of dataBase not equal blastp, it has other default value: %1!").arg(comboAlg->currentText()));
+
+            GTTabWidget::setCurrentIndex(os, GTWidget::findExactWidget<QTabWidget *>(os, "optionsTab"), 1);
+            GTGlobals::sleep(200);
+            QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "wordSizeComboBox"));
+            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"]);
+        }
+    };
+
+    CheckWordSizeScenario *scenario = new CheckWordSizeScenario();
+    RemoteBLASTDialogFiller *filler = new RemoteBLASTDialogFiller(os, scenario);
+
+    GTUtilsDialog::waitForDialog(os, filler);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE"
+        << "Query NCBI BLAST database"));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4918) {
+    //1. Open "COI.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //2. Select "Align->Align profile to profile with MUSCLE" in the MSAEditor context menu
+    //Expected state : "Select file with alignment" dialog is appeared
+    //3. Select file "_common_data\clustal\1000_sequences.aln"
+    //Current state : UGENE crashes
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/clustal", "1000_sequences.aln"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4918_1) {
+    //1. Open "COI.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //2. Select "Align->Align profile to profile with MUSCLE" in the MSAEditor context menu
+    //Expected state : "Select file with alignment" dialog is appeared
+    //3. Select file "_common_data\genbank\DNA.gen"
+    //Current state : UGENE crashes
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align profile to profile with MUSCLE"));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/genbank", "DNA.gen"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
 } // 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 7017286..ca6b184 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
@@ -28,8 +28,8 @@ namespace U2 {
 
 namespace GUITest_regression_scenarios {
 
-#undef GUI_TEST_PREFIX
-#define GUI_TEST_PREFIX "GUITest_regression_scenarios_"
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_regression_scenarios"
 
 GUI_TEST_CLASS_DECLARATION(test_4007)
 GUI_TEST_CLASS_DECLARATION(test_4008)
@@ -114,6 +114,7 @@ GUI_TEST_CLASS_DECLARATION(test_4323_2)
 GUI_TEST_CLASS_DECLARATION(test_4323_3)
 GUI_TEST_CLASS_DECLARATION(test_4323_4)
 GUI_TEST_CLASS_DECLARATION(test_4325)
+GUI_TEST_CLASS_DECLARATION(test_4334)
 GUI_TEST_CLASS_DECLARATION(test_4345)
 GUI_TEST_CLASS_DECLARATION(test_4352)
 GUI_TEST_CLASS_DECLARATION(test_4359)
@@ -147,24 +148,68 @@ GUI_TEST_CLASS_DECLARATION(test_4588_2)
 GUI_TEST_CLASS_DECLARATION(test_4620)
 GUI_TEST_CLASS_DECLARATION(test_4621)
 GUI_TEST_CLASS_DECLARATION(test_4624)
+GUI_TEST_CLASS_DECLARATION(test_4628)
 GUI_TEST_CLASS_DECLARATION(test_4674)
+GUI_TEST_CLASS_DECLARATION(test_4674_1)
+GUI_TEST_CLASS_DECLARATION(test_4674_2)
 GUI_TEST_CLASS_DECLARATION(test_4687)
 GUI_TEST_CLASS_DECLARATION(test_4689_1)
 GUI_TEST_CLASS_DECLARATION(test_4689_2)
 GUI_TEST_CLASS_DECLARATION(test_4694)
 
-GUI_TEST_CLASS_DECLARATION(test_4702)
+GUI_TEST_CLASS_DECLARATION(test_4702_1)
+GUI_TEST_CLASS_DECLARATION(test_4702_2)
+GUI_TEST_CLASS_DECLARATION(test_4702_3)
+GUI_TEST_CLASS_DECLARATION(test_4702_4)
+GUI_TEST_CLASS_DECLARATION(test_4702_5)
+GUI_TEST_CLASS_DECLARATION(test_4710)
+GUI_TEST_CLASS_DECLARATION(test_4710_1)
 GUI_TEST_CLASS_DECLARATION(test_4714_1)
 GUI_TEST_CLASS_DECLARATION(test_4714_2)
+GUI_TEST_CLASS_DECLARATION(test_4718)
 GUI_TEST_CLASS_DECLARATION(test_4719_1)
 GUI_TEST_CLASS_DECLARATION(test_4719_2)
+GUI_TEST_CLASS_DECLARATION(test_4719_3)
 GUI_TEST_CLASS_DECLARATION(test_4728)
 GUI_TEST_CLASS_DECLARATION(test_4732)
 GUI_TEST_CLASS_DECLARATION(test_4734)
 GUI_TEST_CLASS_DECLARATION(test_4735)
+GUI_TEST_CLASS_DECLARATION(test_4784_1)
+GUI_TEST_CLASS_DECLARATION(test_4784_2)
+GUI_TEST_CLASS_DECLARATION(test_4784_3)
+GUI_TEST_CLASS_DECLARATION(test_4784_4)
+GUI_TEST_CLASS_DECLARATION(test_4785)
 GUI_TEST_CLASS_DECLARATION(test_4795)
-
-#undef GUI_TEST_PREFIX
+GUI_TEST_CLASS_DECLARATION(test_4803_1)
+GUI_TEST_CLASS_DECLARATION(test_4803_2)
+GUI_TEST_CLASS_DECLARATION(test_4803_3)
+GUI_TEST_CLASS_DECLARATION(test_4803_4)
+
+GUI_TEST_CLASS_DECLARATION(test_4804_1)
+GUI_TEST_CLASS_DECLARATION(test_4804_2)
+GUI_TEST_CLASS_DECLARATION(test_4804_3)
+GUI_TEST_CLASS_DECLARATION(test_4804_4)
+GUI_TEST_CLASS_DECLARATION(test_4804_5)
+GUI_TEST_CLASS_DECLARATION(test_4804_6)
+GUI_TEST_CLASS_DECLARATION(test_4833_1)
+GUI_TEST_CLASS_DECLARATION(test_4833_2)
+GUI_TEST_CLASS_DECLARATION(test_4833_3)
+GUI_TEST_CLASS_DECLARATION(test_4833_4)
+GUI_TEST_CLASS_DECLARATION(test_4833_5)
+GUI_TEST_CLASS_DECLARATION(test_4833_6)
+GUI_TEST_CLASS_DECLARATION(test_4833_7)
+GUI_TEST_CLASS_DECLARATION(test_4833_8)
+GUI_TEST_CLASS_DECLARATION(test_4885_1)
+GUI_TEST_CLASS_DECLARATION(test_4885_2)
+GUI_TEST_CLASS_DECLARATION(test_4885_3)
+GUI_TEST_CLASS_DECLARATION(test_4886)
+GUI_TEST_CLASS_DECLARATION(test_4908)
+
+GUI_TEST_CLASS_DECLARATION(test_4913)
+GUI_TEST_CLASS_DECLARATION(test_4918)
+GUI_TEST_CLASS_DECLARATION(test_4918_1)
+
+#undef GUI_TEST_SUITE
 
 }   // namespace GUITest_regression_scenarios
 
diff --git a/src/plugins/annotator/src/CollocationsDialogController.cpp b/src/plugins/annotator/src/CollocationsDialogController.cpp
index 9faa993..e0df80f 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, "16126775");
+    new HelpButton(this, buttonBox, "17466173");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp b/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
index 91ec551..4ddf0fb 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, "16126854");
+    new HelpButton(this, buttonBox, "17466252");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Annotate"));
 
     loadSettings();
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
index 022bdff..31e894b 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
@@ -63,8 +63,13 @@ void BioStruct3DSubsetEditor::fillChainCombo() {
     chainCombo->clear();
     chainCombo->addItem(ALL_CHAINS);
 
-    foreach (const int chainId, bso->getBioStruct3D().moleculeMap.keys()) {
-        chainCombo->addItem(QString::number(chainId), qVariantFromValue(chainId));
+    foreach (const int chainIndex, bso->getBioStruct3D().moleculeMap.keys()) {
+        char chainId = bso->getBioStruct3D().getChainIdByIndex(chainIndex);
+        if (chainId > 0) {
+            chainCombo->addItem(QString(chainId), qVariantFromValue(chainIndex));
+        } else {
+            chainCombo->addItem(QString::number(chainIndex), qVariantFromValue(chainIndex));
+        }
     }
 }
 
diff --git a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
index df47388..48e1787 100644
--- a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
@@ -36,7 +36,7 @@ SelectModelsDialog::SelectModelsDialog(const QList<int> &_modelIds, const QList<
 : QDialog(parent), Ui::SelectModelsDialog()
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126650");
+    new HelpButton(this, buttonBox, "17466048");
     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/SettingsDialog.cpp b/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
index 3211e30..4fb57a3 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, "16126647");
+    new HelpButton(this, buttonBox, "17466045");
 
     glWidget = NULL;
     initColorSchemes();
diff --git a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
index ae04fc9..2494002 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, "16126653");
+    new HelpButton(this, buttonBox, "17466051");
 
     StructuralAlignmentAlgorithmRegistry *reg = AppContext::getStructuralAlignmentAlgorithmRegistry();
     foreach (const QString &id, reg->getFactoriesIds()) {
diff --git a/src/plugins/chroma_view/transl/english.ts b/src/plugins/chroma_view/transl/english.ts
index 5727746..85cac8a 100644
--- a/src/plugins/chroma_view/transl/english.ts
+++ b/src/plugins/chroma_view/transl/english.ts
@@ -82,7 +82,7 @@
         <translation>Chromatogram view (zoom in to see base calls)</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="733"/>
+        <location filename="../src/ChromatogramView.cpp" line="735"/>
         <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 26822ac..97a5fdc 100644
--- a/src/plugins/chroma_view/transl/russian.ts
+++ b/src/plugins/chroma_view/transl/russian.ts
@@ -82,7 +82,7 @@
         <translation>Хроматограмма (приближайте масштаб)</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="733"/>
+        <location filename="../src/ChromatogramView.cpp" line="735"/>
         <source>original sequence</source>
         <translation>Исходная последовательность</translation>
     </message>
diff --git a/src/plugins/circular_view/src/CircularView.h b/src/plugins/circular_view/src/CircularView.h
index 94f6af1..f680d10 100644
--- a/src/plugins/circular_view/src/CircularView.h
+++ b/src/plugins/circular_view/src/CircularView.h
@@ -161,7 +161,6 @@ protected:
     void resizeEvent(QResizeEvent *e);
     virtual void drawAll(QPaintDevice* pd);
     virtual U2Region getAnnotationYRange(Annotation *a, int ri, const AnnotationSettings *as) const;
-    virtual U2Region getMirroredYRange(const U2Strand &mirroredStrand) const {Q_UNUSED(mirroredStrand); return U2Region(-1,0);}
     void buildAnnotationItem(DrawAnnotationPass pass, Annotation *a, bool selected = false, const AnnotationSettings *as = NULL);
     virtual void drawAnnotations(QPainter& p);
 
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
index a966552..cf91556 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 = "16126638";
+const QString CircularViewSettingsWidgetFactory::GROUP_DOC_PAGE = "17466036";
 
 CircularViewSettingsWidgetFactory::CircularViewSettingsWidgetFactory(CircularViewContext* context)
     : ctx(context) {
diff --git a/src/plugins/circular_view/transl/english.ts b/src/plugins/circular_view/transl/english.ts
index 5ff2d1d..ff74e87 100644
--- a/src/plugins/circular_view/transl/english.ts
+++ b/src/plugins/circular_view/transl/english.ts
@@ -108,12 +108,12 @@
         <translation>Circular view</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="174"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
         <source>Include position marker</source>
         <translation>Include position marker</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="176"/>
         <source>Include selection</source>
         <translation>Include selection</translation>
     </message>
@@ -185,17 +185,17 @@
         <translation>List of Circular Views is empty!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="153"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="155"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="156"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="158"/>
         <source>Sequence context is NULL!</source>
         <translation>Sequence context is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="157"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="159"/>
         <source>Sequece Gobject is NULL</source>
         <translation>Sequece Gobject is NULL</translation>
     </message>
diff --git a/src/plugins/circular_view/transl/russian.ts b/src/plugins/circular_view/transl/russian.ts
index 03dbb34..1a334eb 100644
--- a/src/plugins/circular_view/transl/russian.ts
+++ b/src/plugins/circular_view/transl/russian.ts
@@ -108,12 +108,12 @@
         <translation>Круговой вид</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="174"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
         <source>Include position marker</source>
         <translation>Включить позицию</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="176"/>
         <source>Include selection</source>
         <translation>Включить выделение</translation>
     </message>
@@ -185,17 +185,17 @@
         <translation>Список круговых видов пуст!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="153"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="155"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="156"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="158"/>
         <source>Sequence context is NULL!</source>
         <translation>Sequence context is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="157"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="159"/>
         <source>Sequece Gobject is NULL</source>
         <translation>Sequece Gobject is NULL</translation>
     </message>
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
index 59f46d3..1ccfd53 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
@@ -49,7 +49,7 @@ namespace BAM {
 
 ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _bamInfo, bool sam) : QDialog(QApplication::activeWindow()), sourceUrl(_sourceUrl), bamInfo(_bamInfo) {
     ui.setupUi(this);
-    new HelpButton(this, ui.buttonBox, "16126723");
+    new HelpButton(this, ui.buttonBox, "17466121");
     ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     ui.buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dbi_bam/src/SamReader.cpp b/src/plugins/dbi_bam/src/SamReader.cpp
index 8ce6408..a6c1ba3 100644
--- a/src/plugins/dbi_bam/src/SamReader.cpp
+++ b/src/plugins/dbi_bam/src/SamReader.cpp
@@ -32,6 +32,8 @@
 namespace U2 {
 namespace BAM {
 
+const int SamReader::LOCAL_READ_BUFFER_SIZE = 100000;
+
 Alignment SamReader::parseAlignmentString(QByteArray line) {
     Alignment alignment;
 
@@ -272,7 +274,7 @@ Alignment SamReader::parseAlignmentString(QByteArray line) {
 
 SamReader::SamReader(IOAdapter &ioAdapter):
         Reader(ioAdapter),
-        readBuffer(READ_BUFF_SIZE, '\0')
+        readBuffer(LOCAL_READ_BUFFER_SIZE, '\0')
 {
     readHeader();
 }
@@ -296,7 +298,7 @@ QByteArray SamReader::readString(bool &eof) {
     bool lineOk = false;
     int len = 0;
     QByteArray result;
-    while((len = ioAdapter.readLine(buff, READ_BUFF_SIZE, &lineOk)) == 0) {}
+    while((len = ioAdapter.readLine(buff, LOCAL_READ_BUFFER_SIZE, &lineOk)) == 0) {}
     if (len == -1) {
         eof = true;
     } else {
@@ -317,7 +319,7 @@ void SamReader::readHeader() {
         QList<Header::ReadGroup> readGroups;
         QList<Header::Program> programs;
         QList<QByteArray> previousProgramIds;
-        while((len = ioAdapter.readLine(buff, READ_BUFF_SIZE, &lineOk)) >= 0) {
+        while ((len = ioAdapter.readLine(buff, LOCAL_READ_BUFFER_SIZE, &lineOk)) >= 0) {
             if(isEof()){
                 break;
             }
diff --git a/src/plugins/dbi_bam/src/SamReader.h b/src/plugins/dbi_bam/src/SamReader.h
index dc35231..e6a9dee 100644
--- a/src/plugins/dbi_bam/src/SamReader.h
+++ b/src/plugins/dbi_bam/src/SamReader.h
@@ -40,7 +40,7 @@ private:
     void readHeader();
     Alignment parseAlignmentString(QByteArray line);
 
-    static const int READ_BUFF_SIZE = 100000;
+    static const int LOCAL_READ_BUFFER_SIZE;
     QByteArray readBuffer;
 friend class AlignmentParser;
 };
diff --git a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
index b235353..425bd4a 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, "16126632");
+    new HelpButton(this, buttonBox, "17466030");
 
     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/DNASequenceGeneratorDialog.cpp b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
index 43bc9b9..97fc1f4 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
@@ -55,7 +55,7 @@ QMap<char, qreal> DNASequenceGeneratorDialog::content = initContent();
 
 DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126855");
+    new HelpButton(this, buttonBox, "17466253");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -159,7 +159,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, "16126855");
+    new HelpButton(this, buttonBox, "17466253");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
 
     percentASpin->setValue(percentMap.value('A')*100.0);
diff --git a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
index d4eb42f..b414fca 100644
--- a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
+++ b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
@@ -43,7 +43,7 @@ namespace U2 {
 
 ExportBlastResultDialog::ExportBlastResultDialog(QWidget* p, const QString& defaultUrl): QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126783");
+    new HelpButton(this, buttonBox, "17466181");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
index 984d83f..0eec751 100644
--- a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
+++ b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
@@ -49,7 +49,7 @@ namespace U2 {
 
 ExportChromatogramDialog::ExportChromatogramDialog(QWidget* p, const GUrl& fileUrl): QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126655");
+    new HelpButton(this, buttonBox, "17466053");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
index 327d0ee..6e7c6e1 100644
--- a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
@@ -45,7 +45,7 @@ namespace U2 {
 
 ExportMSA2MSADialog::ExportMSA2MSADialog(const QString& defaultFileName, const DocumentFormatId& f, bool wholeAlignmentOnly, QWidget* p):  QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126565");
+    new HelpButton(this, buttonBox, "17465963");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
index 8764a4e..b800848 100644
--- a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
@@ -43,7 +43,7 @@ namespace U2 {
 
 ExportMSA2SequencesDialog::ExportMSA2SequencesDialog(QWidget* p): QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126564");
+    new HelpButton(this, buttonBox, "17465962");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
index 97b9c59..1ae265e 100644
--- a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
@@ -43,7 +43,7 @@ namespace U2 {
 
 ExportSequences2MSADialog::ExportSequences2MSADialog(QWidget* p, const QString& defaultUrl): QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126563");
+    new HelpButton(this, buttonBox, "17465961");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     okButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.cpp b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
index 91b760a..c18f4f3 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
@@ -48,7 +48,7 @@ ExportSequencesDialog::ExportSequencesDialog( bool m, bool allowComplement, bool
     : QDialog( p ), sequenceName( sourceFileBaseName )
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126562");
+    new HelpButton(this, buttonBox, "17465960");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp b/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
index 7eba122..e1dc114 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, "16126782");
+    new HelpButton(this, buttonBox, "17466180");
 
     connect(toolButton, SIGNAL(clicked()), SLOT(sl_saveFilenameButtonClicked()));
     QString defaultPath = AppContext::getAppSettings()->getUserAppsSettings()->getDownloadDirPath();
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
index d6acf8f..d50b1f8 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
@@ -61,7 +61,7 @@ ImportAnnotationsFromCSVDialog::ImportAnnotationsFromCSVDialog(QWidget* w)
 : QDialog (w)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126632");
+    new HelpButton(this, buttonBox, "17466030");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/transl/russian.ts b/src/plugins/dna_export/transl/russian.ts
index 7eb0b7c..75b3744 100644
--- a/src/plugins/dna_export/transl/russian.ts
+++ b/src/plugins/dna_export/transl/russian.ts
@@ -1839,7 +1839,7 @@ var %2; //parsed line number</translation>
     <message>
         <location filename="../src/GenerateDNAWorker.cpp" line="177"/>
         <source>Generates random DNA sequences with given nucleotide content that can be specified manually or evaluated from the reference file.</source>
-        <translation>Генерирует случаюную ДНК последовательность с заданным составом, который может быть указан вручную или оценен из референсного файла.</translation>
+        <translation>Генерирует случайную ДНК последовательность с заданным составом, который может быть указан вручную или оценен из референсного файла.</translation>
     </message>
     <message>
         <location filename="../src/GenerateDNAWorker.cpp" line="216"/>
diff --git a/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp b/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
index 85cfae1..5adb813 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, "16126776");
+    new HelpButton(this, buttonBox, "17466174");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
index 90049d1..10d0ec6 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
@@ -44,7 +44,7 @@ namespace U2 {
 
 DNAStatMSAProfileDialog::DNAStatMSAProfileDialog(QWidget* p, MSAEditor* _c) : QDialog(p), ctx(_c) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126720");
+    new HelpButton(this, buttonBox, "17466118");
 
     connect(fileButton, SIGNAL(clicked()), SLOT(sl_selectFile()));
     connect(htmlRB, SIGNAL(toggled(bool)), SLOT(sl_formatChanged(bool)));
diff --git a/src/plugins/dna_stat/src/DNAStatPlugin.cpp b/src/plugins/dna_stat/src/DNAStatPlugin.cpp
index 973ab8f..b98539f 100644
--- a/src/plugins/dna_stat/src/DNAStatPlugin.cpp
+++ b/src/plugins/dna_stat/src/DNAStatPlugin.cpp
@@ -56,10 +56,6 @@ DNAStatPlugin::DNAStatPlugin() : Plugin(tr("DNA Statistics"), tr("Provides stati
 
     distanceViewCtx = new DistanceMatrixMSAEditorContext(this);
     distanceViewCtx->init();
-
-    dnaStatsViewCtx = new DNAViewStatsContext(this);
-    dnaStatsViewCtx->init();
-
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -135,55 +131,5 @@ void DistanceMatrixMSAEditorContext::sl_showDistanceMatrixDialog() {
     d->exec();
 }
 
-
-//////////////////////////////////////////////////////////////////////////
-
-DNAViewStatsContext::DNAViewStatsContext( QObject* p )
-: GObjectViewWindowContext(p, AnnotatedDNAViewFactory::ID)
-{ }
-
-void DNAViewStatsContext::buildMenu( GObjectView* v, QMenu* m )
-{
-    AnnotatedDNAView* view = qobject_cast<AnnotatedDNAView*>(v);
-    SAFE_POINT(view != NULL, "View is NULL", );
-
-    QList<GObjectViewAction *> actions = getViewActions(v);
-     foreach(GObjectViewAction* a, actions) {
-        m->addAction(a);
-    }
-}
-
-void DNAViewStatsContext::initViewContext( GObjectView* view )
-{
-    AnnotatedDNAView* dnaView = qobject_cast<AnnotatedDNAView*>(view);
-
-    SAFE_POINT(dnaView != NULL, "Annotated view is NULL", );
-
-    GObjectViewAction* dnaStatsAction = new GObjectViewAction(this, view, tr("Statistics"));
-    dnaStatsAction->setObjectName("Statistics");
-    dnaStatsAction->setIcon(QIcon(":core/images/chart_bar.png"));
-    connect(dnaStatsAction, SIGNAL(triggered()), SLOT(sl_showDnaStats()));
-    addViewAction(dnaStatsAction);
-}
-
-void DNAViewStatsContext::sl_showDnaStats()
-{
-    GObjectViewAction* viewAction = qobject_cast<GObjectViewAction*>(sender());
-    SAFE_POINT(viewAction != NULL, "ViewAction is NULL", );
-
-    AnnotatedDNAView* dnaView = qobject_cast<AnnotatedDNAView*>(viewAction->getObjectView());
-    SAFE_POINT(dnaView != NULL, "View is NULL", );
-
-    ADVSequenceObjectContext* ctx = dnaView->getSequenceInFocus();
-    SAFE_POINT( ctx != NULL, "Context is NULL", );
-
-    DNAStatsWindow* w = new DNAStatsWindow(ctx);
-    w->setWindowIcon(QIcon(":core/images/chart_bar.png"));
-    AppContext::getMainWindow()->getMDIManager()->addMDIWindow(w);
-}
-
-
-
-
 }//namespace
 
diff --git a/src/plugins/dna_stat/src/DNAStatPlugin.h b/src/plugins/dna_stat/src/DNAStatPlugin.h
index 504fe9f..1f7d6e2 100644
--- a/src/plugins/dna_stat/src/DNAStatPlugin.h
+++ b/src/plugins/dna_stat/src/DNAStatPlugin.h
@@ -35,7 +35,6 @@ public:
 private:
     GObjectViewWindowContext* statViewCtx;
     GObjectViewWindowContext* distanceViewCtx;
-    GObjectViewWindowContext* dnaStatsViewCtx;
 };
 
 class DNAStatMSAEditorContext: public GObjectViewWindowContext {
@@ -62,17 +61,6 @@ protected:
     virtual void initViewContext(GObjectView* view);
 };
 
-class DNAViewStatsContext : public GObjectViewWindowContext {
-    Q_OBJECT
-public:
-    DNAViewStatsContext(QObject* p);
-protected slots:
-    void sl_showDnaStats();
-    void buildMenu(GObjectView* v, QMenu* m);
-protected:
-    virtual void initViewContext(GObjectView* view);
-};
-
 
 } //namespace
 
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
index 9fb6a35..214c2cc 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
@@ -51,7 +51,7 @@ namespace U2 {
 
 DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEditor* _c) : QDialog(p), ctx(_c) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126721");
+    new HelpButton(this, buttonBox, "17466119");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dotplot/src/DotPlotDialog.cpp b/src/plugins/dotplot/src/DotPlotDialog.cpp
index 6fd8f59..02546b9 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, "16126662");
+    new HelpButton(this, buttonBox, "17466060");
     startButton = buttonBox->button(QDialogButtonBox::Ok);
 
     SAFE_POINT(adv != NULL, "DotPlotDialog called without view context!", );
diff --git a/src/plugins/dotplot/src/DotPlotFilesDialog.cpp b/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
index b646f94..9abd76e 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, "16126662");
+    new HelpButton(this, buttonBox, "17466060");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dotplot/src/DotPlotFilterDialog.cpp b/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
index d239cc2..e6b0885 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, "16126672");
+    new HelpButton(this, buttonBox, "17466070");
 
 
     {
diff --git a/src/plugins/dotplot/transl/english.ts b/src/plugins/dotplot/transl/english.ts
index 74fb36b..61d4629 100644
--- a/src/plugins/dotplot/transl/english.ts
+++ b/src/plugins/dotplot/transl/english.ts
@@ -343,12 +343,12 @@ Select valid file to build dotplot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotImageExportTask.cpp" line="76"/>
+        <location filename="../src/DotPlotImageExportTask.cpp" line="78"/>
         <source>Include area selection</source>
         <translation>Include area selection</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotImageExportTask.cpp" line="77"/>
+        <location filename="../src/DotPlotImageExportTask.cpp" line="79"/>
         <source>Include repeat selection</source>
         <translation>Include repeat selection</translation>
     </message>
diff --git a/src/plugins/dotplot/transl/russian.ts b/src/plugins/dotplot/transl/russian.ts
index 933413a..38abee5 100644
--- a/src/plugins/dotplot/transl/russian.ts
+++ b/src/plugins/dotplot/transl/russian.ts
@@ -343,12 +343,12 @@ Select valid file to build dotplot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotImageExportTask.cpp" line="76"/>
+        <location filename="../src/DotPlotImageExportTask.cpp" line="78"/>
         <source>Include area selection</source>
         <translation>Включить область выделения</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotImageExportTask.cpp" line="77"/>
+        <location filename="../src/DotPlotImageExportTask.cpp" line="79"/>
         <source>Include repeat selection</source>
         <translation>Включить повторяющиеся выделения</translation>
     </message>
@@ -602,7 +602,7 @@ Select valid file to build dotplot</source>
     <message>
         <location filename="../src/DotPlotWidget.cpp" line="1056"/>
         <source> (min length %1, identity %2%)</source>
-        <translation>(мин. длинна %1, идентичность %2%)</translation>
+        <translation>(мин. длина %1, идентичность %2%)</translation>
     </message>
     <message>
         <location filename="../src/DotPlotWidget.cpp" line="215"/>
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
index ee919d9..5e08372 100644
--- a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
@@ -45,7 +45,7 @@ ConstructMoleculeDialog::ConstructMoleculeDialog(const QList<DNAFragment>& fragm
 : QDialog(p), fragments(fragmentList)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126798");
+    new HelpButton(this, buttonBox, "17466196");
 
     tabWidget->setCurrentIndex(0);
 
diff --git a/src/plugins/enzymes/src/CreateFragmentDialog.cpp b/src/plugins/enzymes/src/CreateFragmentDialog.cpp
index 37edc10..a3e6ae0 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, "16126797");
+    new HelpButton(this, buttonBox, "17466195");
 
     tabWidget->setCurrentIndex(0);
 
@@ -69,7 +69,7 @@ CreateFragmentDialog::CreateFragmentDialog(U2SequenceObject* obj, const U2Region
     : QDialog(p)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126797");
+    new HelpButton(this, buttonBox, "17466195");
     seqObj = obj;
 
     QList<GObject*> aObjects = GObjectUtils::findAllObjects(UOF_LoadedOnly,GObjectTypes::ANNOTATION_TABLE);
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.cpp b/src/plugins/enzymes/src/DigestSequenceDialog.cpp
index 804c06b..dee1609 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, "16126796");
+    new HelpButton(this, buttonBox, "17466194");
 
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     tabWidget->setCurrentIndex(0);
diff --git a/src/plugins/enzymes/src/EditFragmentDialog.cpp b/src/plugins/enzymes/src/EditFragmentDialog.cpp
index 63f291b..c2d30bb 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, "16126803");
+    new HelpButton(this, buttonBox, "17466201");
 
     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/EnzymesIO.cpp b/src/plugins/enzymes/src/EnzymesIO.cpp
index 4c31a9c..62851c5 100644
--- a/src/plugins/enzymes/src/EnzymesIO.cpp
+++ b/src/plugins/enzymes/src/EnzymesIO.cpp
@@ -25,6 +25,7 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
+#include <U2Core/DocumentModel.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/L10n.h>
 #include <U2Core/TextUtils.h>
@@ -131,7 +132,6 @@ EnzymeFileFormat EnzymesIO::detectFileFormat(const QString& url) {
 
 }
 
-#define READ_BUFF_SIZE 4096
 QList<SEnzymeData> EnzymesIO::readBairochFile(const QString& url, IOAdapterFactory* iof, TaskStateInfo& ti) {
     QList<SEnzymeData> res;
 
@@ -142,12 +142,12 @@ QList<SEnzymeData> EnzymesIO::readBairochFile(const QString& url, IOAdapterFacto
     }
 
     SEnzymeData currentData(new EnzymeData());
-    QByteArray buffArr(READ_BUFF_SIZE, 0);
+    QByteArray buffArr(DocumentFormat::READ_BUFF_SIZE, 0);
     char* buff = buffArr.data();
     const QBitArray& LINE_BREAKS = TextUtils::LINE_BREAKS;
     int line = 0, len = 0;
     bool lineOk = true;
-    while ((len = io->readUntil(buff, READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Include, &lineOk)) > 0 && !ti.cancelFlag) {
+    while ((len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Include, &lineOk)) > 0 && !ti.cancelFlag) {
         line++;
         if (!lineOk) {
             ti.setError(  tr("Line is too long: %1").arg(line) );
@@ -236,14 +236,14 @@ void EnzymesIO::writeBairochFile(const QString& url, IOAdapterFactory* iof, cons
         return;
     }
 
-    QByteArray buffArr(READ_BUFF_SIZE, 0);
+    QByteArray buffArr(DocumentFormat::READ_BUFF_SIZE, 0);
     char* buff = buffArr.data();
     const QBitArray& LINE_BREAKS = TextUtils::LINE_BREAKS;
     int line = 0, len = 0;
     bool lineOk = true;
     bool writeString = true;
 
-    while ((len = srcio->readUntil(buff, READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Include, &lineOk)) > 0 && !ti.cancelFlag) {
+    while ((len = srcio->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Include, &lineOk)) > 0 && !ti.cancelFlag) {
         line++;
         if (!lineOk) {
             ti.setError(  tr("Line is too long: %1").arg(line) );
diff --git a/src/plugins/enzymes/src/EnzymesQuery.cpp b/src/plugins/enzymes/src/EnzymesQuery.cpp
index fa079e8..f60e78b 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, "16126788");
+    new HelpButton(this, buttonBox, "17466186");
 
     QVBoxLayout* vl = new QVBoxLayout();
     enzSel = new EnzymesSelectorWidget();
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.cpp b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
index 94caffd..9c4599f 100644
--- a/src/plugins/enzymes/src/FindEnzymesDialog.cpp
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
@@ -520,7 +520,7 @@ void EnzymesSelectorWidget::sl_saveEnzymesFile()
 FindEnzymesDialog::FindEnzymesDialog(ADVSequenceObjectContext* sctx)
 : QDialog(sctx->getAnnotatedDNAView()->getWidget()), seqCtx(sctx) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126788");
+    new HelpButton(this, buttonBox, "17466186");
 
     maxHitSB->setMaximum(INT_MAX);
     minHitSB->setMaximum(INT_MAX);
diff --git a/src/plugins/enzymes/src/FindEnzymesTask.h b/src/plugins/enzymes/src/FindEnzymesTask.h
index f7fbadd..5b4b527 100644
--- a/src/plugins/enzymes/src/FindEnzymesTask.h
+++ b/src/plugins/enzymes/src/FindEnzymesTask.h
@@ -109,7 +109,6 @@ private:
     QMutex                              resultsLock;
 
     QString                             group;
-    QPointer<AnnotationTableObject *>     aObj;
 };
 
 
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp
index c060f3e..0a016e4 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp
@@ -82,7 +82,7 @@ ExpertDiscoveryAdvSetDialog::ExpertDiscoveryAdvSetDialog(QWidget *parent,
     connect( checkCorrel, SIGNAL(clicked()), SLOT(sl_checkCorrel()) );
 
     hideParameters();
-    new HelpButton(this, buttonBox, "16126866");
+    new HelpButton(this, buttonBox, "17466264");
 
 }
 
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp
index 248a58d..9b471a6 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp
@@ -38,7 +38,7 @@ ExpertDiscoveryControlDialog::ExpertDiscoveryControlDialog(QWidget *parent)
 : QDialog(parent){
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126866");
+    new HelpButton(this, buttonBox, "17466264");
 
     connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
 
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp
index fd06abf..3db39e7 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp
@@ -38,7 +38,7 @@ ExpertDiscoveryControlMrkDialog::ExpertDiscoveryControlMrkDialog(QWidget *parent
 : QDialog(parent){
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126866");
+    new HelpButton(this, buttonBox, "17466264");
 
     connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
 
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp
index 384ed33..dc8785b 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp
@@ -39,7 +39,7 @@ ExpertDiscoveryPosNegDialog::ExpertDiscoveryPosNegDialog(QWidget *parent)
 : QDialog(parent), generateNeg(false), negativePerPositive(100){
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126866");
+    new HelpButton(this, buttonBox, "17466264");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp
index 73b3693..2a25670 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp
@@ -38,7 +38,7 @@ ExpertDiscoveryPosNegMrkDialog::ExpertDiscoveryPosNegMrkDialog(QWidget *parent)
 : QDialog(parent), generateDescr(true){
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126867");
+    new HelpButton(this, buttonBox, "17466265");
 
     connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
     connect(openSecondButton, SIGNAL(clicked()), SLOT(sl_openSecondFile()));
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp b/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp
index 9cf19bc..dc19136 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp
@@ -73,7 +73,7 @@ public:
 
 ExpertDiscoverySearchDialogController::ExpertDiscoverySearchDialogController(ADVSequenceObjectContext* _ctx, ExpertDiscoveryData& data, QWidget *p):QDialog(p), edData(data) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126866");
+    new HelpButton(this, buttonBox, "17466264");
 
     ctx = _ctx;
     task = NULL;
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp
index 9c182b5..348d4d6 100644
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp
+++ b/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp
@@ -40,7 +40,7 @@ ExpertDiscoverySetupRecBoundDialog::ExpertDiscoverySetupRecBoundDialog(double dR
 ,graphWidget(NULL){
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126872");
+    new HelpButton(this, buttonBox, "17466270");
 
     boundLabel->setStyleSheet(QString("color : %1;").arg(ExpertDiscoveryRecognitionErrorGraphWidget::BOUNDCOLOR.name()));
     er1Lable->setStyleSheet(QString("color : %1;").arg(ExpertDiscoveryRecognitionErrorGraphWidget::ER1COLOR.name()));
diff --git a/src/plugins/external_tool_support/external_tool_support.pro b/src/plugins/external_tool_support/external_tool_support.pro
index 3af4544..52f08df 100644
--- a/src/plugins/external_tool_support/external_tool_support.pro
+++ b/src/plugins/external_tool_support/external_tool_support.pro
@@ -104,10 +104,13 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/mrbayes/MrBayesSupport.h \
            src/mrbayes/MrBayesTask.h \
            src/mrbayes/MrBayesTests.h \
+           src/peak2gene/Gene2PeakFormatLoader.h \
+           src/peak2gene/Peak2GeneFormatLoader.h \
            src/peak2gene/Peak2GeneSettings.h \
            src/peak2gene/Peak2GeneSupport.h \
            src/peak2gene/Peak2GeneTask.h \
            src/peak2gene/Peak2GeneWorker.h \
+           src/peak2gene/TabulatedFormatReader.h \
            src/perl/PerlSupport.h \
            src/phyml/PhyMLDialogWidget.h \
            src/phyml/PhyMLSupport.h \
@@ -277,10 +280,13 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/mrbayes/MrBayesSupport.cpp \
            src/mrbayes/MrBayesTask.cpp \
            src/mrbayes/MrBayesTests.cpp \
+           src/peak2gene/Gene2PeakFormatLoader.cpp \
+           src/peak2gene/Peak2GeneFormatLoader.cpp \
            src/peak2gene/Peak2GeneSettings.cpp \
            src/peak2gene/Peak2GeneSupport.cpp \
            src/peak2gene/Peak2GeneTask.cpp \
            src/peak2gene/Peak2GeneWorker.cpp \
+           src/peak2gene/TabulatedFormatReader.cpp \
            src/perl/PerlSupport.cpp \
            src/phyml/PhyMLDialogWidget.cpp \
            src/phyml/PhyMLSupport.cpp \
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
index a4852e1..225e928 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("16126581");
+const QString ExternalToolSupportSettingsPageController::helpPageId = QString("17465979");
 
 /////////////////////////////////////////////
 ////ExternalToolSupportSettingsPageWidget
diff --git a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
index 8d8479c..1efaf3e 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
+++ b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
@@ -86,7 +86,7 @@ void SlopbedWorkerFactory::init() {
             dataPath = dp;
         }
     }
-    Descriptor desc( ACTOR_ID, SlopbedWorker::tr("Slopbed"),
+    Descriptor desc( ACTOR_ID, SlopbedWorker::tr("slopBed"),
         SlopbedWorker::tr("Increases the size of each feature in files using bedtools slop.") );
 
     QList<PortDescriptor*> p;
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
index 54633b1..ca37667 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
@@ -203,6 +203,7 @@ void BlastAllSupportContext::sl_showDialog() {
             settings.offsInGlobalSeq=r.startPos;
             SAFE_POINT(seqCtx->getSequenceObject() != NULL, tr("Sequence object is NULL"), );
             settings.isSequenceCircular = seqCtx->getSequenceObject()->isCircular();
+            settings.querySequenceObject = seqCtx->getSequenceObject();
             Task * t = new BlastAllSupportTask(settings);
             AppContext::getTaskScheduler()->registerTopLevelTask( t );
         }
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
index 90b8ff1..b23762d 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
@@ -271,6 +271,7 @@ void BlastAllWithExtFileSpecifySupportRunDialog::tryApplyDoc(Document *doc) {
             localSettings.isNucleotideSeq = true;
         }
         localSettings.queryFile = doc->getURLString();
+        localSettings.querySequenceObject = seq;
         settingsList.append(localSettings);
         sequencesRefList.append(GObjectReference(obj));
     }
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
index ba496fb..26f7b1c 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
@@ -34,6 +34,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
@@ -55,6 +56,10 @@ BlastAllSupportTask::BlastAllSupportTask(const BlastTaskSettings& _settings) :
     sequenceObject=NULL;
     circularization = new U2PseudoCircularization(this, settings.isSequenceCircular, settings.querySequence);
     addTaskResource(TaskResourceUsage(RESOURCE_THREAD, settings.numberOfProcessors));
+
+    if (NULL != settings.querySequenceObject) {
+        TaskWatchdog::trackResourceExistence(settings.querySequenceObject, this, tr("A problem occurred during doing BLAST. The sequence is no more available."));
+    }
 }
 
 void BlastAllSupportTask::prepare(){
@@ -281,7 +286,7 @@ void BlastAllSupportTask::parseTabularResult() {
 void BlastAllSupportTask::parseTabularLine(const QByteArray &line){
     SharedAnnotationData ad(new AnnotationData);
     bool isOk;
-    int from = -1,to = -1,align_len = -1,gaps = -1, identities = -1, hitFrom = -1,hitTo = -1;
+    int from = -1,to = -1,align_len = -1,gaps = -1, hitFrom = -1,hitTo = -1;
     //Fields: Query id (0), Subject id(1), % identity(2), alignment length(3), mismatches(4), gap openings(5), q. start(6), q. end(7), s. start(8), s. end(9), e-value(10), bit score(11)
     QList<QByteArray> elements=line.split('\t');
     if(elements.size()!=12){
@@ -370,7 +375,7 @@ void BlastAllSupportTask::parseTabularLine(const QByteArray &line){
         }
         if(identitiesPercent != -1) {
             //float percent = (float)identities / (float)align_len * 100;
-            identities=(float)align_len*identitiesPercent/100.;
+            int identities=(float)align_len*identitiesPercent/100.;
             QString str = QString::number(identities) + '/' + QString::number(align_len) + " (" + QString::number(identitiesPercent,'g',4) + "%)";
             ad->qualifiers.push_back(U2Qualifier("identities", str));
         }
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
index af8199c..e33b677 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, "16126848");
+    new HelpButton(this, buttonBox, "17466246");
     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_plus/BlastDBCmdDialog.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
index e5a2de6..6d91243 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
@@ -38,7 +38,7 @@ BlastDBCmdDialog::BlastDBCmdDialog(BlastDBCmdSupportTaskSettings &_settings, QWi
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126850");
+    new HelpButton(this, buttonBox, "17466248");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Fetch"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
index 87ac3ed..0871af0 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
@@ -368,6 +368,7 @@ void BlastPlusSupportContext::sl_showDialog() {
             settings.offsInGlobalSeq=r.startPos;
             SAFE_POINT(seqCtx->getSequenceObject() != NULL, tr("Sequence object is NULL"), );
             settings.isSequenceCircular = seqCtx->getSequenceObject()->isCircular();
+            settings.querySequenceObject = seqCtx->getSequenceObject();
             Task * t=NULL;
             if(settings.programName == "blastn"){
                 t = new BlastNPlusSupportTask(settings);
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
index 32fbbcc..d95b7eb 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
@@ -36,6 +36,7 @@
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/SaveDocumentTask.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
@@ -64,6 +65,9 @@ BlastPlusSupportCommonTask::BlastPlusSupportCommonTask(const BlastTaskSettings&
     sequenceObject=NULL;
     circularization = new U2PseudoCircularization(this, settings.isSequenceCircular, settings.querySequence);
     addTaskResource(TaskResourceUsage(RESOURCE_THREAD, settings.numberOfProcessors));
+    if (NULL != settings.querySequenceObject) {
+        TaskWatchdog::trackResourceExistence(settings.querySequenceObject, this, tr("A problem occurred during doing BLAST+. The sequence is no more available."));
+    }
 }
 
 void BlastPlusSupportCommonTask::prepare(){
@@ -233,7 +237,7 @@ void BlastPlusSupportCommonTask::parseTabularResult() {
 void BlastPlusSupportCommonTask::parseTabularLine(const QByteArray &line){
     SharedAnnotationData ad(new AnnotationData);
     bool isOk;
-    int from = -1,to = -1,align_len = -1,gaps = -1, identities = -1, hitFrom = -1,hitTo = -1;
+    int from = -1,to = -1,align_len = -1,gaps = -1, hitFrom = -1,hitTo = -1;
     //Fields: Query id (0), Subject id(1), % identity(2), alignment length(3), mismatches(4), gap openings(5), q. start(6), q. end(7), s. start(8), s. end(9), e-value(10), bit score(11)
     QList<QByteArray> elements=line.split('\t');
     if(elements.size()!=12){
@@ -321,7 +325,7 @@ void BlastPlusSupportCommonTask::parseTabularLine(const QByteArray &line){
         }
         if(identitiesPercent != -1) {
             //float percent = (float)identities / (float)align_len * 100;
-            identities=(float)align_len*identitiesPercent/100.;
+            int identities=(float)align_len*identitiesPercent/100.;
             QString str = QString::number(identities) + '/' + QString::number(align_len) + " (" + QString::number(identitiesPercent,'g',4) + "%)";
             ad->qualifiers.push_back(U2Qualifier("identities", str));
         }
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
index b212ebf..bf5afc1 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
@@ -346,6 +346,7 @@ void BlastPlusWithExtFileSpecifySupportRunDialog::tryApplyDoc(Document *doc) {
             localSettings.isNucleotideSeq = true;
         }
         localSettings.queryFile = doc->getURLString();
+        localSettings.querySequenceObject = seq;
         settingsList.append(localSettings);
         sequencesRefList.append(GObjectReference(obj));
     }
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
index cc9b52d..7645b98 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
@@ -43,7 +43,7 @@ CAP3SupportDialog::CAP3SupportDialog(CAP3SupportTaskSettings& s, QWidget* parent
 : QDialog(parent), settings(s)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126838");
+    new HelpButton(this, buttonBox, "17466236");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
index fe084d5..f3c9abf 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
@@ -51,7 +51,7 @@ ClustalOSupportRunDialog::ClustalOSupportRunDialog(const MAlignment& _ma, Clusta
         QDialog(_parent), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126862");
+    new HelpButton(this, buttonBox, "17466260");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -87,7 +87,7 @@ ClustalOWithExtFileSpecifySupportRunDialog::ClustalOWithExtFileSpecifySupportRun
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126844");
+    new HelpButton(this, buttonBox, "17466242");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
index 95c68a6..ef4a4b6 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
@@ -48,7 +48,7 @@ ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MAlignment& _ma, Clusta
         QDialog(_parent), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126851");
+    new HelpButton(this, buttonBox, "17466249");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -127,7 +127,7 @@ ClustalWWithExtFileSpecifySupportRunDialog::ClustalWWithExtFileSpecifySupportRun
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126851");
+    new HelpButton(this, buttonBox, "17466249");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
index 1ba0999..cf9ecc1 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
@@ -48,14 +48,14 @@ void ConductGOSettings::initDefault(){
     geneUniverse = "hgu133a";
 }
 
-QStringList ConductGOSettings::getArguments( const QString& treatFilePath){
+QStringList ConductGOSettings::getArguments() const {
     QStringList result;
 
 //    go_analysis.py  '$title' '$diff_expr_file' '$logmeta' '$diff_expr_file.dbkey', '$annotation'
 
     result << title;
 
-    result << treatFilePath;
+    result << treatUrl;
 
     result << "logmeta.txt";
 
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
index 9af5565..04e3852 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
@@ -22,8 +22,6 @@
 #ifndef _U2_CONDUCT_GO_SETTINGS_
 #define _U2_CONDUCT_GO_SETTINGS_
 
-
-#include <QList>
 #include <QString>
 #include <QStringList>
 
@@ -32,7 +30,6 @@ namespace U2 {
 
 class ConductGOSettings {
 public:
-
     const static QString UNIVERSE_HGU133A;
     const static QString UNIVERSE_HGU133B;
     const static QString UNIVERSE_HGU133PLUS2;
@@ -49,14 +46,14 @@ public:
 
     QString     outDir;
     QString     title;
+    QString     treatUrl;
     QString     geneUniverse;
 
 public:
-     QStringList getArguments(const QString& annFilePath);
+     QStringList getArguments() const;
 
 private:
     void initDefault();
-
 };
 
 } // U2
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
index 308acd3..2f98b1e 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
@@ -50,17 +50,12 @@ const QString ConductGOTask::BASE_DIR_NAME("ConductGO_tmp");
 const QString ConductGOTask::BASE_SUBDIR_NAME("ConductGO");
 const QString ConductGOTask::TREAT_NAME("treatment");
 
-ConductGOTask::ConductGOTask(const ConductGOSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& _treatAnn)
-: ExternalToolSupportTask("ConductGO annotation", TaskFlag_None)
-, settings(_settings)
-, storage(storage)
-, treatAnn(_treatAnn)
-, treatDoc(NULL)
-, treatTask(NULL)
+ConductGOTask::ConductGOTask(const ConductGOSettings& settings)
+: ExternalToolSupportTask("ConductGO annotation", TaskFlag_CollectChildrenWarnings)
+, settings(settings)
 , etTask(NULL)
 {
     GCOUNTER(cvar, tvar, "NGS:ConductGOTask");
-    SAFE_POINT_EXT(NULL != storage, setError(L10N::nullPointerError("workflow data storage")), );
 }
 
 ConductGOTask::~ConductGOTask() {
@@ -68,15 +63,10 @@ ConductGOTask::~ConductGOTask() {
 }
 
 void ConductGOTask::cleanup() {
-    treatAnn.clear();
-
-    delete treatDoc; treatDoc = NULL;
-
-    //remove tmp files
     QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(BASE_DIR_NAME);
     QDir tmpDir(tmpDirPath);
-    if(tmpDir.exists()){
-        foreach(QString file, tmpDir.entryList()){
+    if (tmpDir.exists()) {
+        foreach (const QString &file, tmpDir.entryList()) {
             tmpDir.remove(file);
         }
     }
@@ -87,65 +77,28 @@ void ConductGOTask::prepare() {
     workingDir = appSettings->createCurrentProcessTemporarySubDir(stateInfo, BASE_DIR_NAME);
     CHECK_OP(stateInfo, );
 
-    settings.outDir = GUrlUtils::createDirectory(
-        settings.outDir + "/" + BASE_SUBDIR_NAME,
-        "_", stateInfo);
+    settings.outDir = GUrlUtils::createDirectory(settings.outDir + "/" + BASE_SUBDIR_NAME, "_", stateInfo);
     CHECK_OP(stateInfo, );
 
-    treatDoc = createDoc(treatAnn, TREAT_NAME);
-    CHECK_OP(stateInfo, );
-
-    treatTask = new SaveDocumentTask(treatDoc);
-    addSubTask(treatTask);
-
-}
-
-Document* ConductGOTask::createDoc(const QList<Workflow::SharedDbiDataHandler>& annData, const QString& name) {
-    Document* doc = NULL;
-
-    QString docUrl = workingDir + "/" + name +".bed";
-
-    DocumentFormat *bedFormat = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::BED);
-    CHECK_EXT(NULL != bedFormat, stateInfo.setError("NULL bed format"), doc);
+    copyFile(settings.treatUrl, workingDir + "/" + QFileInfo(settings.treatUrl).fileName());
+    settings.treatUrl = workingDir + "/" + QFileInfo(settings.treatUrl).fileName();
 
-    doc = bedFormat->createNewLoadedDocument(IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE), docUrl, stateInfo);
-    CHECK_OP(stateInfo, doc);
-    doc->setDocumentOwnsDbiResources(false);
+    ExternalTool* rTool = AppContext::getExternalToolRegistry()->getByName(ET_R);
+    SAFE_POINT_EXT(NULL != rTool, setError("R script tool wasn't found in the registry"), );
+    const QString rDir = QFileInfo(rTool->getPath()).dir().absolutePath();
 
-    QList<AnnotationTableObject *> annTables = Workflow::StorageUtils::getAnnotationTableObjects(storage, annData);
-    foreach (AnnotationTableObject *annTable, annTables) {
-        doc->addObject(annTable);
-    }
-
-    return doc;
-}
-
-QList<Task*> ConductGOTask::onSubTaskFinished(Task* subTask) {
-    QList<Task*> result;
-    CHECK(!subTask->isCanceled(), result);
-    CHECK(!subTask->hasError(), result);
-
-    if (treatTask == subTask) {
-            QStringList args = settings.getArguments(treatDoc->getURLString());
-
-            ExternalTool* rTool = AppContext::getExternalToolRegistry()->getByName(ET_R);
-            SAFE_POINT(NULL != rTool, "R script tool wasn't found in the registry", result);
-            const QString rDir = QFileInfo(rTool->getPath()).dir().absolutePath();
-
-            etTask = new ExternalToolRunTask(ET_GO_ANALYSIS, args, new ExternalToolLogParser(), getSettings().outDir, QStringList() << rDir);
-            setListenerForTask(etTask);
-            result << etTask;
-    }
-    return result;
+    etTask = new ExternalToolRunTask(ET_GO_ANALYSIS, settings.getArguments(), new ExternalToolLogParser(), getSettings().outDir, QStringList() << rDir);
+    setListenerForTask(etTask);
+    addSubTask(etTask);
 }
 
 void ConductGOTask::run() {
-    foreach(const QString& file, getResultFileNames()){
-        copyFile(workingDir+"/"+ file, getSettings().outDir + "/" + file);
+    foreach (const QString& file, getResultFileNames()) {
+        copyFile(workingDir + "/" + file, getSettings().outDir + "/" + file);
     }
 }
 
-const ConductGOSettings& ConductGOTask::getSettings(){
+const ConductGOSettings & ConductGOTask::getSettings() const {
     return settings;
 }
 
@@ -169,7 +122,7 @@ bool ConductGOTask::copyFile(const QString &src, const QString &dst) {
 }
 
 
-QStringList ConductGOTask::getResultFileNames(){
+QStringList ConductGOTask::getResultFileNames() const {
     QStringList result;
 
     QString current;
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
index 97e6f5e..1bfcbb0 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
@@ -26,8 +26,6 @@
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/Task.h>
 
-#include <U2Lang/DbiDataStorage.h>
-
 #include "ConductGOSettings.h"
 
 namespace U2 {
@@ -39,29 +37,20 @@ class SaveDocumentTask;
 class ConductGOTask : public ExternalToolSupportTask {
     Q_OBJECT
 public:
-    ConductGOTask(const ConductGOSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& _treatAnn);
+    ConductGOTask(const ConductGOSettings& settings);
     virtual ~ConductGOTask();
 
     virtual void prepare();
-    virtual QList<Task*> onSubTaskFinished(Task* subTask);
     virtual void run();
     virtual void cleanup();
 
-    const ConductGOSettings & getSettings();
-
-    QStringList getResultFileNames();
+    const ConductGOSettings & getSettings() const ;
+    QStringList getResultFileNames() const;
 
 private:
     ConductGOSettings settings;
     QString workingDir;
 
-    Workflow::DbiDataStorage *storage;
-    QList<Workflow::SharedDbiDataHandler> treatAnn;
-
-    Document *treatDoc;
-
-    SaveDocumentTask *treatTask;
-
     ExternalToolRunTask *etTask;
 
     static const QString BASE_DIR_NAME;
@@ -69,7 +58,6 @@ private:
     static const QString TREAT_NAME;
 
 private:
-    Document* createDoc(const QList<Workflow::SharedDbiDataHandler> &annData, const QString& name);
     bool copyFile(const QString &src, const QString &dst);
 };
 
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
index 0898e3e..a879651 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
@@ -83,10 +83,9 @@ Task *ConductGOWorker::tick() {
             return new FailTask(os.getError());
         }
 
-        QList<SharedDbiDataHandler> treatData = StorageUtils::getAnnotationTableHandlers(data[ANNOT_SLOT_ID]);
-        ConductGOSettings settings = createConductGOSettings();
+        ConductGOSettings settings = createConductGOSettings(data[ANNOT_SLOT_ID].toString());
 
-        ConductGOTask* t = new ConductGOTask(settings, context->getDataStorage(), treatData);
+        ConductGOTask* t = new ConductGOTask(settings);
         t->addListeners(createLogListeners());
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
         return t;
@@ -109,7 +108,7 @@ void ConductGOWorker::sl_taskFinished() {
     const QStringList& resFileNames = t->getResultFileNames();
     foreach(const QString& fn, resFileNames){
         QString url = t->getSettings().outDir + "/" + fn;
-        context->getMonitor()->addOutputFile(url, getActor()->getId());
+        context->getMonitor()->addOutputFile(url, getActor()->getId(), QFileInfo(url).suffix() == "html");
     }
 
     if (inChannel->isEnded() && !inChannel->hasMessage()) {
@@ -117,11 +116,12 @@ void ConductGOWorker::sl_taskFinished() {
     }
 }
 
-ConductGOSettings ConductGOWorker::createConductGOSettings(){
+ConductGOSettings ConductGOWorker::createConductGOSettings(const QString &treatUrl) {
     ConductGOSettings settings;
 
     settings.outDir = getValue<QString>(OUTPUT_DIR);
     settings.title = getValue<QString>(TITLE);
+    settings.treatUrl = treatUrl;
     settings.geneUniverse = getValue<QString>(GENE_UNIVERSE);
 
     return settings;
@@ -139,12 +139,12 @@ void ConductGOWorkerFactory::init() {
     QMap<Descriptor, DataTypePtr> inTypeMap;
     Descriptor treatDesc(ANNOT_SLOT_ID,
         ConductGOWorker::tr("Target genes"),
-        ConductGOWorker::tr("Gene list to identify over represented GO terms."));
-    inTypeMap[treatDesc] = BaseTypes::ANNOTATION_TABLE_LIST_TYPE();
+        ConductGOWorker::tr("URL to file with genes to identify over represented GO terms."));
+    inTypeMap[treatDesc] = BaseTypes::STRING_TYPE();
 
     Descriptor inPortDesc(IN_PORT_DESCR,
         ConductGOWorker::tr("Conduct GO data"),
-        ConductGOWorker::tr("Gene list to identify over represented GO terms."));
+        ConductGOWorker::tr("URL to file with genes to identify over represented GO terms."));
 
     DataTypePtr inTypeSet(new MapDataType(IN_TYPE_ID, inTypeMap));
     portDescs << new PortDescriptor(inPortDesc, inTypeSet, true);
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
index 6ce3f6a..170e885 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
@@ -46,7 +46,7 @@ private:
     IntegralBus *inChannel;
 
 private:
-    ConductGOSettings createConductGOSettings();
+    ConductGOSettings createConductGOSettings(const QString &treatUrl);
 
 private slots:
     void sl_taskFinished();
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
index 88d2871..b121e8e 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
@@ -43,7 +43,7 @@ void ConservationPlotSettings::initDefault(){
 QStringList ConservationPlotSettings::getArguments(const QList<QString>& bedFiles){
     QStringList result;
 
-    result << "--phasdb=" + assemblyVersion;
+    result << "--phasdb=" + GUrlUtils::getQuotedString(assemblyVersion);
 
     if(height > 0){
         result << "--height=" + QByteArray::number(height);
@@ -57,10 +57,10 @@ QStringList ConservationPlotSettings::getArguments(const QList<QString>& bedFile
         result << "-w " + QByteArray::number(windowSize);
     }
 
-    result << "--title=" + title;
+    result << "--title=" + GUrlUtils::getQuotedString(title);
 
     //labels
-    result << "--bed-label=" + label;
+    result << "--bed-label=" + GUrlUtils::getQuotedString(label);
 
     foreach(QString bedFile, bedFiles){
         bedFile = bedFile.replace(' ', '_');
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
index afc670b..8149583 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
@@ -49,7 +49,7 @@ namespace U2 {
 const QString ConservationPlotTask::BASE_DIR_NAME("ConservationPlot_tmp");
 
 ConservationPlotTask::ConservationPlotTask(const ConservationPlotSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler> &_plotData)
-: ExternalToolSupportTask("ConservationPlot annotation", TaskFlag_None)
+: ExternalToolSupportTask("ConservationPlot annotation", TaskFlag_CollectChildrenWarnings)
 , settings(_settings)
 , treatDoc(NULL)
 , treatTask(NULL)
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
index 8acb8c8..e8b69a1 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
@@ -123,7 +123,7 @@ void ConservationPlotWorker::sl_taskFinished() {
         return;
     }
 
-    context->getMonitor()->addOutputFile(t->getSettings().outFile, getActor()->getId());
+    context->getMonitor()->addOutputFile(t->getSettings().outFile, getActor()->getId(), true);
 
     if (inChannel->isEnded() && !inChannel->hasMessage()) {
         setDone();
diff --git a/src/plugins/external_tool_support/src/java/JavaSupport.cpp b/src/plugins/external_tool_support/src/java/JavaSupport.cpp
index 9ced71e..48197f4 100644
--- a/src/plugins/external_tool_support/src/java/JavaSupport.cpp
+++ b/src/plugins/external_tool_support/src/java/JavaSupport.cpp
@@ -56,14 +56,7 @@ JavaSupport::JavaSupport(const QString &name, const QString &path)
 
 void JavaSupport::sl_toolValidationStatusChanged(bool isValid) {
     Q_UNUSED(isValid);
-    ScriptingTool::onPathChanged(this, QStringList()
-
-     #ifdef Q_OS_WIN
-     #else
-     << "-Xmx6G" //default memory pool is 2GB. This command makes it 6Gb
-     #endif
-
-    << "-jar");
+    ScriptingTool::onPathChanged(this, QStringList() << "-jar");
 }
 
 } // U2
diff --git a/src/plugins/external_tool_support/src/macs/MACSSettings.cpp b/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
index 13f32b1..99497e6 100644
--- a/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
@@ -64,10 +64,10 @@ void MACSSettings::initDefault(){
 QStringList MACSSettings::getArguments( const QString& treatFilePath, const QString& conFilePath ){
     QStringList result;
 
-    result << "--treatment=" + treatFilePath;
+    result << "--treatment=" + GUrlUtils::getQuotedString(treatFilePath);
 
     if (!conFilePath.isEmpty()){
-        result << "--control=" + conFilePath;
+        result << "--control=" + GUrlUtils::getQuotedString(conFilePath);
     }
 
     result << "--name=" + fileNames;
diff --git a/src/plugins/external_tool_support/src/macs/MACSTask.cpp b/src/plugins/external_tool_support/src/macs/MACSTask.cpp
index 083690a..08144b9 100644
--- a/src/plugins/external_tool_support/src/macs/MACSTask.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSTask.cpp
@@ -50,7 +50,7 @@ const QString MACSTask::BASE_DIR_NAME("macs_tmp");
 const QString MACSTask::BASE_SUBDIR_NAME("macs");
 
 MACSTask::MACSTask(const MACSSettings &_settings, const GUrl &_treatUrl, const GUrl &_conUrl)
-    : ExternalToolSupportTask(tr("MACS peak calling"), TaskFlag_None)
+    : ExternalToolSupportTask(tr("MACS peak calling"), TaskFlag_CollectChildrenWarnings)
     , settings(_settings)
     , treatUrl(_treatUrl)
     , conUrl(_conUrl)
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
index 84a6df9..ae9d5b7 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
@@ -48,7 +48,7 @@ MAFFTSupportRunDialog::MAFFTSupportRunDialog(MAFFTSupportTaskSettings& _settings
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126852");
+    new HelpButton(this, buttonBox, "17466250");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -80,7 +80,7 @@ MAFFTWithExtFileSpecifySupportRunDialog::MAFFTWithExtFileSpecifySupportRunDialog
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126852");
+    new HelpButton(this, buttonBox, "17466250");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp
new file mode 100644
index 0000000..329bc2d
--- /dev/null
+++ b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp
@@ -0,0 +1,140 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/IOAdapter.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/L10n.h>
+
+#include "Gene2PeakFormatLoader.h"
+#include "TabulatedFormatReader.h"
+
+namespace U2 {
+
+Gene2PeakFormatLoader::Gene2PeakFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter) :
+    os(os),
+    ioAdapter(ioAdapter),
+    skipLine(false),
+    currentLineNumber(0)
+{
+    CHECK_EXT(NULL != ioAdapter, os.setError(L10N::nullPointerError("IO adapter")), );
+    CHECK_EXT(ioAdapter->isOpen(), os.setError(L10N::errorReadingFile(ioAdapter->getURL())), );
+}
+
+QList<SharedAnnotationData> Gene2PeakFormatLoader::loadAnnotations() {
+    QList<SharedAnnotationData> annotations;
+
+    TabulatedFormatReader reader(os, ioAdapter);
+    CHECK_OP(os, annotations);
+
+    while (reader.hasNextLine()) {
+        skipLine = false;
+        currentLineNumber = reader.getCurrentLineNumber();
+        SharedAnnotationData annotation = parseLine(reader.getNextLine());
+        if (!skipLine) {
+            annotations << annotation;
+        }
+    }
+
+    return annotations;
+}
+
+SharedAnnotationData Gene2PeakFormatLoader::parseLine(const QStringList &lineValues) {
+    SharedAnnotationData data(new AnnotationData);
+    CHECK_EXT(lineValues.size() == COLUMNS_COUNT, skipLine = true; os.addWarning(QString("Incorrect columns count at line %1: expect %2, got %3")
+                                                                                 .arg(currentLineNumber).arg(COLUMNS_COUNT).arg(lineValues.size())), data);
+
+    data->qualifiers << U2Qualifier("chrom", getChromName(lineValues));
+    CHECK(!skipLine, data);
+
+    data->location->regions << getRegion(lineValues);
+    CHECK(!skipLine, data);
+
+    data->name = getGene(lineValues);
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("NA", getNa(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("Strand", getStrand(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("Peak_name", getPeakName(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("TSS2pCenter", getTss2pCenter(lineValues));
+    CHECK(!skipLine, data);
+
+    return data;
+}
+
+QString Gene2PeakFormatLoader::getChromName(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[ChromName].isEmpty(), skipLine = true; os.addWarning(QString("Chrom name is empty at line %1")
+                                                                               .arg(currentLineNumber)), "");
+    return lineValues[ChromName];
+}
+
+U2Region Gene2PeakFormatLoader::getRegion(const QStringList &lineValues) {
+    bool ok = false;
+    const qint64 startPos = lineValues[StartPos].toLongLong(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect start position at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[StartPos])), U2Region());
+
+    const qint64 endPos = lineValues[EndPos].toLongLong(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect end position at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[EndPos])), U2Region());
+
+    return U2Region(startPos, endPos - startPos);
+}
+
+QString Gene2PeakFormatLoader::getGene(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Gene].isEmpty(), skipLine = true; os.addWarning(QString("Genes list is empty at line %1")
+                                                                           .arg(currentLineNumber)), "");
+    return lineValues[Gene];
+}
+
+QString Gene2PeakFormatLoader::getNa(const QStringList &lineValues) {
+    bool ok = false;
+    lineValues[NA].toInt(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect NA value at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[NA])), "");
+    return lineValues[NA];
+}
+
+QString Gene2PeakFormatLoader::getStrand(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Strand].isEmpty(), skipLine = true; os.addWarning(QString("Strand is empty at line %1")
+                                                                            .arg(currentLineNumber)), "");
+    return lineValues[Strand];
+}
+
+QString Gene2PeakFormatLoader::getPeakName(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[PeakName].isEmpty(), skipLine = true; os.addWarning(QString("Peak name is empty at line %1")
+                                                                              .arg(currentLineNumber)), "");
+    return lineValues[PeakName];
+}
+
+QString Gene2PeakFormatLoader::getTss2pCenter(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Tss2peakCenter].isEmpty(), skipLine = true; os.addWarning(QString("Strand is empty at line %1")
+                                                                                    .arg(currentLineNumber)), "");
+    return lineValues[Tss2peakCenter];
+}
+
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h
new file mode 100644
index 0000000..f1db67b
--- /dev/null
+++ b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h
@@ -0,0 +1,71 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_GENE2PEAK_FORMAT_LOADER_H_
+#define U2_GENE2PEAK_FORMAT_LOADER_H_
+
+#include <QStringList>
+
+#include <U2Core/AnnotationData.h>
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class IOAdapter;
+class U2OpStatus;
+
+class Gene2PeakFormatLoader : public QObject {
+public:
+    Gene2PeakFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter);
+
+    QList<SharedAnnotationData> loadAnnotations();
+
+private:
+    enum Columns {
+        ChromName = 0,
+        StartPos = 1,
+        EndPos,
+        Gene,
+        NA,
+        Strand,
+        PeakName,
+        Tss2peakCenter,
+        COLUMNS_COUNT
+    };
+
+    SharedAnnotationData parseLine(const QStringList &lineValues);
+    QString getChromName(const QStringList &lineValues);
+    U2Region getRegion(const QStringList &lineValues);
+    QString getGene(const QStringList &lineValues);
+    QString getNa(const QStringList &lineValues);
+    QString getStrand(const QStringList &lineValues);
+    QString getPeakName(const QStringList &lineValues);
+    QString getTss2pCenter(const QStringList &lineValues);
+
+    U2OpStatus &os;
+    IOAdapter *ioAdapter;
+    bool skipLine;
+    qint64 currentLineNumber;
+};
+
+}   // namespace U2
+
+#endif // U2_GENE2PEAK_FORMAT_LOADER_H_
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp
new file mode 100644
index 0000000..4967df6
--- /dev/null
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp
@@ -0,0 +1,151 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/IOAdapter.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/L10n.h>
+
+#include "Peak2GeneFormatLoader.h"
+#include "TabulatedFormatReader.h"
+
+namespace U2 {
+
+Peak2GeneFormatLoader::Peak2GeneFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter) :
+    os(os),
+    ioAdapter(ioAdapter),
+    skipLine(false),
+    currentLineNumber(0)
+{
+    CHECK_EXT(NULL != ioAdapter, os.setError(L10N::nullPointerError("IO adapter")), );
+    CHECK_EXT(ioAdapter->isOpen(), os.setError(L10N::errorReadingFile(ioAdapter->getURL())), );
+}
+
+QList<SharedAnnotationData> Peak2GeneFormatLoader::loadAnnotations() {
+    QList<SharedAnnotationData> annotations;
+
+    TabulatedFormatReader reader(os, ioAdapter);
+    CHECK_OP(os, annotations);
+
+    while (reader.hasNextLine()) {
+        skipLine = false;
+        currentLineNumber = reader.getCurrentLineNumber();
+        SharedAnnotationData annotation = parseLine(reader.getNextLine());
+        if (!skipLine) {
+            annotations << annotation;
+        }
+    }
+
+    return annotations;
+}
+
+SharedAnnotationData Peak2GeneFormatLoader::parseLine(const QStringList &lineValues) {
+    SharedAnnotationData data(new AnnotationData);
+    CHECK_EXT(lineValues.size() == COLUMNS_COUNT, skipLine = true; os.addWarning(QString("Incorrect columns count at line %1: expect %2, got %3")
+                                                                                 .arg(currentLineNumber).arg(COLUMNS_COUNT).arg(lineValues.size())), data);
+
+    data->qualifiers << U2Qualifier("chrom", getChromName(lineValues));
+    CHECK(!skipLine, data);
+
+    data->location->regions << getRegion(lineValues);
+    CHECK(!skipLine, data);
+
+    data->name = getPeakName(lineValues);
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("score", getPeakScore(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("NA", getNa(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("Genes", getGenes(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("Strand", getStrand(lineValues));
+    CHECK(!skipLine, data);
+
+    data->qualifiers << U2Qualifier("TSS2pCenter", getTss2pCenter(lineValues));
+    CHECK(!skipLine, data);
+
+    return data;
+}
+
+QString Peak2GeneFormatLoader::getChromName(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[ChromName].isEmpty(), skipLine = true; os.addWarning(QString("Chrom name is empty at line %1")
+                                                                               .arg(currentLineNumber)), "");
+    return lineValues[ChromName];
+}
+
+U2Region Peak2GeneFormatLoader::getRegion(const QStringList &lineValues) {
+    bool ok = false;
+    const qint64 startPos = lineValues[StartPos].toLongLong(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect start position at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[StartPos])), U2Region());
+
+    const qint64 endPos = lineValues[EndPos].toLongLong(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect end position at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[EndPos])), U2Region());
+
+    return U2Region(startPos, endPos - startPos);
+}
+
+QString Peak2GeneFormatLoader::getPeakName(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[PeakName].isEmpty(), skipLine = true; os.addWarning(QString("Peak name is empty at line %1")
+                                                                              .arg(currentLineNumber)), "");
+    return lineValues[PeakName];
+}
+
+QString Peak2GeneFormatLoader::getPeakScore(const QStringList &lineValues) {
+    bool ok = false;
+    lineValues[PeakScore].toDouble(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect peak score at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[PeakScore])), "");
+    return lineValues[PeakScore];
+}
+
+QString Peak2GeneFormatLoader::getNa(const QStringList &lineValues) {
+    bool ok = false;
+    lineValues[NA].toInt(&ok);
+    CHECK_EXT(ok, skipLine = true; os.addWarning(tr("Incorrect NA value at line %1: '%2'")
+                                                 .arg(currentLineNumber).arg(lineValues[NA])), "");
+    return lineValues[NA];
+}
+
+QString Peak2GeneFormatLoader::getGenes(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Genes].isEmpty(), skipLine = true; os.addWarning(QString("Genes list is empty at line %1")
+                                                                           .arg(currentLineNumber)), "");
+    return lineValues[Genes];
+}
+
+QString Peak2GeneFormatLoader::getStrand(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Strand].isEmpty(), skipLine = true; os.addWarning(QString("Strand is empty at line %1")
+                                                                            .arg(currentLineNumber)), "");
+    return lineValues[Strand];
+}
+
+QString Peak2GeneFormatLoader::getTss2pCenter(const QStringList &lineValues) {
+    CHECK_EXT(!lineValues[Tss2peakCenter].isEmpty(), skipLine = true; os.addWarning(QString("Strand is empty at line %1")
+                                                                                    .arg(currentLineNumber)), "");
+    return lineValues[Tss2peakCenter];
+}
+
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h
new file mode 100644
index 0000000..c9829ff
--- /dev/null
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_PEAK2GENE_FORMAT_H_
+#define _U2_PEAK2GENE_FORMAT_H_
+
+#include <QStringList>
+
+#include <U2Core/AnnotationData.h>
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class IOAdapter;
+class U2OpStatus;
+
+class Peak2GeneFormatLoader : public QObject {
+public:
+    Peak2GeneFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter);
+
+    QList<SharedAnnotationData> loadAnnotations();
+
+private:
+    enum Columns {
+        ChromName = 0,
+        StartPos = 1,
+        EndPos,
+        PeakName,
+        PeakScore,
+        NA,
+        Genes,
+        Strand,
+        Tss2peakCenter,
+        COLUMNS_COUNT
+    };
+
+    SharedAnnotationData parseLine(const QStringList &lineValues);
+    QString getChromName(const QStringList &lineValues);
+    U2Region getRegion(const QStringList &lineValues);
+    QString getPeakName(const QStringList &lineValues);
+    QString getPeakScore(const QStringList &lineValues);
+    QString getNa(const QStringList &lineValues);
+    QString getGenes(const QStringList &lineValues);
+    QString getStrand(const QStringList &lineValues);
+    QString getTss2pCenter(const QStringList &lineValues);
+
+    U2OpStatus &os;
+    IOAdapter *ioAdapter;
+    bool skipLine;
+    qint64 currentLineNumber;
+};
+
+}   // namespace U2
+
+#endif // _U2_PEAK2GENE_FORMAT_H_
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
index 48a82fd..3bec8e8 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
@@ -62,7 +62,7 @@ QStringList Peak2GeneSettings::getArguments( const QString& treatFilePath){
 
     QStringList result;
 
-    result << "--treat=" + treatFilePath;
+    result << "--treat=" + GUrlUtils::getQuotedString(treatFilePath);
 
     result << "--name=" + DEFAULT_NAME;
 
@@ -74,9 +74,9 @@ QStringList Peak2GeneSettings::getArguments( const QString& treatFilePath){
 
     result << "--distance=" + QByteArray::number(distance);
 
-    result << "--genome=" + genomePath;
+    result << "--genome=" + GUrlUtils::getQuotedString(genomePath);
 
-    result << "--entrez=" + entrezPath;
+    result << "--entrez=" + GUrlUtils::getQuotedString(entrezPath);
 
     return result;
 }
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
index 1f5de40..533866e 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
@@ -22,17 +22,14 @@
 #ifndef _U2_PEAK2GENE_SETTINGS_
 #define _U2_PEAK2GENE_SETTINGS_
 
-
 #include <QList>
 #include <QString>
 #include <QStringList>
 
 namespace U2 {
 
-
 class Peak2GeneSettings {
 public:
-
     static const QString OUT_TYPE_UPSTREAM;
     static const QString OUT_TYPE_DOWNSTREAM;
     static const QString OUT_TYPE_ALL;
@@ -49,10 +46,8 @@ public:
 public:
      QStringList getArguments(const QString& treatFilePath);
 
-
 private:
     void initDefault();
-
 };
 
 } // U2
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
index 24ee190..10d08aa 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
@@ -41,25 +41,26 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
+#include "Gene2PeakFormatLoader.h"
+#include "Peak2GeneFormatLoader.h"
 #include "Peak2GeneSupport.h"
 #include "Peak2GeneTask.h"
 
 namespace U2 {
 
 const QString Peak2GeneTask::BASE_DIR_NAME("peak2gene_tmp");
+const QString Peak2GeneTask::BASE_SUBDIR_NAME("peak2gene");
 const QString Peak2GeneTask::TREAT_NAME("treatment");
 
-Peak2GeneTask::Peak2GeneTask(const Peak2GeneSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& _treatAnn)
-: ExternalToolSupportTask("Peak2gene annotation", TaskFlag_None)
-, settings(_settings)
+Peak2GeneTask::Peak2GeneTask(const Peak2GeneSettings& settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& treatAnn)
+: ExternalToolSupportTask("Peak2gene annotation", TaskFlag_CollectChildrenWarnings)
+, settings(settings)
 , storage(storage)
-, treatAnn(_treatAnn)
+, treatAnn(treatAnn)
 , treatDoc(NULL)
-, geneDoc(NULL)
-, peaksDoc(NULL)
+, genesAto(NULL)
+, peaksAto(NULL)
 , treatTask(NULL)
-, geneTask(NULL)
-, peaksTask(NULL)
 , etTask(NULL)
 {
     GCOUNTER(cvar, tvar, "NGS:Peak2GeneTask");
@@ -73,9 +74,12 @@ Peak2GeneTask::~Peak2GeneTask() {
 void Peak2GeneTask::cleanup() {
     treatAnn.clear();
 
-    delete treatDoc; treatDoc = NULL;
-    delete peaksDoc; peaksDoc = NULL;
-    delete geneDoc; geneDoc = NULL;
+    delete treatDoc;
+    treatDoc = NULL;
+    delete genesAto;
+    genesAto = NULL;
+    delete peaksAto;
+    peaksAto = NULL;
 
     //remove tmp files
     QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(BASE_DIR_NAME);
@@ -132,72 +136,55 @@ QList<Task*> Peak2GeneTask::onSubTaskFinished(Task* subTask) {
             setListenerForTask(etTask);
             result << etTask;
     }
-    else if(subTask == etTask){
+    else if (subTask == etTask) {
         //read annotations
-        QString geneName = workingDir + "/" + Peak2GeneSettings::DEFAULT_NAME+"_gene_annotation.txt";
-        QString peakName = workingDir + "/" + Peak2GeneSettings::DEFAULT_NAME+"_peaks_annotation.txt";
-
-        geneTask=
-            new LoadDocumentTask(BaseDocumentFormats::BED,
-            geneName,
-            AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE));
-        result.append(geneTask);
-
-        peaksTask=
-            new LoadDocumentTask(BaseDocumentFormats::BED,
-            peakName,
-            AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE));
-
-        result.append(peaksTask);
-
-    }else if(subTask == geneTask){
-        geneDoc = geneTask->takeDocument();
-
-    }else if(subTask == peaksTask){
-        peaksDoc = peaksTask->takeDocument();
+        genesUrl = workingDir + "/" + Peak2GeneSettings::DEFAULT_NAME + "_gene_annotation.txt";
+        peaksUrl = workingDir + "/" + Peak2GeneSettings::DEFAULT_NAME + "_peaks_annotation.txt";
     }
 
     return result;
 }
 
 void Peak2GeneTask::run() {
+    QScopedPointer<IOAdapter> geneAdapter(AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE)->createIOAdapter());
+    CHECK_EXT(geneAdapter->open(genesUrl, IOAdapterMode_Read), L10N::errorOpeningFileRead(genesUrl), );
 
-}
+    Gene2PeakFormatLoader geneLoader(stateInfo, geneAdapter.data());
+    QList<SharedAnnotationData> geneAnnotations = geneLoader.loadAnnotations();
+    CHECK_OP(stateInfo, );
 
-const Peak2GeneSettings& Peak2GeneTask::getSettings(){
-    return settings;
-}
+    genesAto = new AnnotationTableObject("gene2peak", storage->getDbiRef());
+    genesAto->addAnnotations(geneAnnotations);
 
-QList<AnnotationTableObject *> Peak2GeneTask::getGenes() const {
-    QList<AnnotationTableObject *> res;
+    QScopedPointer<IOAdapter> peakAdapter(AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE)->createIOAdapter());
+    CHECK_EXT(peakAdapter->open(peaksUrl, IOAdapterMode_Read), L10N::errorOpeningFileRead(peaksUrl), );
 
-    if (geneDoc == NULL) {
-        return res;
-    }
+    Peak2GeneFormatLoader peakLoader(stateInfo, peakAdapter.data());
+    QList<SharedAnnotationData> peakAnnotations = peakLoader.loadAnnotations();
+    CHECK_OP(stateInfo, );
 
-    const QList<GObject*> objects = geneDoc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-    foreach(GObject* ao, objects) {
-        res << qobject_cast<AnnotationTableObject *>(ao);
-        geneDoc->removeObject(ao, DocumentObjectRemovalMode_Release);
-    }
+    peaksAto = new AnnotationTableObject("peak2gene", storage->getDbiRef());
+    peaksAto->addAnnotations(peakAnnotations);
+}
 
-    return res;
+const Peak2GeneSettings& Peak2GeneTask::getSettings() const{
+    return settings;
 }
 
-QList<AnnotationTableObject *> Peak2GeneTask::getPeaks() const {
-    QList<AnnotationTableObject *> res;
+AnnotationTableObject * Peak2GeneTask::getGenes() const {
+    return genesAto;
+}
 
-    if (peaksDoc == NULL){
-        return res;
-    }
+AnnotationTableObject * Peak2GeneTask::getPeaks() const {
+    return peaksAto;
+}
 
-    const QList<GObject*> objects = peaksDoc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-    foreach(GObject* ao, objects) {
-        res << qobject_cast<AnnotationTableObject *>(ao);
-        peaksDoc->removeObject(ao, DocumentObjectRemovalMode_Release);
-    }
+const QString &Peak2GeneTask::getGenesUrl() const {
+    return genesUrl;
+}
 
-    return res;
+const QString &Peak2GeneTask::getPeaksUrl() const {
+    return genesUrl;
 }
 
 } // U2
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
index 716722b..58f9ffa 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
@@ -40,7 +40,7 @@ class SaveDocumentTask;
 class Peak2GeneTask : public ExternalToolSupportTask {
     Q_OBJECT
 public:
-    Peak2GeneTask(const Peak2GeneSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& _treatAnn);
+    Peak2GeneTask(const Peak2GeneSettings& settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler>& treatAnn);
     virtual ~Peak2GeneTask();
 
     virtual void prepare();
@@ -48,11 +48,12 @@ public:
     virtual void run();
     virtual void cleanup();
 
-    const Peak2GeneSettings & getSettings();
+    const Peak2GeneSettings & getSettings() const;
 
-    // Memory should be released by caller
-    QList<AnnotationTableObject *> getGenes() const;
-    QList<AnnotationTableObject *> getPeaks() const;
+    AnnotationTableObject * getGenes() const;
+    AnnotationTableObject * getPeaks() const;
+    const QString & getGenesUrl() const;
+    const QString & getPeaksUrl() const;
 
 private:
     Peak2GeneSettings settings;
@@ -63,17 +64,18 @@ private:
 
     Document *treatDoc;
 
-    Document *geneDoc;
-    Document *peaksDoc;
+    AnnotationTableObject *genesAto;
+    AnnotationTableObject *peaksAto;
 
-    SaveDocumentTask *treatTask;
+    QString genesUrl;
+    QString peaksUrl;
 
-    LoadDocumentTask *geneTask;
-    LoadDocumentTask *peaksTask;
+    SaveDocumentTask *treatTask;
 
     ExternalToolRunTask *etTask;
 
     static const QString BASE_DIR_NAME;
+    static const QString BASE_SUBDIR_NAME;
     static const QString TREAT_NAME;
 
 private:
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
index 6d20464..531da4f 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
@@ -39,6 +39,7 @@
 #include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseTypes.h>
 #include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
 
 #include "Peak2GeneSupport.h"
 #include "Peak2GeneWorker.h"
@@ -60,6 +61,8 @@ static const QString OUT_PORT_DESCR("out-data");
 static const QString PEAK_ANNOTATION("peak-annotation");
 static const QString GENE_ANNOTATION("gene-annotation");
 
+static const QString PEAK_ANNOTATION_URL("peak-annotation-url");
+static const QString GENE_ANNOTATION_URL("gene-annotation-url");
 
 static const QString OUTPOS("outpos");
 static const QString SYMBOL("symbol");
@@ -118,20 +121,21 @@ void Peak2GeneWorker::cleanup() {
 }
 
 void Peak2GeneWorker::sl_taskFinished() {
-    Peak2GeneTask *t = dynamic_cast<Peak2GeneTask*>(sender());
-    if (!t->isFinished() || t->hasError() || t->isCanceled()) {
+    Peak2GeneTask *task = qobject_cast<Peak2GeneTask*>(sender());
+    if (!task->isFinished() || task->hasError() || task->isCanceled()) {
         return;
     }
 
     QVariantMap data;
 
-    QList<AnnotationTableObject *> genesTables = t->getGenes();
-    data[GENE_ANNOTATION] = QVariant::fromValue(context->getDataStorage()->putAnnotationTables(genesTables));
-    qDeleteAll(genesTables);
+    AnnotationTableObject * genesTable = task->getGenes();
+    data[GENE_ANNOTATION] = QVariant::fromValue(context->getDataStorage()->putAnnotationTable(genesTable));
 
-    QList<AnnotationTableObject *> peaksTables = t->getPeaks();
-    data[PEAK_ANNOTATION] = QVariant::fromValue(context->getDataStorage()->putAnnotationTables(peaksTables));
-    qDeleteAll(peaksTables);
+    AnnotationTableObject * peaksTable = task->getPeaks();
+    data[PEAK_ANNOTATION] = QVariant::fromValue(context->getDataStorage()->putAnnotationTable(peaksTable));
+
+    data[GENE_ANNOTATION_URL] = task->getGenesUrl();
+    data[PEAK_ANNOTATION_URL] = task->getPeaksUrl();
 
     output->put(Message(output->getBusType(), data));
 
@@ -141,7 +145,7 @@ void Peak2GeneWorker::sl_taskFinished() {
     }
 }
 
-U2::Peak2GeneSettings Peak2GeneWorker::createPeak2GeneSettings( U2OpStatus &os ){
+Peak2GeneSettings Peak2GeneWorker::createPeak2GeneSettings(U2OpStatus &os) {
     Q_UNUSED(os);
     Peak2GeneSettings settings;
 
@@ -207,21 +211,28 @@ void Peak2GeneWorkerFactory::init() {
     Descriptor geneRegDesc(GENE_ANNOTATION,
         Peak2GeneWorker::tr("Gene regions"),
         Peak2GeneWorker::tr("Annotation for each gene, containing all the peaks nearby."));
-    Descriptor peakRegDescr(PEAK_ANNOTATION,
+    Descriptor peakRegDesc(PEAK_ANNOTATION,
         Peak2GeneWorker::tr("Peak regions"),
         Peak2GeneWorker::tr("Annotation for each peak, containing all the genes nearby."));
+    Descriptor geneRegUrlDesc(GENE_ANNOTATION_URL,
+        Peak2GeneWorker::tr("Gene regions URL"),
+        Peak2GeneWorker::tr("URL to file with annotation for each gene, containing all the peaks nearby."));
+    Descriptor peakRegUrlDesc(PEAK_ANNOTATION_URL,
+        Peak2GeneWorker::tr("Peak regions URL"),
+        Peak2GeneWorker::tr("URL to file with annotation for each peak, containing all the genes nearby."));
 
     Descriptor outPortDesc(OUT_PORT_DESCR,
         Peak2GeneWorker::tr("Peak2gene output data"),
         Peak2GeneWorker::tr("Genes containing all the peaks nearby and peaks containing all the genes nearby."));
 
     outTypeMap[geneRegDesc] = BaseTypes::ANNOTATION_TABLE_TYPE();
-    outTypeMap[peakRegDescr] = BaseTypes::ANNOTATION_TABLE_TYPE();
+    outTypeMap[peakRegDesc] = BaseTypes::ANNOTATION_TABLE_TYPE();
+    outTypeMap[geneRegUrlDesc] = BaseTypes::STRING_TYPE();
+    outTypeMap[peakRegUrlDesc] = BaseTypes::STRING_TYPE();
 
     DataTypePtr outTypeSet(new MapDataType(OUT_TYPE_ID, outTypeMap));
     portDescs << new PortDescriptor(outPortDesc, outTypeSet, false, true);
 
-
      QList<Attribute*> attrs;
      {
          Descriptor outpos(OUTPOS,
diff --git a/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp
new file mode 100644
index 0000000..79d471d
--- /dev/null
+++ b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp
@@ -0,0 +1,94 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/IOAdapter.h>
+#include <U2Core/L10n.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "TabulatedFormatReader.h"
+
+namespace U2 {
+
+TabulatedFormatReader::TabulatedFormatReader(U2OpStatus &os, IOAdapter *ioAdapter) :
+    ioAdapter(ioAdapter),
+    currentLine(0)
+{
+    CHECK_EXT(NULL != ioAdapter, os.setError(L10N::nullPointerError("IO adapter")), );
+    CHECK_EXT(ioAdapter->isOpen(), os.setError(tr("IO adapter is not opened")), );
+
+    readNextLine();
+}
+
+bool TabulatedFormatReader::hasNextLine() const {
+    return !storedLine.isEmpty();
+}
+
+QStringList TabulatedFormatReader::getNextLine() {
+    QStringList line = storedLine;
+    readNextLine();
+    return line;
+}
+
+qint64 TabulatedFormatReader::getCurrentLineNumber() const {
+    return currentLine;
+}
+
+const QStringList & TabulatedFormatReader::getComments() const {
+    return comments;
+}
+
+void TabulatedFormatReader::readNextLine() {
+    storedLine.clear();
+
+    do {
+        const QString line = read();
+        CHECK(!line.isEmpty(), );
+        storeLine(line);
+    } while (storedLine.isEmpty() && !ioAdapter->isEof());
+}
+
+QString TabulatedFormatReader::read() {
+    int len = 0;
+    bool terminatorFound = false;
+    QString line;
+    do {
+        len = ioAdapter->readLine(buffer, BUFFER_SIZE - 1, &terminatorFound);
+        buffer[len] = '\0';
+        line += buffer;
+    } while (len == BUFFER_SIZE - 1 && !terminatorFound);
+    return line;
+}
+
+bool TabulatedFormatReader::isComment(const QString &line) {
+    return line.startsWith('#');
+}
+
+void TabulatedFormatReader::storeLine(const QString &line) {
+    if (isComment(line)) {
+        comments << line;
+    } else {
+        storedLine = line.split('\t');
+    }
+    currentLine++;
+}
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
similarity index 55%
rename from src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
rename to src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
index e3ecea3..dcc9ae2 100644
--- a/src/plugins/GUITestBase/src/api/private/GTMenuPrivateMac.h
+++ b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
@@ -19,31 +19,42 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_GT_MENU_PRIVATE_MAC_H_
-#define _U2_GT_MENU_PRIVATE_MAC_H_
+#ifndef _U2_TABULATED_FORMAT_READER_H_
+#define _U2_TABULATED_FORMAT_READER_H_
 
-
-#ifdef __OBJC__
-#import <AppKit/AppKit.h>
-#endif // __OBJC__
-
-#include "api/GTGlobals.h"
+#include <QObject>
 
 namespace U2 {
 
-/**
- * It is supposed that Cocoa is used on OSX
- */
-class GTMenuPrivateMac {
+class IOAdapter;
+class U2OpStatus;
+
+class TabulatedFormatReader : public QObject {
 public:
-    static void clickMainMenuItem(U2OpStatus &os, const QStringList &itemPath);
+    TabulatedFormatReader(U2OpStatus &os, IOAdapter *ioAdapter);
+
+    bool hasNextLine() const;
+    QStringList getNextLine();
+    qint64 getCurrentLineNumber() const;
+
+    const QStringList &getComments() const;
 
 private:
-#ifdef __OBJC__
-    static NSMenu *clickMenuItem(U2OpStatus &os, NSMenu *menu, const QString &itemTitle);
-#endif // __OBJC__
+    void readNextLine();
+    QString read();
+    static bool isComment(const QString &line);
+    void storeLine(const QString &line);
+
+    IOAdapter *ioAdapter;
+
+    QStringList storedLine;
+    QStringList comments;
+
+    static const int BUFFER_SIZE = 4096;
+    char buffer[BUFFER_SIZE];
+    qint64 currentLine;
 };
 
 }   // namespace U2
 
-#endif // _U2_GT_MENU_PRIVATE_MAC_H_
+#endif // _U2_TABULATED_FORMAT_READER_H_
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
index a1e8bd5..e863a61 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
@@ -51,7 +51,7 @@ const QString SeqPosTask::BASE_SUBDIR_NAME("SeqPos");
 const QString SeqPosTask::TREAT_NAME("treatment");
 
 SeqPosTask::SeqPosTask(const SeqPosSettings& _settings, Workflow::DbiDataStorage *storage, const QList<Workflow::SharedDbiDataHandler> &_treatAnn)
-: ExternalToolSupportTask("SeqPos annotation", TaskFlag_None)
+: ExternalToolSupportTask("SeqPos annotation", TaskFlag_CollectChildrenWarnings)
 , settings(_settings)
 , storage(storage)
 , treatAnn(_treatAnn)
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
index d0e448f..9453488 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
@@ -117,7 +117,7 @@ void SeqPosWorker::sl_taskFinished() {
 
     const QStringList& resFileNames = t->getOutputFiles();
     foreach(const QString& fn, resFileNames){
-        context->getMonitor()->addOutputFile(fn, getActor()->getId());
+        context->getMonitor()->addOutputFile(fn, getActor()->getId(), true);
     }
 
     if (inChannel->isEnded() && !inChannel->hasMessage()) {
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
index 196dd2c..afcedc1 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
@@ -23,6 +23,7 @@
 #include "java/JavaSupport.h"
 
 #include <U2Core/AppContext.h>
+#include <U2Core/AppResources.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/DataPathRegistry.h>
 #include <U2Core/U2SafePoints.h>
@@ -51,11 +52,16 @@ SnpEffSupport::SnpEffSupport(const QString& name, const QString& path) : Externa
     validationArguments << "-h";
     toolKitName = "SnpEff";
 
-
     toolRunnerProgramm = ET_JAVA;
     dependencies << ET_JAVA;
+}
 
-
+const QStringList SnpEffSupport::getToolRunnerAdditionalOptions() {
+    QStringList result;
+    AppResourcePool* s = AppContext::getAppSettings()->getAppResourcePool();
+    CHECK(s != NULL, result);
+    result << "-Xmx" + QString::number(s->getMaxMemorySizeInMB()) + "M";
+    return result;
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
index 0399c81..c4079d4 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
@@ -32,7 +32,8 @@ class SnpEffSupport : public ExternalTool {
     Q_OBJECT
 public:
     SnpEffSupport(const QString& name, const QString& path = "");
-
+    
+    const QStringList getToolRunnerAdditionalOptions();
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
index 16f91a4..6164323 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
@@ -90,7 +90,7 @@ QString SnpEffPrompter::composeRichDoc() {
 ////////////////////////////////////////
 //SnpEffFactory
 void SnpEffFactory::init() {
-    Descriptor desc( ACTOR_ID, SnpEffWorker::tr("SnpEff annotation and filtration"),
+    Descriptor desc( ACTOR_ID, SnpEffWorker::tr("SnpEff Annotation and Filtration"),
         SnpEffWorker::tr("Annotates and filters variations with SnpEff.") );
 
     QList<PortDescriptor*> p;
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
index 442f8e1..3d3330e 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
@@ -48,7 +48,7 @@ TCoffeeSupportRunDialog::TCoffeeSupportRunDialog(TCoffeeSupportTaskSettings& _se
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126853");
+    new HelpButton(this, buttonBox, "17466251");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -79,7 +79,7 @@ TCoffeeWithExtFileSpecifySupportRunDialog::TCoffeeWithExtFileSpecifySupportRunDi
         QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126853");
+    new HelpButton(this, buttonBox, "17466251");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
index e9a2933..70fc511 100644
--- a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
@@ -93,8 +93,6 @@ bool BlastDBSelectorWidgetController::validateDatabaseDir() {
     } else {
         extList << "pal" << "pin";
     }
-    bool indexFound = false;
-    int hits = 0;
     QDirIterator dirIt(databasePathLineEdit->text(), QDirIterator::Subdirectories);
     while (dirIt.hasNext()) {
         dirIt.next();
diff --git a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
index 6382ff9..688ce1f 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, "16126849");
+    new HelpButton(this, buttonBox, "17466247");
     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/BlastTaskSettings.cpp b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
index 372b72b..acd5407 100644
--- a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
@@ -64,6 +64,7 @@ void BlastTaskSettings::reset() {
     isDefaultThreshold=true;
     isSequenceCircular=false;
     directStrand = TriState_Unknown;
+    querySequenceObject = NULL;
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
index 9c08cca..2d55550 100644
--- a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
+++ b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
@@ -143,6 +143,8 @@ public:
     int                     offsInGlobalSeq;
     TriState                directStrand;
 
+    // service settings
+    U2SequenceObject *querySequenceObject; // can be NULL
 };
 }
 #endif // _U2_BLAST_TASK_SETTINGS_H
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
index cab547e..8d4c098 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
@@ -152,7 +152,7 @@ void VcfConsensusWorkerFactory::init() {
     }
 
     Descriptor desc(ACTOR_ID,
-                    VcfConsensusWorker::tr("Create VCF consensus"),
+                    VcfConsensusWorker::tr("Create VCF Consensus"),
                     VcfConsensusWorker::tr("Apply VCF variants to a fasta file to create consensus sequence."));
     ActorPrototype *proto = new IntegralBusActorPrototype(desc, ports, attrs);
     proto->setPrompter(new VcfConsensusPrompter());
diff --git a/src/plugins/external_tool_support/transl/english.ts b/src/plugins/external_tool_support/transl/english.ts
index 9361a96..a1ebe17 100644
--- a/src/plugins/external_tool_support/transl/english.ts
+++ b/src/plugins/external_tool_support/transl/english.ts
@@ -2462,17 +2462,17 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BlastAllSupportMultiTask</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="655"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="660"/>
         <source>Source file</source>
         <translation>Source file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="656"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="661"/>
         <source>Used databse</source>
         <translation>Used database</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="658"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="663"/>
         <source>No any results found</source>
         <translation>No any results found</translation>
     </message>
@@ -2506,112 +2506,117 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BlastAllSupportTask</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="76"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="61"/>
+        <source>A problem occurred during doing BLAST. The sequence is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
         <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
         <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="86"/>
         <source>Can not create directory for temporary files.</source>
         <translation>Can not create directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="94"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="99"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="205"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="210"/>
         <source>Output file not found</source>
         <translation>Output file not found</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="207"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="212"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="253"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="258"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Can not remove directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="288"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="298"/>
         <source>Can't get location. Start position is absent in [%1]</source>
         <translation>Can't get location. Start position is absent in [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="298"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="303"/>
         <source>Can't get location. End position is absent in [%1]</source>
         <translation>Can't get location. End position is absent in [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="317"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="322"/>
         <source>Can't get hit start location from [%1]</source>
         <translation>Can't get hit start location from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="322"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="327"/>
         <source>Can't get hit end location from [%1]</source>
         <translation>Can't get hit end location from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="352"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="357"/>
         <source>Can't get align length from [%1]</source>
         <translation>Can't get align length from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="357"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="362"/>
         <source>Can't get gaps from [%1]</source>
         <translation>Can't get gaps from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="362"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="367"/>
         <source>Can't get identity from [%1]</source>
         <translation>Can't get identity from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="391"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="396"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="453"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="458"/>
         <source>Can't get Hsp_query-from element</source>
         <translation>Can't get Hsp_query-from element</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="460"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="465"/>
         <source>Can't get Hsp_query-to element</source>
         <translation>Can't get Hsp_query-to element</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="483"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="488"/>
         <source>Can't get location. Hsp_query-frame[%1]</source>
         <translation>Can't get location. Hsp_query-frame[%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="493"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="498"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="501"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="506"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="509"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="514"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="522"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="527"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
@@ -2648,7 +2653,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>Wrong input file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="299"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="300"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
@@ -2693,7 +2698,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation type="unfinished">Select a database file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="110"/>
+        <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="108"/>
         <source>No alias or index file found for selected database.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2732,96 +2737,101 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BlastPlusSupportCommonTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="89"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="69"/>
+        <source>A problem occurred during doing BLAST+. The sequence is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="93"/>
         <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
         <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="94"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="98"/>
         <source>Can not create directory for temporary files.</source>
         <translation>Can not create directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="107"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="111"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="151"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="155"/>
         <source>Output file not found</source>
         <translation>Output file not found</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="153"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="157"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="182"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="207"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="186"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="211"/>
         <source>There were no hits found for your BLAST search.</source>
         <translation>There were no hits found for your BLAST search.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="199"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="203"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Can not remove directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="240"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="244"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="245"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="250"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="405"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="412"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="429"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="249"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="254"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="409"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="416"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="433"/>
         <source>Can't get location</source>
         <translation>Can't get location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="262"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="268"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="273"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="272"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="277"/>
         <source>Can't get hit location</source>
         <translation>Can't get hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="289"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="293"/>
         <source>Can't evaluate hit location</source>
         <translation>Can't evaluate hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="303"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="455"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="307"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="459"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="308"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="447"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="312"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="451"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="439"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="317"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="443"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="342"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="350"/>
         <source>Can't read output file</source>
         <translation>Can't read output file</translation>
     </message>
@@ -2855,7 +2865,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="398"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -2865,7 +2875,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>Sequence object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="396"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
         <source>Path for BLAST+ %1 tool not selected.</source>
         <translation>Path for BLAST+ %1 tool not selected.</translation>
     </message>
@@ -2873,17 +2883,17 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BlastPlusSupportMultiTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="609"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="613"/>
         <source>Source file</source>
         <translation>Source file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="610"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="614"/>
         <source>Used databse</source>
         <translation>Used database</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="612"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="616"/>
         <source>No any results found</source>
         <translation>No any results found</translation>
     </message>
@@ -2956,17 +2966,17 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>This file does not contain sequences.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="379"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="380"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="414"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="415"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Path for <i>BLAST+ %1</i> tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="448"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="449"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
@@ -3333,12 +3343,12 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Align with ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="157"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="159"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -8314,8 +8324,8 @@ Default: 64.</translation>
     <name>U2::LocalWorkflow::SlopbedWorker</name>
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="89"/>
-        <source>Slopbed</source>
-        <translation>Slopbed</translation>
+        <source>slopBed</source>
+        <translation>slopBed</translation>
     </message>
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="90"/>
@@ -8497,8 +8507,8 @@ Default: 64.</translation>
     <name>U2::LocalWorkflow::SnpEffWorker</name>
     <message>
         <location filename="../src/snpeff/SnpEffWorker.cpp" line="93"/>
-        <source>SnpEff annotation and filtration</source>
-        <translation>SnpEff annotation and filtration</translation>
+        <source>SnpEff Annotation and Filtration</source>
+        <translation>SnpEff Annotation and Filtration</translation>
     </message>
     <message>
         <location filename="../src/snpeff/SnpEffWorker.cpp" line="94"/>
@@ -9342,8 +9352,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/vcftools/VcfConsensusWorker.cpp" line="155"/>
-        <source>Create VCF consensus</source>
-        <translation>Create VCF consensus</translation>
+        <source>Create VCF Consensus</source>
+        <translation>Create VCF Consensus</translation>
     </message>
     <message>
         <location filename="../src/vcftools/VcfConsensusWorker.cpp" line="156"/>
@@ -9985,7 +9995,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::SnpEffSupport</name>
     <message>
-        <location filename="../src/snpeff/SnpEffSupport.cpp" line="48"/>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
         <source><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</source>
         <translation><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</translation>
     </message>
diff --git a/src/plugins/external_tool_support/transl/russian.ts b/src/plugins/external_tool_support/transl/russian.ts
index b3d59e5..134fac7 100644
--- a/src/plugins/external_tool_support/transl/russian.ts
+++ b/src/plugins/external_tool_support/transl/russian.ts
@@ -2176,7 +2176,7 @@ Uncheck to get the maximum likelihood estimate.</source>
     <message>
         <location filename="../src/cufflinks/GffreadWorker.cpp" line="218"/>
         <source>Extract Transcript Sequences with gffread</source>
-        <translation>Извлечь последовательности транскриптов с помощью gffread</translation>
+        <translation>Извлечение последовательностей транскриптов с помощью gffread</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/GffreadWorker.cpp" line="219"/>
@@ -2459,17 +2459,17 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BlastAllSupportMultiTask</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="655"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="660"/>
         <source>Source file</source>
         <translation>Исходный файл</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="656"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="661"/>
         <source>Used databse</source>
         <translation>Используемая база данных</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="658"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="663"/>
         <source>No any results found</source>
         <translation>Результатов не найдено</translation>
     </message>
@@ -2503,112 +2503,117 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BlastAllSupportTask</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="76"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="61"/>
+        <source>A problem occurred during doing BLAST. The sequence is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
         <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
         <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="86"/>
         <source>Can not create directory for temporary files.</source>
         <translation>Не удаётся создать директорию для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="94"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="99"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="205"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="210"/>
         <source>Output file not found</source>
         <translation>Выходной файл не найден</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="207"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="212"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="253"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="258"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Can not remove directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="288"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="298"/>
         <source>Can't get location. Start position is absent in [%1]</source>
         <translation>Can't get location. Start position is absent in [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="298"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="303"/>
         <source>Can't get location. End position is absent in [%1]</source>
         <translation>Can't get location. End position is absent in [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="317"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="322"/>
         <source>Can't get hit start location from [%1]</source>
         <translation>Can't get hit start location from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="322"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="327"/>
         <source>Can't get hit end location from [%1]</source>
         <translation>Can't get hit end location from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="352"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="357"/>
         <source>Can't get align length from [%1]</source>
         <translation>Can't get align length from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="357"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="362"/>
         <source>Can't get gaps from [%1]</source>
         <translation>Can't get gaps from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="362"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="367"/>
         <source>Can't get identity from [%1]</source>
         <translation>Can't get identity from [%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="391"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="396"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="453"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="458"/>
         <source>Can't get Hsp_query-from element</source>
         <translation>Can't get Hsp_query-from element</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="460"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="465"/>
         <source>Can't get Hsp_query-to element</source>
         <translation>Can't get Hsp_query-to element</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="483"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="488"/>
         <source>Can't get location. Hsp_query-frame[%1]</source>
         <translation>Can't get location. Hsp_query-frame[%1]</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="493"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="498"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="501"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="506"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="509"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="514"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportTask.cpp" line="522"/>
+        <location filename="../src/blast/BlastAllSupportTask.cpp" line="527"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
@@ -2645,7 +2650,7 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation>Неверный входной файл</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="299"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="300"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
@@ -2690,7 +2695,7 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation type="unfinished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="110"/>
+        <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="108"/>
         <source>No alias or index file found for selected database.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2729,96 +2734,101 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BlastPlusSupportCommonTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="89"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="69"/>
+        <source>A problem occurred during doing BLAST+. The sequence is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="93"/>
         <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
         <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="94"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="98"/>
         <source>Can not create directory for temporary files.</source>
         <translation>Не удаётся создать директорию для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="107"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="111"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="151"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="155"/>
         <source>Output file not found</source>
         <translation>Выходной файл не найден</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="153"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="157"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="182"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="207"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="186"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="211"/>
         <source>There were no hits found for your BLAST search.</source>
         <translation>There were no hits found for your BLAST search.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="199"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="203"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Can not remove directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="240"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="244"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="245"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="250"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="405"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="412"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="429"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="249"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="254"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="409"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="416"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="433"/>
         <source>Can't get location</source>
         <translation>Can't get location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="262"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="268"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="273"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="272"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="277"/>
         <source>Can't get hit location</source>
         <translation>Can't get hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="289"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="293"/>
         <source>Can't evaluate hit location</source>
         <translation>Can't evaluate hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="303"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="455"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="307"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="459"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="308"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="447"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="312"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="451"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="439"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="317"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="443"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="342"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="350"/>
         <source>Can't read output file</source>
         <translation>Can't read output file</translation>
     </message>
@@ -2852,7 +2862,7 @@ Uncheck to get the maximum likelihood estimate.</source>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="398"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -2862,7 +2872,7 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation>Sequence object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="396"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
         <source>Path for BLAST+ %1 tool not selected.</source>
         <translation>Путь для BLAST+ %1 не установлен.</translation>
     </message>
@@ -2870,17 +2880,17 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BlastPlusSupportMultiTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="609"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="613"/>
         <source>Source file</source>
         <translation>Исходный файл</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="610"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="614"/>
         <source>Used databse</source>
         <translation>Используемая база данных</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="612"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="616"/>
         <source>No any results found</source>
         <translation>Результатов не найдено</translation>
     </message>
@@ -2953,17 +2963,17 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation>Этот файл не содержит последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="379"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="380"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="414"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="415"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Путь до <i>BLAST+ %1</i> не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="448"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="449"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
@@ -3330,12 +3340,12 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Выравнивание с помощью ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="157"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="159"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -4411,12 +4421,12 @@ To save under other name press 'Cancel' and change name in 'Resul
     <message>
         <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="95"/>
         <source>Convert bedGraph Files to bigWig</source>
-        <translation>Конвертирует файлы bedGraph в bigWig</translation>
+        <translation>Преобразование файлов bedGraph в bigWig</translation>
     </message>
     <message>
         <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="96"/>
         <source>Convert bedGraph Files to bigWig.</source>
-        <translation>Конвертирует файлы bedGraph в bigWig.</translation>
+        <translation>Преобразование файлов bedGraph в bigWig.</translation>
     </message>
     <message>
         <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="100"/>
@@ -5156,7 +5166,7 @@ other in a concordant alignment.</source>
     <message>
         <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="224"/>
         <source>Align Reads with Bowtie2</source>
-        <translation>Выравнивание при помощи Bowtie2</translation>
+        <translation>Выравнивание с помощью Bowtie2</translation>
     </message>
     <message>
         <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="225"/>
@@ -5333,7 +5343,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/bowtie/BowtieWorker.cpp" line="252"/>
         <source>Align Reads with Bowtie</source>
-        <translation>Выравнивание при помощи Bowtie</translation>
+        <translation>Выравнивание с помощью Bowtie</translation>
     </message>
     <message>
         <location filename="../src/bowtie/BowtieWorker.cpp" line="253"/>
@@ -5522,7 +5532,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/bwa/BwaMemWorker.cpp" line="256"/>
         <source>Align Reads with BWA MEM</source>
-        <translation>Выравнивание при помощи BWA MEM</translation>
+        <translation>Выравнивание с помощью BWA MEM</translation>
     </message>
     <message>
         <location filename="../src/bwa/BwaMemWorker.cpp" line="257"/>
@@ -5741,7 +5751,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/bwa/BwaWorker.cpp" line="286"/>
         <source>Align Reads with BWA</source>
-        <translation>Выравнивание при помощи BWA</translation>
+        <translation>Выравнивание с помощью BWA</translation>
     </message>
     <message>
         <location filename="../src/bwa/BwaWorker.cpp" line="287"/>
@@ -5782,7 +5792,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="106"/>
         <source>Assembly Sequences with CAP3</source>
-        <translation>Выравнивание CAP3</translation>
+        <translation>Выравнивание с помощью CAP3</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="111"/>
@@ -6113,7 +6123,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/ceas/CEASReportWorker.cpp" line="353"/>
         <source>Create CEAS Report</source>
-        <translation>Создать отчет CEAS</translation>
+        <translation>Создание отчета CEAS</translation>
     </message>
     <message>
         <location filename="../src/ceas/CEASReportWorker.cpp" line="354"/>
@@ -6219,7 +6229,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="96"/>
         <source>Align with ClustalO</source>
-        <translation>Выравнивание ClustalO</translation>
+        <translation>Выравнивание с помощью ClustalO</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="97"/>
@@ -6603,7 +6613,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="265"/>
         <source>Build Conservation Plot</source>
-        <translation>Построить консервативный график</translation>
+        <translation>Построение графика уровня консервативности последовательности</translation>
     </message>
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="266"/>
@@ -6616,7 +6626,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="93"/>
         <source>Test for Diff. Expression with Cuffdiff</source>
-        <translation>Тест для дифференциального выражения с Cuffdiff</translation>
+        <translation>Поиск транскриптов с дифференциальной экспрессией с помощью Cuffdiff</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="107"/>
@@ -6839,7 +6849,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="134"/>
         <source>Assembly Transcripts with Cufflinks</source>
-        <translation>Сборка транскрипций при помощи Cufflinks</translation>
+        <translation>Сборка транскрипций с помощью Cufflinks</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="135"/>
@@ -6967,7 +6977,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="63"/>
         <source>Merge Assemblies with Cuffmerge</source>
-        <translation>Соединяет сборки при помощи Cuffmerge</translation>
+        <translation>Соединение сборок с помощью Cuffmerge</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="64"/>
@@ -7102,7 +7112,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cutadapt/CutadaptWorker.cpp" line="92"/>
         <source>Cut Adapter</source>
-        <translation>Обрезание адаптеров</translation>
+        <translation>Удаление адаптеров</translation>
     </message>
     <message>
         <location filename="../src/cutadapt/CutadaptWorker.cpp" line="93"/>
@@ -7228,7 +7238,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/fastqc/FastqcWorker.cpp" line="86"/>
         <source>FastQC Quality Control</source>
-        <translation>Контроль качества FastQC</translation>
+        <translation>Контроль качества (FastQC)</translation>
     </message>
     <message>
         <location filename="../src/fastqc/FastqcWorker.cpp" line="87"/>
@@ -7332,7 +7342,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="477"/>
         <source>Genome Coverage</source>
-        <translation>Покрытие генома</translation>
+        <translation>Расчет покрытия генома</translation>
     </message>
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="478"/>
@@ -7894,7 +7904,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="548"/>
         <source>Find Peaks with MACS</source>
-        <translation>Поиск пиков при помощи MACS</translation>
+        <translation>Поиск пиков с помощью MACS</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="549"/>
@@ -8121,7 +8131,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="296"/>
         <source>Annotate Peaks with peak2gene</source>
-        <translation>Аннотировать пики при помощи peak2gene</translation>
+        <translation>Аннотация пиков с помощью peak2gene</translation>
     </message>
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="297"/>
@@ -8271,7 +8281,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="330"/>
         <source>Collect Motifs with SeqPos</source>
-        <translation>Сбор мотивов при помощи SeqPos</translation>
+        <translation>Сбор мотивов с помощью SeqPos</translation>
     </message>
 </context>
 <context>
@@ -8319,8 +8329,8 @@ bowtie медленнее, когда указан режим --best.</translati
     <name>U2::LocalWorkflow::SlopbedWorker</name>
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="89"/>
-        <source>Slopbed</source>
-        <translation>Slopbed</translation>
+        <source>slopBed</source>
+        <translation>Продление аннотаций (slopBed)</translation>
     </message>
     <message>
         <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="90"/>
@@ -8499,8 +8509,8 @@ bowtie медленнее, когда указан режим --best.</translati
     <name>U2::LocalWorkflow::SnpEffWorker</name>
     <message>
         <location filename="../src/snpeff/SnpEffWorker.cpp" line="93"/>
-        <source>SnpEff annotation and filtration</source>
-        <translation>Аннотирование и фильтрация при помощи SnpEff</translation>
+        <source>SnpEff Annotation and Filtration</source>
+        <translation>Аннотация и фильтрация с помощью SnpEff</translation>
     </message>
     <message>
         <location filename="../src/snpeff/SnpEffWorker.cpp" line="94"/>
@@ -8772,7 +8782,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/spades/SpadesWorker.cpp" line="320"/>
         <source>Assemble genomes with SPAdes</source>
-        <translation>Сборка геномов при помощи SPAdes</translation>
+        <translation>Сборка геномов с помощью SPAdes</translation>
     </message>
     <message>
         <location filename="../src/spades/SpadesWorker.cpp" line="321"/>
@@ -8988,7 +8998,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="183"/>
         <source>Find Splice Junctions with TopHat</source>
-        <translation>Поиск сплайсинга при помощи TopHat</translation>
+        <translation>Поиск сплайсинга с помощью TopHat</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="184"/>
@@ -9343,8 +9353,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/vcftools/VcfConsensusWorker.cpp" line="155"/>
-        <source>Create VCF consensus</source>
-        <translation>Создать консенсус VCF</translation>
+        <source>Create VCF Consensus</source>
+        <translation>Создание консенсуса с помощью VCF</translation>
     </message>
     <message>
         <location filename="../src/vcftools/VcfConsensusWorker.cpp" line="156"/>
@@ -9986,7 +9996,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::SnpEffSupport</name>
     <message>
-        <location filename="../src/snpeff/SnpEffSupport.cpp" line="48"/>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
         <source><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</source>
         <translation><i>SnpEff</i>: инструмент генетического варианта аннотации и прогнозирования эффекта.</translation>
     </message>
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
index 76c285c..00bd96a 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
@@ -200,7 +200,15 @@ SearchQueryContainer::~SearchQueryContainer() {
 
 void SearchQueryContainer::append(SearchQuery *qu) {
     if (length == allocated) {
-        queries = (SearchQuery**) realloc(queries, (allocated + reallocSize)*sizeof(SearchQuery*));
+         void *reallocRetValue = realloc(queries, (allocated + reallocSize)*sizeof(SearchQuery*));
+        if (reallocRetValue == NULL) {
+            delete[] queries;
+            queries = NULL;
+            coreLog.error(QString("Unable to perform realloc() at %1:%2").arg(__FILE__).arg(__LINE__));
+            return;
+        } else {
+            queries = (SearchQuery **)reallocRetValue;
+        }
         allocated += reallocSize;
     }
 
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
index bcdfe34..4986603 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("16126580");
+const QString GenomeAlignerSettingsPageController::helpPageId = QString("17465978");
 
 GenomeAlignerSettingsPageWidget::GenomeAlignerSettingsPageWidget(GenomeAlignerSettingsPageController* ) {
     setupUi(this);
diff --git a/src/plugins/genome_aligner/transl/russian.ts b/src/plugins/genome_aligner/transl/russian.ts
index aa47069..7f6e72f 100644
--- a/src/plugins/genome_aligner/transl/russian.ts
+++ b/src/plugins/genome_aligner/transl/russian.ts
@@ -856,7 +856,7 @@ Press "Cancel" to change this parameter or the index directory.</sourc
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="350"/>
         <source>Align Reads with UGENE Genome Aligner</source>
-        <translation>Выровнять риды при помощи модуля сборки контигов UGENE</translation>
+        <translation>Выравнивание с помощью модуля сборки контигов UGENE</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="329"/>
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
index 828bac4..a7d0c47 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
@@ -45,6 +45,10 @@ const static char * RESOURCE_OPENCL_GPU_NAME = "OpenCLGpu";
 OpenCLSupportPlugin::OpenCLSupportPlugin() : Plugin(tr("OpenCL Support"),
                                                     tr("Plugin provides support for OpenCL-enabled GPUs.") ) {
     QString err_str;
+
+    OpenCLGpuRegistry* registry = AppContext::getOpenCLGpuRegistry();
+    registry->setOpenCLHelper(&openCLHelper);
+
     OpenCLSupportError err = obtainGpusInfo( err_str );
     if( err_str.isEmpty() && gpus.empty() ) {
         err_str = "No OpenCL-enabled GPUs found.";
@@ -68,6 +72,12 @@ OpenCLSupportPlugin::OpenCLSupportPlugin() : Plugin(tr("OpenCL Support"),
         AppResourcePool::instance()->registerResource( gpuResource );
     }
 }
+OpenCLSupportPlugin::~OpenCLSupportPlugin() {
+    OpenCLGpuRegistry* registry = AppContext::getOpenCLGpuRegistry();
+    CHECK(NULL != registry, );
+    registry->setOpenCLHelper(NULL);
+}
+
 
 QString OpenCLSupportPlugin::getSettingsErrorString( OpenCLSupportError err ) {
     switch(err) {
@@ -90,7 +100,6 @@ QString OpenCLSupportPlugin::getSettingsErrorString( OpenCLSupportError err ) {
 OpenCLSupportPlugin::OpenCLSupportError OpenCLSupportPlugin::obtainGpusInfo( QString & errStr )
 {
     //load driver library
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
     if (!openCLHelper.isLoaded()) {
         errStr = openCLHelper.getErrorString();
         return Error_BadDriverLib;
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
index 4f3af1f..9b77242 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
@@ -40,6 +40,7 @@ public:
     };
 
     OpenCLSupportPlugin();
+    ~OpenCLSupportPlugin();
 private:
     OpenCLSupportError obtainGpusInfo( QString & err );
     void loadGpusSettings();
@@ -50,6 +51,7 @@ private:
     static QString getSettingsErrorString( OpenCLSupportError err );
 
     QList<OpenCLGpuModel *> gpus;
+    OpenCLHelper openCLHelper;
 };
 
 }
diff --git a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
index 32d804a..2c7b86b 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("16126578");
+const QString OpenCLSupportSettingsPageController::helpPageId = QString("17465976");
 
 OpenCLSupportSettingsPageState::OpenCLSupportSettingsPageState( int num_gpus ) {
     assert( num_gpus >= 0 );
diff --git a/src/plugins/orf_marker/src/ORFDialog.cpp b/src/plugins/orf_marker/src/ORFDialog.cpp
index b1fd8b1..c68b67c 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, "16126780");
+    new HelpButton(this, buttonBox, "17466178");
 
     tabWidget->setCurrentIndex(0);
 
diff --git a/src/plugins/pcr/html/report.html b/src/plugins/pcr/html/report.html
index 6b4e273..5839c28 100644
--- a/src/plugins/pcr/html/report.html
+++ b/src/plugins/pcr/html/report.html
@@ -14,6 +14,10 @@
     .green {
         background-color: #CCFFCC;
     }
+    a {
+        text-decoration: none;
+        color: black;
+    }
 </style>
 <script type="text/javascript">
     function showContent(obj) {
@@ -23,6 +27,15 @@
         } else {
             inner.style.display = "block";
         }
+        var span = obj.parentNode.getElementsByTagName("span")[0];
+        if (span.className == "span-closed") {
+            span.innerHTML = "▾";
+            span.className = "span-opened";
+        } else {
+            span.innerHTML = "▸";
+            span.className = "span-closed";
+        }
+
     }
 </script></head>
 <body>
diff --git a/src/plugins/pcr/src/EditPrimerDialog.cpp b/src/plugins/pcr/src/EditPrimerDialog.cpp
index 394c502..58739b3 100644
--- a/src/plugins/pcr/src/EditPrimerDialog.cpp
+++ b/src/plugins/pcr/src/EditPrimerDialog.cpp
@@ -50,7 +50,7 @@ EditPrimerDialog::EditPrimerDialog(QWidget *parent, const Primer &editToPrimer)
 void EditPrimerDialog::init() {
     GCOUNTER(cvar, tvar, "Add primer in library");
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126879");
+    new HelpButton(this, buttonBox, "17466277");
 
     primerEdit->setValidator(new QRegExpValidator(QRegExp("[acgtACGT]+")));
     connect(primerEdit, SIGNAL(textEdited(const QString &)), SLOT(sl_onPrimerChanged(const QString &)));
diff --git a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
index d7c84ea..8e5ab70 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 = "16126877";
+const QString InSilicoPcrOPWidgetFactory::GROUP_DOC_PAGE = "17466275";
 
 InSilicoPcrOPWidgetFactory::InSilicoPcrOPWidgetFactory()
 : OPWidgetFactory()
diff --git a/src/plugins/pcr/src/InSilicoPcrWorker.cpp b/src/plugins/pcr/src/InSilicoPcrWorker.cpp
index d26cbfb..ff0b0f6 100644
--- a/src/plugins/pcr/src/InSilicoPcrWorker.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrWorker.cpp
@@ -389,9 +389,9 @@ QByteArray InSilicoPcrReportTask::createReport() const {
 
 QByteArray InSilicoPcrReportTask::productsTable() const {
     QByteArray result;
-    result += "<table bordercolor=\"gray\" border=\"1\">";
+    result += "<table bordercolor=\"gray\" border=\"1\" width=\"100%\">";
     result += "<tr>";
-    result += PrimerGrouperTask::createColumn(tr("Sequence name"));
+    result += PrimerGrouperTask::createColumn(tr("Sequence name"), "width=\"20%\"");
     for (int i=0; i<primers.size(); i++) {
         result += PrimerGrouperTask::createColumn(primers[i].first.name + "<br/>" + primers[i].second.name);
     }
@@ -416,7 +416,7 @@ QByteArray InSilicoPcrReportTask::primerDetails() const {
         QPair<Primer, Primer> pair = primers[i];
         PrimersPairStatistics calc(pair.first.sequence.toLocal8Bit(), pair.second.sequence.toLocal8Bit());
         result += chapter(
-                chapterName(pair.first.name + " / " + pair.second.name),
+                chapterName("<span class=\"span-closed\">▸</span> " + pair.first.name + " / " + pair.second.name),
                 chapterContent(calc.generateReport().toLocal8Bit())
             );
     }
diff --git a/src/plugins/pcr/src/PrimerLibrarySelector.cpp b/src/plugins/pcr/src/PrimerLibrarySelector.cpp
index faa3d21..c1386d8 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, "16126877");
+    new HelpButton(this, buttonBox, "17466275");
 
     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/PrimerLibraryWidget.cpp b/src/plugins/pcr/src/PrimerLibraryWidget.cpp
index 5deeea2..0bc50d5 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, "16126879");
+    new HelpButton(this, buttonBox, "17466277");
 
     QPushButton *newPrimerButton = buttonBox->addButton(tr("New primer"), QDialogButtonBox::ActionRole);
     connect(newPrimerButton, SIGNAL(clicked()), SLOT(sl_newPrimer()));
diff --git a/src/plugins/pcr/src/PrimersDetailsDialog.cpp b/src/plugins/pcr/src/PrimersDetailsDialog.cpp
index 9b188a2..ff448b4 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, "16126878");
+    new HelpButton(this, buttonBox, "17466276");
     textEdit->setText(details);
 }
 
diff --git a/src/plugins/pcr/src/PrimersGrouperWorker.cpp b/src/plugins/pcr/src/PrimersGrouperWorker.cpp
index afac56a..a85de0f 100644
--- a/src/plugins/pcr/src/PrimersGrouperWorker.cpp
+++ b/src/plugins/pcr/src/PrimersGrouperWorker.cpp
@@ -312,12 +312,14 @@ QString PrimerGrouperTask::createRow(const QString& groupName, const QString& fo
 }
 
 QString PrimerGrouperTask::createCell(const QString& value, bool center, const QString &attrs) {
-    QString align = center ? "center" : "left";
-    return QString("<td align=\"%1\" %2>%3</td>").arg(align).arg(attrs).arg(value);
+    const QString align = center ? "center" : "left";
+    const QString attrsString = attrs.isEmpty() ? "" : " " + attrs;
+    return QString("<td align=\"%1\"%2>%3</td>").arg(align).arg(attrsString).arg(value);
 }
 
-QString PrimerGrouperTask::createColumn(const QString& name) {
-    return QString("<th width=\"20%\"/><p align=\"left\"><strong>%2</strong></p></th>").arg(name);
+QString PrimerGrouperTask::createColumn(const QString& name, const QString &attrs) {
+    const QString attrsString = attrs.isEmpty() ? "" : " " + attrs;
+    return QString("<th%1/><p align=\"left\"><strong>%2</strong></p></th>").arg(attrsString).arg(name);
 }
 
 } //U2 namespace
diff --git a/src/plugins/pcr/src/PrimersGrouperWorker.h b/src/plugins/pcr/src/PrimersGrouperWorker.h
index c2150a7..c25bcf1 100644
--- a/src/plugins/pcr/src/PrimersGrouperWorker.h
+++ b/src/plugins/pcr/src/PrimersGrouperWorker.h
@@ -79,7 +79,7 @@ public:
     QString getReport() const { return report; }
 
     static QString createCell(const QString& value, bool center = false, const QString &attrs = "");
-    static QString createColumn(const QString& name);
+    static QString createColumn(const QString& name, const QString &attrs = "");
 private:
     void createReport(const QList<QList<int> >& groups);
     void fillReportTable(const QList<QList<int> >& groups);
diff --git a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
index b662e2d..39b1119 100644
--- a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
+++ b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
@@ -60,7 +60,7 @@ ExportPrimersDialog::ExportPrimersDialog(const QList<Primer> &primers) :
     primers(primers)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126879");
+    new HelpButton(this, buttonBox, "17466277");
 
     init();
     connectSignals();
diff --git a/src/plugins/pcr/src/import/ImportPrimersDialog.cpp b/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
index a14b1df..3aa584a 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, "16126879");
+    new HelpButton(this, buttonBox, "17466277");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     init();
diff --git a/src/plugins/pcr/transl/english.ts b/src/plugins/pcr/transl/english.ts
index 25e7928..9e4bf11 100644
--- a/src/plugins/pcr/transl/english.ts
+++ b/src/plugins/pcr/transl/english.ts
@@ -450,7 +450,7 @@
 <context>
     <name>U2::InSilicoPcrOPWidgetFactory</name>
     <message>
-        <location filename="../src/InSilicoPcrOPWidgetFactory.cpp" line="48"/>
+        <location filename="../src/InSilicoPcrOPWidgetFactory.cpp" line="50"/>
         <source>In Silico PCR</source>
         <translation>In Silico PCR</translation>
     </message>
diff --git a/src/plugins/pcr/transl/russian.ts b/src/plugins/pcr/transl/russian.ts
index ac8f96a..1f8d1fe 100644
--- a/src/plugins/pcr/transl/russian.ts
+++ b/src/plugins/pcr/transl/russian.ts
@@ -450,9 +450,9 @@
 <context>
     <name>U2::InSilicoPcrOPWidgetFactory</name>
     <message>
-        <location filename="../src/InSilicoPcrOPWidgetFactory.cpp" line="48"/>
+        <location filename="../src/InSilicoPcrOPWidgetFactory.cpp" line="50"/>
         <source>In Silico PCR</source>
-        <translation>In Silico PCR</translation>
+        <translation>ПЦР in silico</translation>
     </message>
 </context>
 <context>
@@ -510,7 +510,7 @@
     <message>
         <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="207"/>
         <source>Extract In Silico PCR products</source>
-        <translation>Извлечь продукты In Silico PCR</translation>
+        <translation>Извлечь продукты ПЦР in silico</translation>
     </message>
 </context>
 <context>
@@ -761,7 +761,7 @@
     <message>
         <location filename="../src/InSilicoPcrWorker.cpp" line="139"/>
         <source>In Silico PCR</source>
-        <translation>In Silico PCR</translation>
+        <translation>ПЦР in silico</translation>
     </message>
     <message>
         <location filename="../src/InSilicoPcrWorker.cpp" line="140"/>
diff --git a/src/plugins/query_designer/src/QDRunDialog.cpp b/src/plugins/query_designer/src/QDRunDialog.cpp
index c7865f3..ce42c89 100644
--- a/src/plugins/query_designer/src/QDRunDialog.cpp
+++ b/src/plugins/query_designer/src/QDRunDialog.cpp
@@ -73,7 +73,7 @@ namespace U2 {
 QDRunDialog::QDRunDialog(QDScheme* _scheme, QWidget* parent, const QString& defaultIn, const QString& defaultOut)
 : QDialog(parent), scheme(_scheme) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126964");
+    new HelpButton(this, buttonBox, "17465892");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -265,14 +265,16 @@ QList<Task*> QDRunDialogTask::onSubTaskFinished(Task* subTask) {
             SaveDocumentTask* saveTask = new SaveDocumentTask(docWithAnnotations, SaveDoc_DestroyAfter, QSet<QString>());
             res.append(saveTask);
         } else {
+            SAFE_POINT(proj != NULL, "Project is null", res);
             Document* sameUrlDoc = proj->findDocumentByURL(url);
             if (sameUrlDoc) {
                 proj->removeDocument(sameUrlDoc);
             }
             res.append(new SaveDocumentTask(docWithAnnotations));
             res.append(new AddDocumentTask(docWithAnnotations));
-            assert(docWithSequence && docWithSequence->isLoaded());
-            if (proj && proj->getDocuments().contains(docWithSequence)) {
+            SAFE_POINT(docWithSequence , "Document is NULL", res);
+            SAFE_POINT(docWithSequence->isLoaded(), "Document is not loaded", res);
+            if (proj->getDocuments().contains(docWithSequence)) {
                 res.append(new OpenViewTask(docWithSequence));
             } else {
                 res.append(new AddDocumentTask(docWithSequence));
@@ -290,7 +292,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, "16126965");
+    new HelpButton(this, buttonBox, "17465893");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/query_designer/src/QueryViewController.cpp b/src/plugins/query_designer/src/QueryViewController.cpp
index 1f4452e..81cf67b 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, "16126949");
+    new HelpButton(this, buttonBox, "17465877");
 
     QString title = "Add %1 Constraint";
     switch (kind)
diff --git a/src/plugins/query_designer/src/library/QDGcContentActor.cpp b/src/plugins/query_designer/src/library/QDGcContentActor.cpp
index c8b3162..dea865a 100644
--- a/src/plugins/query_designer/src/library/QDGcContentActor.cpp
+++ b/src/plugins/query_designer/src/library/QDGcContentActor.cpp
@@ -165,7 +165,7 @@ Task* QDFindGcRegionsActor::getAlgorithmTask( const QVector<U2Region>& location
 
     int regionStart = cfg->getParameter(REGION_START_ATTR)->getAttributeValueWithoutScript<int>();
 
-    if (regionStart < 0 && regionStart > 100) {
+    if (regionStart < 0 || regionStart > 100) {
         QString err = tr("'%1' error. Region start parameter should be not less than 0% not higher than 100%. Setting up default value: 20%.");
         settings.gcRangeInPercents.startPos = 20;
         regionStart = 20;
diff --git a/src/plugins/query_designer/transl/english.ts b/src/plugins/query_designer/transl/english.ts
index 1baafd9..ce2f512 100644
--- a/src/plugins/query_designer/transl/english.ts
+++ b/src/plugins/query_designer/transl/english.ts
@@ -315,44 +315,44 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="294"/>
+        <location filename="../src/QDRunDialog.cpp" line="296"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="295"/>
+        <location filename="../src/QDRunDialog.cpp" line="297"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="335"/>
+        <location filename="../src/QDRunDialog.cpp" line="337"/>
         <source>Select query</source>
         <translation>Select query</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="351"/>
-        <location filename="../src/QDRunDialog.cpp" line="358"/>
+        <location filename="../src/QDRunDialog.cpp" line="353"/>
+        <location filename="../src/QDRunDialog.cpp" line="360"/>
         <source>Can not load %1</source>
         <translation>Can not load %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="388"/>
+        <location filename="../src/QDRunDialog.cpp" line="390"/>
         <source>File with query is not selected!</source>
         <translation>File with query is not selected!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="393"/>
+        <location filename="../src/QDRunDialog.cpp" line="395"/>
         <source>Error in schema!</source>
         <translation>Error in schema!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="399"/>
-        <location filename="../src/QDRunDialog.cpp" line="411"/>
+        <location filename="../src/QDRunDialog.cpp" line="401"/>
+        <location filename="../src/QDRunDialog.cpp" line="413"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="411"/>
+        <location filename="../src/QDRunDialog.cpp" line="413"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
diff --git a/src/plugins/query_designer/transl/russian.ts b/src/plugins/query_designer/transl/russian.ts
index 246d74e..f808f95 100644
--- a/src/plugins/query_designer/transl/russian.ts
+++ b/src/plugins/query_designer/transl/russian.ts
@@ -299,7 +299,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/QDWorker.cpp" line="100"/>
         <source>Annotate with UQL</source>
-        <translation>Аннотирование при помощи UQL</translation>
+        <translation>Аннотирование с помощью UQL</translation>
     </message>
     <message>
         <location filename="../src/QDWorker.cpp" line="101"/>
@@ -315,44 +315,44 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="294"/>
+        <location filename="../src/QDRunDialog.cpp" line="296"/>
         <source>Search</source>
         <translation>Искать</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="295"/>
+        <location filename="../src/QDRunDialog.cpp" line="297"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="335"/>
+        <location filename="../src/QDRunDialog.cpp" line="337"/>
         <source>Select query</source>
         <translation>Выбор схемы запроса</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="351"/>
-        <location filename="../src/QDRunDialog.cpp" line="358"/>
+        <location filename="../src/QDRunDialog.cpp" line="353"/>
+        <location filename="../src/QDRunDialog.cpp" line="360"/>
         <source>Can not load %1</source>
         <translation>Не удаётся загрузить схему %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="388"/>
+        <location filename="../src/QDRunDialog.cpp" line="390"/>
         <source>File with query is not selected!</source>
         <translation>Не выбран файл схемы!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="393"/>
+        <location filename="../src/QDRunDialog.cpp" line="395"/>
         <source>Error in schema!</source>
         <translation>Ошибка в схеме!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="399"/>
-        <location filename="../src/QDRunDialog.cpp" line="411"/>
+        <location filename="../src/QDRunDialog.cpp" line="401"/>
+        <location filename="../src/QDRunDialog.cpp" line="413"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="411"/>
+        <location filename="../src/QDRunDialog.cpp" line="413"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
diff --git a/src/plugins/remote_blast/src/HttpRequestBLAST.cpp b/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
index ae0399e..9eb465c 100644
--- a/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
+++ b/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
@@ -62,10 +62,9 @@ QString HttpRequestBLAST::runHttpRequest(QString request){
 void HttpRequestBLAST::sendRequest(const QString &params,const QString &query) {
     QString request = host;
     request.append(params);
-    request.append("&OLD_VIEW=true");
-    request.append("&TOOL=ugene&EMAIL=ugene-ncbi-blast at unipro.ru");
-    request.append(RemoteRequestConfig::HTTP_BODY_SEPARATOR);
+    request.append("&TOOL=ugene&EMAIL=ugene-ncbi-blast at unipro.ru&");
     request.append(ReqParams::sequence + "=" + query);
+    taskLog.trace(QString("NCBI BLAST http request: %1").arg(request));
     QString response = runHttpRequest(request);
     if(response.indexOf("301 Moved Permanently") != -1) {
         int start = response.indexOf("href=") + 6;
@@ -96,6 +95,7 @@ void HttpRequestBLAST::sendRequest(const QString &params,const QString &query) {
         error = QObject::tr("Cannot get the request ID");
         return;
     }
+    taskLog.trace(QString("NCBI BLAST Request ID: %1").arg(requestID));
     QString roe = buf.readLine().split('=')[1];
     bool isOk;
     int rtoe = roe.toInt(&isOk);
@@ -104,13 +104,15 @@ void HttpRequestBLAST::sendRequest(const QString &params,const QString &query) {
         error = QObject::tr("Cannot get the waiting time");
         return;
     }
+    taskLog.trace(QString("NCBI BLAST Request Time of Execution in seconds: %1").arg(rtoe));
+    taskLog.trace(QString("NCBI BLAST to view results in web browser: %1").arg(host + "CMD=Get&RID="+requestID));
     request = host + "CMD=Get&FORMAT_TYPE=XML&RID=";
     request.append(requestID);
     buf.close();
     RemoteBlastHttpRequestTask *rTask = qobject_cast<RemoteBlastHttpRequestTask*>(task);
     int progr,timeout;
     progr = 50;
-    timeout = (rtoe + 5) * 10;
+    timeout = (rtoe + 5) * 20;// REAL timeout = 50*(rtoe + 5) * 20 = 1000*(rtoe + 5) msec
     int slowdown = 1;
     rTask->resetProgress();
 
diff --git a/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp b/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
index 5a52118..3160382 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
@@ -24,7 +24,7 @@
 namespace U2 {
 
 const QStringList ParametersLists::blastn_wordSize = QStringList() << "7" << "11" << "15";
-const QStringList ParametersLists::blastp_wordSize = QStringList() << "2" << "3";
+const QStringList ParametersLists::blastp_wordSize = QStringList() << "2" << "3" << "6";
 const QStringList ParametersLists::megablast_wordSize = QStringList() << "16" << "20" << "24"
                                                                 << "28" << "32" << "48" << "64";
 const QStringList ParametersLists::blastn_gapCost = QStringList() << "4 4" << "2 4" << "0 4"
diff --git a/src/plugins/remote_blast/src/SendSelectionDialog.cpp b/src/plugins/remote_blast/src/SendSelectionDialog.cpp
index f95ed30..32f0c87 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, "16126781");
+    new HelpButton(this, buttonBox, "17466179");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -285,7 +285,7 @@ void SendSelectionDialog::sl_scriptSelected( int index ) {
 
             wordSizeComboBox->clear();
             wordSizeComboBox->addItems(ParametersLists::blastp_wordSize);
-            wordSizeComboBox->setCurrentIndex(1);
+            wordSizeComboBox->setCurrentIndex(2); //The default value is "6".
 
             costsComboBox->clear();
             costsComboBox->addItems(ParametersLists::blastp_gapCost);
@@ -353,8 +353,10 @@ void SendSelectionDialog::sl_OK() {
         }
 
         addParametr(requestParameters,ReqParams::gapCost,costsComboBox->currentText());
-        addParametr(requestParameters,ReqParams::matchScore,scoresComboBox->currentText().split(" ").first());
-        addParametr(requestParameters,ReqParams::mismatchScore,scoresComboBox->currentText().split(" ").last());
+        if(db == "blastn"){
+            addParametr(requestParameters,ReqParams::matchScore,scoresComboBox->currentText().split(" ").first());
+            addParametr(requestParameters,ReqParams::mismatchScore,scoresComboBox->currentText().split(" ").last());
+        }
 
         if(shortSequenceCheckBox->isChecked()) {
             QString wordSize = wordSizeComboBox->currentText().toInt()>7 ? "7" : wordSizeComboBox->currentText();
diff --git a/src/plugins/remote_service/src/RemoteTasksDialog.cpp b/src/plugins/remote_service/src/RemoteTasksDialog.cpp
index 69849e9..42a9370 100644
--- a/src/plugins/remote_service/src/RemoteTasksDialog.cpp
+++ b/src/plugins/remote_service/src/RemoteTasksDialog.cpp
@@ -57,7 +57,7 @@ RemoteTasksDialog::RemoteTasksDialog(const RemoteServiceSettingsPtr& settings,QW
     refresh();
 
     updateState();
-    new HelpButton(this, buttonBox, "16126527");
+    new HelpButton(this, buttonBox, "17465925");
 
 }
 
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
index c9436d4..406379a 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
@@ -77,7 +77,7 @@ FindRepeatsDialog::FindRepeatsDialog(ADVSequenceObjectContext* _sc)
 {
     sc = _sc;
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126785");
+    new HelpButton(this, buttonBox, "17466183");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.cpp b/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
index c30f5ae..f5e1047 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, "16126786");
+    new HelpButton(this, buttonBox, "17466184");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
index 8d4acfc..a1929bd 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
@@ -26,6 +26,7 @@
 
 #include <U2Core/Log.h>
 #include <U2Core/GAutoDeleteList.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <QtCore/QString>
 #include <QtCore/QFile>
@@ -178,15 +179,16 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
     cl_uint clNumDevices = 1;
     cl_device_id deviceId = (cl_device_id) AppContext::getOpenCLGpuRegistry()->getAnyEnabledGpu()->getId();
 
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
-    if (!openCLHelper.isLoaded()) {
-        coreLog.error(openCLHelper.getErrorString());
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded", );
+    if (!openCLHelper->isLoaded()) {
+        coreLog.error(openCLHelper->getErrorString());
         return;
     }
 
     algoLog.trace("Creating a context");
 
-    clContext = openCLHelper.clCreateContext_p(0, clNumDevices, &deviceId, NULL, NULL, &err);
+    clContext = openCLHelper->clCreateContext_p(0, clNumDevices, &deviceId, NULL, NULL, &err);
     if (hasOPENCLError(err, "cl::Context() failed")) return;
 
     //*******************************
@@ -231,56 +233,56 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
     memset(static_cast<void *>(g_HdataTmp), 0, sizeRow * sizeof(ScoreType));
     memset(static_cast<void *>(g_directionsRec), 0, sizeRow * sizeof(ScoreType));
 
-    queryProfBuf = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
+    queryProfBuf = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
         sizeof(cl_int) * profLen, queryProfile, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(cl_int) * profLen / B_TO_MB_FACTOR)))) return;
 
-    seqLibProfBuf = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
+    seqLibProfBuf = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
         sizeof(char) * (_searchSeq.length() + 1), searchSeq.data(), &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(char) * (_searchSeq.length() + 1) / B_TO_MB_FACTOR)))) return;
 
-    hDataMaxBuf = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    hDataMaxBuf = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_HdataTmp, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
 
-    hDataUpBufTmp = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    hDataUpBufTmp = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_HdataTmp, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
     cl_mem* hDataUpBuf = &hDataUpBufTmp;
 
-    hDataRecBufTmp = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    hDataRecBufTmp = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_HdataTmp, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
     cl_mem* hDataRecBuf = &hDataRecBufTmp;
 
     cl_mem* hDataTmpBuf = NULL;
 
-    fDataUpBuf = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    fDataUpBuf = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_HdataTmp, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
 
-    directionsUpBufTmp = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    directionsUpBufTmp = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_directionsRec, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
     cl_mem* directionsUpBuf = &directionsUpBufTmp;
 
-    directionsRecBufTmp = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    directionsRecBufTmp = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_directionsRec, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
     cl_mem* directionsRecBuf = &directionsRecBufTmp;
 
-    directionsMaxBuf = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
+    directionsMaxBuf = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
         sizeof(ScoreType) * (sizeRow), g_directionsRec, &err);
     if (hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(ScoreType) * (sizeRow) / B_TO_MB_FACTOR)))) return;
 
     if(NULL != g_directionsMatrix) {
-        directionsMatrix = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
+        directionsMatrix = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
             sizeof(int) * queryLength * searchLen, g_directionsMatrix, &err);
         if(hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(int) * queryLength * searchLen / B_TO_MB_FACTOR)))) return;
     }
 
     if(NULL != g_backtraceBegins) {
-        backtraceBegins = openCLHelper.clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
+        backtraceBegins = openCLHelper->clCreateBuffer_p(clContext, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
             sizeof(int) * 2 * sizeRow, g_backtraceBegins, &err);
         if(hasOPENCLError(err, QString("Can't allocate %1 MB memory in GPU buffer").arg(QString::number(sizeof(int) * sizeRow * 2 / B_TO_MB_FACTOR)))) return;
     }
@@ -290,10 +292,10 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
     algoLog.trace(QString("queryLen %1 partQuerySize: %2 sizeRow: %3").arg(queryLength).arg(partQuerySize).arg(sizeRow));
 
     //open and read file contains OPENCL code
-    clProgram = OpenCLUtils::createProgramByResource(clContext, deviceId, ":src/sw_opencl.cl", openCLHelper, err);
+    clProgram = OpenCLUtils::createProgramByResource(clContext, deviceId, ":src/sw_opencl.cl", *openCLHelper, err);
     if (hasOPENCLError(err, "createProgramByResource() failed")) return;
 
-    clKernel = openCLHelper.clCreateKernel_p(clProgram, "calculateMatrix", &err);
+    clKernel = openCLHelper->clCreateKernel_p(clProgram, "calculateMatrix", &err);
     if (hasOPENCLError(err, "Kernel::Kernel() failed")) return;
 
     //************begin: set arguments****************
@@ -301,121 +303,121 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
     int n = 0;
 
     //0: seqLib
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&seqLibProfBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&seqLibProfBuf);
 
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //1: queryProfile
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&queryProfBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&queryProfBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //2: g_HdataUp
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)hDataUpBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)hDataUpBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //3: g_HdataRec
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)hDataRecBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)hDataRecBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //4: g_HdataMax
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&hDataMaxBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&hDataMaxBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //5: g_FdataUp
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&fDataUpBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&fDataUpBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
 
     //6: g_directionsUp
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)directionsUpBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)directionsUpBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //7: g_directionsRec
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)directionsRecBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)directionsRecBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //8: g_directionsMax
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&directionsMaxBuf);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (void*)&directionsMaxBuf);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //9: g_directionsMatrix
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (NULL != directionsMatrix) ? static_cast<void *>(&directionsMatrix) : NULL);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (NULL != directionsMatrix) ? static_cast<void *>(&directionsMatrix) : NULL);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //10: g_patternSubseqs
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (NULL != backtraceBegins) ? static_cast<void *>(&backtraceBegins) : NULL);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_mem), (NULL != backtraceBegins) ? static_cast<void *>(&backtraceBegins) : NULL);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //11: queryStartPos
     cl_int queryStartPos = 0;
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&queryStartPos);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&queryStartPos);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //12: partSeqSize
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partSeqSize);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partSeqSize);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //13: partsNumber
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partsNumber);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partsNumber);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //14: overlapLength
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&overlapLength);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&overlapLength);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //15: searchLen
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&searchLen);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&searchLen);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //16: queryLength
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&queryLength);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&queryLength);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //17: gapOpen
     cl_int clGapOpen = -1 * gapOpen;
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&clGapOpen);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&clGapOpen);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //18: gapExtension
     cl_int clGapExtension = -1 * gapExtension;
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&clGapExtension);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&clGapExtension);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //19: queryPartLength
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partQuerySize);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int), (void*)&partQuerySize);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //20: LEFT symbol in directionsMatrix
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&LEFT);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&LEFT);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //21: DIAG symbol in directionsMatrix
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&DIAG);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&DIAG);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //22: UP symbol in directionsMatrix
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&UP);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&UP);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //23: STOP symbol in directionMatrix
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&STOP);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_char), (void*)&STOP);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //24: shared_E
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //25: shared_direction
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //26: shared_direction
-    err = openCLHelper.clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
+    err = openCLHelper->clSetKernelArg_p(clKernel, n++, sizeof(cl_int) * partQuerySize, NULL);
     if (hasOPENCLError(err, QObject::tr("Kernel::setArg(%1) failed").arg(n))) return;
 
     //************end: set arguments****************
 
-    clCommandQueue = openCLHelper.clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
+    clCommandQueue = openCLHelper->clCreateCommandQueue_p(clContext, deviceId, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);
     if (hasOPENCLError(err, "cl::CommandQueue() failed ")) return;
 
     coreLog.details(QObject::tr("OPENCL: Running CL program"));
@@ -426,7 +428,7 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
 
 
     for (int i = 0; i < queryDevider; i++) {
-        err = openCLHelper.clEnqueueNDRangeKernel_p(
+        err = openCLHelper->clEnqueueNDRangeKernel_p(
             clCommandQueue,
             clKernel,
             1,
@@ -438,11 +440,11 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
             &clEvent);
         if (hasOPENCLError(err, "CommandQueue::enqueueNDRangeKernel() failed")) return;
 
-        err = openCLHelper.clWaitForEvents_p(1, &clEvent);
+        err = openCLHelper->clWaitForEvents_p(1, &clEvent);
         if (hasOPENCLError(err, "clWaitForEvents failed")) return;
 
         if (clEvent) {
-            err = openCLHelper.clReleaseEvent_p (clEvent);
+            err = openCLHelper->clReleaseEvent_p(clEvent);
             if (hasOPENCLError(err, "clReleaseEvent 1 failed")) return;
         }
 
@@ -456,78 +458,78 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
         directionsUpBuf = hDataTmpBuf;
 
         //g_HdataUp
-        err = openCLHelper.clSetKernelArg_p(clKernel, 2, sizeof(cl_mem), (void*)hDataUpBuf);
+        err = openCLHelper->clSetKernelArg_p(clKernel, 2, sizeof(cl_mem), (void*)hDataUpBuf);
         if (hasOPENCLError(err, "Kernel::setArg(2) failed")) return;
 
         //g_HdataRec
-        err = openCLHelper.clSetKernelArg_p(clKernel, 3, sizeof(cl_mem), (void*)hDataRecBuf);
+        err = openCLHelper->clSetKernelArg_p(clKernel, 3, sizeof(cl_mem), (void*)hDataRecBuf);
         if (hasOPENCLError(err, "Kernel::setArg(3) failed")) return;
 
         //g_directionsUp
-        err = openCLHelper.clSetKernelArg_p(clKernel, 6, sizeof(cl_mem), (void*)directionsUpBuf);
+        err = openCLHelper->clSetKernelArg_p(clKernel, 6, sizeof(cl_mem), (void*)directionsUpBuf);
         if (hasOPENCLError(err, "Kernel::setArg(6) failed")) return;
 
         //g_directionsRec
-        err = openCLHelper.clSetKernelArg_p(clKernel, 7, sizeof(cl_mem), (void*)directionsRecBuf);
+        err = openCLHelper->clSetKernelArg_p(clKernel, 7, sizeof(cl_mem), (void*)directionsRecBuf);
         if (hasOPENCLError(err, "Kernel::setArg(7) failed")) return;
 
         //queryStartPos
         queryStartPos = (i+1) * partQuerySize;
-        err = openCLHelper.clSetKernelArg_p(clKernel, 11, sizeof(cl_int), (void*)&queryStartPos);
+        err = openCLHelper->clSetKernelArg_p(clKernel, 11, sizeof(cl_int), (void*)&queryStartPos);
         if (hasOPENCLError(err, "Kernel::setArg(9) failed")) return;
     }
 
 
     //copy from platform to host
-    err = openCLHelper.clEnqueueReadBuffer_p(clCommandQueue, hDataMaxBuf, CL_FALSE, 0, sizeof(cl_int) * (sizeRow), g_HdataTmp, 0, NULL, &clEvent);
+    err = openCLHelper->clEnqueueReadBuffer_p(clCommandQueue, hDataMaxBuf, CL_FALSE, 0, sizeof(cl_int) * (sizeRow), g_HdataTmp, 0, NULL, &clEvent);
     if (hasOPENCLError(err, "clEnqueueReadBuffer failed")) return;
 
-    err = openCLHelper.clWaitForEvents_p(1, &clEvent);
+    err = openCLHelper->clWaitForEvents_p(1, &clEvent);
     if (hasOPENCLError(err, "clWaitForEvents failed")) return;
 
     if (clEvent) {
-        err = openCLHelper.clReleaseEvent_p (clEvent);
+        err = openCLHelper->clReleaseEvent_p (clEvent);
         if (hasOPENCLError(err, "clReleaseEvent 2 failed")) return;
     }
 
-    err = openCLHelper.clEnqueueReadBuffer_p(clCommandQueue, directionsMaxBuf, CL_FALSE, 0, sizeof(ScoreType) * (sizeRow), g_directionsRec, 0, NULL, &clEvent);
+    err = openCLHelper->clEnqueueReadBuffer_p(clCommandQueue, directionsMaxBuf, CL_FALSE, 0, sizeof(ScoreType) * (sizeRow), g_directionsRec, 0, NULL, &clEvent);
     if (hasOPENCLError(err, "clEnqueueReadBuffer failed")) return;
 
-    err = openCLHelper.clWaitForEvents_p(1, &clEvent);
+    err = openCLHelper->clWaitForEvents_p(1, &clEvent);
     if (hasOPENCLError(err, "clWaitForEvents failed")) return;
 
     if (clEvent) {
-        err = openCLHelper.clReleaseEvent_p (clEvent);
+        err = openCLHelper->clReleaseEvent_p (clEvent);
         if (hasOPENCLError(err, "clReleaseEvent 3 failed")) return;
     }
     if(NULL != g_directionsMatrix) {
-        err = openCLHelper.clEnqueueReadBuffer_p(clCommandQueue, directionsMatrix, CL_FALSE, 0, sizeof(int) * queryLength * searchLen,
+        err = openCLHelper->clEnqueueReadBuffer_p(clCommandQueue, directionsMatrix, CL_FALSE, 0, sizeof(int) * queryLength * searchLen,
                                                 g_directionsMatrix, 0, NULL, &clEvent);
         if (hasOPENCLError(err, "clEnqueueReadBuffer failed")) return;
 
-        err = openCLHelper.clWaitForEvents_p(1, &clEvent);
+        err = openCLHelper->clWaitForEvents_p(1, &clEvent);
         if (hasOPENCLError(err, "clWaitForEvents failed")) return;
 
         if (clEvent) {
-            err = openCLHelper.clReleaseEvent_p (clEvent);
+            err = openCLHelper->clReleaseEvent_p (clEvent);
             if (hasOPENCLError(err, "clReleaseEvent 4 failed")) return;
         }
     }
     if(NULL != g_backtraceBegins) {
-        err = openCLHelper.clEnqueueReadBuffer_p(clCommandQueue, backtraceBegins, CL_FALSE, 0, sizeof(int) * 2 * sizeRow,
+        err = openCLHelper->clEnqueueReadBuffer_p(clCommandQueue, backtraceBegins, CL_FALSE, 0, sizeof(int) * 2 * sizeRow,
             g_backtraceBegins, 0, NULL, &clEvent);
         if (hasOPENCLError(err, "clEnqueueReadBuffer failed")) return;
 
-        err = openCLHelper.clWaitForEvents_p(1, &clEvent);
+        err = openCLHelper->clWaitForEvents_p(1, &clEvent);
         if (hasOPENCLError(err, "clWaitForEvents failed")) return;
 
         if (clEvent) {
-            err = openCLHelper.clReleaseEvent_p (clEvent);
+            err = openCLHelper->clReleaseEvent_p (clEvent);
             if (hasOPENCLError(err, "clReleaseEvent 5 failed")) return;
         }
     }
 
-    err = openCLHelper.clFinish_p(clCommandQueue);
+    err = openCLHelper->clFinish_p(clCommandQueue);
     if (hasOPENCLError(err, "clFinish failed")) return;
 
     //using namespace std;
@@ -606,69 +608,70 @@ void SmithWatermanAlgorithmOPENCL::launch(const SMatrix& sm, const QByteArray &
 SmithWatermanAlgorithmOPENCL::~SmithWatermanAlgorithmOPENCL() {
     algoLog.details(QObject::tr("Starting cleanup OpenCL resources"));
 
-    const OpenCLHelper& openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    const OpenCLHelper* openCLHelper = AppContext::getOpenCLGpuRegistry()->getOpenCLHelper();
+    SAFE_POINT(NULL != openCLHelper, "OpenCL support plugin does not loaded", );
 
     cl_int err = CL_SUCCESS;
 
     if (clKernel) {
-        err = openCLHelper.clReleaseKernel_p (clKernel);
+        err = openCLHelper->clReleaseKernel_p (clKernel);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (clProgram)  {
-        err = openCLHelper.clReleaseProgram_p(clProgram);
+        err = openCLHelper->clReleaseProgram_p(clProgram);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (clCommandQueue) {
-        err = openCLHelper.clReleaseCommandQueue_p (clCommandQueue);
+        err = openCLHelper->clReleaseCommandQueue_p (clCommandQueue);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (clContext) {
-        err = openCLHelper.clReleaseContext_p(clContext);
+        err = openCLHelper->clReleaseContext_p(clContext);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
 
     if (queryProfBuf) {
-        err = openCLHelper.clReleaseMemObject_p (queryProfBuf);
+        err = openCLHelper->clReleaseMemObject_p (queryProfBuf);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (seqLibProfBuf) {
-        err = openCLHelper.clReleaseMemObject_p (seqLibProfBuf);
+        err = openCLHelper->clReleaseMemObject_p (seqLibProfBuf);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (hDataMaxBuf) {
-        err = openCLHelper.clReleaseMemObject_p (hDataMaxBuf);
+        err = openCLHelper->clReleaseMemObject_p (hDataMaxBuf);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (hDataUpBufTmp) {
-        err = openCLHelper.clReleaseMemObject_p (hDataUpBufTmp);
+        err = openCLHelper->clReleaseMemObject_p (hDataUpBufTmp);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (hDataRecBufTmp) {
-        err = openCLHelper.clReleaseMemObject_p (hDataRecBufTmp);
+        err = openCLHelper->clReleaseMemObject_p (hDataRecBufTmp);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (fDataUpBuf) {
-        err = openCLHelper.clReleaseMemObject_p (fDataUpBuf);
+        err = openCLHelper->clReleaseMemObject_p (fDataUpBuf);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (directionsUpBufTmp) {
-        err = openCLHelper.clReleaseMemObject_p (directionsUpBufTmp);
+        err = openCLHelper->clReleaseMemObject_p (directionsUpBufTmp);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (directionsRecBufTmp) {
-        err = openCLHelper.clReleaseMemObject_p (directionsRecBufTmp);
+        err = openCLHelper->clReleaseMemObject_p (directionsRecBufTmp);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if (directionsMaxBuf) {
-        err = openCLHelper.clReleaseMemObject_p (directionsMaxBuf);
+        err = openCLHelper->clReleaseMemObject_p (directionsMaxBuf);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if(directionsMatrix) {
-        err = openCLHelper.clReleaseMemObject_p(directionsMatrix);
+        err = openCLHelper->clReleaseMemObject_p(directionsMatrix);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
     if(backtraceBegins) {
-        err = openCLHelper.clReleaseMemObject_p(backtraceBegins);
+        err = openCLHelper->clReleaseMemObject_p(backtraceBegins);
         hasOPENCLError(err, "clReleaseEvent failed");
     }
 
diff --git a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
index 988680e..a4fa7d7 100644
--- a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
@@ -68,7 +68,7 @@ PWMBuildDialogController::PWMBuildDialogController(QWidget* w)
 {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126841");
+    new HelpButton(this, buttonBox, "17466239");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp b/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
index 89340a0..d050b2e 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, "16126840");
+    new HelpButton(this, buttonBox, "17466238");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp b/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
index cc0f1e5..2edb252 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, "16126839");
+    new HelpButton(this, buttonBox, "17466237");
     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/SetParametersDialogController.cpp b/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
index c41d9b4..e14c40f 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, "16126839");
+    new HelpButton(this, buttonBox, "17466237");
 
     QStringList algo = AppContext::getPWMConversionAlgorithmRegistry()->getAlgorithmIds();
     algorithmComboBox->addItems(algo);
diff --git a/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp b/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
index a8420e5..0ee3146 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, "16126841");
+    new HelpButton(this, buttonBox, "17466239");
     buttonBox->button(QDialogButtonBox::Close)->setText(tr("Close"));
 
     ml = new MatrixAndLogoController(matrix, this);
diff --git a/src/plugins/weight_matrix/transl/russian.ts b/src/plugins/weight_matrix/transl/russian.ts
index acea7a9..aec78f6 100644
--- a/src/plugins/weight_matrix/transl/russian.ts
+++ b/src/plugins/weight_matrix/transl/russian.ts
@@ -348,7 +348,7 @@
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="190"/>
         <source>Build Frequency Matrix</source>
-        <translation>Построить частотную матрицу</translation>
+        <translation>Построение частотной матрицы</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="191"/>
@@ -399,12 +399,12 @@
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="285"/>
         <source>Convert Frequency Matrix</source>
-        <translation>Конвертировать частотную матрицу</translation>
+        <translation>Преобразование частотной матрицы</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="286"/>
         <source>Converts frequency matrix to weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</source>
-        <translation>Конвертация частотной матрицы в весовую. Весовые матрицы используются для вероятностного распознавания сайтов связывания транскрипционных факторов.</translation>
+        <translation>Преобразование частотной матрицы в весовую. Весовые матрицы используются для вероятностного распознавания сайтов связывания транскрипционных факторов.</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="301"/>
@@ -507,7 +507,7 @@
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="91"/>
         <source>Build Weight Matrix</source>
-        <translation>Построить весовую матрицу</translation>
+        <translation>Построение весовой матрицы</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixBuildWorker.cpp" line="92"/>
@@ -619,7 +619,7 @@
     <message>
         <location filename="../src/WeightMatrixSearchWorker.cpp" line="92"/>
         <source>Search for TFBS with Weight Matrix</source>
-        <translation>Весовые матрицы: искать сайты связывания ТФ</translation>
+        <translation>Поиск сайтов связывания ТФ с помощью весовой матрицы</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixSearchWorker.cpp" line="93"/>
@@ -1310,7 +1310,7 @@ Maybe model data are not enough for selected algorithm</translation>
     <message>
         <location filename="../src/WeightMatrixPlugin.cpp" line="55"/>
         <source>Search for TFBS with weight matrices</source>
-        <translation>Весовые матрицы: искать сайты связывания ТФ</translation>
+        <translation>Поиск сайтов связывания ТФ с помощью весовой матрицы</translation>
     </message>
     <message>
         <location filename="../src/WeightMatrixPlugin.cpp" line="61"/>
diff --git a/src/plugins/workflow_designer/src/CreateScriptWorker.cpp b/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
index 5284fa7..1719d65 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, "16126284");
+    new HelpButton(this, buttonBox, "17466370");
 
     inputList->setModel(new CfgListModel());
     inputList->setItemDelegate(new ProxyDelegate());
diff --git a/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp b/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
index 98d5efb..5e1886d 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, "16126282");
+    new HelpButton(this, buttonBox, "17466368");
 
     setupList();
 
diff --git a/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp b/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
index 39b7350..58fede5 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, "16126296");
+    new HelpButton(this, buttonBox, "17466382");
 }
 
 void ImportSchemaDialog::accept() {
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
index 4af7c5f..7df1d79 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, "16126296");
+    new HelpButton(this, buttonBox, "17466382");
 
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
index e6f364a..f6f6004 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, "16126296");
+    new HelpButton(this, buttonBox, "17466382");
 
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/workflow_designer/src/StartupDialog.cpp b/src/plugins/workflow_designer/src/StartupDialog.cpp
index 36d8dcc..965063f 100644
--- a/src/plugins/workflow_designer/src/StartupDialog.cpp
+++ b/src/plugins/workflow_designer/src/StartupDialog.cpp
@@ -19,21 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "StartupDialog.h"
+#include <QDir>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QVBoxLayout>
 
-#include <QtCore/QDir>
+#include <U2Core/L10n.h>
 
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QVBoxLayout>
-#endif
 
+#include "StartupDialog.h"
 
 namespace U2 {
 
@@ -41,7 +36,9 @@ StartupDialog::StartupDialog(QWidget *parent)
 : QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126253");
+    new HelpButton(this, buttonBox, "17466339");
+
+    label->setStyleSheet(L10N::infoHintStyleSheet());
 
     outDirWidget = new OutputDirectoryWidget(this, false /*don't commitOnHide*/);
     QVBoxLayout *l = new QVBoxLayout(box);
diff --git a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
index 06d3462..6892115 100644
--- a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
@@ -283,7 +283,7 @@ void WorkflowDesignerService::initNewWorkflowAction() {
     QMenu *fileMenu = AppContext::getMainWindow()->getTopLevelMenu(MWMENU_FILE);
     QAction *beforeAction = NULL;
     foreach (QAction *action, fileMenu->actions()) {
-        if (action->objectName() == ACTION_PROJECTSUPPORT__ACCESS_REMOTE_DB) {
+        if (action->objectName() == ACTION_PROJECTSUPPORT__NEW_SECTION_SEPARATOR) {
             beforeAction = action;
             break;
         }
diff --git a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
index 9f0787f..631734a 100644
--- a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
@@ -35,7 +35,7 @@ namespace U2 {
 
 WorkflowMetaDialog::WorkflowMetaDialog(QWidget * p, const Metadata& meta): QDialog(p), meta(meta) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126275");
+    new HelpButton(this, buttonBox, "17466361");
 
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     okButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp b/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
index 02f1aff..523a61e 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("16126579");
+const QString WorkflowSettingsPageController::helpPageId = QString("17465977");
 
 WorkflowSettingsPageWidget::WorkflowSettingsPageWidget(WorkflowSettingsPageController* ) {
     setupUi(this);
diff --git a/src/plugins/workflow_designer/src/WorkflowViewController.cpp b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
index e4ce43b..ea04631 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
@@ -193,7 +193,7 @@ static void addToggleDashboardAction(QToolBar *toolBar, QAction *action) {
                      "border-radius: 6px;"
                      "margin-right: 5px;"
                      "height: 25px;"
-                     "width: 168px;"
+                     "padding: 0px 5px;"
                      "}");
 #endif
 }
diff --git a/src/plugins/workflow_designer/src/library/CoreLib.cpp b/src/plugins/workflow_designer/src/library/CoreLib.cpp
index ec02b62..d28ff63 100644
--- a/src/plugins/workflow_designer/src/library/CoreLib.cpp
+++ b/src/plugins/workflow_designer/src/library/CoreLib.cpp
@@ -72,8 +72,6 @@
 #include "library/AminoTranslationWorker.h"
 #include "library/AssemblyToSequenceWorker.h"
 #include "library/ConvertFilesFormatWorker.h"
-#include "library/DASAnnotationWorker.h"
-#include "library/DASFetchWorker.h"
 #include "library/ExtractAssemblyCoverageWorker.h"
 #include "library/ExtractConsensusWorker.h"
 #include "library/ExtractMSAConsensusWorker.h"
@@ -291,8 +289,6 @@ void CoreLib::init() {
     CASAVAFilterWorkerFactory::init();
     CDSearchWorkerFactory::init();
     ConvertFilesFormatWorkerFactory::init();
-    DASAnnotationWorkerFactory::init();
-    DASFetcherFactory::init();
     DNAStatWorkerFactory::init();
     DataWorkerFactory::init();
     ExtractAssemblyCoverageWorkerFactory::init();
diff --git a/src/plugins/workflow_designer/src/library/DASAnnotationWorker.cpp b/src/plugins/workflow_designer/src/library/DASAnnotationWorker.cpp
deleted file mode 100644
index 4369ec6..0000000
--- a/src/plugins/workflow_designer/src/library/DASAnnotationWorker.cpp
+++ /dev/null
@@ -1,372 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 "DASAnnotationWorker.h"
-
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/WorkflowMonitor.h>
-
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/L10n.h>
-#include <U2Core/Log.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/FailTask.h>
-#include <U2Core/DASSource.h>
-#include <U2Core/UniprotBlastTask.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-
-namespace U2 {
-namespace LocalWorkflow {
-
-/*****************************
- * DASAnnotationWorkerFactory
- *****************************/
-
-const QString DASAnnotationWorkerFactory::ACTOR_ID("dasannotation-search");
-
-static const QString IDS_NUMBER("idsnumber");
-static const QString IDENTITY("identity");
-static const QString DB("db");
-static const QString FEATURE_SOURCES("fsources");
-static const QString THRESHOLD("threshold");
-static const QString MATRIX("matrix");
-static const QString FILTERING("filtering");
-static const QString GAPPED("gapped");
-static const QString MAX_RES("maxres");
-
-void DASAnnotationWorkerFactory::init() {
-    QList<PortDescriptor*> p; QList<Attribute*> a;
-
-    {
-        Descriptor id(BasePorts::IN_SEQ_PORT_ID(), DASAnnotationWorker::tr("Input sequences"),
-            DASAnnotationWorker::tr("Protein sequences for annotation. Nucleotide sequences are skipped."));
-        Descriptor od(BasePorts::OUT_ANNOTATIONS_PORT_ID(), DASAnnotationWorker::tr("DAS annotations"),
-            DASAnnotationWorker::tr("A set of annotations loaded from DAS sources using IDs of similar sequences."));
-
-        QMap<Descriptor, DataTypePtr> inM;
-        inM[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
-        p << new PortDescriptor(id, DataTypePtr(new MapDataType("dasannotation.sequence", inM)), true /*input*/);
-        QMap<Descriptor, DataTypePtr> outM;
-        outM[BaseSlots::ANNOTATION_TABLE_SLOT()] = BaseTypes::ANNOTATION_TABLE_TYPE();
-        p << new PortDescriptor(od, DataTypePtr(new MapDataType("dasannotation.annotations", outM)), false /*input*/, true /*multi*/);
-    }
-    Descriptor idsn(IDS_NUMBER, DASAnnotationWorker::tr("Max result IDs"), DASAnnotationWorker::tr("Use first IDs of similar sequences to load annotations."));
-    Descriptor db(DB, DASAnnotationWorker::tr("Database"), DASAnnotationWorker::tr("Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity."));
-    Descriptor identity(IDENTITY, DASAnnotationWorker::tr("Min identity"), DASAnnotationWorker::tr("Minimum identity of a BLAST result and an input sequence."));
-    Descriptor f_sources(FEATURE_SOURCES, DASAnnotationWorker::tr("Feature sources"), DASAnnotationWorker::tr("The DAS sources to read features from."));
-    Descriptor threshold(THRESHOLD, DASAnnotationWorker::tr("Threshold"), DASAnnotationWorker::tr("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."));
-    Descriptor smatrix(MATRIX, DASAnnotationWorker::tr("Matrix"), DASAnnotationWorker::tr("The matrix assigns a probability score for each position in an alignment."));
-    Descriptor filtering(FILTERING, DASAnnotationWorker::tr("Filtering"), DASAnnotationWorker::tr("Low-complexity regions (e.g. stretches of cysteine in Q03751, or hydrophobic regions in membrane proteins) tend to produce"
-        "spurious, 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."));
-    Descriptor gapped(GAPPED, DASAnnotationWorker::tr("Gapped"), DASAnnotationWorker::tr("This will allow gaps to be introduced in the sequences when the comparison is done."));
-    Descriptor hits(MAX_RES, DASAnnotationWorker::tr("Hits"), DASAnnotationWorker::tr("Limits the number of returned alignments."));
-
-    a << new Attribute(idsn, BaseTypes::NUM_TYPE(), false, QVariant(5));
-    a << new Attribute(db, BaseTypes::STRING_TYPE(), false, QVariant("uniprotkb"));
-    a << new Attribute(identity, BaseTypes::NUM_TYPE(), false, QVariant(90));
-    a << new Attribute(threshold, BaseTypes::STRING_TYPE(), false, QVariant("10"));
-    a << new Attribute(smatrix, BaseTypes::STRING_TYPE(), false, QVariant(""));
-    a << new Attribute(filtering, BaseTypes::STRING_TYPE(), false, QVariant("false"));
-    a << new Attribute(gapped, BaseTypes::STRING_TYPE(), false, QVariant("true"));
-    a << new Attribute(hits, BaseTypes::STRING_TYPE(), false, QVariant("250"));
-
-
-    Descriptor desc(ACTOR_ID, DASAnnotationWorker::tr("Annotate with DAS"),
-        DASAnnotationWorker::tr("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>")
-       );
-    QMap<QString, PropertyDelegate*> delegates;
-
-    {
-        QVariantMap idsMap; idsMap["minimum"] = QVariant(1); idsMap["maximum"] = QVariant(INT_MAX);
-        delegates[IDS_NUMBER] = new SpinBoxDelegate(idsMap);
-    }
-    {
-        QVariantMap varMap;
-        varMap["UniProtKB"] = "uniprotkb";
-        varMap["UniProtKB...Archaea"] = "uniprotkb_archaea";
-        varMap["UniProtKB...Bacteria"] = "uniprotkb_bacteria";
-        varMap["UniProtKB...Eucaryota"] = "uniprotkb_eukaryota";
-        varMap["UniProtKB...Arthropoda"] = "uniprotkb_arthropoda";
-        varMap["UniProtKB...Fungi"] = "uniprotkb_fungi";
-        varMap["UniProtKB...Human"] = "uniprotkb_human";
-        varMap["UniProtKB...Mammals"] = "uniprotkb_mammals";
-        varMap["UniProtKB...Nematoda"] = "uniprotkb_nematoda";
-        varMap["UniProtKB...Plants"] = "uniprotkb_plants";
-        varMap["UniProtKB...Rodents"] = "uniprotkb_rodents";
-        varMap["UniProtKB...Vertebrates"] = "uniprotkb_vertebrates";
-        varMap["UniProtKB...Viruses"] = "uniprotkb_viruses";
-        varMap["UniProtKB...PDB"] = "uniprotkb_pdb";
-        varMap["UniProtKB...Complete microbial proteoms"] = "uniprotkb_complete_microbial_proteomes";
-        varMap["UniProtKB/Swiss-Prot"] =  "uniprotkb_swissprot";
-        varMap["UniRef100"] = "UniRef100";
-        varMap["UniRef90"] = "UniRef90";
-        varMap["UniRef50"] = "UniRef50";
-        varMap["UniParc"] = "uniparc";
-        delegates[DB] = new ComboBoxDelegate(varMap);
-    }
-
-    {
-        QVariantMap valMap; valMap["minimum"] = QVariant(0); valMap["maximum"] = QVariant(100);
-        valMap["suffix"] = QVariant("%");
-        delegates[IDENTITY] = new SpinBoxDelegate(valMap);
-    }
-    {
-        DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-        SAFE_POINT (dasRegistry, DASAnnotationWorker::tr("No DAS registry"),);
-
-        const QList<DASSource>& featureSources = dasRegistry->getFeatureSources();
-        SAFE_POINT (featureSources.size() != 0, DASAnnotationWorker::tr("No DAS feature sources"),);
-
-
-        QString defaultFeatures = "";
-        foreach(const DASSource& fs, featureSources){
-            if (fs.getReferenceType() == DASProteinSequence){
-                if (defaultFeatures!=""){
-                    defaultFeatures.append(",");
-                }
-                defaultFeatures.append(fs.getName());
-            }
-        }
-
-        a << new Attribute(f_sources, BaseTypes::STRING_TYPE(), false, defaultFeatures);
-
-        {
-            QVariantMap values;
-
-            foreach(const DASSource& fs, featureSources){
-                if (fs.getReferenceType() == DASProteinSequence){
-                    values[fs.getName()] = true;
-                }
-            }
-            delegates[FEATURE_SOURCES] = new ComboBoxWithChecksDelegate(values);
-        }
-        {
-            QVariantMap varMap;
-            varMap["0.0001"] = "0.0001";
-            varMap["0.001"] = "0.001";
-            varMap["0.01"] = "0.01";
-            varMap["0.1"] = "0.1";
-            varMap["1"] = "1";
-            varMap["10"] = "10";
-            varMap["100"] = "100";
-            varMap["1000"] = "1000";
-            delegates[THRESHOLD] = new ComboBoxDelegate(varMap);
-        }
-        {
-            QVariantMap varMap;
-            varMap["Auto"] = "";
-            varMap["BLOSUM-45"] = "blosum45";
-            varMap["BLOSUM-62"] = "blosum62";
-            varMap["BLOSUM-80"] = "blosum80";
-            varMap["PAM-70"] = "pam70";
-            varMap["PAM-30"] = "pam30";
-            delegates[MATRIX] = new ComboBoxDelegate(varMap);
-
-        }
-        {
-            QVariantMap varMap;
-            varMap["None"] = "false";
-            varMap["Filter low complexity regions"] = "true";
-            varMap["Mask lookup table only"] = "mask";
-            delegates[FILTERING] = new ComboBoxDelegate(varMap);
-        }
-        {
-            QVariantMap varMap;
-            varMap["true"] = "true";
-            varMap["false"] = "false";
-            delegates[GAPPED] = new ComboBoxDelegate(varMap);
-        }
-        {
-            QVariantMap varMap;
-            varMap["50"] = "50";
-            varMap["100"] = "100";
-            varMap["250"] = "250";
-            varMap["500"] = "500";
-            varMap["750"] = "750";
-            varMap["1000"] = "1000";
-            delegates[MAX_RES] = new ComboBoxDelegate(varMap);
-        }
-    }
-
-    ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
-    proto->setPrompter(new DASAnnotationPrompter());
-    proto->setEditor(new DelegateEditor(delegates));
-    WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_BASIC(), proto);
-
-    DomainFactory* localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
-    localDomain->registerEntry(new DASAnnotationWorkerFactory());
-}
-
-/*****************************
- * DASAnnotationPrompter
- *****************************/
-QString DASAnnotationPrompter::composeRichDoc() {
-    IntegralBusPort* input = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_SEQ_PORT_ID()));
-    Actor* producer = input->getProducer(BaseSlots::DNA_SEQUENCE_SLOT().getId());
-    QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
-    QString producerName = tr(" from <u>%1</u>").arg(producer ? producer->getLabel() : unsetStr);
-    QString firstIds = getParameter(IDS_NUMBER).toString();
-
-    QString doc = tr("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).").arg(producerName).arg(firstIds);
-
-    return doc;
-}
-
-/*****************************
- * DASAnnotationWorker
- *****************************/
-DASAnnotationWorker::DASAnnotationWorker(Actor* a) : BaseWorker(a), input(NULL), output(NULL) {
-}
-
-void DASAnnotationWorker::init() {
-    input = ports.value(BasePorts::IN_SEQ_PORT_ID());
-    output = ports.value(BasePorts::OUT_ANNOTATIONS_PORT_ID());
-}
-
-Task* DASAnnotationWorker::tick() {
-    if (input->hasMessage()) {
-        Message inputMessage = getMessageAndSetupScriptValues(input);
-        if (inputMessage.isEmpty()) {
-            output->put(Message::getEmptyMapMessage());
-        }
-
-        DASAnnotationsSettings cfg;
-
-        UniprotBlastSettings blastSettings;
-        blastSettings.insert(UniprotBlastSettings::DATABASE, actor->getParameter(DB)->getAttributeValue<QString>(context));
-        blastSettings.insert(UniprotBlastSettings::THRESHOLD, actor->getParameter(THRESHOLD)->getAttributeValue<QString>(context));
-        blastSettings.insert(UniprotBlastSettings::MATRIX, actor->getParameter(MATRIX)->getAttributeValue<QString>(context));
-        blastSettings.insert(UniprotBlastSettings::FILTERING, actor->getParameter(FILTERING)->getAttributeValue<QString>(context));
-        blastSettings.insert(UniprotBlastSettings::GAPPED, actor->getParameter(GAPPED)->getAttributeValue<QString>(context));
-        blastSettings.insert(UniprotBlastSettings::HITS, actor->getParameter(MAX_RES)->getAttributeValue<QString>(context));
-
-        cfg.blastSettings = blastSettings;
-        cfg.identityThreshold = actor->getParameter(IDENTITY)->getAttributeValue<int>(context);
-        cfg.maxResults = actor->getParameter(IDS_NUMBER)->getAttributeValue<int>(context);
-
-        QList<DASSource> featureSources;
-        DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-        if (!dasRegistry){
-            return new FailTask(tr("Internal error: no DAS Registry."));
-        }else{
-            QStringList featureids = actor->getParameter(FEATURE_SOURCES)->getAttributeValue<QString>(context).split(",", QString::SkipEmptyParts);
-            foreach(const QString& fId, featureids){
-                if (!fId.isEmpty()){
-                    const DASSource& fs = dasRegistry->findByName(fId);
-                    if (fs.isValid()){
-                        featureSources.append(fs);
-                    }
-                }
-            }
-        }
-        cfg.featureSources = featureSources;
-
-        SharedDbiDataHandler seqId = inputMessage.getData().toMap().value(BaseSlots::DNA_SEQUENCE_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<U2SequenceObject> seqObj(StorageUtils::getSequenceObject(context->getDataStorage(), seqId));
-
-        if (seqObj.isNull()) {
-            return NULL;
-        }
-
-        U2OpStatusImpl os;
-        cfg.sequence = seqObj->getWholeSequence(os).constSequence();
-        CHECK_OP(os, new FailTask(os.getError()));
-
-        qint64 seqLen = cfg.sequence.length();
-        if (seqLen < MIN_SEQ_LENGTH || seqLen >= MAX_SEQ_LENGTH){
-            algoLog.error(tr("Sequence %1 is %2 amino acids long. Only sequences from %3 to %4 amino acids are processed.")
-                .arg(seqObj->getSequenceName())
-                .arg(seqLen)
-                .arg(MIN_SEQ_LENGTH)
-                .arg(MAX_SEQ_LENGTH));
-
-            output->put(Message::getEmptyMapMessage());
-            return NULL;
-        }
-
-        const DNAAlphabet* alphabet = seqObj->getAlphabet();
-        if (alphabet && alphabet->getType() == DNAAlphabet_AMINO) {
-
-            Task* t = new UniprotBlastAndLoadDASAnnotations(cfg);
-            connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
-            return t;
-        }else{
-            output->put(Message::getEmptyMapMessage());
-            return NULL;
-        }
-        QString err = tr("Bad sequence supplied to DASAnnotationWorker: %1").arg(seqObj->getSequenceName());
-
-        return new FailTask(err);
-    } else if (input->isEnded()) {
-        output->setEnded();
-        setDone();
-    }
-    return NULL;
-}
-
-void DASAnnotationWorker::sl_taskFinished() {
-     UniprotBlastAndLoadDASAnnotations *t = qobject_cast<UniprotBlastAndLoadDASAnnotations *>(sender());
-     if (!t->isFinished() || t->isCanceled()) {
-         return;
-     }
-     if (NULL != output) {
-         const QList<SharedAnnotationData> results = t->prepareResults();
-         const SharedDbiDataHandler tableId = context->getDataStorage()->putAnnotationTable(results);
-         output->put(Message(BaseTypes::ANNOTATION_TABLE_TYPE(), qVariantFromValue<SharedDbiDataHandler>(tableId)));
-
-         WorkflowMonitor* workflowMonitor = monitor();
-         if (NULL != workflowMonitor) {
-             foreach (const QString &message, t->getProblems()) {
-                 workflowMonitor->addError(message, actor->getId(), Problem::U2_WARNING);
-             }
-         }
-
-         const QStringList ids = t->getAccessionNumbers();
-         const int countOfAccessions = ids.size();
-         const QString idsString = (0 != countOfAccessions) ? tr(" IDs: ").arg(ids.join(",")) : "";
-         algoLog.trace(tr("Number of similar sequences: %1.").arg(countOfAccessions) + idsString);
-     }
-}
-
-void DASAnnotationWorker::cleanup() {
-
-}
-
-} //namespace LocalWorkflow
-} //namespace U2
diff --git a/src/plugins/workflow_designer/src/library/DASAnnotationWorker.h b/src/plugins/workflow_designer/src/library/DASAnnotationWorker.h
deleted file mode 100644
index f1d4d67..0000000
--- a/src/plugins/workflow_designer/src/library/DASAnnotationWorker.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_DAS_ANNOTATION_WORKER_H_
-#define _U2_DAS_ANNOTATION_WORKER_H_
-
-#include <U2Lang/LocalDomain.h>
-#include <U2Lang/WorkflowUtils.h>
-
-namespace U2 {
-
-namespace LocalWorkflow {
-
-class DASAnnotationPrompter;
-typedef PrompterBase<DASAnnotationPrompter> DASAnnotationPrompterBase;
-
-class DASAnnotationPrompter : public DASAnnotationPrompterBase {
-    Q_OBJECT
-public:
-    DASAnnotationPrompter(Actor* p = 0) : DASAnnotationPrompterBase(p) {}
-protected:
-    QString composeRichDoc();
-};
-
-class DASAnnotationWorker : public BaseWorker {
-    Q_OBJECT
-public:
-    DASAnnotationWorker(Actor* a);
-
-    virtual void init();
-    virtual Task* tick();
-    virtual void cleanup();
-
-private slots:
-    void sl_taskFinished();
-
-protected:
-    CommunicationChannel *input, *output;
-};
-
-class DASAnnotationWorkerFactory : public DomainFactory {
-public:
-    static const QString ACTOR_ID;
-    static void init();
-    DASAnnotationWorkerFactory() : DomainFactory(ACTOR_ID) {}
-    virtual Worker* createWorker(Actor* a) {return new DASAnnotationWorker(a);}
-};
-
-}// Workflow namespace
-}// U2 namespace
-
-#endif //_U2_DAS_ANNOTATION_WORKER_H_
diff --git a/src/plugins/workflow_designer/src/library/DASFetchWorker.cpp b/src/plugins/workflow_designer/src/library/DASFetchWorker.cpp
deleted file mode 100644
index cbf22cd..0000000
--- a/src/plugins/workflow_designer/src/library/DASFetchWorker.cpp
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/AnnotationData.h>
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/FailTask.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GObjectUtils.h>
-#include <U2Core/LoadDASDocumentTask.h>
-#include <U2Core/DASSource.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Designer/DelegateEditors.h>
-
-#include <U2Gui/GUIUtils.h>
-
-#include <U2Lang/ActorModel.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/WorkflowEnv.h>
-
-#include "DASFetchWorker.h"
-
-namespace U2 {
-namespace LocalWorkflow {
-
-#define ICOLOR QColor(85,85,255) // FIXME
-
-const QString DASFetcherFactory::ACTOR_ID("fetch-das");
-
-static const QString TYPE("das.seq");
-static const QString DBID_ID("database");
-static const QString ANNID_ID("annotations");
-static const QString SEQID_ID("resource-id");
-static const QString PATH_ID("save-dir");
-static const QString DEFAULT_PATH("default");
-
-
-//////////////////////////////////////////////////////////////////////////
-//DASFetcherPrompter
-QString DASFetcherPrompter::composeRichDoc()
-{
-    QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
-    QStringList seqids = getParameter(SEQID_ID).value<QString>().split(";", QString::SkipEmptyParts);
-    QString seq = seqids.size() > 1 ?
-        DASFetcherWorker::tr("sequences identified with") :
-        DASFetcherWorker::tr("sequence identified with");
-    QString seqidsStr = seqids.isEmpty() ? unsetStr : QString("<u>%1</u>").arg(seqids.join(", "));
-
-    QString dbid = getParameter(DBID_ID).value<QString>();
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    if (dasRegistry){
-        DASSource rs = dasRegistry->findById(dbid);
-        if (rs.isValid()){
-            dbid = rs.getName();
-        }
-    }
-
-    QString saveDir = getParameter(PATH_ID).value<QString>();
-    saveDir = getHyperlink(PATH_ID, saveDir);
-    QString saveDirStr = DASFetcherWorker::tr("Save result to <u>%1</u> directory.").arg(saveDir);
-
-    return DASFetcherWorker::tr("Reads %1 %2 from <u>%3</u> DAS source. %4").
-        arg(seq).
-        arg(getHyperlink(SEQID_ID, seqidsStr)).
-        arg(getHyperlink(DBID_ID, dbid)).
-        arg(saveDirStr);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//DASFetcherWorker
-DASFetcherWorker::DASFetcherWorker(Actor *a) : BaseWorker(a), output(NULL)
-{
-}
-
-void DASFetcherWorker::init()
-{
-    output = ports.value(BasePorts::OUT_SEQ_PORT_ID());
-
-    assert(dbid.isEmpty());
-    dbid = actor->getParameter(DBID_ID)->getAttributeValue<QString>(context);
-
-    seqids = actor->getParameter(SEQID_ID)->getAttributeValue<QString>(context).split(";", QString::SkipEmptyParts);
-
-    featureids = actor->getParameter(ANNID_ID)->getAttributeValue<QString>(context).split(",", QString::SkipEmptyParts);
-
-    fullPathDir = actor->getParameter(PATH_ID)->getAttributeValue<QString>(context);
-    if (fullPathDir == DEFAULT_PATH) {
-        fullPathDir = LoadRemoteDocumentTask::getDefaultDownloadDirectory();
-    } else {
-        fullPathDir = context->absolutePath(fullPathDir);
-    }
-}
-
-bool DASFetcherWorker::isReady() const {
-    return !isDone();
-}
-
-Task* DASFetcherWorker::tick() {
-    if(!QDir(fullPathDir).exists()) {
-        if(!QDir().mkpath(fullPathDir)) {
-            return new FailTask(tr("Cannot create directory '%1'").arg(fullPathDir));
-        }
-    }
-
-    Task *ret = 0;
-    // fetch and load next file
-    QString seqId = "";
-    while (seqId.isEmpty()) {
-        if (seqids.isEmpty()) {
-            return ret;
-        }
-
-        seqId = seqids.takeFirst().trimmed();
-    }
-
-    DASSource refSource;
-    QList<DASSource> featureSources;
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    if (!dasRegistry){
-        return ret;
-    }else{
-        refSource = dasRegistry->findById(dbid);
-        if (!refSource.isValid()){
-            return ret;
-        }
-        foreach(const QString& fId, featureids){
-            if (!fId.isEmpty()){
-                const DASSource& fs = dasRegistry->findByName(fId);
-                if (fs.isValid()){
-                    featureSources.append(fs);
-                }
-            }
-        }
-    }
-
-    ret = new ConvertIdAndLoadDasDocumentTask(seqId, fullPathDir, refSource, featureSources);
-    connect(ret, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
-
-    return ret;
-}
-
-bool DASFetcherWorker::isDone() const {
-    return (!dbid.isEmpty() && seqids.isEmpty());
-}
-
-void DASFetcherWorker::cleanup() {
-
-}
-
-void DASFetcherWorker::sl_taskFinished() {
-    ConvertIdAndLoadDasDocumentTask *loadTask = qobject_cast<ConvertIdAndLoadDasDocumentTask*>(sender());
-    if(!loadTask){
-        return;
-    }
-
-    if (loadTask->getState() != Task::State_Finished || loadTask->isCanceled()){
-        return;
-    }
-
-    if (loadTask->hasError()) {
-        loadTask->setError(tr("failed to load item from DAS source : %3").arg(loadTask->getError()));
-        return;
-    }
-
-    Document *doc = loadTask->getDocument();
-    if (!doc){
-        return;
-    }
-
-    foreach(GObject *gobj, doc->findGObjectByType(GObjectTypes::SEQUENCE))
-    {
-        U2SequenceObject *dnao = qobject_cast<U2SequenceObject*>(gobj);
-        assert(dnao);
-
-        QList<GObject*> allLoadedAnnotations = doc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-        QList<GObject*> annotations = GObjectUtils::findObjectsRelatedToObjectByRole(gobj,
-                                                                                     GObjectTypes::ANNOTATION_TABLE,
-                                                                                     ObjectRole_Sequence,
-                                                                                     allLoadedAnnotations,
-                                                                                     UOF_LoadedOnly);
-
-        QList<SharedAnnotationData> ads;
-        if (!annotations.isEmpty()) {
-            AnnotationTableObject *ato = qobject_cast<AnnotationTableObject *>(annotations.first());
-            foreach (Annotation *a, ato->getAnnotations()) {
-                ads << a->getData();
-            }
-        }
-
-        QVariantMap messageData;
-        U2OpStatusImpl os;
-        DNASequence seq  = dnao->getWholeSequence(os);
-        CHECK_OP(os, );
-        SharedDbiDataHandler seqId = context->getDataStorage()->putSequence(seq);
-        messageData[ BaseSlots::DNA_SEQUENCE_SLOT().getId() ] = qVariantFromValue<SharedDbiDataHandler>(seqId);
-        SharedDbiDataHandler tableId = context->getDataStorage()->putAnnotationTable(ads);
-        messageData[ BaseSlots::ANNOTATION_TABLE_SLOT().getId() ] = qVariantFromValue<SharedDbiDataHandler>(tableId);
-
-        DataTypePtr messageType = WorkflowEnv::getDataTypeRegistry()->getById(TYPE);
-        MessageMetadata metadata(doc->getURLString(), "");
-        context->getMetadataStorage().put(metadata);
-        output->put(Message(messageType, messageData, metadata.getId()));
-    }
-
-    if (seqids.isEmpty())
-    {
-        output->setEnded();
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-//DASFetcherFactory
-
-class DASSourceTypeRelation : public AttributeRelation {
-public:
-    DASSourceTypeRelation(const QString &relatedAttrId)
-        : AttributeRelation(relatedAttrId){}
-
-    virtual QVariant getAffectResult(const QVariant &influencingValue, const QVariant &dependentValue,
-        DelegateTags *, DelegateTags *) const{
-        DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-        if (dasRegistry){
-            DASSource refsource = dasRegistry->findById(influencingValue.toString());
-            const QList<DASSource>& featuresSources = dasRegistry->getFeatureSourcesByType(refsource.getReferenceType());
-            QString res = "";
-            foreach(const DASSource& ds, featuresSources){
-                if (res != ""){
-                    res.append(",");
-                }
-                res.append(ds.getName());
-            }
-            return res;
-        }
-
-        return dependentValue;
-    };
-    virtual RelationType getType() const {return CUSTOM_VALUE_CHANGER;}
-};
-
-
-void DASFetcherFactory::init()
-{
-    QMap<Descriptor, DataTypePtr> outMap;
-    outMap[ BaseSlots::DNA_SEQUENCE_SLOT() ] = BaseTypes::DNA_SEQUENCE_TYPE();
-    outMap[ BaseSlots::ANNOTATION_TABLE_SLOT() ] = BaseTypes::ANNOTATION_TABLE_TYPE();
-
-    DataTypePtr outType( new MapDataType(Descriptor(TYPE), outMap) );
-    DataTypeRegistry  *dr = WorkflowEnv::getDataTypeRegistry();
-    assert(dr);
-    dr->registerEntry(outType);
-
-    Descriptor desc(ACTOR_ID,
-                    DASFetcherWorker::tr("Read from DAS"),
-                    DASFetcherWorker::tr("Reads sequences and annotations if any from the Distributed Annotation System."));
-
-    QList<PortDescriptor*> pds;
-    {
-        Descriptor outd(BasePorts::OUT_SEQ_PORT_ID(), DASFetcherWorker::tr("Sequence"), DASFetcherWorker::tr("Sequence"));
-        pds << new PortDescriptor(outd, outType, /*input*/ false, /*output*/ true);
-    }
-
-    DASSourceRegistry * dasRegistry = AppContext::getDASSourceRegistry();
-    SAFE_POINT (dasRegistry, DASFetcherWorker::tr("No DAS registry"), );
-
-    const QList<DASSource>& dasSources = dasRegistry->getReferenceSources();
-    SAFE_POINT (dasSources.size() != 0, DASFetcherWorker::tr("No DAS sources"), );
-    const QList<DASSource>& featureSources = dasRegistry->getFeatureSources();
-    SAFE_POINT (featureSources.size() != 0, DASFetcherWorker::tr("No DAS feature sources"), );
-
-
-    DASSource defaultDB = dasSources.first();
-    QString defaultFeatures = "";
-    foreach(const DASSource& fs, featureSources){
-        if (fs.getReferenceType() == defaultDB.getReferenceType()){
-            if (defaultFeatures!=""){
-                defaultFeatures.append(",");
-            }
-            defaultFeatures.append(fs.getName());
-        }
-    }
-
-    QList<Attribute*> attrs;
-    {
-        Descriptor annidd(ANNID_ID,
-            DASFetcherWorker::tr("Feature Sources"),
-            DASFetcherWorker::tr("The DAS sources to read features from."));
-        attrs << new Attribute(annidd, BaseTypes::STRING_TYPE(), true, defaultFeatures);
-
-        Descriptor dbidd(DBID_ID,
-                         DASFetcherWorker::tr("Reference Source"),
-                         DASFetcherWorker::tr("The DAS source to read reference from."));
-
-
-        Attribute* seqAtr = new Attribute(dbidd, BaseTypes::STRING_TYPE(), true, defaultDB.getId());
-
-        seqAtr->addRelation(new DASSourceTypeRelation(ANNID_ID));
-
-        attrs << seqAtr;
-
-        Descriptor seqidd(SEQID_ID,
-            DASFetcherWorker::tr("Resource ID(s)"),
-            DASFetcherWorker::tr("Semicolon-separated list of resource ID`s in the source."));
-
-
-        attrs << new Attribute(seqidd, BaseTypes::STRING_TYPE(), true, "");
-
-        Descriptor fullpathd(PATH_ID,
-                         DASFetcherWorker::tr("Save file to directory"),
-                         DASFetcherWorker::tr("The directory to store sequence files loaded from the source."));
-        attrs << new Attribute(fullpathd, BaseTypes::STRING_TYPE(), true, DEFAULT_PATH);
-    }
-
-    ActorPrototype *proto = new IntegralBusActorPrototype(desc, pds, attrs);
-
-    QMap<QString, PropertyDelegate*> delegates;
-    {
-        QVariantMap values;
-        foreach(const DASSource &dbS, dasSources)
-        {
-            values[dbS.getName()] = dbS.getId();
-        }
-        delegates[DBID_ID] = new ComboBoxDelegate(values);
-
-        delegates[SEQID_ID] = new StringListDelegate();
-        delegates[PATH_ID] = new URLDelegate(QString(), QString(), false, true);
-    }
-    {
-        QVariantMap values;
-
-        foreach(const DASSource& fs, featureSources){
-            bool active = false;
-            if (fs.getReferenceType() == defaultDB.getReferenceType()){
-                active = true;
-            }
-            values[fs.getName()] = active;
-        }
-        delegates[ANNID_ID] = new ComboBoxWithChecksDelegate(values);
-    }
-
-    proto->setEditor(new DelegateEditor(delegates));
-    proto->setPrompter(new DASFetcherPrompter());
-
-    if(AppContext::isGUIMode()) {
-        proto->setIcon(GUIUtils::createRoundIcon(ICOLOR, 22));
-    }
-
-    WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_DATASRC(), proto);
-
-    DomainFactory *localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
-    localDomain->registerEntry(new DASFetcherFactory());
-}
-
-}   // namespace U2::LocalWorkflow
-}
diff --git a/src/plugins/workflow_designer/src/library/DASFetchWorker.h b/src/plugins/workflow_designer/src/library/DASFetchWorker.h
deleted file mode 100644
index 98b5e61..0000000
--- a/src/plugins/workflow_designer/src/library/DASFetchWorker.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2015 UniPro <ugene at unipro.ru>
- * http://ugene.unipro.ru
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_DAS_FETCHER_H_
-#define _U2_DAS_FETCHER_H_
-
-#include <U2Lang/LocalDomain.h>
-#include <U2Lang/WorkflowUtils.h>
-
-namespace U2 {
-namespace LocalWorkflow {
-
-class DASFetcherPrompter : public PrompterBase<DASFetcherPrompter>
-{
-    Q_OBJECT
-
-public:
-    DASFetcherPrompter(Actor *p = 0) : PrompterBase<DASFetcherPrompter>(p) {}
-
-protected:
-    virtual QString composeRichDoc();
-};
-
-class DASFetcherWorker : public BaseWorker
-{
-    Q_OBJECT
-
-public:
-    DASFetcherWorker (Actor *a);
-
-    virtual void init();
-    virtual bool isReady() const;
-    virtual Task* tick();
-    virtual bool isDone() const;
-    virtual void cleanup();
-
-private slots:
-    void sl_taskFinished();
-
-protected:
-    CommunicationChannel *output;
-
-    QString dbid;
-    QString fullPathDir;
-    QStringList featureids;
-    QStringList seqids;
-
-};
-
-class DASFetcherFactory : public DomainFactory
-{
-public:
-    static const QString ACTOR_ID;
-
-public:
-    DASFetcherFactory() : DomainFactory(ACTOR_ID) {}
-
-    static void init();
-    virtual Worker* createWorker(Actor *a) { return new DASFetcherWorker(a); }
-};
-
-}   // namespace U2
-}   // namespace LocalWorkflow
-
-#endif  // #ifndef _U2_DAS_FETCHER_H_
diff --git a/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp b/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
index dafaf5c..e733f37 100644
--- a/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
@@ -284,7 +284,7 @@ void MultiplexerWorkerFactory::init() {
                 " <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each"
                 " message from the second input port, and transfers the joined messages to the output. This procedure"
                 " is repeated for each message from the first input port.</li>"
-                " <br/>Read the documentation for details."));
+                " <br/>"));
 
         attrs << new Attribute(ruleDesc, BaseTypes::STRING_TYPE(), true, ONE_TO_ONE);
     }
diff --git a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
index 2d88194..79c994a 100644
--- a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
@@ -393,13 +393,13 @@ void WriteAnnotationsWorkerFactory::init() {
         fileModeAttr->addRelation(new VisibilityRelation(BaseAttributes::DATA_STORAGE_ATTRIBUTE().getId(), BaseAttributes::LOCAL_FS_DATA_STORAGE()));
         attrs << fileModeAttr;
         Descriptor annotationsNameDesc(ANNOTATIONS_NAME, WriteAnnotationsWorker::tr("Annotations name"),
-            WriteAnnotationsWorker::tr("Annotations name: Name of the saved"
+            WriteAnnotationsWorker::tr("Name of the saved"
             " annotations. This option is only available for document formats"
             " that support saving of annotations names."));
         Attribute *nameAttr = new Attribute(annotationsNameDesc, BaseTypes::STRING_TYPE(), false, ANNOTATIONS_NAME_DEF_VAL);
         attrs << nameAttr;
         Descriptor annObjNameDesc(ANN_OBJ_NAME, WriteAnnotationsWorker::tr("Annotation object name"),
-            WriteAnnotationsWorker::tr("Annotations name: Name of the saved annotation object."));
+            WriteAnnotationsWorker::tr("Name of the saved annotation object."));
         Attribute *objNameAttr = new Attribute(annObjNameDesc, BaseTypes::STRING_TYPE(), false, ANNOTATIONS_NAME_DEF_VAL);
         attrs << objNameAttr;
         objNameAttr->addRelation(new VisibilityRelation(BaseAttributes::DATA_STORAGE_ATTRIBUTE().getId(), BaseAttributes::SHARED_DB_DATA_STORAGE()));
diff --git a/src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui b/src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui
index 5ee6b2d..7f62918 100644
--- a/src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui
+++ b/src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui
@@ -37,9 +37,9 @@
 <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:12pt;">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:12pt; 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:12pt; font-weight:600;">%1</span></p></body></html></string>
+<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></string>
       </property>
      </widget>
     </item>
@@ -106,7 +106,7 @@ p, li { white-space: pre-wrap; }
 <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: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 represented as port in workflow design [...]
+<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;">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 represented as port in workflow designe [...]
       </property>
      </widget>
     </item>
@@ -229,7 +229,7 @@ p, li { white-space: pre-wrap; }
 <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: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></string>
+<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;">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></string>
       </property>
      </widget>
     </item>
@@ -301,7 +301,7 @@ p, li { white-space: pre-wrap; }
 <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: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 itself). In parameterized description you also can  [...]
+<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 also can u [...]
       </property>
      </widget>
     </item>
diff --git a/src/plugins/workflow_designer/src/ui/StartupDialog.ui b/src/plugins/workflow_designer/src/ui/StartupDialog.ui
index fa0aa01..05120ea 100644
--- a/src/plugins/workflow_designer/src/ui/StartupDialog.ui
+++ b/src/plugins/workflow_designer/src/ui/StartupDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>460</width>
-    <height>149</height>
+    <width>448</width>
+    <height>131</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -29,14 +29,6 @@
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="font">
-      <font>
-       <pointsize>11</pointsize>
-      </font>
-     </property>
-     <property name="styleSheet">
-      <string notr="true">color: green;</string>
-     </property>
      <property name="text">
       <string>Note: you can change this option in the UGENE Application Settings
 (Settings > Preferences > Workflow Designer)</string>
diff --git a/src/plugins/workflow_designer/transl/english.ts b/src/plugins/workflow_designer/transl/english.ts
index b70f9d8..4d7a582 100644
--- a/src/plugins/workflow_designer/transl/english.ts
+++ b/src/plugins/workflow_designer/transl/english.ts
@@ -22,17 +22,6 @@
         <translation>Create Element with Command Line Tool</translation>
     </message>
     <message>
-        <location filename="../src/ui/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;"><span style=" font-size:12pt;">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:12pt; 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:12pt; font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="49"/>
         <source>Element description</source>
         <translation>Element description</translation>
@@ -58,24 +47,6 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/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; }
-</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: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 represented as port in workflow design [...]
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/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; }
-</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: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="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; }
@@ -104,6 +75,26 @@ 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"/>
+        <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>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ui/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; }
+</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;">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 represented as port in workflow designe [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="116"/>
         <source>Input data</source>
         <translation>Input data</translation>
@@ -131,6 +122,24 @@ p, li { white-space: pre-wrap; }
         <translation>Add output</translation>
     </message>
     <message>
+        <location filename="../src/ui/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; }
+</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;">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="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; }
@@ -165,15 +174,6 @@ p, li { white-space: pre-wrap; }
         <translation>Add attribute</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: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 itself). In parameterized description you [...]
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="311"/>
         <source>Command line template</source>
         <translation>Command line template</translation>
@@ -3591,17 +3591,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerPrompter</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="308"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="331"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="321"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="344"/>
         <source>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</source>
         <translation>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="325"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="348"/>
         <source>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</source>
         <translation>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</translation>
     </message>
@@ -3609,62 +3609,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerWorker</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="256"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="279"/>
         <source>Multiplexing rule</source>
         <translation>Multiplexing rule</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="238"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
         <source>First input port</source>
         <translation>First input port</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="238"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="244"/>
+        <source>The number of messages, received from "%1" (%2), does not correspond to the number of messages, received from "%3" (%4). Redundant messages were skipped.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</source>
         <translation>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="241"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
         <source>Second input port</source>
         <translation>Second input port</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="241"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</source>
         <translation>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="248"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="271"/>
         <source>Multiplexed output</source>
         <translation>Multiplexed output</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="249"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
         <source>The port outputs multiplexed messages.</source>
         <translation>The port outputs multiplexed messages.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="257"/>
-        <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
-        <translation>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each mes [...]
+        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
+        <translation>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each mes [...]
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="273"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="296"/>
         <source>1 to many</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="274"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
         <source>1 to 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="303"/>
         <source>Multiplexer</source>
         <translation>Multiplexer</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="281"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
         <source>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</source>
         <translation>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</translation>
     </message>
@@ -5135,8 +5140,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="396"/>
-        <source>Annotations name: Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</source>
-        <translation>Annotations name: Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</translation>
+        <source>Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</source>
+        <translation>Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</translation>
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="401"/>
@@ -5145,8 +5150,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="402"/>
-        <source>Annotations name: Name of the saved annotation object.</source>
-        <translation>Annotations name: Name of the saved annotation object.</translation>
+        <source>Name of the saved annotation object.</source>
+        <translation>Name of the saved annotation object.</translation>
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="406"/>
@@ -6095,22 +6100,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Close dashboard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="153"/>
+        <location filename="../src/WorkflowTabView.cpp" line="171"/>
         <source>Rename Dashboard</source>
         <translation>Rename Dashboard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="154"/>
+        <location filename="../src/WorkflowTabView.cpp" line="172"/>
         <source>New dashboard name:</source>
         <translation>New dashboard name:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="184"/>
+        <location filename="../src/WorkflowTabView.cpp" line="202"/>
         <source>Run</source>
         <translation>Run</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="206"/>
+        <location filename="../src/WorkflowTabView.cpp" line="224"/>
         <source>Rename</source>
         <translation>Rename</translation>
     </message>
diff --git a/src/plugins/workflow_designer/transl/russian.ts b/src/plugins/workflow_designer/transl/russian.ts
index a5aecfa..1441e76 100644
--- a/src/plugins/workflow_designer/transl/russian.ts
+++ b/src/plugins/workflow_designer/transl/russian.ts
@@ -22,17 +22,6 @@
         <translation>Создать элемент при помощи инструмента командной строки</translation>
     </message>
     <message>
-        <location filename="../src/ui/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;"><span style=" font-size:12pt;">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:12pt; 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:12pt; font-weight:600;">%1</span></p></body></html></source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="49"/>
         <source>Element description</source>
         <translation>Описание элемента</translation>
@@ -58,24 +47,6 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/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; }
-</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: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 represented as port in workflow design [...]
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/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; }
-</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: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="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; }
@@ -106,6 +77,26 @@ 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;">Входные и выходные данные для внешнего инструмента. Имя это параметр командной строки для входных/выходных данных во внешнем инструменте. Установите тип и формат данных в которых внешний инструмент будет читать/писать входные/выходные данные. Вы также можете задать описание для дизайнера вычислительн [...]
     </message>
     <message>
+        <location filename="../src/ui/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;"><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>
+        <location filename="../src/ui/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; }
+</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;">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 represented as port in workflow designe [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="116"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
@@ -133,6 +124,24 @@ p, li { white-space: pre-wrap; }
         <translation>Добавить выходные данные</translation>
     </message>
     <message>
+        <location filename="../src/ui/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; }
+</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;">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="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; }
@@ -170,15 +179,6 @@ p, li { white-space: pre-wrap; }
         <translation>Добавить атрибут</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: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 itself). In parameterized description you [...]
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="311"/>
         <source>Command line template</source>
         <translation>Заготовка для командной строки</translation>
@@ -696,9 +696,8 @@ p, li { white-space: pre-wrap; }
         <location filename="../src/ui/StartupDialog.ui" line="41"/>
         <source>Note: you can change this option in the UGENE Application Settings
 (Settings > Preferences > Workflow Designer)</source>
-        <translation>
-          Замечание: вы можете изменить эти настройки в общих настройках UGENE
-          (Настройки > Установки > Дизайнер вычислительных схем)
+        <translation>Замечание: вы можете изменить эти настройки в общих настройках UGENE
+(Настройки > Установки > Дизайнер вычислительных схем)
         </translation>
     </message>
 </context>
@@ -1184,7 +1183,7 @@ You could also reset the dialog to the initial state.</source>
     <message>
         <location filename="../src/library/AlignToReferenceWorker.cpp" line="213"/>
         <source>Align to reference</source>
-        <translation>Выровнять на референс</translation>
+        <translation>Выравнивание на референс</translation>
     </message>
 </context>
 <context>
@@ -1192,7 +1191,7 @@ You could also reset the dialog to the initial state.</source>
     <message>
         <location filename="../src/library/AlignToReferenceWorker.cpp" line="100"/>
         <source>Align to Reference</source>
-        <translation>Выровнять на референс</translation>
+        <translation>Выравнивание на референс</translation>
     </message>
     <message>
         <location filename="../src/library/AlignToReferenceWorker.cpp" line="101"/>
@@ -1268,7 +1267,7 @@ You could also reset the dialog to the initial state.</source>
     <message>
         <location filename="../src/library/MSA2SequenceWorker.cpp" line="117"/>
         <source>Split Alignment into Sequences</source>
-        <translation>Разделение выравнивание на последовательности</translation>
+        <translation>Разделение выравнивания на последовательности</translation>
     </message>
     <message>
         <location filename="../src/library/MSA2SequenceWorker.cpp" line="118"/>
@@ -1388,7 +1387,7 @@ You could also reset the dialog to the initial state.</source>
     <message>
         <location filename="../src/library/AssemblyToSequenceWorker.cpp" line="165"/>
         <source>Split Assembly into Sequences</source>
-        <translation>Разделить сборку на последовательности</translation>
+        <translation>Разделение сборки на последовательности</translation>
     </message>
     <message>
         <location filename="../src/library/AssemblyToSequenceWorker.cpp" line="166"/>
@@ -1957,7 +1956,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/DASAnnotationWorker.cpp" line="106"/>
         <source>Annotate with DAS</source>
-        <translation>Аннотирование при помощи DAS</translation>
+        <translation>Аннотирование с помощью DAS</translation>
     </message>
     <message>
         <location filename="../src/library/DASAnnotationWorker.cpp" line="107"/>
@@ -2176,7 +2175,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/StatisticWorkers.cpp" line="81"/>
         <source>DNA Statistics</source>
-        <translation>ДНК статистика</translation>
+        <translation>Статистики для последовательности ДНК</translation>
     </message>
     <message>
         <location filename="../src/library/StatisticWorkers.cpp" line="82"/>
@@ -2342,7 +2341,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="263"/>
         <source>Extract Consensus from Alignment as Sequence</source>
-        <translation>Извлечь консенсус выравнивания как последовательность</translation>
+        <translation>Извлечение консенсуса выравнивания как последовательности</translation>
     </message>
     <message>
         <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="264"/>
@@ -2396,7 +2395,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="348"/>
         <source>Extract Consensus from Alignment as Text</source>
-        <translation>Извлечь консенсус выравнивания как текст</translation>
+        <translation>Извлечение консенсуса выравнивания как текста</translation>
     </message>
     <message>
         <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="349"/>
@@ -2740,7 +2739,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/FilterBamWorker.cpp" line="120"/>
         <source>Filter BAM/SAM files</source>
-        <translation>Фильтрация BAM/SAM файлов</translation>
+        <translation>Фильтрация BAM/SAM-файлов</translation>
     </message>
     <message>
         <location filename="../src/library/FilterBamWorker.cpp" line="121"/>
@@ -3418,7 +3417,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/MergeBamWorker.cpp" line="81"/>
         <source>Merge BAM files</source>
-        <translation>Соединить BAM файлы</translation>
+        <translation>Соединение BAM-файлов</translation>
     </message>
     <message>
         <location filename="../src/library/MergeBamWorker.cpp" line="82"/>
@@ -3519,7 +3518,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/FASTQWorkersLibrary.cpp" line="421"/>
         <source>FASTQ Merger</source>
-        <translation>FASTQ сшивка</translation>
+        <translation>Слияние файлов FASTQ</translation>
     </message>
     <message>
         <location filename="../src/library/FASTQWorkersLibrary.cpp" line="422"/>
@@ -3595,17 +3594,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerPrompter</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="308"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="331"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="321"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="344"/>
         <source>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</source>
         <translation>Принимает по одному сообщению от каждого из элементов <u>%1</u> и <u>%2</u>, объединяет эти сообщения в одно и передает его дальше. Процедура повторяется до тех пор, пока в обоих входных портах имеются сообщения.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="325"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="348"/>
         <source>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</source>
         <translation>Принимает сообщение от элемента <u>%1</u>, объединяет его по очереди с каждым сообщением от элемента <u>%2</u> и отправляет полученные сообщения дальше. Процедура повторяется до тех пор, пока имеются сообщения от <u>%1</u>.</translation>
     </message>
@@ -3613,62 +3612,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerWorker</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="256"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="279"/>
         <source>Multiplexing rule</source>
         <translation>Правило мультиплексирования</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="238"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
         <source>First input port</source>
         <translation>Первый входной порт</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="238"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="244"/>
+        <source>The number of messages, received from "%1" (%2), does not correspond to the number of messages, received from "%3" (%4). Redundant messages were skipped.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</source>
         <translation>Один из входных портов <i>Мультиплексера</i>. В случае, если задано правило мультиплексирования "1 to many", сообщения из этого порта объединяются с каждым сообщением из другого порта.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="241"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
         <source>Second input port</source>
         <translation>Второй входной порт</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="241"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</source>
         <translation>Один из входных портов <i>Мультиплексера</i>. В случае, если задано правило мультиплексирования "1 to many", сообщения из другого порта объединяются с каждым сообщением из этого порта.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="248"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="271"/>
         <source>Multiplexed output</source>
         <translation>Мультиплексированные сообщения</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="249"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
         <source>The port outputs multiplexed messages.</source>
         <translation>Сообщения, полученные в результате объединения двух потоков сообщений.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="257"/>
-        <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
-        <translation>Данный параметр определяет способ объединения сообщений из двух входных портов: <li><b>1 to 1</b> - одно сообщение из первого входного порта объединяется с одним сообщением из второго входного порта. Полученное мультиплексированное сообщение передается на выход. Данная процедура повторяется до тех пор, пока в обоих портах имеются сообщения.</li> <li><b>1 to many</b> - одно сообщение из первого входного порта по очереди объеди [...]
+        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
+        <translation>Данный параметр определяет способ объединения сообщений из двух входных портов: <li><b>1 to 1</b> - одно сообщение из первого входного порта объединяется с одним сообщением из второго входного порта. Полученное мультиплексированное сообщение передается на выход. Данная процедура повторяется до тех пор, пока в обоих портах имеются сообщения.</li> <li><b>1 to many</b> - одно сообщение из первого входного порта по очереди объеди [...]
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="273"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="296"/>
         <source>1 to many</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="274"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
         <source>1 to 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="303"/>
         <source>Multiplexer</source>
         <translation>Мультиплексер</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="281"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
         <source>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</source>
         <translation>Данный элемент позволяет объединять данные из двух различных источников, а именно объединять сообщения, пришедшие во входные порты, в комплексные мультиплексированные сообщения. Способ объединения сообщений задается с помощью параметра <i>Правило мультиплексирования</i>.</translation>
     </message>
@@ -3760,7 +3764,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/FASTQWorkersLibrary.cpp" line="226"/>
         <source>FASTQ Quality Trimmer</source>
-        <translation>Подрезание FASTQ качества</translation>
+        <translation>Обрезание последовательностей в файле FASTQ с учетом качества прочтения</translation>
     </message>
     <message>
         <location filename="../src/library/FASTQWorkersLibrary.cpp" line="227"/>
@@ -3898,7 +3902,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/ReverseComplementWorker.cpp" line="53"/>
         <source>Reverse Complement</source>
-        <translation>Обратная комплементарность</translation>
+        <translation>Создание обратно-комплементарной последовательности</translation>
     </message>
     <message>
         <location filename="../src/library/ReverseComplementWorker.cpp" line="54"/>
@@ -4364,7 +4368,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/RmdupBamWorker.cpp" line="83"/>
         <source>Remove Duplicates in BAM Files</source>
-        <translation>Удаление дубликатов в BAM файлах</translation>
+        <translation>Удаление дубликатов в BAM-файлах</translation>
     </message>
     <message>
         <location filename="../src/library/RmdupBamWorker.cpp" line="84"/>
@@ -4806,7 +4810,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <message>
         <location filename="../src/library/SortBamWorker.cpp" line="81"/>
         <source>Sort BAM Files</source>
-        <translation>Сортировка BAM файлов</translation>
+        <translation>Сортировка BAM-файлов</translation>
     </message>
     <message>
         <location filename="../src/library/SortBamWorker.cpp" line="82"/>
@@ -5140,8 +5144,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="396"/>
-        <source>Annotations name: Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</source>
-        <translation>Имя аннотаций: имя для сохранения аннотаций. Этот параметр доступен только для форматов, которые поддерживают сохранение имен аннотаций.</translation>
+        <source>Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</source>
+        <translation>Имя для сохранения аннотаций. Этот параметр доступен только для форматов, которые поддерживают сохранение имен аннотаций.</translation>
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="401"/>
@@ -5150,7 +5154,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/WriteAnnotationsWorker.cpp" line="402"/>
-        <source>Annotations name: Name of the saved annotation object.</source>
+        <source>Name of the saved annotation object.</source>
         <translation>Имя аннотаций: имя для сохранения объекта аннотации.</translation>
     </message>
     <message>
@@ -6097,22 +6101,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Закрыть панель</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="153"/>
+        <location filename="../src/WorkflowTabView.cpp" line="171"/>
         <source>Rename Dashboard</source>
         <translation>Переименовать панель</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="154"/>
+        <location filename="../src/WorkflowTabView.cpp" line="172"/>
         <source>New dashboard name:</source>
         <translation>Имя новой панели:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="184"/>
+        <location filename="../src/WorkflowTabView.cpp" line="202"/>
         <source>Run</source>
         <translation>Запуск</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowTabView.cpp" line="206"/>
+        <location filename="../src/WorkflowTabView.cpp" line="224"/>
         <source>Rename</source>
         <translation>Переименовать</translation>
     </message>
diff --git a/src/plugins/workflow_designer/workflow_designer.pro b/src/plugins/workflow_designer/workflow_designer.pro
index a4b3899..4f9de8b 100644
--- a/src/plugins/workflow_designer/workflow_designer.pro
+++ b/src/plugins/workflow_designer/workflow_designer.pro
@@ -49,8 +49,6 @@ HEADERS += src/ActorCfgFilterProxyModel.h \
            src/library/ConvertFilesFormatWorker.h \
            src/library/CoreLib.h \
            src/library/CreateExternalProcessDialog.h \
-           src/library/DASAnnotationWorker.h \
-           src/library/DASFetchWorker.h \
            src/library/DocActors.h \
            src/library/DocWorkers.h \
            src/library/ExternalProcessWorker.h \
@@ -160,8 +158,6 @@ SOURCES += src/ActorCfgFilterProxyModel.cpp \
            src/library/ConvertFilesFormatWorker.cpp \
            src/library/CoreLib.cpp \
            src/library/CreateExternalProcessDialog.cpp \
-           src/library/DASAnnotationWorker.cpp \
-           src/library/DASFetchWorker.cpp \
            src/library/DocActors.cpp \
            src/library/DocWorkers.cpp \
            src/library/ExternalProcessWorker.cpp \
diff --git a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
index 08c4d69..c234802 100644
--- a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
@@ -140,7 +140,7 @@ void HMMIOWorkerFactory::init() {
          QList<PortDescriptor*> p; QList<Attribute*> a;
          p << new PortDescriptor(id, t, true /*input*/);
          
-         Descriptor desc(HMMWriter::ACTOR, HMMLib::tr("Write HMM Profile"), HMMLib::tr("Saves all input HMM profiles to specified location."));
+         Descriptor desc(HMMWriter::ACTOR, HMMLib::tr("Write HMM2 Profile"), HMMLib::tr("Saves all input HMM profiles to specified location."));
          IntegralBusActorPrototype* proto = new WriteHMMProto(desc, p, a);
          proto->setPrompter(new HMMWritePrompter());
          r->registerProto(HMMLib::HMM_CATEGORY(), proto);
@@ -153,7 +153,7 @@ void HMMIOWorkerFactory::init() {
          outM[HMMLib::HMM2_SLOT] = HMMLib::HMM_PROFILE_TYPE();
          p << new PortDescriptor(od, DataTypePtr(new MapDataType("hmm.read.out", outM)), false /*output*/, true);
          
-         Descriptor desc(HMMReader::ACTOR, HMMLib::tr("Read HMM Profile"), HMMLib::tr("Reads HMM profiles from file(s). The files can be local or Internet URLs."));
+         Descriptor desc(HMMReader::ACTOR, HMMLib::tr("Read HMM2 Profile"), HMMLib::tr("Reads HMM profiles from file(s). The files can be local or Internet URLs."));
          IntegralBusActorPrototype* proto = new ReadHMMProto(desc, p, a);
          proto->setPrompter(new HMMReadPrompter());
          r->registerProto(HMMLib::HMM_CATEGORY(), proto);
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
index 8096065..53e65a9 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
@@ -54,7 +54,7 @@ HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MAl
 :QDialog(p), ma(_ma), profileName(_pn)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126817");
+    new HelpButton(this, buttonBox, "17466215");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
index b178ebb..8cb57a6 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
@@ -119,7 +119,7 @@ void HMMBuildWorkerFactory::init() {
     a << new Attribute(ldd, BaseTypes::NUM_TYPE(), false, QVariant(double(200)));
     a << new Attribute(td, BaseTypes::NUM_TYPE(), false, QVariant(1));
 
-    Descriptor desc(HMMBuildWorkerFactory::ACTOR, HMMBuildWorker::tr("HMM Build"), HMMBuildWorker::tr("Builds a HMM profile from a multiple sequence alignment."
+    Descriptor desc(HMMBuildWorkerFactory::ACTOR, HMMBuildWorker::tr("HMM2 Build"), HMMBuildWorker::tr("Builds a HMM profile from a multiple sequence alignment."
         "<p>The HMM profile is a statistical model which captures position-specific information"
         " about how conserved each column of the alignment is, and which residues are likely."));
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
index 8aaa91b..e274c7c 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
@@ -47,7 +47,7 @@ HMMCalibrateDialogController::HMMCalibrateDialogController(QWidget* w)
 {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126818");
+    new HelpButton(this, buttonBox, "17466216");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Calibrate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
index c8030a0..13bc738 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, "16126819");
+    new HelpButton(this, buttonBox, "17466217");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
index f126d32..70d4b22 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
@@ -82,7 +82,7 @@ void HMMSearchWorkerFactory::init() {
         a << new Attribute(dtd, BaseTypes::NUM_TYPE(), false, QVariant((double)-1e+09));
     }
 
-    Descriptor desc(HMMSearchWorkerFactory::ACTOR, HMMSearchWorker::tr("HMM Search"),
+    Descriptor desc(HMMSearchWorkerFactory::ACTOR, HMMSearchWorker::tr("HMM2 Search"),
         HMMSearchWorker::tr("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."));
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
diff --git a/src/plugins_3rdparty/hmm2/transl/english.ts b/src/plugins_3rdparty/hmm2/transl/english.ts
index 84158e4..44575d3 100644
--- a/src/plugins_3rdparty/hmm2/transl/english.ts
+++ b/src/plugins_3rdparty/hmm2/transl/english.ts
@@ -1086,8 +1086,8 @@ You can use this option to generate reproducible results for different hmmcalibr
     </message>
     <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
-        <source>HMM Build</source>
-        <translation>HMM Build</translation>
+        <source>HMM2 Build</source>
+        <translation>HMM2 Build</translation>
     </message>
     <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
@@ -1150,6 +1150,10 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation>Random seed</translation>
     </message>
     <message>
+        <source>HMM Build</source>
+        <translation type="obsolete">HMM Build</translation>
+    </message>
+    <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="156"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
@@ -1216,13 +1220,13 @@ You can use this option to generate reproducible results for different hmmcalibr
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="156"/>
-        <source>Read HMM Profile</source>
-        <translation>Read HMM Profile</translation>
+        <source>Read HMM2 Profile</source>
+        <translation>Read HMM2 Profile</translation>
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="143"/>
-        <source>Write HMM Profile</source>
-        <translation>Write HMM Profile</translation>
+        <source>Write HMM2 Profile</source>
+        <translation>Write HMM2 Profile</translation>
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="70"/>
@@ -1348,8 +1352,8 @@ You can use this option to generate reproducible results for different hmmcalibr
     </message>
     <message>
         <location filename="../src/u_search/HMMSearchWorker.cpp" line="85"/>
-        <source>HMM Search</source>
-        <translation>HMM Search</translation>
+        <source>HMM2 Search</source>
+        <translation>HMM2 Search</translation>
     </message>
     <message>
         <location filename="../src/u_search/HMMSearchWorker.cpp" line="158"/>
@@ -1387,6 +1391,10 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation>A name of the result annotations.</translation>
     </message>
     <message>
+        <source>HMM Search</source>
+        <translation type="obsolete">HMM Search</translation>
+    </message>
+    <message>
         <location filename="../src/u_search/HMMSearchWorker.cpp" line="86"/>
         <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>
diff --git a/src/plugins_3rdparty/hmm2/transl/russian.ts b/src/plugins_3rdparty/hmm2/transl/russian.ts
index a7c36ef..f29991b 100644
--- a/src/plugins_3rdparty/hmm2/transl/russian.ts
+++ b/src/plugins_3rdparty/hmm2/transl/russian.ts
@@ -1076,8 +1076,8 @@ The default is instead to generate sequences with a variety of different lengths
     </message>
     <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
-        <source>HMM Build</source>
-        <translation>Построить HMM</translation>
+        <source>HMM2 Build</source>
+        <translation>Построение профиля с помощью HMMER2</translation>
     </message>
     <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
@@ -1140,6 +1140,10 @@ The default is instead to generate sequences with a variety of different lengths
         <translation>Затравка</translation>
     </message>
     <message>
+        <source>HMM Build</source>
+        <translation type="obsolete">Построение HMM профайла</translation>
+    </message>
+    <message>
         <location filename="../src/u_build/HMMBuildWorker.cpp" line="156"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
@@ -1191,7 +1195,7 @@ The default is instead to generate sequences with a variety of different lengths
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="70"/>
         <source>HMMER2 Tools</source>
-        <translation>Программы HMMER2</translation>
+        <translation>Инструменты HMMER2 (скрытые марковские модели)</translation>
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="62"/>
@@ -1211,13 +1215,13 @@ The default is instead to generate sequences with a variety of different lengths
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="156"/>
-        <source>Read HMM Profile</source>
-        <translation>Читать HMM профайл</translation>
+        <source>Read HMM2 Profile</source>
+        <translation>Чтение профиля HMM2</translation>
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="143"/>
-        <source>Write HMM Profile</source>
-        <translation>Сохранить HMM профайл</translation>
+        <source>Write HMM2 Profile</source>
+        <translation>Запись профиля HMM2</translation>
     </message>
     <message>
         <location filename="../src/HMMIOWorker.cpp" line="132"/>
@@ -1338,8 +1342,8 @@ The default is instead to generate sequences with a variety of different lengths
     </message>
     <message>
         <location filename="../src/u_search/HMMSearchWorker.cpp" line="85"/>
-        <source>HMM Search</source>
-        <translation>Поиск HMM</translation>
+        <source>HMM2 Search</source>
+        <translation>Поиск с помощью HMMER2</translation>
     </message>
     <message>
         <location filename="../src/u_search/HMMSearchWorker.cpp" line="158"/>
diff --git a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
index 80bead0..c81c028 100644
--- a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
+++ b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
@@ -65,7 +65,7 @@ void UHMM3BuildDialogImpl::setSignalsAndSlots() {
 
 void UHMM3BuildDialogImpl::initialize() {
     setupUi( this );
-    new HelpButton(this, buttonBox, "16126821");
+    new HelpButton(this, buttonBox, "17466219");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp
index 808a438..de66df8 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, "16126823");
+    new HelpButton(this, buttonBox, "17466221");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
index 5e181b7..986c417 100644
--- a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
+++ b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
@@ -54,7 +54,7 @@ UHMM3SearchDialogImpl::UHMM3SearchDialogImpl(U2SequenceObject *seqObj, QWidget *
     assert(NULL != seqObj);
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126822");
+    new HelpButton(this, buttonBox, "17466220");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/hmm3/transl/russian.ts b/src/plugins_3rdparty/hmm3/transl/russian.ts
index 2b8b44c..0505fa0 100644
--- a/src/plugins_3rdparty/hmm3/transl/russian.ts
+++ b/src/plugins_3rdparty/hmm3/transl/russian.ts
@@ -164,7 +164,7 @@
     <message>
         <location filename="../src/workers/HMM3BuildWorker.cpp" line="77"/>
         <source>HMM3 Build</source>
-        <translation>Построить профиль с помощью HMMER3</translation>
+        <translation>Построение профиля с помощью HMMER3</translation>
     </message>
     <message>
         <location filename="../src/workers/HMM3BuildWorker.cpp" line="77"/>
@@ -187,7 +187,7 @@
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="80"/>
         <source>HMMER3 Tools</source>
-        <translation>HMMER3 (Скрытые Модели Маркова)</translation>
+        <translation>Инструменты HMMER3 (скрытые марковские модели)</translation>
     </message>
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="142"/>
@@ -213,7 +213,7 @@
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="153"/>
         <source>Write HMM3 Profile</source>
-        <translation>Записать HMM3 профиль</translation>
+        <translation>Запись профиля HMM3</translation>
     </message>
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="153"/>
@@ -228,7 +228,7 @@
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="166"/>
         <source>Read HMM3 Profile</source>
-        <translation>Прочитать HMM3 профиль</translation>
+        <translation>Чтение профиля HMM3</translation>
     </message>
     <message>
         <location filename="../src/workers/HMM3IOWorker.cpp" line="166"/>
@@ -345,7 +345,7 @@
     <message>
         <location filename="../src/workers/HMM3SearchWorker.cpp" line="100"/>
         <source>HMM3 Search</source>
-        <translation>Поиск HMM3</translation>
+        <translation>Поиск с помощью HMMER3</translation>
     </message>
     <message>
         <location filename="../src/workers/HMM3SearchWorker.cpp" line="101"/>
@@ -1639,7 +1639,7 @@
     <message>
         <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="20"/>
         <source>HMM3 Build</source>
-        <translation type="unfinished">Построить профиль с помощью HMMER3</translation>
+        <translation>Построить профиль с помощью HMMER3</translation>
     </message>
     <message>
         <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="49"/>
@@ -2000,7 +2000,7 @@
     <message>
         <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="20"/>
         <source>HMM3 Search</source>
-        <translation>Поиск HMM3</translation>
+        <translation>Поиск с помощью HMMER3</translation>
     </message>
     <message>
         <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="180"/>
diff --git a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
index ed4410a..14e03fd 100644
--- a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
@@ -66,7 +66,7 @@ KalignDialogController::KalignDialogController(QWidget* w, const MAlignment& _ma
 : QDialog(w), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126863");
+    new HelpButton(this, buttonBox, "17466261");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -128,7 +128,7 @@ KalignAlignWithExtFileSpecifyDialogController::KalignAlignWithExtFileSpecifyDial
 : QDialog(w), settings(_settings)
     {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126897");
+    new HelpButton(this, buttonBox, "17466295");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp b/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
index 4dcd68e..9aba548 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, "16126842");
+    new HelpButton(this, ui.helpButton, "17466240");
 
     QPushButton* pbPick = ui.pickPrimersButton;
     QPushButton* pbReset = ui.resetButton;
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
index 3ee0c30..3341213 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
@@ -201,7 +201,7 @@ PrimerPair::PrimerPair(const PrimerPair &primerPair):
 {
 }
 
-const PrimerPair &PrimerPair::operator=(const PrimerPair &primerPair)
+PrimerPair &PrimerPair::operator=(const PrimerPair &primerPair)
 {
     leftPrimer.reset( ( primerPair.leftPrimer.isNull( ) ) ? NULL : new Primer( *primerPair.leftPrimer ) );
     rightPrimer.reset( ( primerPair.rightPrimer.isNull( ) ) ? NULL : new Primer( *primerPair.rightPrimer ) );
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.h b/src/plugins_3rdparty/primer3/src/Primer3Task.h
index 607a515..c411949 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.h
@@ -77,7 +77,7 @@ public:
     PrimerPair();
     PrimerPair(const primer_pair &primerPair, int offset = 0);
     PrimerPair(const PrimerPair &primerPair);
-    const PrimerPair &operator=(const PrimerPair &primerPair);
+    PrimerPair &operator=(const PrimerPair &primerPair);
     bool operator==(const PrimerPair& primerPair) const;
 
     Primer *getLeftPrimer()const;
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
index f261780..54a0eed 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
@@ -65,7 +65,7 @@ Primer3TaskSettings::Primer3TaskSettings(const Primer3TaskSettings &settings):
     initMaps();
 }
 
-const Primer3TaskSettings &Primer3TaskSettings::operator=(const Primer3TaskSettings &settings)
+Primer3TaskSettings &Primer3TaskSettings::operator=(const Primer3TaskSettings &settings)
 {
     sequenceName = settings.sequenceName;
     sequence = settings.sequence;
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
index 8e962e0..8bfc4ab 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
@@ -65,7 +65,7 @@ class Primer3TaskSettings
 public:
     Primer3TaskSettings();
     Primer3TaskSettings(const Primer3TaskSettings &settings);
-    const Primer3TaskSettings &operator=(const Primer3TaskSettings &settings);
+    Primer3TaskSettings &operator=(const Primer3TaskSettings &settings);
     ~Primer3TaskSettings();
 
     bool getIntProperty(const QString &key, int *outValue)const;
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
index 6ee3662..4da4fd1 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
@@ -59,7 +59,7 @@ SiteconBuildDialogController::SiteconBuildDialogController(SiteconPlugin* pl, QW
 {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126814");
+    new HelpButton(this, buttonBox, "17466212");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
    
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
index c7b1b7d..47cc569 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, "16126810");
+    new HelpButton(this, buttonBox, "17466208");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/sitecon/transl/russian.ts b/src/plugins_3rdparty/sitecon/transl/russian.ts
index a091b25..2f4f752 100644
--- a/src/plugins_3rdparty/sitecon/transl/russian.ts
+++ b/src/plugins_3rdparty/sitecon/transl/russian.ts
@@ -129,7 +129,7 @@
     <message>
         <location filename="../src/ui/SiteconSearchDialog.ui" line="14"/>
         <source>SITECON Search</source>
-        <translation>Поиск сайтов связывания ТФ по модели SITECON</translation>
+        <translation>Поиск сайтов связывания ТФ с помощью SITECON</translation>
     </message>
     <message>
         <location filename="../src/ui/SiteconSearchDialog.ui" line="22"/>
@@ -249,17 +249,17 @@
     <message>
         <location filename="../src/SiteconBuildWorker.cpp" line="84"/>
         <source>Build SITECON model</source>
-        <translation>Построить SITECON</translation>
+        <translation>Построение модели SITECON</translation>
     </message>
     <message>
         <location filename="../src/SiteconBuildWorker.cpp" line="107"/>
         <source>None</source>
-        <translation type="unfinished"></translation>
+        <translation>None</translation>
     </message>
     <message>
         <location filename="../src/SiteconBuildWorker.cpp" line="108"/>
         <source>Algorithm2</source>
-        <translation type="unfinished"></translation>
+        <translation>Algorithm2</translation>
     </message>
     <message>
         <location filename="../src/SiteconBuildWorker.cpp" line="138"/>
@@ -446,7 +446,7 @@
     <message>
         <location filename="../src/SiteconSearchWorker.cpp" line="102"/>
         <source>Search for TFBS with SITECON</source>
-        <translation>Поиск сайтов связывания ТФ по модели SITECON</translation>
+        <translation>Поиск сайтов связывания ТФ с помощью SITECON</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchWorker.cpp" line="205"/>
@@ -1097,7 +1097,7 @@
     <message>
         <location filename="../src/SiteconSearchTask.cpp" line="28"/>
         <source>SITECON search</source>
-        <translation>Поиск сайтов связывания ТФ по модели SITECON</translation>
+        <translation>Поиск сайтов связывания ТФ с помощью SITECON</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchTask.cpp" line="45"/>
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
index 2716f36..4a2afb1 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
@@ -50,7 +50,7 @@ MuscleAlignDialogController::MuscleAlignDialogController(QWidget* w, const MAlig
     : QDialog(w), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126825");
+    new HelpButton(this, buttonBox, "17466223");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -138,7 +138,7 @@ MuscleAlignWithExtFileSpecifyDialogController::MuscleAlignWithExtFileSpecifyDial
 : QDialog(w), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126824");
+    new HelpButton(this, buttonBox, "17466222");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //this->adjustSize();
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
index 534fc78..44c1169 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
@@ -48,7 +48,7 @@ struct Range {
 /////////////////////////////////////////////////////////////////////
 
 MuscleParallelTask::MuscleParallelTask(const MAlignment& ma, MAlignment& res, const MuscleTaskSettings& _config, MuscleContext* ctx)
-: Task(tr("MuscleParallelTask"),TaskFlags_NR_FOSCOE)
+    : Task(tr("MuscleParallelTask"), TaskFlags_NR_FOSCOE), progAlignTask(NULL), refineTreeTask(NULL), refineTask(NULL)
 {
     //assert(ma.isNormalized()); //not required to be normalized    assert(_config.op == MuscleTaskOp_Align || _config.op == MuscleTaskOp_Refine);    workpool = NULL;
     setMaxParallelSubtasks(1);
@@ -110,9 +110,9 @@ void MusclePrepareTask::run() {
         workpool->ph = new MuscleParamsHelper(workpool->ti, workpool->ctx);
         _run(); 
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
         }
     } 
     catch (std::bad_alloc) {
@@ -319,9 +319,9 @@ void ProgressiveAlignTask::run() {
     try {
         _run(); 
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
         }
     }
     catch (std::bad_alloc) {
@@ -394,9 +394,9 @@ void ProgressiveAlignWorker::run() {
     try {
         _run();
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
         }
     }
     catch (std::bad_alloc) {
@@ -526,9 +526,9 @@ void RefineTreeTask::run() {
     try {
         _run(); 
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
         }
     }
     catch (std::bad_alloc) {
@@ -587,9 +587,9 @@ void RefineTask::run() {
         workpool->mainSem.release(workpool->nThreads);
         perfLog.trace(QString("Parallel muscle refine stage complete. Elapsed %1 ms").arg(timer.elapsed()));
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
         }
         workpool->refineDone = true;
         workpool->mainSem.release(workpool->nThreads);
@@ -634,7 +634,7 @@ void RefineTask::_run() {
 ////////////////////////////////////////////////////////////////////////////
 
 RefineWorker::RefineWorker(MuscleWorkPool *_workpool, int _workerID) 
-    :Task(QString("RefineWorker"),TaskFlags_FOSCOE),workpool(_workpool), workerID(_workerID)
+    :Task(QString("RefineWorker"), TaskFlags_FOSCOE), workpool(_workpool), workerID(_workerID), Leaves1(NULL), Leaves2(NULL)
 {
     assert(workerID>=0);
     assert(workpool!=NULL);
@@ -645,9 +645,9 @@ void RefineWorker::run() {
     try {
         _run();
     }
-    catch (MuscleException e) {
+    catch (MuscleException *e) {
         if (!isCanceled()) {
-            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e.str) );
+            workpool->ti.setError(  tr("Internal parallel MUSCLE error: %1").arg(e->str) );
             workpool->childSem.release();
         }
     }
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
index dbae97b..3b66d65 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
@@ -29,6 +29,7 @@
 #include <U2Core/AppSettings.h>
 #include <U2Core/AppResources.h>
 #include <U2Core/StateLockableDataModel.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
@@ -105,12 +106,6 @@ MuscleTask::MuscleTask(const MAlignment& ma, const MuscleTaskSettings& _config)
         CHECK_EXT(inputSubMA != MAlignment(), setError(tr("Stopping MUSCLE task, because of error in MAlignment::mid function")), );
     }
 
-    ctx->input_uIds = new unsigned[inputSubMA.getNumRows()];
-    ctx->tmp_uIds = new unsigned[inputSubMA.getNumRows()];
-    for(unsigned i=0, n = inputSubMA.getNumRows(); i<n; i++) {
-        ctx->input_uIds[i] = i;
-    }
-
     if (config.nThreads == 1 || (config.op != MuscleTaskOp_Align)) {
         tpm = Task::Progress_Manual;
     } else {
@@ -173,17 +168,17 @@ void MuscleTask::doAlign(bool refine) {
         resultMA.setAlphabet(inputMA.getAlphabet());
         QByteArray emptySeq;
         const int nSeq = inputMA.getNumRows();
-        int *ids = new int[nSeq];
 
         const int resNSeq = resultSubMA.getNumRows();
-        bool *existID = new bool[nSeq];
-        memset(existID,0,sizeof(bool)*nSeq);
-        for(int i=0, n = resNSeq; i < n; i++) {
-            ids[i] = ctx->output_uIds ? ctx->output_uIds[i] : i;
+        const int maxSeq = qMax(nSeq, resNSeq);
+        QVector<unsigned int> ids(maxSeq, 0);
+        QVector<bool> existID(maxSeq, false);
+        for (int i = 0; i < resNSeq; i++) {
+            ids[i] = ctx->output_uIds.length() > i ? ctx->output_uIds[i] : i;
             existID[ids[i]] = true;
         }
         if(config.stableMode) {
-            for(int i = 0; i<nSeq;i++) {
+            for(int i = 0; i < nSeq;i++) {
                 ids[i] = i;
             }
         }
@@ -201,7 +196,6 @@ void MuscleTask::doAlign(bool refine) {
                 j++;
             }
         }
-        delete[] existID;
 
         SAFE_POINT_EXT(resultSubMA.getNumRows() == inputMA.getNumRows(),
             stateInfo.setError(tr("Unexpected number of rows in the result multiple alignment!")), );
@@ -229,7 +223,6 @@ void MuscleTask::doAlign(bool refine) {
                     resultMA.appendChars(i, resultLen, inputRow.toByteArray(subLen, os).constData(), subLen);
                 }
             }
-            delete[] ids;
             //TODO: check if there are GAP columns on borders and remove them
         } else {
             resultMA = resultSubMA;
@@ -401,6 +394,8 @@ void MuscleGObjectTask::prepare() {
         return;
     }
 
+    TaskWatchdog::trackResourceExistence(obj, this, tr("A problem occurred during aligning profile to profile with MUSCLE. The original alignment is no more available."));
+
     lock = new StateLock(MUSCLE_LOCK_REASON);
     obj->lockState(lock);
     muscleTask = new MuscleTask(obj->getMAlignment(), config);
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp b/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
index 3fae0b4..3de48e1 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
@@ -66,7 +66,7 @@ int ugene_printf(FILE *f, const char *format, ...) {
     assert(n>=0 && n < 1024);
     Q_UNUSED(n);
 
-    FILEStub* s = (FILEStub*)f;
+    FILEStub* s = static_cast<FILEStub*>(f);
     s->tsi.setDescription(QString::fromLatin1(str));
     return 0;
 }
@@ -100,6 +100,7 @@ void setupAlphaAndScore(const DNAAlphabet* al, TaskStateInfo& ti) {
 
 void convertMAlignment2MSA(MSA& muscleMSA, const MAlignment& ma, bool fixAlpha) {    
     MuscleContext *ctx = getMuscleContext();
+    ctx->fillUidsVectors(ma.getNumRows());
     for (int i=0, n = ma.getNumRows(); i<n; i++) {
         const MAlignmentRow& row = ma.getRow(i);
         
@@ -124,7 +125,10 @@ void convertMAlignment2MSA(MSA& muscleMSA, const MAlignment& ma, bool fixAlpha)
 
 void convertMAlignment2SecVect(SeqVect& sv, const MAlignment& ma, bool fixAlpha) {
     sv.Clear();
+
     MuscleContext *ctx = getMuscleContext();
+    ctx->fillUidsVectors(ma.getNumRows());
+
     unsigned i=0;
     unsigned seq_count = 0;
     foreach(const MAlignmentRow& row, ma.getRows()) {
@@ -150,9 +154,8 @@ void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MAlignment& res) {
     assert(res.isEmpty());
     MuscleContext *ctx = getMuscleContext();
     res.setAlphabet(al);
-    delete[] ctx->output_uIds;
-    ctx->output_uIds = new unsigned[msa.GetSeqCount()];
-    
+    ctx->output_uIds.clear();
+
     for(int i=0, n = msa.GetSeqCount(); i < n; i++) {
         QString name = msa.GetSeqName(i);
         QByteArray seq;
@@ -161,7 +164,7 @@ void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MAlignment& res) {
             char c = msa.GetChar(i, j);
             seq.append(c);
         }
-        ctx->output_uIds[i] = ctx->tmp_uIds[msa.GetSeqId(i)];
+        ctx->output_uIds.append(ctx->tmp_uIds[msa.GetSeqId(i)]);
         U2OpStatus2Log os;
         res.addRow(name, seq, os);
     }
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
index 842051e..4ff3d05 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
@@ -28,7 +28,8 @@ 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) 
+        treeNodeStatus(NULL), treeNodeIndexes(NULL), nThreads(_nThreads), uJoin(0), ptrbOscillating(false), bAnyAccepted(false), InternalNodeIndexes(NULL), uInternalNodeCount(0),
+        bReversed(false), bRight(false), History(NULL), bLockLeft(NULL), bLockRight(false), msaIn(NULL)
     {
             refineConstructot();
     }
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/clwwt.cpp b/src/plugins_3rdparty/umuscle/src/muscle/clwwt.cpp
index 4fb73ca..6f6ffd4 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/clwwt.cpp
+++ b/src/plugins_3rdparty/umuscle/src/muscle/clwwt.cpp
@@ -165,10 +165,9 @@ void CalcClustalWWeights(const Tree &tree, WEIGHT Weights[])
 
 void MSA::SetClustalWWeights(const Tree &tree)
 	{
-	const unsigned uSeqCount = GetSeqCount();
 	const unsigned uLeafCount = tree.GetLeafCount();
 
-	WEIGHT *Weights = new WEIGHT[uSeqCount];
+    WEIGHT *Weights = new WEIGHT[uLeafCount];
 
 	CalcClustalWWeights(tree, Weights);
 
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.cpp b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.cpp
index 26a5b65..0e4f179 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.cpp
+++ b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.cpp
@@ -21,17 +21,49 @@ bool MuscleContext::glbalndimer_stuct::InitializePPTerm()
 
 MuscleContext::MuscleContext(int _nThreads) 
 {
-    unsigned contextSize = sizeof(*this); 
-    memset(this,0,contextSize); //safe operation only if not inherited
+    memset(&intmath, 0, sizeof(intmath));
+    memset(&params, 0, sizeof(params));
+    memset(&alpha, 0, sizeof(alpha));
+    memset(&muscle, 0, sizeof(muscle));
+    memset(&nwdasimple, 0, sizeof(nwdasimple));
+    memset(&ppscore, 0, sizeof(ppscore));
+    memset(&scoredist, 0, sizeof(scoredist));
+    memset(&objscore2, 0, sizeof(objscore2));
+    memset(&nwsmalls, 0, sizeof(nwsmalls));
+    memset(&fastdistnuc, 0, sizeof(fastdistnuc));
+    memset(&fastdistmafft, 0, sizeof(fastdistmafft));
+    memset(&glbalignsp, 0, sizeof(glbalignsp));
+    memset(&glbalignspn, 0, sizeof(glbalignspn));
+    memset(&glbalignss, 0, sizeof(glbalignss));
+    memset(&glbalignle, 0, sizeof(glbalignle));
+    memset(&setnewhandler, 0, sizeof(setnewhandler));
+    memset(&options, 0, sizeof(options));
+    memset(&globals, 0, sizeof(globals));
+    memset(&progress, 0, sizeof(progress));
+    memset(&scoregaps, 0, sizeof(scoregaps));
+    memset(&glbaligndiag, 0, sizeof(glbaligndiag));
+    memset(&upgma2, 0, sizeof(upgma2));
+    memset(&msa2, 0, sizeof(msa2));
+    memset(&validateids, 0, sizeof(validateids));
+    memset(&refinehoriz, 0, sizeof(refinehoriz));
+    memset(&spfast, 0, sizeof(spfast));
+    memset(&readmx, 0, sizeof(readmx));
+    memset(&mhack, 0, sizeof(mhack));
+    memset(&glbalndimer, 0, sizeof(glbalndimer));
+    memset(&subfams, 0, sizeof(subfams));
+    memset(&savebest, 0, sizeof(savebest));
+    memset(&enumtostr, 0, sizeof(enumtostr));
+    memset(&finddiags, 0, sizeof(finddiags));
+    memset(&finddiagsn, 0, sizeof(finddiagsn));
+    memset(&globalswin32, 0, sizeof(globalswin32));
+
     nThreads = _nThreads;
+    progressStub = 0;
     progressPercent = &progressStub;
+    cancelStub = 0;
     cancelFlag = &cancelStub;
 
     m_uIdCount = 0;
-    
-    input_uIds = NULL;
-    tmp_uIds = NULL;
-    output_uIds = NULL;
 
     //intmath.cpp
     intmath.bInit = false;
@@ -367,6 +399,16 @@ MuscleContext::MuscleContext(int _nThreads)
     spfast.bGapScoreMatrixInit = false;
 } 
 
+void MuscleContext::fillUidsVectors(int rowsCount) {
+    const int initialRowsCount = input_uIds.length();
+    tmp_uIds.reserve(initialRowsCount + rowsCount);
+    input_uIds.reserve(initialRowsCount + rowsCount);
+    for (unsigned i = initialRowsCount; i < initialRowsCount + rowsCount; i++) {
+        input_uIds.append(i);
+        tmp_uIds.append(i);
+    }
+}
+
 extern void FreeDPMemSPN();  
 
 MuscleContext::~MuscleContext() {
@@ -374,11 +416,6 @@ MuscleContext::~MuscleContext() {
 
     delete ppscore.g_ptrPPScoreMSA1;
     delete ppscore.g_ptrPPScoreMSA2;
-
-    delete[] input_uIds;
-    delete[] output_uIds;
-    delete[] tmp_uIds;
-    
     //glbalignsp.cpp
     if (glbalignsp.DPM.uLength > 0) {
         for (unsigned i = 0; i < glbalignsp.DPM.uLength; ++i) {
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
index 21b8815..7fadab9 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
+++ b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
@@ -4,6 +4,7 @@
 #include "profile.h"
 #include <limits.h>
 #include <time.h>
+#include <QVector>
 
 class MuscleException {
 public:
@@ -19,6 +20,8 @@ public:
     MuscleContext(int nTHreads ); 
     ~MuscleContext();
 
+    void fillUidsVectors(int rowsCount);
+
     int nThreads;
     
     int *cancelFlag;
@@ -33,9 +36,9 @@ public:
     static const unsigned NULL_NEIGHBOR = UINT_MAX;
     unsigned m_uIdCount;
 
-    unsigned *input_uIds;
-    unsigned *tmp_uIds;
-    unsigned *output_uIds;
+    QVector<unsigned> input_uIds;
+    QVector<unsigned> tmp_uIds;
+    QVector<unsigned> output_uIds;
 
     struct intmath_struct {
         bool bInit;
diff --git a/src/plugins_3rdparty/umuscle/transl/english.ts b/src/plugins_3rdparty/umuscle/transl/english.ts
index bd99fc9..10eb8e9 100644
--- a/src/plugins_3rdparty/umuscle/transl/english.ts
+++ b/src/plugins_3rdparty/umuscle/transl/english.ts
@@ -315,27 +315,27 @@
 <context>
     <name>U2::MuscleAddSequencesToProfileTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="267"/>
+        <location filename="../src/MuscleTask.cpp" line="268"/>
         <source>MUSCLE align profiles '%1' vs '%2'</source>
         <translation>MUSCLE align profiles '%1' vs '%2'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="269"/>
+        <location filename="../src/MuscleTask.cpp" line="270"/>
         <source>MUSCLE align '%2' by profile '%1'</source>
         <translation>MUSCLE align '%2' by profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="310"/>
+        <location filename="../src/MuscleTask.cpp" line="311"/>
         <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="331"/>
+        <location filename="../src/MuscleTask.cpp" line="332"/>
         <source>No sequences found in file %1</source>
         <translation>No sequences found in file %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="333"/>
+        <location filename="../src/MuscleTask.cpp" line="334"/>
         <source>No alignment found in file %1</source>
         <translation>No alignment found in file %1</translation>
     </message>
@@ -460,17 +460,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="603"/>
+        <location filename="../src/MuscleTask.cpp" line="606"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="616"/>
+        <location filename="../src/MuscleTask.cpp" line="619"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="619"/>
+        <location filename="../src/MuscleTask.cpp" line="622"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
@@ -478,27 +478,32 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="363"/>
+        <location filename="../src/MuscleTask.cpp" line="364"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="366"/>
+        <location filename="../src/MuscleTask.cpp" line="367"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="369"/>
+        <location filename="../src/MuscleTask.cpp" line="370"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE add to profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="372"/>
+        <location filename="../src/MuscleTask.cpp" line="373"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE align profiles</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="418"/>
+        <location filename="../src/MuscleTask.cpp" line="405"/>
+        <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="421"/>
         <source>MAlignment object has been changed</source>
         <translation>MAlignment object has been changed</translation>
     </message>
@@ -590,37 +595,37 @@
 <context>
     <name>U2::MuscleTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="74"/>
+        <location filename="../src/MuscleTask.cpp" line="75"/>
         <source>MUSCLE alignment</source>
         <translation>MUSCLE alignment</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="82"/>
+        <location filename="../src/MuscleTask.cpp" line="83"/>
         <source>MUSCLE alignment started</source>
         <translation>MUSCLE alignment started</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="103"/>
+        <location filename="../src/MuscleTask.cpp" line="104"/>
         <source>Incorrect region to align</source>
         <translation>Incorrect region to align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="105"/>
+        <location filename="../src/MuscleTask.cpp" line="106"/>
         <source>Stopping MUSCLE task, because of error in MAlignment::mid function</source>
         <translation>Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="130"/>
+        <location filename="../src/MuscleTask.cpp" line="131"/>
         <source>Performing MUSCLE alignment...</source>
         <translation>Performing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="153"/>
+        <location filename="../src/MuscleTask.cpp" line="154"/>
         <source>MUSCLE alignment successfully finished</source>
         <translation>MUSCLE alignment successfully finished</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="207"/>
+        <location filename="../src/MuscleTask.cpp" line="208"/>
         <source>Unexpected number of rows in the result multiple alignment!</source>
         <translation>Unexpected number of rows in the result multiple alignment!</translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/transl/russian.ts b/src/plugins_3rdparty/umuscle/transl/russian.ts
index 4484db9..c686d5b 100644
--- a/src/plugins_3rdparty/umuscle/transl/russian.ts
+++ b/src/plugins_3rdparty/umuscle/transl/russian.ts
@@ -204,7 +204,7 @@
     <message>
         <location filename="../src/ProfileToProfileWorker.cpp" line="115"/>
         <source>Aligned profile to profile with MUSCLE</source>
-        <translation>Выровнять профиль на профиль при помощи MUSCLE</translation>
+        <translation>Выравнивание профиля на профиль при помощи MUSCLE</translation>
     </message>
     <message>
         <location filename="../src/ProfileToProfileWorker.cpp" line="211"/>
@@ -229,7 +229,7 @@
     <message>
         <location filename="../src/ProfileToProfileWorker.cpp" line="228"/>
         <source>Align Profile to Profile With MUSCLE</source>
-        <translation>Выровнять профиль на профиль при помощи MUSCLE</translation>
+        <translation>Выравнивание профиля на профиль при помощи MUSCLE</translation>
     </message>
     <message>
         <location filename="../src/ProfileToProfileWorker.cpp" line="229"/>
@@ -315,27 +315,27 @@
 <context>
     <name>U2::MuscleAddSequencesToProfileTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="267"/>
+        <location filename="../src/MuscleTask.cpp" line="268"/>
         <source>MUSCLE align profiles '%1' vs '%2'</source>
         <translation>MUSCLE выравнивает '%1' к '%2'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="269"/>
+        <location filename="../src/MuscleTask.cpp" line="270"/>
         <source>MUSCLE align '%2' by profile '%1'</source>
         <translation>MUSCLE добавляет '%2' к '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="310"/>
+        <location filename="../src/MuscleTask.cpp" line="311"/>
         <source>Sequences in file have different alphabets %1</source>
         <translation>Последовательности в файле имеют разные алфавиты: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="331"/>
+        <location filename="../src/MuscleTask.cpp" line="332"/>
         <source>No sequences found in file %1</source>
         <translation>Файл не содержит последовательностей: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="333"/>
+        <location filename="../src/MuscleTask.cpp" line="334"/>
         <source>No alignment found in file %1</source>
         <translation>Файл не содержит выравниваний: %1</translation>
     </message>
@@ -460,17 +460,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="603"/>
+        <location filename="../src/MuscleTask.cpp" line="606"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="616"/>
+        <location filename="../src/MuscleTask.cpp" line="619"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="619"/>
+        <location filename="../src/MuscleTask.cpp" line="622"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
@@ -478,27 +478,32 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="363"/>
+        <location filename="../src/MuscleTask.cpp" line="364"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="366"/>
+        <location filename="../src/MuscleTask.cpp" line="367"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="369"/>
+        <location filename="../src/MuscleTask.cpp" line="370"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE добавляет в выравнивание '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="372"/>
+        <location filename="../src/MuscleTask.cpp" line="373"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE выравнивает пару выравниваний</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="418"/>
+        <location filename="../src/MuscleTask.cpp" line="405"/>
+        <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="421"/>
         <source>MAlignment object has been changed</source>
         <translation>Объект множественного выравнивания был изменен</translation>
     </message>
@@ -590,37 +595,37 @@
 <context>
     <name>U2::MuscleTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="74"/>
+        <location filename="../src/MuscleTask.cpp" line="75"/>
         <source>MUSCLE alignment</source>
         <translation>Выравнивание с помощью MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="82"/>
+        <location filename="../src/MuscleTask.cpp" line="83"/>
         <source>MUSCLE alignment started</source>
         <translation>MUSCLE alignment started</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="103"/>
+        <location filename="../src/MuscleTask.cpp" line="104"/>
         <source>Incorrect region to align</source>
         <translation>Incorrect region to align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="105"/>
+        <location filename="../src/MuscleTask.cpp" line="106"/>
         <source>Stopping MUSCLE task, because of error in MAlignment::mid function</source>
         <translation>Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="130"/>
+        <location filename="../src/MuscleTask.cpp" line="131"/>
         <source>Performing MUSCLE alignment...</source>
         <translation>Performing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="153"/>
+        <location filename="../src/MuscleTask.cpp" line="154"/>
         <source>MUSCLE alignment successfully finished</source>
         <translation>MUSCLE alignment successfully finished</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="207"/>
+        <location filename="../src/MuscleTask.cpp" line="208"/>
         <source>Unexpected number of rows in the result multiple alignment!</source>
         <translation>Unexpected number of rows in the result multiple alignment!</translation>
     </message>
diff --git a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
index 0db6258..fc925f3 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
+++ b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
@@ -128,7 +128,7 @@ public:
             //assert(!slotName.isEmpty());
             if (it.value().isEmpty()) {
                 if (screenedSlot == slot) {
-                    problemList.append(Problem(IntegralBusPort::tr("Empty input slot: %1").arg(slotName)));
+                    problemList.append(Problem(CallVariantsWorker::tr("Empty input slot: %1").arg(slotName)));
                     return false;
                 }
             }
diff --git a/src/plugins_3rdparty/variants/transl/english.ts b/src/plugins_3rdparty/variants/transl/english.ts
index 79872fb..a227353 100644
--- a/src/plugins_3rdparty/variants/transl/english.ts
+++ b/src/plugins_3rdparty/variants/transl/english.ts
@@ -1,14 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="en_US" sourcelanguage="en">
-<context>
-    <name>IntegralBusPort</name>
-    <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
-        <source>Empty input slot: %1</source>
-        <translation>Empty input slot: %1</translation>
-    </message>
-</context>
+<TS version="2.1" language="en_US" sourcelanguage="en">
 <context>
     <name>U2::LocalWorkflow::CallVariantsPrompter</name>
     <message>
@@ -83,6 +75,11 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsWorker</name>
     <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
+        <source>Empty input slot: %1</source>
+        <translation>Empty input slot: %1</translation>
+    </message>
+    <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="151"/>
         <source>Input sequences</source>
         <translation>Input sequences</translation>
@@ -429,8 +426,12 @@
     </message>
     <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
+        <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>
+    <message>
         <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 [...]
-        <translation>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 '‘t [...]
+        <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"/>
diff --git a/src/plugins_3rdparty/variants/transl/russian.ts b/src/plugins_3rdparty/variants/transl/russian.ts
index 77d878f..bd1a24d 100644
--- a/src/plugins_3rdparty/variants/transl/russian.ts
+++ b/src/plugins_3rdparty/variants/transl/russian.ts
@@ -1,14 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="ru" sourcelanguage="en">
-<context>
-    <name>IntegralBusPort</name>
-    <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
-        <source>Empty input slot: %1</source>
-        <translation>Входной слот пуст: %1</translation>
-    </message>
-</context>
+<TS version="2.1" language="ru" sourcelanguage="en">
 <context>
     <name>U2::LocalWorkflow::CallVariantsPrompter</name>
     <message>
@@ -83,6 +75,11 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsWorker</name>
     <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
+        <source>Empty input slot: %1</source>
+        <translation>Входной слот пуст: %1</translation>
+    </message>
+    <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="151"/>
         <source>Input sequences</source>
         <translation>Входные последовательности</translation>
@@ -115,7 +112,7 @@
     <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="173"/>
         <source>Call Variants with SAMtools</source>
-        <translation>Вызов вариаций при помощи SAMtools</translation>
+        <translation>Поиск вариабельных позиций с помощью SAMtools</translation>
     </message>
     <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="174"/>
@@ -429,8 +426,12 @@
     </message>
     <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
+        <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>
+    <message>
         <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 [...]
-        <translation>Позволен двойной/тройной вызов (-T).</translation>
+        <translation type="vanished">Позволен двойной/тройной вызов (-T).</translation>
     </message>
     <message>
         <location filename="../src/SamtoolMpileupWorker.cpp" line="321"/>
diff --git a/src/plugins_3rdparty/variants/variants.pro b/src/plugins_3rdparty/variants/variants.pro
index 6d0de71..3dca685 100644
--- a/src/plugins_3rdparty/variants/variants.pro
+++ b/src/plugins_3rdparty/variants/variants.pro
@@ -8,4 +8,6 @@ HEADERS += src/SamtoolMpileupWorker.h \
 SOURCES += src/SamtoolMpileupWorker.cpp \
 		   src/AssemblySamtoolsMpileup.cpp \
 		   src/SamtoolsPlugin.cpp 
+
+TRANSLATIONS += transl/english.ts transl/russian.ts
   
\ No newline at end of file
diff --git a/src/ugene_globals.pri b/src/ugene_globals.pri
index 0b7a43b..f05add2 100644
--- a/src/ugene_globals.pri
+++ b/src/ugene_globals.pri
@@ -10,6 +10,10 @@ DEFINES+=UGENE_VER_MAJOR=$${UGENE_VER_MAJOR}
 DEFINES+=UGENE_VER_MINOR=$${UGENE_VER_MINOR}
 DEFINES+=UGENE_VER_PATCH=$${UGENE_VER_PATCH}
 
+unix : !macx : INCLUDEPATH-=/usr/include
+unix : !macx : INCLUDEPATH+=/usr/include/qt5 /usr/include
+#unix : !macx : INCLUDEPATH =/usr/include/qt5 $$INCLUDEPATH
+
 # NGS package
 _UGENE_NGS = $$(UGENE_NGS)
 contains(_UGENE_NGS, 1) : DEFINES += UGENE_NGS
@@ -22,6 +26,8 @@ win32-msvc2013 : DEFINES += _SCL_SECURE_NO_WARNINGS
 win32 : QMAKE_CFLAGS_RELEASE = -O2 -Oy- -MD -Zi
 win32 : QMAKE_CXXFLAGS_RELEASE = -O2 -Oy- -MD -Zi
 win32 : QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /MAP /MAPINFO:EXPORTS /DEBUG
+win32 : LIBS += psapi.lib
+win32 : DEFINES += "PSAPI_VERSION=1"
 
 macx {
     CONFIG -= warn_on
@@ -148,3 +154,28 @@ defineTest( without_non_free ) {
     contains( UGENE_WITHOUT_NON_FREE, 1 ) : return (true)
     return (false)
 }
+
+#Check minimal Qt version
+# Taken from Qt Creator project files
+defineTest(minQtVersion) {
+    maj = $$1
+    min = $$2
+    patch = $$3
+    isEqual(QT_MAJOR_VERSION, $$maj) {
+        isEqual(QT_MINOR_VERSION, $$min) {
+            isEqual(QT_PATCH_VERSION, $$patch) {
+                return(true)
+            }
+            greaterThan(QT_PATCH_VERSION, $$patch) {
+                return(true)
+            }
+        }
+        greaterThan(QT_MINOR_VERSION, $$min) {
+            return(true)
+        }
+    }
+    greaterThan(QT_MAJOR_VERSION, $$maj) {
+        return(true)
+    }
+    return(false)
+}
diff --git a/src/ugene_version.pri b/src/ugene_version.pri
index d874f5a..877af72 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.19.0
+UGENE_VERSION=1.20.0
 
 # 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=19
+UGENE_VER_MINOR=20
 UGENE_VER_PATCH=0
diff --git a/src/ugenecl/src/Main.cpp b/src/ugenecl/src/Main.cpp
index 8454147..65da2ec 100644
--- a/src/ugenecl/src/Main.cpp
+++ b/src/ugenecl/src/Main.cpp
@@ -49,7 +49,6 @@
 #include <U2Core/CMDLineUtils.h>
 #include <U2Core/ConsoleShutdownTask.h>
 #include <U2Core/Counter.h>
-#include <U2Core/DASSource.h>
 #include <U2Core/DBXRefRegistry.h>
 #include <U2Core/DNAAlphabetRegistryImpl.h>
 #include <U2Core/DNATranslation.h>
@@ -438,9 +437,6 @@ int main(int argc, char **argv)
     U2DataPathRegistry* dpr = new U2DataPathRegistry();
     appContext->setDataPathRegistry(dpr);
 
-    DASSourceRegistry* dsr = new DASSourceRegistry();
-    appContext->setDASSourceRegistry(dsr);
-
     TaskStatusBarCon* tsbc=new TaskStatusBarCon();
 
     // show help if need
@@ -499,9 +495,6 @@ int main(int argc, char **argv)
     appContext->setPasswordStorage(NULL);
     delete passwordStorage;
 
-    appContext->setDASSourceRegistry(NULL);
-    delete dsr;
-
     appContext->setDataPathRegistry(NULL);
     delete dpr;
 
diff --git a/src/ugenecl/ugenecl.pri b/src/ugenecl/ugenecl.pri
index 531e080..38019cb 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
+LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
 
 !debug_and_release|build_pass {
 
@@ -24,8 +24,8 @@ LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Re
         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
-        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Testd -lU2Remoted -lU2Langd -lU2Privated -lugenedbd -lbreakpadd
+        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
     }
 
     CONFIG(release, debug|release) {
diff --git a/src/ugenem/src/SendReportDialog.cpp b/src/ugenem/src/SendReportDialog.cpp
index 4bbd2ca..4617cd8 100644
--- a/src/ugenem/src/SendReportDialog.cpp
+++ b/src/ugenem/src/SendReportDialog.cpp
@@ -176,6 +176,7 @@ bool ReportSender::send(const QString &additionalInfo, const QString &dumpUrl) {
 
         dumpPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream"));
         dumpPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"dump\"; filename=\"" + file->fileName() + "\""));
+        dumpPart.setHeader(QNetworkRequest::UserAgentHeader, QVariant("Unipro UGENE Crash Reporter"));
 
         multiPart->append(dumpPart);
     }
diff --git a/src/ugeneui/html/version_news.html b/src/ugeneui/html/version_news.html
index d489cb6..1a67e58 100644
--- a/src/ugeneui/html/version_news.html
+++ b/src/ugeneui/html/version_news.html
@@ -50,18 +50,13 @@
 </head>
 <body>
 <div>
-    <h3>Major changes in UGENE 1.19</h3>
+    <h3>Major changes in UGENE 1.20</h3>
     <ul class="features_list">
-        <li><span class="research_field">Usability:</span> Pasting of data into UGENE was further improved. In particular, you can now paste file using its URL.</li>
-        <li><span class="research_field">Sequence View:</span> Visibility of the Sequence View subviews (Overview, Zoom View, Details View) can be configured using new buttons on the Sequence View toolbar.</li>
-        <li><span class="research_field">Multiple Alignments:</span> A region of an alignment can now be copied in the RichText (HTML) format.</li>
-        <li><span class="research_field">Phylogeny:</span> The <i>Build Phylogenetic Tree</i> dialog interface was improved.</li>
-        <li><span class="research_field">NGS:</span> Setting of a reference for an assembly became much easier.</li>
-        <li><span class="research_field">NGS:</span> The <i>SPAdes de novo</i> assembler was updated to 3.6.0 version.</li>
-        <li><span class="research_field">NGS:</span> Partially valid BED files can now be opened. A warning notification is shown for lines that can't be parsed.</li>
-        <li><span class="research_field">Workflows Automation:</span> The <i>Multiplexer</i> workflow element was simplified.</li>
-        <li>UGENE appearance on HiDPI displays was improved.</li>
-        <li>Chinese and Czech languages are no more supported since this UGENE version.</li>
+        <li><span class="research_field">Multi-line Sequence View:</span> A new mode for wrapping sequences in the Details View was added.</li>
+        <li><span class="research_field">Multiple Alignment:</span> Replacing of characters was added. Click Shift+R on a character to enter the replacement mode, input another character.</li>
+        <li><span class="research_field">Proteins:</span> Loading of chain names from PDB files was corrected.</li>
+        <li><span class="research_field">Usability:</span> Invertion of annotations selections was improved.</li>
+        <li>Distributed Annotation System (DAS) features were removed, as <a href="http://www.ebi.ac.uk/about/news/service-news/das-services-to-retire">DAS services are going to retire</a> at the end of the year.</li>
     </ul>
 </div>
 </body>
diff --git a/src/ugeneui/src/Main.cpp b/src/ugeneui/src/Main.cpp
index e233742..4221099 100644
--- a/src/ugeneui/src/Main.cpp
+++ b/src/ugeneui/src/Main.cpp
@@ -54,7 +54,6 @@
 #include <U2Core/CMDLineRegistry.h>
 #include <U2Core/CMDLineUtils.h>
 #include <U2Core/Counter.h>
-#include <U2Core/DASSource.h>
 #include <U2Core/DBXRefRegistry.h>
 #include <U2Core/DNAAlphabetRegistryImpl.h>
 #include <U2Core/DNATranslation.h>
@@ -112,7 +111,6 @@
 #include <U2View/AssemblyNavigationWidget.h>
 #include <U2View/AssemblySettingsWidget.h>
 #include <U2View/ColorSchemaSettingsController.h>
-#include <U2View/DasWidgetFactory.h>
 #include <U2View/DnaAssemblyUtils.h>
 #include <U2View/FindPatternWidgetFactory.h>
 #include <U2View/MSAExportConsensusTabFactory.h>
@@ -214,7 +212,27 @@ static void initLogsCache(LogCacheExt& logsCache, const QStringList& ) {
         logsCache.setFileOutputEnabled(ls.outputFile);
     }
 }
-
+void guiTestMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+    Q_UNUSED(context)
+    switch (type) {
+    case QtDebugMsg:
+        uiLog.trace(msg);
+        break;
+    case QtWarningMsg:
+        uiLog.details(msg);
+        break;
+    case QtCriticalMsg:
+        uiLog.error(msg);
+        break;
+    case QtFatalMsg:
+        uiLog.error(msg);
+        abort();
+    default:
+        uiLog.trace(msg);
+        break;
+    }
+}
 static void initOptionsPanels() {
     OPWidgetFactoryRegistry *opWidgetFactoryRegistry = AppContext::getOPWidgetFactoryRegistry();
     OPCommonWidgetFactoryRegistry *opCommonWidgetFactoryRegistry = AppContext::getOPCommonWidgetFactoryRegistry();
@@ -224,8 +242,6 @@ static void initOptionsPanels() {
     opWidgetFactoryRegistry->registerFactory(new AnnotHighlightWidgetFactory());
     opWidgetFactoryRegistry->registerFactory(new SequenceInfoFactory());
 
-    opWidgetFactoryRegistry->registerFactory(new DasWidgetFactory());
-
     // Assembly Browser groups
     opWidgetFactoryRegistry->registerFactory(new AssemblyNavigationWidgetFactory());
     opWidgetFactoryRegistry->registerFactory(new AssemblyInfoWidgetFactory());
@@ -433,6 +449,9 @@ int main(int argc, char **argv)
     //print some settings info, can't do it earlier than logging is initialized
     coreLog.trace(QString("Active UGENE.ini file : %1").arg(AppContext::getSettings()->fileName()));
 
+    qInstallMessageHandler(guiTestMessageOutput);
+
+
 #if defined(Q_OS_UNIX)
     if (envList.indexOf("UGENE_GUI_TEST=1") >= 0) {
         QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
@@ -608,9 +627,6 @@ int main(int argc, char **argv)
     U2DataPathRegistry* dpr = new U2DataPathRegistry();
     appContext->setDataPathRegistry(dpr);
 
-    DASSourceRegistry* dsr = new DASSourceRegistry();
-    appContext->setDASSourceRegistry(dsr);
-
     CredentialsAsker* credentialsAsker = new CredentialsAskerGui();
     appContext->setCredentialsAsker(credentialsAsker);
 
@@ -763,9 +779,6 @@ int main(int argc, char **argv)
     appContext->setPasswordStorage(NULL);
     delete passwordStorage;
 
-    appContext->setDASSourceRegistry( NULL );
-    delete dsr;
-
     appContext->setDataPathRegistry( NULL );
     delete dpr;
 
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
index 72facf2..b48c6de 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("16126583");
+const QString DirectoriesSettingsPageController::helpPageId = QString("17465981");
 
 DirectoriesSettingsPageWidget::DirectoriesSettingsPageWidget(DirectoriesSettingsPageController* /*ctrl*/) {
     setupUi(this);
diff --git a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
index 12047a8..2cba93b 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("16126576");
+const QString FormatSettingsGUIPageController::helpPageId = QString("17465974");
 
 FormatSettingsGUIPageWidget::FormatSettingsGUIPageWidget(FormatSettingsGUIPageController*) {
     setupUi(this);
diff --git a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
index dac5725..b4bbca3 100644
--- a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
@@ -69,7 +69,7 @@ AppSettingsGUIPageWidget* LogSettingsPageController::createWidget(AppSettingsGUI
     return w;
 }
 
-const QString LogSettingsPageController::helpPageId = QString("16126577");
+const QString LogSettingsPageController::helpPageId = QString("17465975");
 
 //////////////////////////////////////////////////////////////////////////
 // widget
diff --git a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
index bc2ff95..105937a 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("16126575");
+const QString NetworkSettingsPageController::helpPageId = QString("17465973");
 
 NetworkSettingsPageWidget::NetworkSettingsPageWidget() {
     setupUi( this );
diff --git a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
index 605d74a..59a0250 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("16126574");
+const QString ResourceSettingsGUIPageController::helpPageId = QString("17465972");
 
 ResourceSettingsGUIPageWidget::ResourceSettingsGUIPageWidget(ResourceSettingsGUIPageController*) {
     setupUi(this);
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 56dd226..662e4d2 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
@@ -108,7 +108,7 @@ AppSettingsGUIPageWidget* UserApplicationsSettingsPageController::createWidget(A
     return r;
 }
 
-const QString UserApplicationsSettingsPageController::helpPageId = QString("16126573");
+const QString UserApplicationsSettingsPageController::helpPageId = QString("17465971");
 
 UserApplicationsSettingsPageWidget::UserApplicationsSettingsPageWidget(UserApplicationsSettingsPageController* ctrl) {
     setupUi(this);
diff --git a/src/ugeneui/src/main_window/MainWindowImpl.cpp b/src/ugeneui/src/main_window/MainWindowImpl.cpp
index 8b863ac..0cd1efc 100644
--- a/src/ugeneui/src/main_window/MainWindowImpl.cpp
+++ b/src/ugeneui/src/main_window/MainWindowImpl.cpp
@@ -187,6 +187,7 @@ MainWindowImpl::MainWindowImpl() {
     openWDManualAction = NULL;
     openQDManualAction = NULL;
     welcomePageAction = NULL;
+    crashUgeneAction = NULL;
     shutDownInProcess = false;
 #ifdef _INSTALL_TO_PATH_ACTION
     installToPathAction = NULL;
@@ -240,6 +241,7 @@ void MainWindowImpl::createActions() {
     aboutAction->setObjectName("About");
     aboutAction->setShortcut(QKeySequence(Qt::Key_F1));
     aboutAction->setShortcutContext(Qt::ApplicationShortcut);
+    aboutAction->setMenuRole(QAction::AboutRole);
     connect(aboutAction, SIGNAL(triggered()), SLOT(sl_aboutAction()));
 
     visitWebAction = new QAction(tr("Visit UGENE Web Site"), this);
@@ -624,16 +626,6 @@ void MainWindowImpl::sl_show(){
     emit si_show();
 }
 
-int bar();
-
-int foo() {
-    return bar();
-}
-
-int bar() {
-    return foo();
-}
-
 void MainWindowImpl::sl_crashUgene() {
     volatile int *killer = NULL;
     *killer = 0;
diff --git a/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp b/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
index e06d839..bbf1d40 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, "16126554");
+    new HelpButton(this, buttonBox, "17465952");
 
     setObjectName("DocumentFormatSelectorDialog");
 }
diff --git a/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp b/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
index 0787a02..ea5a9cc 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, "16126754");
+    new HelpButton(this, buttonBox, "17466152");
 }
 
 int DocumentProviderSelectorController::getSelectedFormatIdx() const {
diff --git a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
index 1adaacc..1e64b37 100644
--- a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
@@ -80,7 +80,7 @@ bool DocumentReadingModeSelectorController::adjustReadingMode(FormatDetectionRes
     d->setModal(true);
     ui.setupUi(d.data());
 
-    new HelpButton(d.data(), ui.buttonBox, "16126527");
+    new HelpButton(d.data(), ui.buttonBox, "17465925");
 
     bool canBeShortReads = minSequenceSize > 0 && maxSequenceSize < 2000;
     bool haveReadAligners = !AppContext::getDnaAssemblyAlgRegistry()->getRegisteredAlgorithmIds().isEmpty();
diff --git a/src/ugeneui/src/project_support/ExportProjectDialogController.cpp b/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
index 15b6a1c..d18fb48 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, "16126527");
+    new HelpButton(this, buttonBox, "17465925");
 
     setModal(true);
     projectFile = fixProjectFile(defaultProjectFileName);
diff --git a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
index 57ab2b4..e6041aa 100644
--- a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
@@ -118,7 +118,7 @@ void MultipleDocumentsReadingModeDialog::setupNewUrl(){
 bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMap& props, const QMap<QString, qint64>& headerSequenceLengths){
     setModal(true);
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126615");
+    new HelpButton(this, buttonBox, "17466013");
 
     // doesn't matter from what position, because excluded fileName all path of documents are the same
     CHECK(!urls.isEmpty(), false);
diff --git a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
index d8734ba..3ee577c 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
@@ -71,7 +71,7 @@ namespace U2 {
 //////////////////////////////////////////////////////////////////////////
 
 ProjectLoaderImpl::ProjectLoaderImpl() {
-    openProjectAction = newProjectAction = separatorAction1 = separatorAction2 = NULL;
+    openProjectAction = newProjectAction = NULL;
     recentProjectsMenu = NULL;
 
     assert(AppContext::getProject() == NULL);
@@ -108,7 +108,7 @@ ProjectLoaderImpl::ProjectLoaderImpl() {
     downloadRemoteFileAction->setIcon(QIcon(":ugene/images/world_go.png"));
     connect(downloadRemoteFileAction, SIGNAL(triggered()), SLOT(sl_downloadRemoteFile()));
 
-    accessSharedDatabaseAction = new QAction(tr("Connect to shared database..."), this);
+    accessSharedDatabaseAction = new QAction(tr("Connect to UGENE shared database..."), this);
     accessSharedDatabaseAction->setObjectName(ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
     accessSharedDatabaseAction->setIcon(QIcon(":core/images/db/database_go.png"));
     accessSharedDatabaseAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L));
@@ -119,13 +119,6 @@ ProjectLoaderImpl::ProjectLoaderImpl() {
     searchGenbankEntryAction->setIcon(QIcon(":ugene/images/world_go.png"));
     connect(searchGenbankEntryAction, SIGNAL(triggered()), SLOT(sl_searchGenbankEntry()));
 
-
-    separatorAction1  = new QAction("", this);
-    separatorAction1->setSeparator(true);
-
-    separatorAction2 = new QAction("", this);
-    separatorAction2->setSeparator(true);
-
     //add load/close actions to menu and toolbar
     MainWindow* mw = AppContext::getMainWindow();
     QMenu* fileMenu = mw->getTopLevelMenu(MWMENU_FILE);
@@ -138,18 +131,33 @@ ProjectLoaderImpl::ProjectLoaderImpl() {
     recentItemsMenu->menuAction()->setObjectName("recent_docs_menu_action");
     updateRecentItemsMenu();
 
+    QAction* newSectionSeparator = new QAction("", this);
+    newSectionSeparator->setSeparator(true);
+    newSectionSeparator->setObjectName(ACTION_PROJECTSUPPORT__NEW_SECTION_SEPARATOR);
+
+    QAction* openSectionSeparator = new QAction("", this);
+    openSectionSeparator->setSeparator(true);
+
+    QAction* remoteSectionSeparator = new QAction("", this);
+    remoteSectionSeparator->setSeparator(true);
+
+    QAction* recentSectionSeparator = new QAction("", this);
+    recentSectionSeparator->setSeparator(true);
+
     QList<QAction*> actions;
     actions << newProjectAction
             << newDocumentFromtext
-            << downloadRemoteFileAction
-            << accessSharedDatabaseAction
-            << searchGenbankEntryAction
+            << newSectionSeparator
             << openProjectAction
             << addExistingDocumentAction
-            << separatorAction1
-            <<  recentItemsMenu->menuAction()
+            << openSectionSeparator
+            << downloadRemoteFileAction
+            << searchGenbankEntryAction
+            << accessSharedDatabaseAction
+            << remoteSectionSeparator
+            << recentItemsMenu->menuAction()
             << recentProjectsMenu->menuAction()
-            << separatorAction2;
+            << recentSectionSeparator;
 
     fileMenu->insertActions(fileMenu->actions().first(), actions);
 
@@ -495,8 +503,8 @@ Task* ProjectLoaderImpl::openWithProjectTask(const QList<GUrl>& _urls, const QVa
                     dr.rawDataCheckResult.properties.unite(hintsOverDocuments);
                     if (dr.format != NULL ) {
                         bool forceReadingOptions = hints.value(ProjectLoaderHint_ForceFormatOptions, false).toBool();
-                        bool optionsAlreadyChosen = hints.value((ProjectLoaderHint_MultipleFilesMode_Flag), false).toBool() 
-                            || hints.value((DocumentReadingMode_SequenceMergeGapSize), false).toBool() 
+                        bool optionsAlreadyChosen = hints.value((ProjectLoaderHint_MultipleFilesMode_Flag), false).toBool()
+                            || hints.value((DocumentReadingMode_SequenceMergeGapSize), false).toBool()
                             || hints.value((DocumentReadingMode_SequenceAsAlignmentHint), false).toBool()
                             || hints.value((DocumentReadingMode_SequenceAsShortReadsHint), false).toBool()
                             || hints.value((DocumentReadingMode_SequenceAsSeparateHint), false).toBool();
@@ -795,7 +803,7 @@ void SaveProjectDialogController::sl_clicked(QAbstractButton *button) {
 //////////////////////////////////////////////////////////////////////////
 ProjectDialogController::ProjectDialogController(ProjectDialogController::Mode m, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "16126551");
+    new HelpButton(this, buttonBox, "17465949");
     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 927ddc1..356faba 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.h
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.h
@@ -107,8 +107,6 @@ private:
     QAction* accessSharedDatabaseAction;
     QAction* searchGenbankEntryAction;
     QAction* newDocumentFromtext;
-    QAction* separatorAction1;
-    QAction* separatorAction2;
 
     QMenu* recentProjectsMenu;
     QMenu* recentItemsMenu;
diff --git a/src/ugeneui/src/project_support/ProjectServiceImpl.cpp b/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
index 1c1861f..5b51d04 100644
--- a/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
@@ -50,6 +50,7 @@ ProjectServiceImpl::ProjectServiceImpl(Project* _pr)
     saveAction = NULL;
     saveAsAction = NULL;
     closeProjectAction = NULL;
+    projectActionsSeparator = NULL;
     exportProjectAction = NULL;
 
     pr = _pr;
@@ -168,9 +169,13 @@ Task::ReportResult ProjectServiceEnableTask::report() {
     psi->exportProjectAction->setObjectName(ACTION_PROJECTSUPPORT__EXPORT_PROJECT);
     connect(psi->exportProjectAction, SIGNAL(triggered()), psi, SLOT(sl_exportProject()));
 
+    psi->projectActionsSeparator = new QAction("", psi);
+    psi->projectActionsSeparator->setSeparator(true);
+
     MainWindow* mw = AppContext::getMainWindow();
     QMenu* fileMenu = mw->getTopLevelMenu(MWMENU_FILE);
-    QAction* beforeAction= GUIUtils::findActionAfter(fileMenu->actions(), ACTION_PROJECTSUPPORT__OPEN_AS);
+    QAction* beforeAction = GUIUtils::findActionAfter(fileMenu->actions(), ACTION_PROJECTSUPPORT__RECENT_PROJECTS_MENU);
+    fileMenu->insertAction(beforeAction,  psi->projectActionsSeparator);
     fileMenu->insertAction(beforeAction,  psi->saveAction);
     fileMenu->insertAction(beforeAction,  psi->saveAsAction);
     fileMenu->insertAction(beforeAction,  psi->exportProjectAction);
@@ -199,6 +204,9 @@ Task::ReportResult ProjectServiceDisableTask::report() {
     delete psi->closeProjectAction;
     psi->closeProjectAction = NULL;
 
+    delete psi->projectActionsSeparator;
+    psi->projectActionsSeparator = NULL;
+
     return ReportResult_Finished;
 }
 
diff --git a/src/ugeneui/src/project_support/ProjectServiceImpl.h b/src/ugeneui/src/project_support/ProjectServiceImpl.h
index 6d827e8..4f07b99 100644
--- a/src/ugeneui/src/project_support/ProjectServiceImpl.h
+++ b/src/ugeneui/src/project_support/ProjectServiceImpl.h
@@ -64,6 +64,7 @@ private:
 	QAction* saveAction;
     QAction* saveAsAction;
 	QAction* closeProjectAction;
+    QAction* projectActionsSeparator;
 	QAction* exportProjectAction;
 
 	Project* pr;
diff --git a/src/ugeneui/src/project_view/ProjectViewImpl.cpp b/src/ugeneui/src/project_view/ProjectViewImpl.cpp
index 6e5dba8..df75066 100644
--- a/src/ugeneui/src/project_view/ProjectViewImpl.cpp
+++ b/src/ugeneui/src/project_view/ProjectViewImpl.cpp
@@ -681,7 +681,7 @@ bool ProjectViewWidget::detectFormatFromAdapter(IOAdapter* io, QVariantMap &hint
         hints = dr.rawDataCheckResult.properties;
         if (!hints.contains(DocumentReadingMode_MaxObjectsInDoc)) {
             hints[DocumentReadingMode_MaxObjectsInDoc] = ProjectLoaderImpl::maxObjectsInSingleDocument;
-        }   
+        }
     }
     return (NULL != dr.format) || (NULL != dr.importer);
 }
@@ -991,15 +991,17 @@ void ProjectViewImpl::sl_onActivated(GObject* o) {
 
     CHECK(!projectTreeController->isObjectInRecycleBin(o), );
 
-    GObjectSelection os; os.addToSelection(o);
-    MultiGSelection ms; ms.addSelection(&os);
+    GObjectSelection os;
+    os.addToSelection(o);
+    MultiGSelection ms;
+    ms.addSelection(&os);
 
     QMenu activeViewsMenu(tr("Active views"), NULL);
     QList<QAction*> openActions;
     QList<GObjectViewFactory*> fs = AppContext::getObjectViewFactoryRegistry()->getAllFactories();
     foreach(GObjectViewFactory* f, fs) {
         QList<QAction*> tmp = selectOpenViewActions(f, ms, &activeViewsMenu, true);
-        openActions<<tmp;
+        openActions << tmp;
     }
     if (openActions.size() == 1 ) {
         QAction* a = openActions.first();
@@ -1065,7 +1067,6 @@ QList<QAction*> ProjectViewImpl::selectOpenViewActions(GObjectViewFactory* f, co
     QList<QAction*> res;
 
     //check if object is already displayed in some view.
-    QList<GObjectViewWindow*> views;
     QList<MWMDIWindow*> windows = AppContext::getMainWindow()->getMDIManager()->getWindows();
     const GObjectSelection *objectsSelection = static_cast<const GObjectSelection *>(ms.findSelectionByType(GSelectionTypes::GOBJECTS));
     const DocumentSelection *docSelection = static_cast<const DocumentSelection *>(ms.findSelectionByType(GSelectionTypes::DOCUMENTS));
@@ -1231,7 +1232,7 @@ void ProjectViewImpl::buildViewMenu(QMenu& m) {
 
     const DocumentSelection* docsSelection = getDocumentSelection();
     const GObjectSelection* objsSelection = getGObjectSelection();
-    
+
     SAFE_POINT(docsSelection != NULL, "Document selection is NULL", );
     SAFE_POINT(objsSelection != NULL, "Object selection is NULL", );
 
@@ -1304,14 +1305,14 @@ void ProjectViewImpl::buildViewMenu(QMenu& m) {
         }
     }
 
-    Document *docToOpen = projectTreeController->getDocsInSelection(true).size() == 1 ? 
+    Document *docToOpen = projectTreeController->getDocsInSelection(true).size() == 1 ?
         projectTreeController->getDocsInSelection(true).toList().first() : NULL;
     if (docToOpen != NULL && !docToOpen->isDatabaseConnection()) {
         GUrl docUrl = docToOpen->getURL();
         if (docUrl.isLocalFile() || docUrl.isNetworkSource()) {
             m.addAction(openContainingFolder);
         }
-    }    
+    }
 }
 
 void ProjectViewImpl::sl_activateView() {
@@ -1427,7 +1428,7 @@ void ProjectViewImpl::sl_onToggleCircular() {
 }
 
 void ProjectViewImpl::sl_onOpenContainingFolder() {
-    Document *docToOpen = projectTreeController->getDocsInSelection(true).size() == 1 ? 
+    Document *docToOpen = projectTreeController->getDocsInSelection(true).size() == 1 ?
         projectTreeController->getDocsInSelection(true).toList().first() : NULL;
     if (docToOpen != NULL && !docToOpen->isDatabaseConnection()) {
         GUrl docUrl = docToOpen->getURL();
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
index c63ca9c..f4dd709 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDesktopServices>
 #include <QFile>
 #include <QScrollBar>
 
@@ -37,7 +38,7 @@ StatisticalReportController::StatisticalReportController(const QString &newHtmlF
     setWindowTitle(tr("Welcome to UGENE %1.%2").arg(v.major).arg(v.minor));
     QFile file(newHtmlFilepath);
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
-        newsTextEdit->setText(tr("Error loading release new from file"));
+        newsTextBrowser->setText(tr("Error loading release new from file"));
         return;
     }
 
@@ -46,7 +47,8 @@ StatisticalReportController::StatisticalReportController(const QString &newHtmlF
         htmlText += file.readLine();
     }
 
-    newsTextEdit->setText(htmlText);
+    newsTextBrowser->setText(htmlText);
+    connect(newsTextBrowser, SIGNAL(anchorClicked(const QUrl &)), SLOT(sl_onAnchorClicked(const QUrl &)));
 }
 
 bool StatisticalReportController::isInfoSharingAccepted() const {
@@ -55,15 +57,19 @@ bool StatisticalReportController::isInfoSharingAccepted() const {
 
 void StatisticalReportController::paintEvent(QPaintEvent *event) {
     QWidget::paintEvent(event);
-    QScrollBar *vBar = newsTextEdit->verticalScrollBar();
+    QScrollBar *vBar = newsTextBrowser->verticalScrollBar();
     if(vBar->maximum() == vBar->value()){
         return;
     }
     //adjust QTextEditor size
     while(vBar->maximum() != vBar->value()){
-        newsTextEdit->setMinimumHeight(newsTextEdit->size().height() + 1);
+        newsTextBrowser->setMinimumHeight(newsTextBrowser->size().height() + 1);
     }
-    newsTextEdit->setMinimumHeight(newsTextEdit->size().height() + 10);
+    newsTextBrowser->setMinimumHeight(newsTextBrowser->size().height() + 10);
+}
+
+void StatisticalReportController::sl_onAnchorClicked(const QUrl &url) {
+    QDesktopServices::openUrl(url);
 }
 
 }
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.h b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
index 461b647..ac6d90c 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.h
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
@@ -33,6 +33,8 @@ public:
     bool isInfoSharingAccepted() const;
 protected:
     void paintEvent(QPaintEvent *event);
+private slots:
+void sl_onAnchorClicked(const QUrl &url);
 };
 
 }
diff --git a/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui b/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui
index de86cc1..ac4d402 100644
--- a/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui
+++ b/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui
@@ -21,7 +21,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QTextEdit" name="newsTextEdit">
+    <widget class="QTextBrowser" name="newsTextBrowser">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
        <horstretch>0</horstretch>
@@ -50,6 +50,9 @@ p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></string>
      </property>
+     <property name="openLinks">
+     <bool>false</bool>
+     </property>
     </widget>
    </item>
    <item>
diff --git a/src/ugeneui/src/task_view/TaskViewController.cpp b/src/ugeneui/src/task_view/TaskViewController.cpp
index 68c24bf..f7f7fd0 100644
--- a/src/ugeneui/src/task_view/TaskViewController.cpp
+++ b/src/ugeneui/src/task_view/TaskViewController.cpp
@@ -315,8 +315,9 @@ void TaskViewDockWidget::sl_onSubtaskAdded(Task* sub) {
 }
 
 void TaskViewDockWidget::sl_onTaskProgress()  {
-    Task* t = qobject_cast<Task*>(sender());
-    TVTreeItem* ti = findItem(t, false);
+    Task *t = qobject_cast<Task *>(sender());
+    CHECK(NULL != t, );
+    TVTreeItem *ti = findItem(t, false);
     if (ti == NULL) {
         if (t != NULL){
             assert(!t->isTopLevelTask());
diff --git a/src/ugeneui/transl/english.ts b/src/ugeneui/transl/english.ts
index e7415cd..0813836 100644
--- a/src/ugeneui/transl/english.ts
+++ b/src/ugeneui/transl/english.ts
@@ -445,17 +445,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="700"/>
+        <location filename="../src/Main.cpp" line="704"/>
         <source>UGENE started</source>
         <translation>UGENE started</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="701"/>
+        <location filename="../src/Main.cpp" line="705"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>UGENE version: %1 %2-bit</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="702"/>
+        <location filename="../src/Main.cpp" line="706"/>
         <source>UGENE distribution: %1</source>
         <translation>UGENE distribution: %1</translation>
     </message>
@@ -664,20 +664,25 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="929"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="947"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="991"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1009"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1045"/>
+        <source>Load document and add to project: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="447"/>
+        <location filename="../src/Main.cpp" line="448"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Style not available %1</translation>
     </message>
@@ -814,7 +819,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DisableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1462"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1226"/>
         <source>Disable project viewer</source>
         <translation>Disable project viewer</translation>
     </message>
@@ -965,7 +970,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1450"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1214"/>
         <source>Enable ProjectView</source>
         <translation>Enable ProjectView</translation>
     </message>
@@ -1143,38 +1148,38 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MWMDIManagerImpl</name>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="71"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="75"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="76"/>
         <source>Close active view</source>
         <translation>Close active view</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="78"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="80"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="79"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="81"/>
         <source>Close all windows</source>
         <translation>Close all windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="83"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="85"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="84"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="86"/>
         <source>Tile windows</source>
         <translation>Tile windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="88"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="90"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="89"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="91"/>
         <source>Cascade windows</source>
         <translation>Cascade windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="110"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="112"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="111"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="113"/>
         <source>Next window</source>
         <translation>Next window</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="116"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="118"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
         <source>Previous window</source>
         <translation>Previous window</translation>
     </message>
@@ -1215,99 +1220,99 @@ 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="235"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="236"/>
         <source>Exit</source>
         <translation>Exit</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="239"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="240"/>
         <source>About</source>
         <translation>About</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
         <source>Visit UGENE Web Site</source>
         <translation>Visit UGENE Web Site</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="249"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="251"/>
         <source>View UGENE Documentation Online</source>
         <translation>View UGENE Documentation Online</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="257"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="259"/>
         <source>Open UGENE User Manual</source>
         <translation>Open UGENE User Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="261"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Open Workflow Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="265"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
         <source>Open Query Designer Manual</source>
         <translation>Open Query Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="269"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
         <source>Open Start Page</source>
         <translation>Open Start Page</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="273"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
         <source>Crash UGENE</source>
         <translation>Crash UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="278"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="280"/>
         <source>Enable Terminal Usage...</source>
         <translation>Enable Terminal Usage...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="364"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
         <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="365"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="367"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="368"/>
         <source>Wait</source>
         <translation>Wait</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="444"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="449"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="457"/>
+        <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"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="444"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
         <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="449"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="451"/>
         <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="457"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="459"/>
         <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="462"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="462"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1316,12 +1321,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="475"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="477"/>
         <source>Can not open %1 file. </source>
         <translation>Can not open %1 file. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1332,7 +1337,7 @@ or view online documentation.
 Do you want view online documentation?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="253"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="255"/>
         <source>Check for Updates</source>
         <translation>Check for Updates</translation>
     </message>
@@ -1382,12 +1387,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1052"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1076"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1054"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1078"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1507,22 +1512,22 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="799"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="817"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="800"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="818"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="859"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="877"/>
         <source>Choose directory</source>
         <translation>Choose directory</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="893"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="911"/>
         <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>
@@ -1570,84 +1575,84 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectLoaderImpl</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="111"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="119"/>
         <source>Connect to shared database...</source>
         <translation>Connect to shared database...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="204"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="213"/>
         <source>UGENE project file</source>
         <translation>UGENE project file</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="210"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="214"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="219"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="223"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="927"/>
         <source>Select files to open</source>
         <translation>Select files to open</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="454"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="463"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="461"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
         <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>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="463"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
         <source>warning</source>
         <translation>warning</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="481"/>
         <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="549"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="558"/>
         <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="552"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="561"/>
         <source>File is empty: %1</source>
         <translation>File is empty: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="588"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="597"/>
         <source>Project is already opened</source>
         <translation>Project is already opened</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="594"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="603"/>
         <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="595"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="604"/>
         <source>New Window</source>
         <translation>New Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="597"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="606"/>
         <source>This Window</source>
         <translation>This Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="608"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="617"/>
         <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="614"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="623"/>
         <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="881"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="899"/>
         <source>New Project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,57 +1661,62 @@ Do you want view online documentation?</translation>
         <translation type="vanished">New Project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="883"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="901"/>
         <source>project</source>
         <translation>project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="100"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="108"/>
         <source>Open...</source>
         <translation>Open...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="89"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="91"/>
         <source>Open as...</source>
         <translation>Open as...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="809"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="827"/>
         <source>Save project as</source>
         <translation>Save project as</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="810"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="828"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="133"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="141"/>
         <source>Recent projects</source>
         <translation>Recent projects</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="83"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="85"/>
         <source>&New project...</source>
         <translation>&New project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="95"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="97"/>
         <source>New document from text...</source>
         <translation>New document from text...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="106"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="102"/>
+        <source>Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="114"/>
         <source>Access remote database...</source>
         <translation>Access remote database...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="117"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="125"/>
         <source>Search NCBI GenBank...</source>
         <translation>Search NCBI GenBank...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="137"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="145"/>
         <source>Recent files</source>
         <translation>Recent files</translation>
     </message>
@@ -1763,88 +1773,88 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectViewImpl</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="750"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="514"/>
         <source>Mark as circular</source>
         <translation>Mark as circular</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="754"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="518"/>
         <source>Relocate...</source>
         <translation>Relocate...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="758"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="522"/>
         <source>Export document...</source>
         <translation>Export document...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="527"/>
         <source>Open containing folder</source>
         <translation>Open containing folder</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="703"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
         <source>ProjectView</source>
         <translation>ProjectView</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="703"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
         <source>ProjectView service provides basic project visualization and manipulation functionality</source>
         <translation>ProjectView service provides basic project visualization and manipulation functionality</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="746"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
         <source>Save selected documents</source>
         <translation>Save selected documents</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="918"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="682"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="999"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1041"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="805"/>
         <source>Active views</source>
         <translation>Active views</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1107"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="871"/>
         <source>Activate view: %1</source>
         <translation>Activate view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1121"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="885"/>
         <source>Open new view: %1</source>
         <translation>Open new view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1136"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="900"/>
         <source>Open saved view '%1' with a state '%2'</source>
         <translation>Open saved view '%1' with a state '%2'</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1184"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="948"/>
         <source>Add to view: %1</source>
         <translation>Add to view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1230"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="994"/>
         <source>Open view</source>
         <translation>Open view</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1231"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
         <source>Add to view</source>
         <translation>Add to view</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1351"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1115"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1393"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1157"/>
         <source>Select new file location</source>
         <translation>Select new file location</translation>
     </message>
@@ -1860,35 +1870,25 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="444"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="442"/>
         <source>Project</source>
         <translation>Project</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="449"/>
         <source>Paste file from clipboard</source>
-        <translation>Paste file from clipboard</translation>
-    </message>
-    <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="492"/>
-        <source>Pasting of directories is not supported:</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Paste file from clipboard</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="506"/>
         <source>Unable to handle so huge data in clipboard.</source>
-        <translation>Unable to handle so huge data in clipboard.</translation>
+        <translation type="vanished">Unable to handle so huge data in clipboard.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="614"/>
         <source>UGENE can not recognize current clipboard content as one of supported formats.</source>
-        <translation>UGENE can not recognize current clipboard content as one of supported formats.</translation>
+        <translation type="vanished">UGENE can not recognize current clipboard content as one of supported formats.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="648"/>
         <source>No active project found!</source>
-        <translation>No active project found!</translation>
+        <translation type="vanished">No active project found!</translation>
     </message>
 </context>
 <context>
@@ -2031,47 +2031,47 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::TVReportWindow</name>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="453"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="433"/>
         <source>Task report [%1]</source>
         <translation>Task report [%1]</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Failed</source>
         <translation>Failed</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Canceled</source>
         <translation>Canceled</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Finished</source>
         <translation>Finished</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="465"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="445"/>
         <source>status</source>
         <translation>status</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="467"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="447"/>
         <source>error:</source>
         <translation>error:</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="472"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="452"/>
         <source>time</source>
         <translation>time</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="532"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="512"/>
         <source>Open containing directory</source>
         <translation>Open containing directory</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="539"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="519"/>
         <source>Open by operating system</source>
         <translation>Open by operating system</translation>
     </message>
@@ -2149,62 +2149,62 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::TaskViewDockWidget</name>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="53"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="54"/>
         <source>Tasks</source>
         <translation>Tasks</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="311"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="293"/>
         <source>Activating task report: %1</source>
         <translation>Activating task report: %1</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="614"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="594"/>
         <source>finished</source>
         <translation>Finished</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="596"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="576"/>
         <source>Canceling...</source>
         <translation>Canceling...</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="87"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="88"/>
         <source>Cancel task</source>
         <translation>Cancel task</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="92"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="93"/>
         <source>View report</source>
         <translation>View report</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="96"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="97"/>
         <source>Remove report</source>
         <translation>Remove report</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="126"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="127"/>
         <source>Task name</source>
         <translation>Task name</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="127"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="128"/>
         <source>Task state description</source>
         <translation>Task state description</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="128"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="129"/>
         <source>Task progress</source>
         <translation>Task progress</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="129"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="130"/>
         <source>Actions</source>
         <translation>Actions</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="594"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="574"/>
         <source>Canceled</source>
         <translation>Canceled</translation>
     </message>
@@ -2272,7 +2272,7 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="428"/>
+        <location filename="../src/Main.cpp" line="429"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">UGENE initialization started</translation>
     </message>
diff --git a/src/ugeneui/transl/russian.ts b/src/ugeneui/transl/russian.ts
index 569c8dc..8678cd9 100644
--- a/src/ugeneui/transl/russian.ts
+++ b/src/ugeneui/transl/russian.ts
@@ -445,17 +445,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="700"/>
+        <location filename="../src/Main.cpp" line="704"/>
         <source>UGENE started</source>
         <translation>UGENE готов к работе</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="701"/>
+        <location filename="../src/Main.cpp" line="705"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>Версия UGENE: %1 %2-бит</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="702"/>
+        <location filename="../src/Main.cpp" line="706"/>
         <source>UGENE distribution: %1</source>
         <translation>Распределение UGENE: %1</translation>
     </message>
@@ -664,20 +664,25 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="929"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="947"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="991"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1009"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1045"/>
+        <source>Load document and add to project: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="447"/>
+        <location filename="../src/Main.cpp" line="448"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Стиль не доступен: %1</translation>
     </message>
@@ -814,7 +819,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DisableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1462"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1226"/>
         <source>Disable project viewer</source>
         <translation>Disable project viewer</translation>
     </message>
@@ -965,7 +970,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1450"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1214"/>
         <source>Enable ProjectView</source>
         <translation>Enable ProjectView</translation>
     </message>
@@ -1143,38 +1148,38 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MWMDIManagerImpl</name>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="71"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="75"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="76"/>
         <source>Close active view</source>
         <translation>Закрыть активное окно</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="78"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="80"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="79"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="81"/>
         <source>Close all windows</source>
         <translation>Закрыть все окна</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="83"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="85"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="84"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="86"/>
         <source>Tile windows</source>
         <translation>Уложить черепицей</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="88"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="90"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="89"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="91"/>
         <source>Cascade windows</source>
         <translation>Уложить каскадом</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="110"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="112"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="111"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="113"/>
         <source>Next window</source>
         <translation>Следующее окно</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="116"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="118"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
         <source>Previous window</source>
         <translation>Предыдущее окно</translation>
     </message>
@@ -1215,104 +1220,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="235"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="236"/>
         <source>Exit</source>
         <translation>Выход</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="364"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
         <source>Shutdown already in process. Close UGENE immediately?</source>
         <translation>Программа уже в процессе выключения. Закрыть немедленно?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="365"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="367"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="368"/>
         <source>Wait</source>
         <translation>Подождать</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="239"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="240"/>
         <source>About</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
         <source>Visit UGENE Web Site</source>
         <translation>Перейти на сайт UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="249"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="251"/>
         <source>View UGENE Documentation Online</source>
         <translation>Открыть документацию UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="253"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="255"/>
         <source>Check for Updates</source>
         <translation>Проверить обновления</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="257"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="259"/>
         <source>Open UGENE User Manual</source>
         <translation>Открыть основное руководство UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="261"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="265"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
         <source>Open Query Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных запросов</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="269"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
         <source>Open Start Page</source>
         <translation>Открыть стартовую страницу</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="273"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
         <source>Crash UGENE</source>
         <translation>Падение UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="278"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="280"/>
         <source>Enable Terminal Usage...</source>
         <translation>Разрешить использование терминала...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="444"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="449"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="457"/>
+        <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"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="444"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
         <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="449"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="451"/>
         <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="457"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="459"/>
         <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="462"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="462"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1321,12 +1326,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="475"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="477"/>
         <source>Can not open %1 file. </source>
         <translation>Невозможно открыть файл %1. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1382,12 +1387,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1052"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1076"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1054"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1078"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1507,22 +1512,22 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="799"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="817"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="800"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="818"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="859"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="877"/>
         <source>Choose directory</source>
         <translation>Выбрать директорию</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="893"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="911"/>
         <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>
@@ -1569,139 +1574,144 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectLoaderImpl</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="111"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="119"/>
         <source>Connect to shared database...</source>
         <translation>Подключение к общей базе данных...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="204"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="213"/>
         <source>UGENE project file</source>
         <translation>Файл проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="210"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="214"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="219"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="223"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="927"/>
         <source>Select files to open</source>
         <translation>Открыть файлы</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="454"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="463"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="461"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
         <source>The document with the same URL is already added to the project</source>
         <translation>Этот документ уже добавлен в проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="463"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
         <source>warning</source>
         <translation>внимание</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="481"/>
         <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="549"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="558"/>
         <source>Failed to detect file format: %1</source>
         <translation>Невозможно определить формат файла: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="552"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="561"/>
         <source>File is empty: %1</source>
         <translation>Файл пуст: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="588"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="597"/>
         <source>Project is already opened</source>
         <translation>Проект уже открыт</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="594"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="603"/>
         <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="595"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="604"/>
         <source>New Window</source>
         <translation>В новом окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="597"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="606"/>
         <source>This Window</source>
         <translation>В текущем окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="608"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="617"/>
         <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="614"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="623"/>
         <source>Stopped loading project: %1. Reason: active project found</source>
         <translation>Загрузка проекта остановлена: %1, поскольку активен другой проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="881"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="899"/>
         <source>New Project</source>
         <translation>Новый проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="883"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="901"/>
         <source>project</source>
         <translation>проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="100"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="108"/>
         <source>Open...</source>
         <translation>Открыть...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="89"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="91"/>
         <source>Open as...</source>
         <translation>Открыть как...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="809"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="827"/>
         <source>Save project as</source>
         <translation>Сохранить проект как</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="810"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="828"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="133"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="141"/>
         <source>Recent projects</source>
         <translation>Недавние проекты</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="83"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="85"/>
         <source>&New project...</source>
         <translation>&Новый проект...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="95"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="97"/>
         <source>New document from text...</source>
         <translation>Новый документ из текста...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="106"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="102"/>
+        <source>Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="114"/>
         <source>Access remote database...</source>
         <translation>Запрос к удаленной базе данных...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="117"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="125"/>
         <source>Search NCBI GenBank...</source>
         <translation>Поиск в NCBI GenBank...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="137"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="145"/>
         <source>Recent files</source>
         <translation>Недавние файлы</translation>
     </message>
@@ -1758,88 +1768,88 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectViewImpl</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="703"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
         <source>ProjectView</source>
         <translation>Навигатор проектов</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="703"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
         <source>ProjectView service provides basic project visualization and manipulation functionality</source>
         <translation>Навигатор проектов обеспечивает основные операции над проектами</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="746"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
         <source>Save selected documents</source>
         <translation>Сохранить выбранные документы</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="750"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="514"/>
         <source>Mark as circular</source>
         <translation>Работать как с круговой</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="754"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="518"/>
         <source>Relocate...</source>
         <translation>Переместить...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="758"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="522"/>
         <source>Export document...</source>
         <translation>Экспортировать документ...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="527"/>
         <source>Open containing folder</source>
         <translation>Открыть папку, содержащую документ</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="918"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="682"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="999"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1041"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="805"/>
         <source>Active views</source>
         <translation>Открытые окна</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1107"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="871"/>
         <source>Activate view: %1</source>
         <translation>Переключиться на %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1121"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="885"/>
         <source>Open new view: %1</source>
         <translation>Открыть как %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1136"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="900"/>
         <source>Open saved view '%1' with a state '%2'</source>
         <translation>Открыть закладку %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1184"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="948"/>
         <source>Add to view: %1</source>
         <translation>Добавить в %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1230"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="994"/>
         <source>Open view</source>
         <translation>Открыть окно</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1231"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
         <source>Add to view</source>
         <translation>Добавить в окно</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1393"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1157"/>
         <source>Select new file location</source>
         <translation>Выбор нового адреса</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1351"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1115"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1855,35 +1865,25 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="444"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="442"/>
         <source>Project</source>
         <translation>Проект</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="449"/>
         <source>Paste file from clipboard</source>
-        <translation>Вставить файл из буфера обмена</translation>
-    </message>
-    <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="492"/>
-        <source>Pasting of directories is not supported:</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Вставить файл из буфера обмена</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="506"/>
         <source>Unable to handle so huge data in clipboard.</source>
-        <translation>Невозможно поместить большие данные в буфер обмена.</translation>
+        <translation type="vanished">Невозможно поместить большие данные в буфер обмена.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="614"/>
         <source>UGENE can not recognize current clipboard content as one of supported formats.</source>
-        <translation>UGENE не может распознать содержимое буфера обмена как один из известных форматов.</translation>
+        <translation type="vanished">UGENE не может распознать содержимое буфера обмена как один из известных форматов.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="648"/>
         <source>No active project found!</source>
-        <translation>No active project found!</translation>
+        <translation type="vanished">No active project found!</translation>
     </message>
 </context>
 <context>
@@ -2026,47 +2026,47 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::TVReportWindow</name>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="453"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="433"/>
         <source>Task report [%1]</source>
         <translation>Отчёт выполнения задачи  - %1</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Failed</source>
         <translation>Провалилась</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Canceled</source>
         <translation>Отменена</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="464"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="444"/>
         <source>Finished</source>
         <translation>Завершена</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="465"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="445"/>
         <source>status</source>
         <translation>состояние</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="467"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="447"/>
         <source>error:</source>
         <translation>ошибка:</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="472"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="452"/>
         <source>time</source>
         <translation>время выполнения</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="532"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="512"/>
         <source>Open containing directory</source>
         <translation>Открыть папку, содержащую документ</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="539"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="519"/>
         <source>Open by operating system</source>
         <translation>Открыть при помощи операционной системы</translation>
     </message>
@@ -2143,62 +2143,62 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::TaskViewDockWidget</name>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="53"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="54"/>
         <source>Tasks</source>
         <translation>Задачи</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="311"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="293"/>
         <source>Activating task report: %1</source>
         <translation>Activating task report: %1</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="614"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="594"/>
         <source>finished</source>
         <translation>Завершена</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="596"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="576"/>
         <source>Canceling...</source>
         <translation>Отмена задачи...</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="87"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="88"/>
         <source>Cancel task</source>
         <translation>Отмена задачи</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="92"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="93"/>
         <source>View report</source>
         <translation>Открыть отчёт</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="96"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="97"/>
         <source>Remove report</source>
         <translation>Удалить отчёт</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="126"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="127"/>
         <source>Task name</source>
         <translation>Имя задачи</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="127"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="128"/>
         <source>Task state description</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="128"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="129"/>
         <source>Task progress</source>
         <translation>Прогресс</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="129"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="130"/>
         <source>Actions</source>
         <translation>Операции</translation>
     </message>
     <message>
-        <location filename="../src/task_view/TaskViewController.cpp" line="594"/>
+        <location filename="../src/task_view/TaskViewController.cpp" line="574"/>
         <source>Canceled</source>
         <translation>Отменена</translation>
     </message>
@@ -2266,7 +2266,7 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="428"/>
+        <location filename="../src/Main.cpp" line="429"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">Инициализация UGENE</translation>
     </message>
diff --git a/src/ugeneui/ugeneui.pri b/src/ugeneui/ugeneui.pri
index 7592331..904915e 100644
--- a/src/ugeneui/ugeneui.pri
+++ b/src/ugeneui/ugeneui.pri
@@ -13,10 +13,10 @@ equals(QT_MAJOR_VERSION, 5): QT += widgets webkitwidgets
 TEMPLATE = app
 CONFIG +=qt dll thread debug_and_release
 DEFINES+= QT_DLL QT_FATAL_ASSERT
-INCLUDEPATH += src _tmp ../include ../corelibs/U2Private/src
+INCLUDEPATH += src _tmp ../include ../corelibs/U2Private/src ../libs_3rdparty/humimit/src
 macx : INCLUDEPATH += /System/Library/Frameworks/Security.framework/Headers
 
-LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad
+LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
 macx: LIBS += /System/Library/Frameworks/Security.framework/Security
 
 !debug_and_release|build_pass {
@@ -28,8 +28,8 @@ macx: LIBS += /System/Library/Frameworks/Security.framework/Security
         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
-        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Viewd -lU2Testd -lU2Remoted -lU2Langd -lU2Privated -lugenedbd -lbreakpadd
+        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
     }
 
     CONFIG(release, debug|release) {
diff --git a/ugene.pro b/ugene.pro
index bddf9c2..ce3a770 100644
--- a/ugene.pro
+++ b/ugene.pro
@@ -1,203 +1,215 @@
-include( src/ugene_globals.pri )
-
-TEMPLATE = subdirs
-
-CONFIG += ordered debug_and_release
-
-use_bundled_zlib() {
-    SUBDIRS += src/libs_3rdparty/zlib
-}
-
-SUBDIRS += \
-          src/libs_3rdparty/breakpad \
-          src/libs_3rdparty/qscore \
-          src/libs_3rdparty/sqlite3 \
-          src/libs_3rdparty/gtest \
-          src/libs_3rdparty/samtools \
-          src/corelibs/U2Core \
-          src/corelibs/U2Test \
-          src/corelibs/U2Algorithm \
-          src/corelibs/U2Formats \
-          src/corelibs/U2Lang \
-          src/corelibs/U2Private \
-          src/corelibs/U2Gui \
-          src/corelibs/U2Remote \
-          src/corelibs/U2View \
-          src/corelibs/U2Designer \
-          src/corelibs/U2Script \
-          src/ugeneui \
-          src/ugenecl \
-          src/ugenem \
-          src/plugins_checker \
-          src/plugins_3rdparty/ball \
-          src/plugins_3rdparty/sitecon \
-          src/plugins_3rdparty/umuscle \
-          src/plugins_3rdparty/hmm2 \
-          src/plugins_3rdparty/gor4 \
-          src/plugins_3rdparty/psipred \
-          src/plugins_3rdparty/phylip \
-          src/plugins_3rdparty/kalign \
-          src/plugins_3rdparty/ptools \
-          src/plugins_3rdparty/variants \
-          src/plugins/biostruct3d_view \
-          src/plugins/chroma_view \
-          src/plugins/circular_view \
-          src/plugins/annotator \
-          src/plugins/dbi_bam \
-          src/plugins/dna_export \
-          src/plugins/dna_stat \
-          src/plugins/dna_flexibility \
-          src/plugins/dna_graphpack \
-          src/plugins/orf_marker \
-          src/plugins/pcr \
-          src/plugins/workflow_designer \
-          src/plugins/repeat_finder \
-          src/plugins/test_runner \
-          src/plugins/perf_monitor \
-          src/plugins/smith_waterman \
-          src/plugins_3rdparty/primer3 \
-          src/plugins/enzymes \
-          src/plugins/remote_blast \
-          src/plugins/genome_aligner \
-          src/plugins/weight_matrix \
-          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 \
-          src/plugins/browser_support \
-          src/plugins/linkdata_support
-
-use_cuda() {
-    SUBDIRS += src/plugins/cuda_support
-}
-
-use_opencl() {
-    DEFINES += OPENCL_SUPPORT
-    SUBDIRS += src/plugins/opencl_support
-}
-
-use_sse2() {
-    SUBDIRS += src/plugins_3rdparty/hmm3
-}
-
-exclude_list_enabled() {
-    SUBDIRS -= src/plugins/CoreTests
-    SUBDIRS -= src/plugins/test_runner
-    SUBDIRS -= src/plugins/perf_monitor
-    SUBDIRS -= src/plugins/GUITestBase
-    SUBDIRS -= src/plugins/api_tests
-}
-without_non_free() {
-    SUBDIRS -= src/plugins_3rdparty/psipred
-    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 )
-}
-
-
-#prepare translations
-UGENE_TRANSL_IDX   = 0          1
-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
-
-#detecting lrelease binary
-win32 : UGENE_DEV_NULL = nul
-unix : UGENE_DEV_NULL = /dev/null
-
-UGENE_LRELEASE =
-UGENE_LUPDATE = 
-system(lrelease -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
-    UGENE_LRELEASE = lrelease
-    UGENE_LUPDATE = lupdate
-} else : system(lrelease-qt4 -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
-    UGENE_LRELEASE = lrelease-qt4
-    UGENE_LUPDATE = lupdate-qt4
-}
-
-#foreach 'language'
-for( i, UGENE_TRANSL_IDX ) {
-    UGENE_TRANSLATIONS = 
-
-    curTranslFile = $$member( UGENE_TRANSL_FILES, $$i )
-    curTranslTag  = $$member( UGENE_TRANSL_TAG, $$i )
-
-    #foreach project directory
-    for( prj_dir, SUBDIRS ) {
-        #look for file and add it to translation list if it exists
-        translFile = $$prj_dir/$$UGENE_TRANSL_DIR/$$curTranslFile   # 'project/transl/english.ts' etc.
-        exists( $$translFile ) {
-            UGENE_TRANSLATIONS += $$translFile
-#            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) {
-            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 )
-        }
-    }
-}
-
-
-unix {
-    system( chmod a+x ./src/gen_bin_script.cmd && ./src/gen_bin_script.cmd $$UGENE_INSTALL_DIR ugene > ugene; chmod a+x ugene )
-    binscript.files += ugene
-    binscript.path = $$UGENE_INSTALL_BINDIR
-
-# to copy ugene executable to /usr/lib/ugene directory
-    ugene_starter.files = ./src/_release/ugene
-    ugene_starter.path = $$UGENE_INSTALL_DIR
-
-    transl.files = ./src/_release/transl_en.qm
-    transl.files += ./src/_release/transl_ru.qm
-    transl.path = $$UGENE_INSTALL_DIR
-    
-    plugins.files = ./src/_release/plugins/*
-    plugins.path = $$UGENE_INSTALL_DIR/plugins
-
-    scripts.files += scripts/*
-    scripts.path = $$UGENE_INSTALL_DIR/scripts
-
-    data.files += data/*
-    data.path = $$UGENE_INSTALL_DATA
-
-    desktop.files += installer/_common_data/ugene.desktop
-    desktop.path = $$UGENE_INSTALL_DESKTOP
-
-    pixmaps.files += installer/_common_data/ugene.png installer/_common_data/ugene.xpm
-    pixmaps.path = $$UGENE_INSTALL_PIXMAPS
-
-    manual.files += installer/_common_data/ugene.1.gz
-    manual.path = $$UGENE_INSTALL_MAN
-
-    mime.files += installer/_common_data/application-x-ugene.xml
-    mime.path = $$UGENE_INSTALL_MIME
-
-    icons.files += installer/_common_data/application-x-ugene-ext.png
-    icons.path = $$UGENE_INSTALL_ICONS
-
-
-    INSTALLS += binscript ugene_starter transl plugins scripts data desktop pixmaps mime icons manual
-}
- 
+include( src/ugene_globals.pri )
+
+# Check the Qt version. If QT_VERSION is not set, it is probably Qt 3.
+isEmpty(QT_VERSION) {
+    error("QT_VERSION not defined. Unipro UGENE does not work with Qt 3.")
+}
+
+!minQtVersion(5, 2, 1) {
+    message("Cannot build Unipro UGENE with Qt version $${QT_VERSION}")
+    error("Use at least Qt 5.2.1.")
+}
+
+
+TEMPLATE = subdirs
+
+CONFIG += ordered debug_and_release
+
+use_bundled_zlib() {
+    SUBDIRS += src/libs_3rdparty/zlib
+}
+
+SUBDIRS += \
+          src/libs_3rdparty/breakpad \
+          src/libs_3rdparty/qscore \
+          src/libs_3rdparty/sqlite3 \
+          src/libs_3rdparty/gtest \
+          src/libs_3rdparty/samtools \
+          src/libs_3rdparty/humimit \
+          src/corelibs/U2Core \
+          src/corelibs/U2Test \
+          src/corelibs/U2Algorithm \
+          src/corelibs/U2Formats \
+          src/corelibs/U2Lang \
+          src/corelibs/U2Private \
+          src/corelibs/U2Gui \
+          src/corelibs/U2Remote \
+          src/corelibs/U2View \
+          src/corelibs/U2Designer \
+          src/corelibs/U2Script \
+          src/ugeneui \
+          src/ugenecl \
+          src/ugenem \
+          src/plugins_checker \
+          src/plugins_3rdparty/ball \
+          src/plugins_3rdparty/sitecon \
+          src/plugins_3rdparty/umuscle \
+          src/plugins_3rdparty/hmm2 \
+          src/plugins_3rdparty/gor4 \
+          src/plugins_3rdparty/psipred \
+          src/plugins_3rdparty/phylip \
+          src/plugins_3rdparty/kalign \
+          src/plugins_3rdparty/ptools \
+          src/plugins_3rdparty/variants \
+          src/plugins/biostruct3d_view \
+          src/plugins/chroma_view \
+          src/plugins/circular_view \
+          src/plugins/annotator \
+          src/plugins/dbi_bam \
+          src/plugins/dna_export \
+          src/plugins/dna_stat \
+          src/plugins/dna_flexibility \
+          src/plugins/dna_graphpack \
+          src/plugins/orf_marker \
+          src/plugins/pcr \
+          src/plugins/workflow_designer \
+          src/plugins/repeat_finder \
+          src/plugins/test_runner \
+          src/plugins/perf_monitor \
+          src/plugins/smith_waterman \
+          src/plugins_3rdparty/primer3 \
+          src/plugins/enzymes \
+          src/plugins/remote_blast \
+          src/plugins/genome_aligner \
+          src/plugins/weight_matrix \
+          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 \
+          src/plugins/browser_support \
+          src/plugins/linkdata_support
+
+use_cuda() {
+    SUBDIRS += src/plugins/cuda_support
+}
+
+use_opencl() {
+    DEFINES += OPENCL_SUPPORT
+    SUBDIRS += src/plugins/opencl_support
+}
+
+use_sse2() {
+    SUBDIRS += src/plugins_3rdparty/hmm3
+}
+
+exclude_list_enabled() {
+    SUBDIRS -= src/plugins/CoreTests
+    SUBDIRS -= src/plugins/test_runner
+    SUBDIRS -= src/plugins/perf_monitor
+    SUBDIRS -= src/plugins/GUITestBase
+    SUBDIRS -= src/plugins/api_tests
+}
+without_non_free() {
+    SUBDIRS -= src/plugins_3rdparty/psipred
+    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 )
+}
+
+
+#prepare translations
+UGENE_TRANSL_IDX   = 0          1
+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
+
+#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
+}
+
+#foreach 'language'
+for( i, UGENE_TRANSL_IDX ) {
+    UGENE_TRANSLATIONS = 
+
+    curTranslFile = $$member( UGENE_TRANSL_FILES, $$i )
+    curTranslTag  = $$member( UGENE_TRANSL_TAG, $$i )
+
+    #foreach project directory
+    for( prj_dir, SUBDIRS ) {
+        #look for file and add it to translation list if it exists
+        translFile = $$prj_dir/$$UGENE_TRANSL_DIR/$$curTranslFile   # 'project/transl/english.ts' etc.
+        exists( $$translFile ) {
+            UGENE_TRANSLATIONS += $$translFile
+#            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) {
+            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 )
+        }
+    }
+}
+
+
+unix {
+    system( chmod a+x ./src/gen_bin_script.cmd && ./src/gen_bin_script.cmd $$UGENE_INSTALL_DIR ugene > ugene; chmod a+x ugene )
+    binscript.files += ugene
+    binscript.path = $$UGENE_INSTALL_BINDIR
+
+# to copy ugene executable to /usr/lib/ugene directory
+    ugene_starter.files = ./src/_release/ugene
+    ugene_starter.path = $$UGENE_INSTALL_DIR
+
+    transl.files = ./src/_release/transl_en.qm
+    transl.files += ./src/_release/transl_ru.qm
+    transl.path = $$UGENE_INSTALL_DIR
+    
+    plugins.files = ./src/_release/plugins/*
+    plugins.path = $$UGENE_INSTALL_DIR/plugins
+
+    scripts.files += scripts/*
+    scripts.path = $$UGENE_INSTALL_DIR/scripts
+
+    data.files += data/*
+    data.path = $$UGENE_INSTALL_DATA
+
+    desktop.files += installer/_common_data/ugene.desktop
+    desktop.path = $$UGENE_INSTALL_DESKTOP
+
+    pixmaps.files += installer/_common_data/ugene.png installer/_common_data/ugene.xpm
+    pixmaps.path = $$UGENE_INSTALL_PIXMAPS
+
+    manual.files += installer/_common_data/ugene.1.gz
+    manual.path = $$UGENE_INSTALL_MAN
+
+    mime.files += installer/_common_data/application-x-ugene.xml
+    mime.path = $$UGENE_INSTALL_MIME
+
+    icons.files += installer/_common_data/application-x-ugene-ext.png
+    icons.path = $$UGENE_INSTALL_ICONS
+
+
+    INSTALLS += binscript ugene_starter transl plugins scripts data desktop pixmaps mime icons manual
+}
+ 

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



More information about the debian-med-commit mailing list