diff --git a/src/plugins/android/androidmanifestdocument.cpp b/src/plugins/android/androidmanifestdocument.cpp
index fd1d484ecf23081ce5fb76da90d8eddc4b352501..26746433f6d4b524148873c9063c040ec97babbd 100644
--- a/src/plugins/android/androidmanifestdocument.cpp
+++ b/src/plugins/android/androidmanifestdocument.cpp
@@ -45,6 +45,8 @@ AndroidManifestDocument::AndroidManifestDocument(AndroidManifestEditorWidget *ed
       m_editorWidget(editorWidget)
 {
     setMimeType(QLatin1String(Constants::ANDROID_MANIFEST_MIME_TYPE));
+    connect(editorWidget, SIGNAL(guiChanged()),
+            this, SIGNAL(changed()));
 }
 
 bool AndroidManifestDocument::save(QString *errorString, const QString &fileName, bool autoSave)
diff --git a/src/plugins/android/androidmanifesteditor.cpp b/src/plugins/android/androidmanifesteditor.cpp
index 9909fa10abe328a85bd9c6afa7b5086abba524a6..cb9249371263265527ffe00c56a67ee5b86c8f37 100644
--- a/src/plugins/android/androidmanifesteditor.cpp
+++ b/src/plugins/android/androidmanifesteditor.cpp
@@ -36,36 +36,32 @@
 
 #include <QActionGroup>
 #include <QToolBar>
+#include <QTextBlock>
 
 using namespace Android;
 using namespace Internal;
 
 Android::Internal::AndroidManifestEditor::AndroidManifestEditor(AndroidManifestEditorWidget *editorWidget)
-    : BaseTextEditor(editorWidget),
-      m_document(new AndroidManifestDocument(editorWidget))
+    : Core::IEditor(editorWidget), m_toolBar(0)
 {
-    QToolBar *toolBar = new QToolBar;
-
+    m_toolBar = new QToolBar(editorWidget);
     m_actionGroup = new QActionGroup(this);
     connect(m_actionGroup, SIGNAL(triggered(QAction*)), this, SLOT(changeEditorPage(QAction*)));
 
-    QAction *generalAction = toolBar->addAction(tr("General"));
+    QAction *generalAction = m_toolBar->addAction(tr("General"));
     generalAction->setData(AndroidManifestEditorWidget::General);
     generalAction->setCheckable(true);
     m_actionGroup->addAction(generalAction);
 
-    QAction *sourceAction = toolBar->addAction(tr("XML Source"));
+    QAction *sourceAction = m_toolBar->addAction(tr("XML Source"));
     sourceAction->setData(AndroidManifestEditorWidget::Source);
     sourceAction->setCheckable(true);
     m_actionGroup->addAction(sourceAction);
 
     generalAction->setChecked(true);
 
-    insertExtraToolBarWidget(BaseTextEditor::Left, toolBar);
-
-
-    setContext(Core::Context(Constants::ANDROID_MANIFEST_EDITOR_CONTEXT,
-              TextEditor::Constants::C_TEXTEDITOR));
+    setContext(Core::Context(Constants::ANDROID_MANIFEST_EDITOR_CONTEXT));
+    setWidget(editorWidget);
 }
 
 Core::Id AndroidManifestEditor::id() const
@@ -73,12 +69,47 @@ Core::Id AndroidManifestEditor::id() const
     return Constants::ANDROID_MANIFEST_EDITOR_ID;
 }
 
