diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 70dd1f0e9ede0550686a2ce5b0203d97d07b5922..4342bdc4b48e508ae5882dc3918ec581da42a67d 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -135,361 +135,260 @@ void TextEditorActionHandler::initializeActions()
 
 void TextEditorActionHandler::createActions()
 {
-    m_undoAction      = registerNewAction(Core::Constants::UNDO,      this, SLOT(undoAction()),
-                                          true, tr("&Undo"));
-    m_redoAction      = registerNewAction(Core::Constants::REDO,      this, SLOT(redoAction()),
-                                          true, tr("&Redo"));
-    m_copyAction      = registerNewAction(Core::Constants::COPY,      this, SLOT(copyAction()), true);
-    m_cutAction       = registerNewAction(Core::Constants::CUT,       this, SLOT(cutAction()), true);
-    m_pasteAction     = registerNewAction(Core::Constants::PASTE,     this, SLOT(pasteAction()), true);
+    using namespace Core::Constants;
+    using namespace TextEditor::Constants;
+
+    m_undoAction = registerAction(UNDO,
+            SLOT(undoAction()), true, tr("&Undo"));
+    m_redoAction = registerAction(REDO,
+            SLOT(redoAction()), true, tr("&Redo"));
+    m_copyAction = registerAction(COPY,
+            SLOT(copyAction()), true);
+    m_cutAction = registerAction(CUT,
+            SLOT(cutAction()), true);
+    m_pasteAction = registerAction(PASTE,
+            SLOT(pasteAction()), true);
+    m_selectAllAction = registerAction(SELECTALL,
+            SLOT(selectAllAction()), true);
+    m_gotoAction = registerAction(GOTO,
+            SLOT(gotoAction()));
+    m_printAction = registerAction(PRINT,
+            SLOT(printAction()));
+    m_cutLineAction = registerAction(CUT_LINE,
+            SLOT(cutLine()), true, tr("Cut &Line"),
+            QKeySequence(tr("Shift+Del")));
+    m_copyLineAction = registerAction(COPY_LINE,
+            SLOT(copyLine()), false, tr("Copy &Line"),
+            QKeySequence(tr("Ctrl+Ins")));
+    m_deleteLineAction = registerAction(DELETE_LINE,
+            SLOT(deleteLine()), true, tr("Delete &Line"));
+    m_deleteEndOfWordAction = registerAction(DELETE_END_OF_WORD,
+            SLOT(deleteEndOfWord()), true, tr("Delete Word from Cursor On"));
+    m_deleteEndOfWordCamelCaseAction = registerAction(DELETE_END_OF_WORD_CAMEL_CASE,
+            SLOT(deleteEndOfWordCamelCase()), true, tr("Delete Word Camel Case from Cursor On"));
+    m_deleteStartOfWordAction = registerAction(DELETE_START_OF_WORD,
+            SLOT(deleteStartOfWord()), true, tr("Delete Word up to Cursor"));
+    m_deleteStartOfWordCamelCaseAction = registerAction(DELETE_START_OF_WORD_CAMEL_CASE,
+            SLOT(deleteStartOfWordCamelCase()), true, tr("Delete Word Camel Case up to Cursor"));
+    m_gotoBlockStartWithSelectionAction = registerAction(GOTO_BLOCK_START_WITH_SELECTION,
+            SLOT(gotoBlockStartWithSelection()), true, tr("Go to Block Start with Selection"),
+            QKeySequence(tr("Ctrl+{")));
+    m_gotoBlockEndWithSelectionAction = registerAction(GOTO_BLOCK_END_WITH_SELECTION,
+            SLOT(gotoBlockEndWithSelection()), true, tr("Go to Block End with Selection"),
+            QKeySequence(tr("Ctrl+}")));
+    m_moveLineUpAction = registerAction(MOVE_LINE_UP,
+            SLOT(moveLineUp()), true, tr("Move Line Up"),
+            QKeySequence(tr("Ctrl+Shift+Up")));
+    m_moveLineDownAction = registerAction(MOVE_LINE_DOWN,
+            SLOT(moveLineDown()), true, tr("Move Line Down"),
+            QKeySequence(tr("Ctrl+Shift+Down")));
+    m_copyLineUpAction = registerAction(COPY_LINE_UP,
+            SLOT(copyLineUp()), true, tr("Copy Line Up"),
+            QKeySequence(tr("Ctrl+Alt+Up")));
+    m_copyLineDownAction = registerAction(COPY_LINE_DOWN,
+            SLOT(copyLineDown()), true, tr("Copy Line Down"),
+            QKeySequence(tr("Ctrl+Alt+Down")));
+    m_joinLinesAction = registerAction(JOIN_LINES,
+            SLOT(joinLines()), true, tr("Join Lines"),
+            QKeySequence(tr("Ctrl+J")));
+    m_insertLineAboveAction = registerAction(INSERT_LINE_ABOVE,
+            SLOT(insertLineAbove()), true, tr("Insert Line Above Current Line"),
+            QKeySequence(tr("Ctrl+Shift+Return")));
+    m_insertLineBelowAction = registerAction(INSERT_LINE_BELOW,
+            SLOT(insertLineBelow()), true, tr("Insert Line Below Current Line"),
+            QKeySequence(tr("Ctrl+Return")));
+    m_upperCaseSelectionAction = registerAction(UPPERCASE_SELECTION,
+            SLOT(uppercaseSelection()), true, tr("Uppercase Selection"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+Shift+U") : tr("Alt+Shift+U")));
+    m_lowerCaseSelectionAction = registerAction(LOWERCASE_SELECTION,
+            SLOT(lowercaseSelection()), true, tr("Lowercase Selection"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+U") : tr("Alt+U")));
+    m_switchUtf8bomAction = registerAction(SWITCH_UTF8BOM,
+            SLOT(switchUtf8bomAction()), true);
+    m_indentAction = registerAction(INDENT,
+            SLOT(indent()), true, tr("Indent"));
+    m_unindentAction = registerAction(UNINDENT,
+            SLOT(unindent()), true, tr("Unindent"));
+    m_followSymbolAction = registerAction(FOLLOW_SYMBOL_UNDER_CURSOR,
+            SLOT(openLinkUnderCursor()), true, tr("Follow Symbol Under Cursor"),
+            QKeySequence(Qt::Key_F2));
+    m_followSymbolInNextSplitAction = registerAction(FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT,
+            SLOT(openLinkUnderCursorInNextSplit()), true, tr("Follow Symbol Under Cursor in Next Split"),
+            QKeySequence(Utils::HostOsInfo::isMacHost() ? tr("Meta+E, F2") : tr("Ctrl+E, F2")));
+    m_jumpToFileAction = registerAction(JUMP_TO_FILE_UNDER_CURSOR,
+            SLOT(openLinkUnderCursor()), true, tr("Jump To File Under Cursor"),
+            QKeySequence(Qt::Key_F2));
+    m_jumpToFileInNextSplitAction = registerAction(JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT,
+            SLOT(openLinkUnderCursorInNextSplit()), true,
+            QKeySequence(Utils::HostOsInfo::isMacHost() ? tr("Meta+E, F2") : tr("Ctrl+E, F2")));
+
+    // register "Edit" Menu Actions
+    Core::ActionContainer *editMenu = Core::ActionManager::actionContainer(M_EDIT);
+    m_selectEncodingAction = registerAction(SELECT_ENCODING,
+            SLOT(selectEncoding()), false, tr("Select Encoding..."),
+            QKeySequence(), G_EDIT_OTHER, editMenu);
+    m_circularPasteAction = registerAction(CIRCULAR_PASTE,
+            SLOT(circularPasteAction()), false, tr("Paste from Clipboard History"),
+            QKeySequence(tr("Ctrl+Shift+V")), G_EDIT_COPYPASTE, editMenu);
+
+    // register "Edit -> Advanced" Menu Actions
+    Core::ActionContainer *advancedEditMenu = Core::ActionManager::actionContainer(M_EDIT_ADVANCED);
+    m_formatAction = registerAction(AUTO_INDENT_SELECTION,
+            SLOT(formatAction()), true, tr("Auto-&indent Selection"),
+            QKeySequence(tr("Ctrl+I")),
+            G_EDIT_FORMAT, advancedEditMenu);
+    m_rewrapParagraphAction = registerAction(REWRAP_PARAGRAPH,
+            SLOT(rewrapParagraphAction()), true, tr("&Rewrap Paragraph"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, R") : tr("Ctrl+E, R")),
+            G_EDIT_FORMAT, advancedEditMenu);
+    m_visualizeWhitespaceAction = registerAction(VISUALIZE_WHITESPACE,
+            SLOT(setVisualizeWhitespace(bool)), false, tr("&Visualize Whitespace"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, Meta+V") : tr("Ctrl+E, Ctrl+V")),
+            G_EDIT_FORMAT, advancedEditMenu);
+    m_cleanWhitespaceAction = registerAction(CLEAN_WHITESPACE,
+            SLOT(setTextWrapping(bool)), true, tr("Clean Whitespace"),
+            QKeySequence(),
+            G_EDIT_FORMAT, advancedEditMenu);;
+    m_textWrappingAction = registerAction(TEXT_WRAPPING,
+            SLOT(setTextWrapping(bool)), false, tr("Enable Text &Wrapping"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, Meta+W") : tr("Ctrl+E, Ctrl+W")),
+            G_EDIT_FORMAT, advancedEditMenu);
+    m_textWrappingAction->setCheckable(true);
+    m_unCommentSelectionAction = registerAction(UN_COMMENT_SELECTION,
+            SLOT(unCommentSelection()), true, tr("Toggle Comment &Selection"),
+            QKeySequence(tr("Ctrl+/")),
+            G_EDIT_FORMAT, advancedEditMenu);
+    m_foldAction = registerAction(FOLD,
+            SLOT(fold()), true, tr("Fold"),
+            QKeySequence(tr("Ctrl+<")),
+            G_EDIT_COLLAPSING, advancedEditMenu);
+    m_unfoldAction = registerAction(UNFOLD,
+            SLOT(unfold()), true, tr("Unfold"),
+            QKeySequence(tr("Ctrl+>")),
+            G_EDIT_COLLAPSING, advancedEditMenu);
+    m_unfoldAllAction = registerAction(UNFOLD_ALL,
+            SLOT(unfoldAll()), true, tr("Toggle &Fold All"),
+            QKeySequence(),
+            G_EDIT_COLLAPSING, advancedEditMenu);
+    m_increaseFontSizeAction = registerAction(INCREASE_FONT_SIZE,
+            SLOT(increaseFontSize()), false, tr("Increase Font Size"),
+            QKeySequence(tr("Ctrl++")),
+            G_EDIT_FONT, advancedEditMenu);
+    m_decreaseFontSizeAction = registerAction(DECREASE_FONT_SIZE,
+            SLOT(decreaseFontSize()), false, tr("Decrease Font Size"),
+            QKeySequence(tr("Ctrl+-")),
+            G_EDIT_FONT, advancedEditMenu);
+    m_resetFontSizeAction = registerAction(RESET_FONT_SIZE,
+            SLOT(resetFontSize()), false, tr("Reset Font Size"),
+            QKeySequence(Core::UseMacShortcuts ? tr("Meta+0") : tr("Ctrl+0")),
+            G_EDIT_FONT, advancedEditMenu);
+    m_gotoBlockStartAction = registerAction(GOTO_BLOCK_START,
+            SLOT(gotoBlockStart()), true, tr("Go to Block Start"),
+            QKeySequence(tr("Ctrl+[")),
+            G_EDIT_BLOCKS, advancedEditMenu);
+    m_gotoBlockEndAction = registerAction(GOTO_BLOCK_END,
+            SLOT(gotoBlockEnd()), true, tr("Go to Block End"),
+            QKeySequence(tr("Ctrl+]")),
+            G_EDIT_BLOCKS, advancedEditMenu);
+    m_selectBlockUpAction = registerAction(SELECT_BLOCK_UP,
+            SLOT(selectBlockUp()), true, tr("Select Block Up"),
+            QKeySequence(tr("Ctrl+U")),
+            G_EDIT_BLOCKS, advancedEditMenu);
+    m_selectBlockDownAction = registerAction(SELECT_BLOCK_DOWN,
+            SLOT(selectBlockDown()), true, tr("Select Block Down"),
+            QKeySequence(),
+            G_EDIT_BLOCKS, advancedEditMenu);
+
+    // register GOTO Actions
+    registerAction(GOTO_LINE_START,
+            SLOT(gotoLineStart()), true, tr("Go to Line Start"));
+    registerAction(GOTO_LINE_END,
+            SLOT(gotoLineEnd()), true, tr("Go to Line End"));
+    registerAction(GOTO_NEXT_LINE,
+            SLOT(gotoNextLine()), true, tr("Go to Next Line"));
+    registerAction(GOTO_PREVIOUS_LINE,
+            SLOT(gotoPreviousLine()), true, tr("Go to Previous Line"));
+    registerAction(GOTO_PREVIOUS_CHARACTER,
+            SLOT(gotoPreviousCharacter()), true, tr("Go to Previous Character"));
+    registerAction(GOTO_NEXT_CHARACTER,
+            SLOT(gotoNextCharacter()), true, tr("Go to Next Character"));
+    registerAction(GOTO_PREVIOUS_WORD,
+            SLOT(gotoPreviousWord()), true, tr("Go to Previous Word"));
+    registerAction(GOTO_NEXT_WORD,
+            SLOT(gotoNextWord()), true, tr("Go to Next Word"));
+    registerAction(GOTO_PREVIOUS_WORD_CAMEL_CASE,
+            SLOT(gotoPreviousWordCamelCase()), false, tr("Go to Previous Word Camel Case"));
+    registerAction(GOTO_NEXT_WORD_CAMEL_CASE,
+            SLOT(gotoNextWordCamelCase()), false, tr("Go to Next Word Camel Case"));
+
+    // register GOTO actions with selection
+    registerAction(GOTO_LINE_START_WITH_SELECTION,
+            SLOT(gotoLineStartWithSelection()), true, tr("Go to Line Start with Selection"));
+    registerAction(GOTO_LINE_END_WITH_SELECTION,
+            SLOT(gotoLineEndWithSelection()), true, tr("Go to Line End with Selection"));
+    registerAction(GOTO_NEXT_LINE_WITH_SELECTION,
+            SLOT(gotoNextLineWithSelection()), true, tr("Go to Next Line with Selection"));
+    registerAction(GOTO_PREVIOUS_LINE_WITH_SELECTION,
+            SLOT(gotoPreviousLineWithSelection()), true, tr("Go to Previous Line with Selection"));
+    registerAction(GOTO_PREVIOUS_CHARACTER_WITH_SELECTION,
+            SLOT(gotoPreviousCharacterWithSelection()), true, tr("Go to Previous Character with Selection"));
+    registerAction(GOTO_NEXT_CHARACTER_WITH_SELECTION,
+            SLOT(gotoNextCharacterWithSelection()), true, tr("Go to Next Character with Selection"));
+    registerAction(GOTO_PREVIOUS_WORD_WITH_SELECTION,
+            SLOT(gotoPreviousWordWithSelection()), true, tr("Go to Previous Word with Selection"));
+    registerAction(GOTO_NEXT_WORD_WITH_SELECTION,
+            SLOT(gotoNextWordWithSelection()), true, tr("Go to Next Word with Selection"));
+    registerAction(GOTO_PREVIOUS_WORD_CAMEL_CASE_WITH_SELECTION,
+            SLOT(gotoPreviousWordCamelCaseWithSelection()), false, tr("Go to Previous Word Camel Case with Selection"));
+    registerAction(GOTO_NEXT_WORD_CAMEL_CASE_WITH_SELECTION,
+            SLOT(gotoNextWordCamelCaseWithSelection()), false, tr("Go to Next Word Camel Case with Selection"));
+
+    // Collect all modifying actions so we can check for them inside a readonly file
+    // and disable them
     m_modifyingActions << m_pasteAction;
-    m_selectAllAction = registerNewAction(Core::Constants::SELECTALL, this, SLOT(selectAllAction()), true);
-    m_gotoAction      = registerNewAction(Core::Constants::GOTO,      this, SLOT(gotoAction()));
-    m_printAction     = registerNewAction(Core::Constants::PRINT,     this, SLOT(printAction()));
-
-    Core::ActionContainer *medit = Core::ActionManager::actionContainer(Core::Constants::M_EDIT);
-    Core::ActionContainer *advancedMenu = Core::ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED);
-
-    m_selectEncodingAction = new QAction(tr("Select Encoding..."), this);
-    Core::Command *command = Core::ActionManager::registerAction(m_selectEncodingAction, Constants::SELECT_ENCODING, m_contextId);
-    connect(m_selectEncodingAction, SIGNAL(triggered()), this, SLOT(selectEncoding()));
-    medit->addAction(command, Core::Constants::G_EDIT_OTHER);
-
-
-    m_formatAction = new QAction(tr("Auto-&indent Selection"), this);
     m_modifyingActions << m_formatAction;
-    command = Core::ActionManager::registerAction(m_formatAction, TextEditor::Constants::AUTO_INDENT_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+I")));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-    connect(m_formatAction, SIGNAL(triggered(bool)), this, SLOT(formatAction()));
-
-    m_rewrapParagraphAction = new QAction(tr("&Rewrap Paragraph"), this);
     m_modifyingActions << m_rewrapParagraphAction;
-    command = Core::ActionManager::registerAction(m_rewrapParagraphAction, TextEditor::Constants::REWRAP_PARAGRAPH, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, R") : tr("Ctrl+E, R")));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-    connect(m_rewrapParagraphAction, SIGNAL(triggered(bool)), this, SLOT(rewrapParagraphAction()));
-
-
-    m_visualizeWhitespaceAction = new QAction(tr("&Visualize Whitespace"), this);
-    m_visualizeWhitespaceAction->setCheckable(true);
-    command = Core::ActionManager::registerAction(m_visualizeWhitespaceAction,
-                                 TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, Meta+V") : tr("Ctrl+E, Ctrl+V")));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-    connect(m_visualizeWhitespaceAction, SIGNAL(triggered(bool)), this, SLOT(setVisualizeWhitespace(bool)));
-
-    m_cleanWhitespaceAction = new QAction(tr("Clean Whitespace"), this);
     m_modifyingActions << m_cleanWhitespaceAction;
-    command = Core::ActionManager::registerAction(m_cleanWhitespaceAction,
-                                 TextEditor::Constants::CLEAN_WHITESPACE, m_contextId, true);
-
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-    connect(m_cleanWhitespaceAction, SIGNAL(triggered()), this, SLOT(cleanWhitespace()));
-
-    m_textWrappingAction = new QAction(tr("Enable Text &Wrapping"), this);
-    m_textWrappingAction->setCheckable(true);
-    command = Core::ActionManager::registerAction(m_textWrappingAction, TextEditor::Constants::TEXT_WRAPPING, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+E, Meta+W") : tr("Ctrl+E, Ctrl+W")));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-    connect(m_textWrappingAction, SIGNAL(triggered(bool)), this, SLOT(setTextWrapping(bool)));
-
-
-    m_unCommentSelectionAction = new QAction(tr("Toggle Comment &Selection"), this);
     m_modifyingActions << m_unCommentSelectionAction;
-    command = Core::ActionManager::registerAction(m_unCommentSelectionAction, Constants::UN_COMMENT_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+/")));
-    connect(m_unCommentSelectionAction, SIGNAL(triggered()), this, SLOT(unCommentSelection()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
-
-    m_cutLineAction = new QAction(tr("Cut &Line"), this);
     m_modifyingActions << m_cutLineAction;
-    command = Core::ActionManager::registerAction(m_cutLineAction, Constants::CUT_LINE, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Shift+Del")));
-    connect(m_cutLineAction, SIGNAL(triggered()), this, SLOT(cutLine()));
-
-    m_copyLineAction = new QAction(tr("Copy &Line"), this);
-    command = Core::ActionManager::registerAction(m_copyLineAction, Constants::COPY_LINE, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Ins")));
-    connect(m_copyLineAction, SIGNAL(triggered()), this, SLOT(copyLine()));
-
-    m_deleteLineAction = new QAction(tr("Delete &Line"), this);
     m_modifyingActions << m_deleteLineAction;
-    command = Core::ActionManager::registerAction(m_deleteLineAction, Constants::DELETE_LINE, m_contextId, true);
-    connect(m_deleteLineAction, SIGNAL(triggered()), this, SLOT(deleteLine()));
-
-    m_deleteEndOfWordAction = new QAction(tr("Delete Word from Cursor On"), this);
     m_modifyingActions << m_deleteEndOfWordAction;
-    Core::ActionManager::registerAction(m_deleteEndOfWordAction, Constants::DELETE_END_OF_WORD, m_contextId, true);
-    connect(m_deleteEndOfWordAction, SIGNAL(triggered()), this, SLOT(deleteEndOfWord()));
-
-    m_deleteEndOfWordCamelCaseAction = new QAction(tr("Delete Word Camel Case from Cursor On"), this);
     m_modifyingActions << m_deleteEndOfWordCamelCaseAction;
-    Core::ActionManager::registerAction(m_deleteEndOfWordCamelCaseAction, Constants::DELETE_END_OF_WORD_CAMEL_CASE, m_contextId, true);
-    connect(m_deleteEndOfWordCamelCaseAction, SIGNAL(triggered()), this, SLOT(deleteEndOfWordCamelCase()));
-
-    m_deleteStartOfWordAction = new QAction(tr("Delete Word up to Cursor"), this);
     m_modifyingActions << m_deleteStartOfWordAction;
-    Core::ActionManager::registerAction(m_deleteStartOfWordAction, Constants::DELETE_START_OF_WORD, m_contextId, true);
-    connect(m_deleteStartOfWordAction, SIGNAL(triggered()), this, SLOT(deleteStartOfWord()));
-
-    m_deleteStartOfWordCamelCaseAction = new QAction(tr("Delete Word Camel Case up to Cursor"), this);
     m_modifyingActions << m_deleteStartOfWordCamelCaseAction;
-    Core::ActionManager::registerAction(m_deleteStartOfWordCamelCaseAction, Constants::DELETE_START_OF_WORD_CAMEL_CASE, m_contextId, true);
-    connect(m_deleteStartOfWordCamelCaseAction, SIGNAL(triggered()), this, SLOT(deleteStartOfWordCamelCase()));
-
-    m_foldAction = new QAction(tr("Fold"), this);
-    command = Core::ActionManager::registerAction(m_foldAction, Constants::FOLD, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+<")));
-    connect(m_foldAction, SIGNAL(triggered()), this, SLOT(fold()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
-
-    m_unfoldAction = new QAction(tr("Unfold"), this);
-    command = Core::ActionManager::registerAction(m_unfoldAction, Constants::UNFOLD, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+>")));
-    connect(m_unfoldAction, SIGNAL(triggered()), this, SLOT(unfold()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
-
-    m_unfoldAllAction = new QAction(tr("Toggle &Fold All"), this);
-    command = Core::ActionManager::registerAction(m_unfoldAllAction, Constants::UNFOLD_ALL, m_contextId, true);
-    connect(m_unfoldAllAction, SIGNAL(triggered()), this, SLOT(unfoldAll()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
-
-    m_increaseFontSizeAction = new QAction(tr("Increase Font Size"), this);
-    command = Core::ActionManager::registerAction(m_increaseFontSizeAction, Constants::INCREASE_FONT_SIZE, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl++")));
-    connect(m_increaseFontSizeAction, SIGNAL(triggered()), this, SLOT(increaseFontSize()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
-
-    m_decreaseFontSizeAction = new QAction(tr("Decrease Font Size"), this);
-    command = Core::ActionManager::registerAction(m_decreaseFontSizeAction, Constants::DECREASE_FONT_SIZE, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+-")));
-    connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
-
-    m_resetFontSizeAction = new QAction(tr("Reset Font Size"), this);
-    command = Core::ActionManager::registerAction(m_resetFontSizeAction, Constants::RESET_FONT_SIZE, m_contextId);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+0") : tr("Ctrl+0")));
-    connect(m_resetFontSizeAction, SIGNAL(triggered()), this, SLOT(resetFontSize()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
-
-    m_gotoBlockStartAction = new QAction(tr("Go to Block Start"), this);
-    command = Core::ActionManager::registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+[")));
-    connect(m_gotoBlockStartAction, SIGNAL(triggered()), this, SLOT(gotoBlockStart()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_BLOCKS);
-
-    m_gotoBlockEndAction = new QAction(tr("Go to Block End"), this);
-    command = Core::ActionManager::registerAction(m_gotoBlockEndAction, Constants::GOTO_BLOCK_END, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+]")));
-    connect(m_gotoBlockEndAction, SIGNAL(triggered()), this, SLOT(gotoBlockEnd()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_BLOCKS);
-
-    m_gotoBlockStartWithSelectionAction = new QAction(tr("Go to Block Start with Selection"), this);
-    command = Core::ActionManager::registerAction(m_gotoBlockStartWithSelectionAction, Constants::GOTO_BLOCK_START_WITH_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+{")));
-    connect(m_gotoBlockStartWithSelectionAction, SIGNAL(triggered()), this, SLOT(gotoBlockStartWithSelection()));
-
-    m_gotoBlockEndWithSelectionAction = new QAction(tr("Go to Block End with Selection"), this);
-    command = Core::ActionManager::registerAction(m_gotoBlockEndWithSelectionAction, Constants::GOTO_BLOCK_END_WITH_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+}")));
-    connect(m_gotoBlockEndWithSelectionAction, SIGNAL(triggered()), this, SLOT(gotoBlockEndWithSelection()));
-
-    m_selectBlockUpAction = new QAction(tr("Select Block Up"), this);
-    command = Core::ActionManager::registerAction(m_selectBlockUpAction, Constants::SELECT_BLOCK_UP, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+U")));
-    connect(m_selectBlockUpAction, SIGNAL(triggered()), this, SLOT(selectBlockUp()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_BLOCKS);
-
-    m_selectBlockDownAction = new QAction(tr("Select Block Down"), this);
-    command = Core::ActionManager::registerAction(m_selectBlockDownAction, Constants::SELECT_BLOCK_DOWN, m_contextId, true);
-    connect(m_selectBlockDownAction, SIGNAL(triggered()), this, SLOT(selectBlockDown()));
-    advancedMenu->addAction(command, Core::Constants::G_EDIT_BLOCKS);
-
-    m_moveLineUpAction = new QAction(tr("Move Line Up"), this);
     m_modifyingActions << m_moveLineUpAction;
-    command = Core::ActionManager::registerAction(m_moveLineUpAction, Constants::MOVE_LINE_UP, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+Up")));
-    connect(m_moveLineUpAction, SIGNAL(triggered()), this, SLOT(moveLineUp()));
-
-    m_moveLineDownAction = new QAction(tr("Move Line Down"), this);
     m_modifyingActions << m_moveLineDownAction;
-    command = Core::ActionManager::registerAction(m_moveLineDownAction, Constants::MOVE_LINE_DOWN, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+Down")));
-    connect(m_moveLineDownAction, SIGNAL(triggered()), this, SLOT(moveLineDown()));
-
-    m_copyLineUpAction = new QAction(tr("Copy Line Up"), this);
     m_modifyingActions << m_copyLineUpAction;
-    command = Core::ActionManager::registerAction(m_copyLineUpAction, Constants::COPY_LINE_UP, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Up")));
-    connect(m_copyLineUpAction, SIGNAL(triggered()), this, SLOT(copyLineUp()));
-
-    m_copyLineDownAction = new QAction(tr("Copy Line Down"), this);
     m_modifyingActions << m_copyLineDownAction;
-    command = Core::ActionManager::registerAction(m_copyLineDownAction, Constants::COPY_LINE_DOWN, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Down")));
-    connect(m_copyLineDownAction, SIGNAL(triggered()), this, SLOT(copyLineDown()));
-
-    m_joinLinesAction = new QAction(tr("Join Lines"), this);
     m_modifyingActions << m_joinLinesAction;
-    command = Core::ActionManager::registerAction(m_joinLinesAction, Constants::JOIN_LINES, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+J")));
-    connect(m_joinLinesAction, SIGNAL(triggered()), this, SLOT(joinLines()));
-
-    m_insertLineAboveAction = new QAction(tr("Insert Line Above Current Line"), this);
     m_modifyingActions << m_insertLineAboveAction;
-    command = Core::ActionManager::registerAction(m_insertLineAboveAction, Constants::INSERT_LINE_ABOVE, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+Return")));
-    connect(m_insertLineAboveAction, SIGNAL(triggered()), this, SLOT(insertLineAbove()));
-
-    m_insertLineBelowAction = new QAction(tr("Insert Line Below Current Line"), this);
     m_modifyingActions << m_insertLineBelowAction;
-    command = Core::ActionManager::registerAction(m_insertLineBelowAction, Constants::INSERT_LINE_BELOW, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Return")));
-    connect(m_insertLineBelowAction, SIGNAL(triggered()), this, SLOT(insertLineBelow()));
-
-    m_upperCaseSelectionAction = new QAction(tr("Uppercase Selection"), this);
     m_modifyingActions << m_upperCaseSelectionAction;
-    command = Core::ActionManager::registerAction(m_upperCaseSelectionAction, Constants::UPPERCASE_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+Shift+U") : tr("Alt+Shift+U")));
-    connect(m_upperCaseSelectionAction, SIGNAL(triggered()), this, SLOT(uppercaseSelection()));
-
-    m_lowerCaseSelectionAction = new QAction(tr("Lowercase Selection"), this);
     m_modifyingActions << m_lowerCaseSelectionAction;
-    command = Core::ActionManager::registerAction(m_lowerCaseSelectionAction, Constants::LOWERCASE_SELECTION, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+U") : tr("Alt+U")));
-    connect(m_lowerCaseSelectionAction, SIGNAL(triggered()), this, SLOT(lowercaseSelection()));
-
-    m_circularPasteAction = new QAction(tr("Paste from Clipboard History"), this);
     m_modifyingActions << m_circularPasteAction;
-    command = Core::ActionManager::registerAction(m_circularPasteAction, Constants::CIRCULAR_PASTE, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+V")));
-    connect(m_circularPasteAction, SIGNAL(triggered()), this, SLOT(circularPasteAction()));
-    medit->addAction(command, Core::Constants::G_EDIT_COPYPASTE);
-
-    m_switchUtf8bomAction = new QAction(this);
     m_modifyingActions << m_switchUtf8bomAction;
-    command = Core::ActionManager::registerAction(m_switchUtf8bomAction, Constants::SWITCH_UTF8BOM, m_contextId, true);
-    connect(m_switchUtf8bomAction, SIGNAL(triggered()), this, SLOT(switchUtf8bomAction()));
-
-    m_indentAction = new QAction(tr("Indent"), this);
     m_modifyingActions << m_indentAction;
-    command = Core::ActionManager::registerAction(m_indentAction, Constants::INDENT, m_contextId, true);
-    connect(m_indentAction, SIGNAL(triggered()), this, SLOT(indent()));
-
-    m_unindentAction = new QAction(tr("Unindent"), this);
     m_modifyingActions << m_unindentAction;
-    command = Core::ActionManager::registerAction(m_unindentAction, Constants::UNINDENT, m_contextId, true);
-    connect(m_unindentAction, SIGNAL(triggered()), this, SLOT(unindent()));
-
-    m_followSymbolAction = new QAction(tr("Follow Symbol Under Cursor"), this);
-    command = Core::ActionManager::registerAction(m_followSymbolAction, Constants::FOLLOW_SYMBOL_UNDER_CURSOR, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Qt::Key_F2));
-    connect(m_followSymbolAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursor()));
-
-    m_followSymbolInNextSplitAction = new QAction(tr("Follow Symbol Under Cursor in Next Split"), this);
-    command = Core::ActionManager::registerAction(m_followSymbolInNextSplitAction, Constants::FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Utils::HostOsInfo::isMacHost()
-                                                ? tr("Meta+E, F2")
-                                                : tr("Ctrl+E, F2")));
-    connect(m_followSymbolInNextSplitAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursorInNextSplit()));
-
-    m_jumpToFileAction = new QAction(tr("Jump To File Under Cursor"), this);
-    command = Core::ActionManager::registerAction(m_jumpToFileAction, Constants::JUMP_TO_FILE_UNDER_CURSOR, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Qt::Key_F2));
-    connect(m_jumpToFileAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursor()));
-
-    m_jumpToFileInNextSplitAction = new QAction(tr("Jump to File Under Cursor in Next Split"), this);
-    command = Core::ActionManager::registerAction(m_jumpToFileInNextSplitAction, Constants::JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT, m_contextId, true);
-    command->setDefaultKeySequence(QKeySequence(Utils::HostOsInfo::isMacHost()
-                                                ? tr("Meta+E, F2")
-                                                : tr("Ctrl+E, F2")));
-    connect(m_jumpToFileInNextSplitAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursorInNextSplit()));
-
-    QAction *a = 0;
-    a = new QAction(tr("Go to Line Start"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_LINE_START, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoLineStart()));
-    a = new QAction(tr("Go to Line End"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_LINE_END, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoLineEnd()));
-    a = new QAction(tr("Go to Next Line"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_LINE, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextLine()));
-    a = new QAction(tr("Go to Previous Line"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_LINE, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousLine()));
-    a = new QAction(tr("Go to Previous Character"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_CHARACTER, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousCharacter()));
-    a = new QAction(tr("Go to Next Character"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_CHARACTER, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextCharacter()));
-    a = new QAction(tr("Go to Previous Word"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_WORD, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousWord()));
-    a = new QAction(tr("Go to Next Word"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_WORD, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextWord()));
-    a = new QAction(tr("Go to Previous Word Camel Case"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_WORD_CAMEL_CASE, m_contextId);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousWordCamelCase()));
-    a = new QAction(tr("Go to Next Word Camel Case"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_WORD_CAMEL_CASE, m_contextId);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextWordCamelCase()));
-
-    a = new QAction(tr("Go to Line Start with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_LINE_START_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoLineStartWithSelection()));
-    a = new QAction(tr("Go to Line End with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_LINE_END_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoLineEndWithSelection()));
-    a = new QAction(tr("Go to Next Line with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_LINE_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextLineWithSelection()));
-    a = new QAction(tr("Go to Previous Line with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_LINE_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousLineWithSelection()));
-    a = new QAction(tr("Go to Previous Character with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_CHARACTER_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousCharacterWithSelection()));
-    a = new QAction(tr("Go to Next Character with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_CHARACTER_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextCharacterWithSelection()));
-    a = new QAction(tr("Go to Previous Word with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_WORD_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousWordWithSelection()));
-    a = new QAction(tr("Go to Next Word with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_WORD_WITH_SELECTION, m_contextId, true);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextWordWithSelection()));
-    a = new QAction(tr("Go to Previous Word Camel Case with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_PREVIOUS_WORD_CAMEL_CASE_WITH_SELECTION, m_contextId);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoPreviousWordCamelCaseWithSelection()));
-    a = new QAction(tr("Go to Next Word Camel Case with Selection"), this);
-    command = Core::ActionManager::registerAction(a, Constants::GOTO_NEXT_WORD_CAMEL_CASE_WITH_SELECTION, m_contextId);
-    connect(a, SIGNAL(triggered()), this, SLOT(gotoNextWordCamelCaseWithSelection()));
-
 }
 
-QAction *TextEditorActionHandler::registerNewAction(const Core::Id &id, bool scriptable, const QString &title)
+QAction *TextEditorActionHandler::registerAction(const Core::Id &id,
+                                                 const char *slot,
+                                                 bool scriptable,
+                                                 const QString &title,
+                                                 const QKeySequence &keySequence,
+                                                 const char *menueGroup,
+                                                 Core::ActionContainer *container)
 {
     QAction *result = new QAction(title, this);
-    Core::ActionManager::registerAction(result, id, m_contextId, scriptable);
-    return result;
-}
+    Core::Command *command = Core::ActionManager::registerAction(result, id, m_contextId, scriptable);
+    if (!keySequence.isEmpty())
+        command->setKeySequence(keySequence);
 
-QAction *TextEditorActionHandler::registerNewAction(const Core::Id &id,
-                                                    QObject *receiver,
-                                                    const char *slot,
-                                                    bool scriptable,
-                                                    const QString &title)
-{
-    QAction *rc = registerNewAction(id, scriptable, title);
-    if (!rc)
-        return 0;
+    if (container && menueGroup)
+        container->addAction(command, menueGroup);
 
-    connect(rc, SIGNAL(triggered()), receiver, slot);
-    return rc;
+    connect(result, SIGNAL(triggered(bool)), this, slot);
+    return result;
 }
 
 TextEditorActionHandler::UpdateMode TextEditorActionHandler::updateMode() const
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index dd6e1cfe54157817bb6bba80c4236620cbf6b931..2e768b4b4e4ff907f2f333f290bc225dcce6d666 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -43,6 +43,7 @@ QT_FORWARD_DECLARE_CLASS(QAction)
 namespace Core {
 class ICore;
 class IEditor;
+class ActionContainer;
 }
 
 namespace TextEditor {
@@ -79,9 +80,14 @@ public slots:
 
 protected:
     const QPointer<BaseTextEditorWidget> &currentEditor() const;
-    QAction *registerNewAction(const Core::Id &id, bool scriptable = false, const QString &title = QString());
-    QAction *registerNewAction(const Core::Id &id, QObject *receiver, const char *slot, bool scriptable = false,
-                               const QString &title = QString());
+
+    QAction *registerAction(const Core::Id &id,
+                            const char *slot,
+                            bool scriptable = false,
+                            const QString &title = QString(),
+                            const QKeySequence &keySequence = QKeySequence(),
+                            const char *menueGroup = 0,
+                            Core::ActionContainer *container = 0);
 
     enum UpdateMode { ReadOnlyMode, WriteMode };
     UpdateMode updateMode() const;