+bool AndroidManifestEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
+{
+    return widget()->open(errorString, fileName, realFileName);
+}
+
+QWidget *AndroidManifestEditor::toolBar()
+{
+    return m_toolBar;
+}
+
+AndroidManifestEditorWidget *AndroidManifestEditor::widget() const
+{
+    return static_cast<AndroidManifestEditorWidget *>(Core::IEditor::widget());
+}
+
+Core::IDocument *AndroidManifestEditor::document()
+{
+    return textEditor()->baseTextDocument();
+}
+
+TextEditor::BaseTextEditorWidget *AndroidManifestEditor::textEditor() const
+{
+    return widget()->textEditorWidget();
+}
+
+int AndroidManifestEditor::currentLine() const
+{
+    return textEditor()->textCursor().blockNumber() + 1;
+}
+
+int AndroidManifestEditor::currentColumn() const
+{
+    QTextCursor cursor = textEditor()->textCursor();
+    return cursor.position() - cursor.block().position() + 1;
+}
+
 void AndroidManifestEditor::changeEditorPage(QAction *action)
 {
-    AndroidManifestEditorWidget *editorWidget = static_cast<AndroidManifestEditorWidget *>(widget());
-    if (!editorWidget->setActivePage(static_cast<AndroidManifestEditorWidget::EditorPage>(action->data().toInt()))) {
+    if (!widget()->setActivePage(static_cast<AndroidManifestEditorWidget::EditorPage>(action->data().toInt()))) {
         foreach (QAction *action, m_actionGroup->actions()) {
-            if (action->data().toInt() == editorWidget->activePage()) {
+            if (action->data().toInt() == widget()->activePage()) {
                 action->setChecked(true);
                 break;
             }
diff --git a/src/plugins/android/androidmanifesteditor.h b/src/plugins/android/androidmanifesteditor.h
index 98465171c5a4b603734e691feb72ac1a76cd1bf5..aedd29c57c1b6e1ace2e29b1f61f14fd5e5c59c3 100644
--- a/src/plugins/android/androidmanifesteditor.h
+++ b/src/plugins/android/androidmanifesteditor.h
@@ -31,6 +31,7 @@
 #define ANDROIDMANIFESTEDITOR_H
 
 #include "androidmanifestdocument.h"
+#include "androidmanifesteditorwidget.h"
 
 #include <coreplugin/editormanager/ieditor.h>
 #include <texteditor/basetexteditor.h>
@@ -41,9 +42,8 @@ QT_END_NAMESPACE
 
 namespace Android {
 namespace Internal {
-class AndroidManifestEditorWidget;
 
-class AndroidManifestEditor : public TextEditor::BaseTextEditor
+class AndroidManifestEditor : public Core::IEditor
 {
     Q_OBJECT
 
@@ -51,13 +51,22 @@ public:
     explicit AndroidManifestEditor(AndroidManifestEditorWidget *editorWidget);
 
     Core::Id id() const;
+    bool open(QString *errorString, const QString &fileName, const QString &realFileName);
+    QWidget *toolBar();
+    AndroidManifestEditorWidget *widget() const;
+    Core::IDocument *document();
+    TextEditor::BaseTextEditorWidget *textEditor() const;
+
+    int currentLine() const;
+    int currentColumn() const;
+    void gotoLine(int line, int column = 0) { textEditor()->gotoLine(line, column); }
 
 private slots:
     void changeEditorPage(QAction *action);
 
 private:
-    AndroidManifestDocument *m_document;
     QString m_displayName;
+    QToolBar *m_toolBar;
     QActionGroup *m_actionGroup;
 };
 
diff --git a/src/plugins/android/androidmanifesteditorfactory.cpp b/src/plugins/android/androidmanifesteditorfactory.cpp
index b5767e2edd371fd10d6d2010790a0a6e134db354..4078dec5ccc19065ef643c3e818991f6379ba42c 100644
--- a/src/plugins/android/androidmanifesteditorfactory.cpp
+++ b/src/plugins/android/androidmanifesteditorfactory.cpp
@@ -39,6 +39,19 @@
 using namespace Android;
 using namespace Android::Internal;
 
+class AndroidTextEditorActionHandler : public TextEditor::TextEditorActionHandler
+{
+public:
+    explicit AndroidTextEditorActionHandler(QObject *parent)
+        : TextEditorActionHandler(parent, Constants::ANDROID_MANIFEST_EDITOR_CONTEXT)
+    {}
+private:
+    TextEditor::BaseTextEditorWidget *resolveTextEditorWidget(Core::IEditor *editor) const
+    {
+        AndroidManifestEditor *androidManifestEditor = static_cast<AndroidManifestEditor *>(editor);
+        return androidManifestEditor->textEditor();
+    }
+};
 
 AndroidManifestEditorFactory::AndroidManifestEditorFactory(QObject *parent)
     : Core::IEditorFactory(parent)
@@ -46,12 +59,11 @@ AndroidManifestEditorFactory::AndroidManifestEditorFactory(QObject *parent)
     setId(Constants::ANDROID_MANIFEST_EDITOR_ID);
     setDisplayName(tr("Android Manifest editor"));
     addMimeType(Constants::ANDROID_MANIFEST_MIME_TYPE);
-    new TextEditor::TextEditorActionHandler(this, Constants::ANDROID_MANIFEST_EDITOR_CONTEXT);
+    new AndroidTextEditorActionHandler(this);
 }
 
 Core::IEditor *AndroidManifestEditorFactory::createEditor()
 {
-    AndroidManifestEditorWidget *editor = new AndroidManifestEditorWidget();
-    TextEditor::TextEditorSettings::initializeEditor(editor);
-    return editor->editor();
+    AndroidManifestEditorWidget *androidManifestEditorWidget = new AndroidManifestEditorWidget();
+    return androidManifestEditorWidget->editor();
 }
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index 2ded8d8635adb5ccf8c670feb5feb160c22592c5..70699cf841826ef261e762306d3409243cb707c5 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -35,6 +35,7 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/infobar.h>
+#include <coreplugin/editormanager/ieditor.h>
 #include <texteditor/plaintexteditor.h>
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectwindow.h>
@@ -44,6 +45,7 @@
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/kitinformation.h>
 #include <texteditor/texteditoractionhandler.h>
+#include <texteditor/texteditorsettings.h>
 #include <qmakeprojectmanager/qmakeproject.h>
 
 #include <QLineEdit>
@@ -95,49 +97,44 @@ Project *androidProject(const QString &file)
 
 } // anonymous namespace
 
-AndroidManifestEditorWidget::AndroidManifestEditorWidget(QWidget *parent)
-    : TextEditor::PlainTextEditorWidget(new AndroidManifestDocument(this), parent),
+AndroidManifestEditorWidget::AndroidManifestEditorWidget()
+    : QWidget(),
       m_dirty(false),
       m_stayClean(false),
       m_setAppName(false),
       m_appNameInStringsXml(false)
 {
-    configure(QLatin1String(Constants::ANDROID_MANIFEST_MIME_TYPE));
+    m_textEditorWidget = new AndroidManifestTextEditorWidget(this);
+    TextEditor::TextEditorSettings::initializeEditor(m_textEditorWidget);
 
     initializePage();
 
-    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
     m_timerParseCheck.setInterval(800);
     m_timerParseCheck.setSingleShot(true);
 
+    m_editor = new AndroidManifestEditor(this);
+
     connect(&m_timerParseCheck, SIGNAL(timeout()),
             this, SLOT(delayedParseCheck()));
 
-    connect(document(), SIGNAL(contentsChanged()),
+    connect(m_textEditorWidget->document(), SIGNAL(contentsChanged()),
             this, SLOT(startParseCheck()));
 }
 
-TextEditor::BaseTextEditor *AndroidManifestEditorWidget::createEditor()
-{
-    return new AndroidManifestEditor(this);
-}
-
 void AndroidManifestEditorWidget::initializePage()
 {
-    QWidget *mainWidget = new QWidget(this);
-    mainWidget->setAutoFillBackground(true);
-    // If the user clicks on the mainwidget it gets focus, even though that's not visible
-    // This is to prevent the parent, the actual basetexteditorwidget from getting focus
-    mainWidget->setFocusPolicy(Qt::WheelFocus);
-    mainWidget->installEventFilter(this);
+    QHBoxLayout *layout = new QHBoxLayout(this);
+    layout->setMargin(0);
+    m_stackedWidget = new QStackedWidget(this); // simplfy make AndroidManifestEditorWidget a stacked widget
+    layout->addWidget(m_stackedWidget);
 
     Core::IContext *myContext = new Core::IContext(this);
-    myContext->setWidget(mainWidget);
-    myContext->setContext(Core::Context(androidManifestEditorGeneralPaneContextId));
+    myContext->setWidget(m_stackedWidget);
+    myContext->setContext(Core::Context(androidManifestEditorGeneralPaneContextId)); // where is the context used?
     Core::ICore::addContextObject(myContext);
 
+    QWidget *mainWidget = new QWidget; // different name
+
     QVBoxLayout *topLayout = new QVBoxLayout(mainWidget);
 
     QGroupBox *packageGroupBox = new QGroupBox(mainWidget);
@@ -444,7 +441,8 @@ void AndroidManifestEditorWidget::initializePage()
 
     topLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
 
-    m_overlayWidget = mainWidget;
+    m_stackedWidget->insertWidget(General, mainWidget);
+    m_stackedWidget->insertWidget(Source, m_textEditorWidget);
 }
 
 bool AndroidManifestEditorWidget::eventFilter(QObject *obj, QEvent *event)
@@ -454,18 +452,12 @@ bool AndroidManifestEditorWidget::eventFilter(QObject *obj, QEvent *event)
             QTimer::singleShot(0, this, SLOT(updateTargetComboBox()));
     }
 
-    if (obj == m_overlayWidget)
-        if (event->type() == QEvent::KeyPress
-                || event->type() == QEvent::KeyRelease) {
-            return true;
-        }
-
-    return TextEditor::PlainTextEditorWidget::eventFilter(obj, event);
+    return QWidget::eventFilter(obj, event);
 }
 
 void AndroidManifestEditorWidget::updateTargetComboBox()
 {
-    const QString docPath(baseTextDocument()->filePath());
+    const QString docPath(m_textEditorWidget->baseTextDocument()->filePath());
     ProjectExplorer::Project *project = androidProject(docPath);
     QStringList items;
     if (project) {
@@ -487,28 +479,20 @@ void AndroidManifestEditorWidget::updateTargetComboBox()
     m_targetLineEdit->addItems(items);
 }
 
-void AndroidManifestEditorWidget::resizeEvent(QResizeEvent *event)
-{
-    PlainTextEditorWidget::resizeEvent(event);
-    QSize s = QSize(rect().width(), rect().height());
-    m_overlayWidget->resize(s);
-}
-
 bool AndroidManifestEditorWidget::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
-    bool result = PlainTextEditorWidget::open(errorString, fileName, realFileName);
+    bool result = m_textEditorWidget->open(errorString, fileName, realFileName);
 
     updateSdkVersions();
 
     if (!result)
         return result;
 
-    Q_UNUSED(errorString);
     QString error;
     int errorLine;
     int errorColumn;
     QDomDocument doc;
-    if (doc.setContent(toPlainText(), &error, &errorLine, &errorColumn)) {
+    if (doc.setContent(m_textEditorWidget->toPlainText(), &error, &errorLine, &errorColumn)) {
         if (checkDocument(doc, &error, &errorLine, &errorColumn)) {
             if (activePage() != Source)
                 syncToWidgets(doc);
@@ -518,7 +502,6 @@ bool AndroidManifestEditorWidget::open(QString *errorString, const QString &file
     // some error occured
     updateInfoBar(error, errorLine, errorColumn);
     setActivePage(Source);
-
     return true;
 }
 
@@ -527,7 +510,7 @@ void AndroidManifestEditorWidget::setDirty(bool dirty)
     if (m_stayClean)
         return;
     m_dirty = dirty;
-    emit changed();
+    emit guiChanged();
 }
 
 bool AndroidManifestEditorWidget::isModified() const
@@ -541,7 +524,7 @@ bool AndroidManifestEditorWidget::isModified() const
 
 AndroidManifestEditorWidget::EditorPage AndroidManifestEditorWidget::activePage() const
 {
-    return m_overlayWidget->isVisibleTo(const_cast<AndroidManifestEditorWidget *>(this)) ? General : Source;
+    return AndroidManifestEditorWidget::EditorPage(m_stackedWidget->currentIndex());
 }
 
 bool AndroidManifestEditorWidget::setActivePage(EditorPage page)
@@ -557,22 +540,15 @@ bool AndroidManifestEditorWidget::setActivePage(EditorPage page)
     } else {
         if (!syncToWidgets())
             return false;
-
-        QWidget *fw = m_overlayWidget->focusWidget();
-        if (fw && fw != m_overlayWidget)
-            fw->setFocus();
-        else
-            m_packageNameLineEdit->setFocus();
+// TODO?
+//        QWidget *fw = m_overlayWidget->focusWidget();
+//        if (fw && fw != m_overlayWidget)
+//            fw->setFocus();
+//        else
+//            m_packageNameLineEdit->setFocus();
     }
 
-    m_overlayWidget->setVisible(page == General);
-    if (page == General) {
-        setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-        setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    } else {
-        setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-        setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-    }
+    m_stackedWidget->setCurrentIndex(page);
     return true;
 }
 
@@ -582,7 +558,7 @@ void AndroidManifestEditorWidget::preSave()
         syncToEditor();
 
     if (m_setAppName && m_appNameInStringsXml) {
-        QString baseDir = QFileInfo(baseTextDocument()->filePath()).absolutePath();
+        QString baseDir = QFileInfo(m_textEditorWidget->baseTextDocument()->filePath()).absolutePath();
         QString fileName = baseDir + QLatin1String("/res/values/strings.xml");
         QFile f(fileName);
         if (f.open(QIODevice::ReadOnly)) {
@@ -606,7 +582,7 @@ void AndroidManifestEditorWidget::preSave()
         m_setAppName = false;
     }
 
-    QString baseDir = QFileInfo(baseTextDocument()->filePath()).absolutePath();
+    QString baseDir = QFileInfo(m_textEditorWidget->baseTextDocument()->filePath()).absolutePath();
     if (!m_lIconPath.isEmpty()) {
         copyIcon(LowDPI, baseDir, m_lIconPath);
         m_lIconPath.clear();
@@ -624,12 +600,22 @@ void AndroidManifestEditorWidget::preSave()
     updateInfoBar();
 }
 
+Core::IEditor *AndroidManifestEditorWidget::editor() const
+{
+    return m_editor;
+}
+
+TextEditor::PlainTextEditorWidget *AndroidManifestEditorWidget::textEditorWidget() const
+{
+    return m_textEditorWidget;
+}
+
 bool AndroidManifestEditorWidget::syncToWidgets()
 {
     QDomDocument doc;
     QString errorMessage;
     int errorLine, errorColumn;
-    if (doc.setContent(toPlainText(), &errorMessage, &errorLine, &errorColumn)) {
+    if (doc.setContent(m_textEditorWidget->toPlainText(), &errorMessage, &errorLine, &errorColumn)) {
         if (checkDocument(doc, &errorMessage, &errorLine, &errorColumn)) {
             hideInfoBar();
             syncToWidgets(doc);
@@ -678,7 +664,7 @@ void AndroidManifestEditorWidget::updateInfoBar()
     QDomDocument doc;
     int errorLine, errorColumn;
     QString errorMessage;
-    if (doc.setContent(toPlainText(), &errorMessage, &errorLine, &errorColumn)) {
+    if (doc.setContent(m_textEditorWidget->toPlainText(), &errorMessage, &errorLine, &errorColumn)) {
         if (checkDocument(doc, &errorMessage, &errorLine, &errorColumn)) {
             hideInfoBar();
             return;
@@ -690,7 +676,7 @@ void AndroidManifestEditorWidget::updateInfoBar()
 
 void AndroidManifestEditorWidget::updateSdkVersions()
 {
-    const QString docPath(baseTextDocument()->filePath());
+    const QString docPath(m_textEditorWidget->baseTextDocument()->filePath());
     Project *project = androidProject(docPath);
     QPair<int, int> apiLevels = AndroidManager::apiLevelRange(project ? project->activeTarget() : 0);
     for (int i = apiLevels.first; i < apiLevels.second + 1; ++i)
@@ -708,7 +694,7 @@ void AndroidManifestEditorWidget::updateSdkVersions()
 
 void AndroidManifestEditorWidget::updateInfoBar(const QString &errorMessage, int line, int column)
 {
-    Core::InfoBar *infoBar = baseTextDocument()->infoBar();
+    Core::InfoBar *infoBar = m_textEditorWidget->baseTextDocument()->infoBar();
     QString text;
     if (line < 0)
         text = tr("Could not parse file: '%1'.").arg(errorMessage);
@@ -726,14 +712,14 @@ void AndroidManifestEditorWidget::updateInfoBar(const QString &errorMessage, int
 
 void AndroidManifestEditorWidget::hideInfoBar()
 {
-    Core::InfoBar *infoBar = baseTextDocument()->infoBar();
-    infoBar->removeInfo(infoBarId);
+    Core::InfoBar *infoBar = m_textEditorWidget->baseTextDocument()->infoBar();
+        infoBar->removeInfo(infoBarId);
     m_timerParseCheck.stop();
 }
 
 void AndroidManifestEditorWidget::gotoError()
 {
-    gotoLine(m_errorLine, m_errorColumn);
+    m_textEditorWidget->gotoLine(m_errorLine, m_errorColumn);
 }
 
 void setApiLevel(QComboBox *box, const QDomElement &element, const QString &attribute)
@@ -765,7 +751,7 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc)
     setApiLevel(m_androidMinSdkVersion, usesSdkElement, QLatin1String("android:minSdkVersion"));
     setApiLevel(m_androidTargetSdkVersion, usesSdkElement, QLatin1String("android:targetSdkVersion"));
 
-    QString baseDir = QFileInfo(baseTextDocument()->filePath()).absolutePath();
+    QString baseDir = QFileInfo(m_textEditorWidget->baseTextDocument()->filePath()).absolutePath();
     QString fileName = baseDir + QLatin1String("/res/values/strings.xml");
 
     QDomElement applicationElement = manifest.firstChildElement(QLatin1String("application"));
@@ -883,7 +869,7 @@ int extractVersion(const QString &string)
 void AndroidManifestEditorWidget::syncToEditor()
 {
     QDomDocument doc;
-    if (!doc.setContent(toPlainText())) {
+    if (!doc.setContent(m_textEditorWidget->toPlainText())) {
         // This should not happen
         updateInfoBar();
         return;
@@ -930,11 +916,11 @@ void AndroidManifestEditorWidget::syncToEditor()
 
 
     QString newText = doc.toString(4);
-    if (newText == toPlainText())
+    if (newText == m_textEditorWidget->toPlainText())
         return;
 
-    setPlainText(newText);
-    document()->setModified(true); // Why is this necessary?
+    m_textEditorWidget->setPlainText(newText);
+    m_textEditorWidget->document()->setModified(true);
 
     m_dirty = false;
 }
@@ -1062,7 +1048,7 @@ void AndroidManifestEditorWidget::removePermission()
 void AndroidManifestEditorWidget::setAppName()
 {
     m_setAppName = true;
-    emit changed();
+    setDirty(true);
 }
 
 void AndroidManifestEditorWidget::setPackageName()
@@ -1154,3 +1140,12 @@ int PermissionsModel::rowCount(const QModelIndex &parent) const
     Q_UNUSED(parent)
     return m_permissions.count();
 }
+
+
+AndroidManifestTextEditorWidget::AndroidManifestTextEditorWidget(AndroidManifestEditorWidget *parent)
+    : TextEditor::PlainTextEditorWidget(new AndroidManifestDocument(parent), parent),
+      m_parent(parent)
+{
+    baseTextDocument()->setMimeType(QLatin1String(Constants::ANDROID_MANIFEST_MIME_TYPE));
+}
+
diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h
index 1f5932f590d7e7054a68c801f6043391ffcc2f21..958a9364160e9714396fc709a28fef134fd7a0d0 100644
--- a/src/plugins/android/androidmanifesteditorwidget.h
+++ b/src/plugins/android/androidmanifesteditorwidget.h
@@ -54,6 +54,7 @@ namespace Core { class IEditor; }
 namespace Android {
 namespace Internal {
 class AndroidManifestEditor;
+class AndroidManifestEditorWidget;
 
 
 class PermissionsModel: public QAbstractListModel
@@ -75,16 +76,24 @@ private:
     QStringList m_permissions;
 };
 
-class AndroidManifestEditorWidget : public TextEditor::PlainTextEditorWidget
+class AndroidManifestTextEditorWidget : public TextEditor::PlainTextEditorWidget
+{
+public:
+    AndroidManifestTextEditorWidget(AndroidManifestEditorWidget *parent = 0);
+protected:
+    AndroidManifestEditorWidget *m_parent;
+};
+
+class AndroidManifestEditorWidget : public QWidget
 {
     Q_OBJECT
 public:
     enum EditorPage {
-        General,
-        Source
+        General = 0,
+        Source = 1
     };
 
-    explicit AndroidManifestEditorWidget(QWidget *parent = 0);
+    explicit AndroidManifestEditorWidget();
 
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
 
@@ -95,12 +104,16 @@ public:
 
     void preSave();
 
+    Core::IEditor *editor() const;
+    TextEditor::PlainTextEditorWidget *textEditorWidget() const;
+
 public slots:
     void setDirty(bool dirty = true);
 
+signals:
+    void guiChanged();
+
 protected:
-    TextEditor::BaseTextEditor *createEditor();
-    void resizeEvent(QResizeEvent *event);
     bool eventFilter(QObject *obj, QEvent *event);
 private slots:
     void setLDPIIcon();
@@ -165,8 +178,10 @@ private:
     QPushButton *m_removePermissionButton;
     QComboBox *m_permissionsComboBox;
 
-    QWidget *m_overlayWidget;
     QTimer m_timerParseCheck;
+    TextEditor::PlainTextEditorWidget *m_textEditorWidget;
+    QStackedWidget *m_stackedWidget;
+    AndroidManifestEditor *m_editor;
 };
 } // namespace Internal
 } // namespace Android
diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp
index a97af5dbdadba167d883b1dbe4620c2468cd63a3..3764bbedc713ef2848b21704de84d8ec483a5157 100644
--- a/src/plugins/texteditor/linenumberfilter.cpp
+++ b/src/plugins/texteditor/linenumberfilter.cpp
@@ -70,7 +70,7 @@ QList<LocatorFilterEntry> LineNumberFilter::matchesFor(QFutureInterface<Core::Lo
         column = lineAndColumn.at(1).toInt(&ok);
     if (!ok)
         return value;
-    if (currentTextEditor() && (line > 0 || column > 0)) {
+    if (EditorManager::currentEditor() && (line > 0 || column > 0)) {
         LineColumn data;
         data.first = line;
         data.second = column - 1;  // column API is 0-based
@@ -88,21 +88,13 @@ QList<LocatorFilterEntry> LineNumberFilter::matchesFor(QFutureInterface<Core::Lo
 
 void LineNumberFilter::accept(LocatorFilterEntry selection) const
 {
-    ITextEditor *editor = currentTextEditor();
+    IEditor *editor = EditorManager::currentEditor();
     if (editor) {
         EditorManager::addCurrentPositionToNavigationHistory();
         LineColumn data = selection.internalData.value<LineColumn>();
-        if (data.first < 1) { // jump to column in same line
-            int currLine, currColumn;
-            editor->convertPosition(editor->position(), &currLine, &currColumn);
-            data.first = currLine;
-        }
+        if (data.first < 1)  // jump to column in same line
+            data.first = editor->currentLine();
         editor->gotoLine(data.first, data.second);
         EditorManager::activateEditor(editor);
     }
 }
-
-ITextEditor *LineNumberFilter::currentTextEditor() const
-{
-    return qobject_cast<TextEditor::ITextEditor *>(EditorManager::currentEditor());
-}
diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h
index 01617c2e5b82ff7c2e43bb2f8fb259042503c0d4..a4eb8b2c77b0f3c07f176b5a7994ea76cf05aadf 100644
--- a/src/plugins/texteditor/linenumberfilter.h
+++ b/src/plugins/texteditor/linenumberfilter.h
@@ -36,10 +36,11 @@
 #include <QList>
 #include <QFutureInterface>
 
-namespace TextEditor {
-
-class ITextEditor;
+namespace Core {
+class IEditor;
+}
 
+namespace TextEditor {
 namespace Internal {
 
 class LineNumberFilter : public Core::ILocatorFilter
@@ -52,9 +53,6 @@ public:
     QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, const QString &entry);
     void accept(Core::LocatorFilterEntry selection) const;
     void refresh(QFutureInterface<void> &) {}
-
-private:
-    ITextEditor *currentTextEditor() const;
 };
 
 } // namespace Internal