diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 6cfec71e0f619521a3b8cd62dd7877965cd4c12d..3acd76af8fdb4c13ac97c026160b29c77c19342a 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -75,7 +75,7 @@ Q_DECLARE_METATYPE(Core::IEditor*)
 using namespace Core;
 using namespace Core::Internal;
 
-enum { debugEditorManager=0 };
+enum { debugEditorManager=1 };
 
 static inline ExtensionSystem::PluginManager *pluginManager()
 {
diff --git a/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml b/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
index d3ff62dbea5890eda0c26f48aa8b11a417ed83d6..c45a828b20015181526ad3eacc354bcd067424c8 100644
--- a/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
+++ b/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
@@ -1,8 +1,28 @@
 <?xml version="1.0"?>
+
 <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
   <mime-type type="text/x-generic-project">
     <sub-class-of type="text/plain"/>
     <comment>Generic Qt Creator Project file</comment>
     <glob pattern="*.creator"/>
   </mime-type>
+
+  <mime-type type="application/vnd.nokia.qt.generic.files">
+    <sub-class-of type="text/plain"/>
+    <comment>Generic Project Files</comment>
+    <glob pattern="*.files"/>
+  </mime-type>
+
+  <mime-type type="application/vnd.nokia.qt.generic.includes">
+    <sub-class-of type="text/plain"/>
+    <comment>Generic Project Include Paths</comment>
+    <glob pattern="*.includes"/>
+  </mime-type>
+
+  <mime-type type="application/vnd.nokia.qt.generic.config">
+    <sub-class-of type="text/plain"/>
+    <comment>Generic Project Configuration File</comment>
+    <glob pattern="*.config"/>
+  </mime-type>
+
 </mime-info>
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 551900778994598ebf07bebc81ff144fd1c72c99..9e1c52efb681aeb9f87be7926ed3db4491838ca3 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -113,32 +113,72 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
 
     _file = new GenericProjectFile(this, fileName);
     _rootNode = new GenericProjectNode(this, _file);
+
+    _manager->registerProject(this);
 }
 
 GenericProject::~GenericProject()
 {
     qDebug() << Q_FUNC_INFO;
 
+    _manager->unregisterProject(this);
+
     delete _rootNode;
     delete _toolChain;
 }
 
+QStringList GenericProject::readLines(const QString &absoluteFileName) const
+{
+    QStringList lines;
+
+    QFile file(absoluteFileName);
+    if (file.open(QFile::ReadOnly)) {
+        QTextStream stream(&file);
+
+        forever {
+            QString line = stream.readLine();
+            if (line.isNull())
+                break;
+
+            line = line.trimmed();
+            if (line.isEmpty())
+                continue;
+
+            lines.append(line);
+        }
+    }
+
+    return lines;
+}
+
+
 void GenericProject::parseProject()
 {
+    const QFileInfo projectFileInfo(_fileName);
+    const QDir projectDir = projectFileInfo.dir();
+    const QString projectName = projectFileInfo.baseName();
+    const QFileInfo projectFiles(projectDir, projectName + QLatin1String(".files"));
+    const QFileInfo projectIncludes(projectDir, projectName + QLatin1String(".includes"));
+    const QFileInfo projectConfig(projectDir, projectName + QLatin1String(".config"));
+
     QSettings projectInfo(_fileName, QSettings::IniFormat);
 
-    _files     = convertToAbsoluteFiles(projectInfo.value(QLatin1String("files")).toStringList());
+    _files = convertToAbsoluteFiles(readLines(projectFiles.absoluteFilePath()));
+    _projectIncludePaths = readLines(projectIncludes.absoluteFilePath());
+
     _generated = convertToAbsoluteFiles(projectInfo.value(QLatin1String("generated")).toStringList());
     _defines   = projectInfo.value(QLatin1String("defines")).toStringList();
     _projectIncludePaths = projectInfo.value(QLatin1String("includePaths")).toStringList();
-    
-    qDebug() << "project include paths:" << _projectIncludePaths;
+
+    emit fileListChanged();
 }
 
 void GenericProject::refresh()
 {
     qDebug() << Q_FUNC_INFO;
 
+    parseProject();
+
     _rootNode->refresh();
 
     CppTools::CppModelManagerInterface *modelManager =
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 5ed588d7f09be819a1fbca7022cd1a09e3f1ac37..c5cb8bcf8a019362d762b2280ff9bafd855727d2 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -106,6 +106,8 @@ protected:
 private:
     void parseProject();
 
+    QStringList readLines(const QString &absoluteFileName) const;
+
     Manager *_manager;
     QString _fileName;
     GenericProjectFile *_file;
diff --git a/src/plugins/genericprojectmanager/genericprojectconstants.h b/src/plugins/genericprojectmanager/genericprojectconstants.h
index 7a47effaff40fd730bf9e7835ab334e1e6eb4bfd..d05c922b5e036f1c7ec63ba538ae5907e31ec14a 100644
--- a/src/plugins/genericprojectmanager/genericprojectconstants.h
+++ b/src/plugins/genericprojectmanager/genericprojectconstants.h
@@ -33,10 +33,24 @@
 namespace GenericProjectManager {
 namespace Constants {
 
-const char *const PROJECTCONTEXT  = "GenericProject.ProjectContext";
-const char *const GENERICMIMETYPE = "text/x-generic-project";
-const char *const MAKESTEP        = "GenericProjectManager.MakeStep";
+const char *const PROJECTCONTEXT     = "GenericProject.ProjectContext";
+const char *const GENERICMIMETYPE    = "text/x-generic-project"; // ### FIXME
+const char *const MAKESTEP           = "GenericProjectManager.MakeStep";
 
+// contexts
+const char *const C_FILESEDITOR      = ".files Editor";
+
+// kinds
+const char *const PROJECT_KIND       = "Generic";
+
+const char *const FILES_EDITOR       = ".files Editor";
+const char *const FILES_MIMETYPE     = "application/vnd.nokia.qt.generic.files";
+
+const char *const INCLUDES_EDITOR    = ".includes Editor";
+const char *const INCLUDES_MIMETYPE  = "application/vnd.nokia.qt.generic.includes";
+
+const char *const CONFIG_EDITOR      = ".includes Editor";
+const char *const CONFIG_MIMETYPE    = "application/vnd.nokia.qt.generic.config";
 
 } // namespace Constants
 } // namespace GenericProjectManager
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c072d641f9507020eea9a9500ea112b5221c503e
--- /dev/null
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
@@ -0,0 +1,136 @@
+#include "genericprojectfileseditor.h"
+#include "genericprojectmanager.h"
+#include "genericprojectconstants.h"
+
+#include <coreplugin/uniqueidmanager.h>
+#include <coreplugin/editormanager/editormanager.h>
+
+#include <QtDebug>
+
+using namespace GenericProjectManager;
+using namespace GenericProjectManager::Internal;
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditable
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesFactory::ProjectFilesFactory(Manager *manager,
+                                         TextEditor::TextEditorActionHandler *handler)
+    : Core::IEditorFactory(manager),
+      _manager(manager),
+      _actionHandler(handler)
+{
+    _mimeTypes.append(QLatin1String(Constants::FILES_MIMETYPE));
+    _mimeTypes.append(QLatin1String(Constants::INCLUDES_MIMETYPE));
+}
+
+ProjectFilesFactory::~ProjectFilesFactory()
+{ }
+
+Manager *ProjectFilesFactory::manager() const
+{ return _manager; }
+
+Core::IEditor *ProjectFilesFactory::createEditor(QWidget *parent)
+{
+    ProjectFilesEditor *ed = new ProjectFilesEditor(parent, this, _actionHandler);
+    // ### initialize
+    return ed->editableInterface();
+}
+
+QStringList ProjectFilesFactory::mimeTypes() const
+{ return _mimeTypes; }
+
+QString ProjectFilesFactory::kind() const
+{ return QLatin1String(Constants::FILES_EDITOR); }
+
+Core::IFile *ProjectFilesFactory::open(const QString &fileName)
+{
+    qDebug() << Q_FUNC_INFO << fileName;
+
+    Core::EditorManager *editorManager = Core::EditorManager::instance();
+
+    if (Core::IEditor *editor = editorManager->openEditor(fileName, kind()))
+        return editor->file();
+
+    return 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditable
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesEditable::ProjectFilesEditable(ProjectFilesEditor *editor)
+    : TextEditor::BaseTextEditorEditable(editor)
+{
+    Core::UniqueIDManager *uidm = Core::UniqueIDManager::instance();
+    _context << uidm->uniqueIdentifier(Constants::C_FILESEDITOR);
+}
+
+ProjectFilesEditable::~ProjectFilesEditable()
+{ }
+
+QList<int> ProjectFilesEditable::context() const
+{ return _context; }
+
+const char *ProjectFilesEditable::kind() const
+{ return Constants::FILES_EDITOR; }
+
+bool ProjectFilesEditable::duplicateSupported() const
+{ return true; }
+
+Core::IEditor *ProjectFilesEditable::duplicate(QWidget *parent)
+{
+    ProjectFilesEditor *parentEditor = qobject_cast<ProjectFilesEditor *>(editor());
+    ProjectFilesEditor *editor = new ProjectFilesEditor(parent,
+                                                        parentEditor->factory(),
+                                                        parentEditor->actionHandler());
+    return editor->editableInterface();
+
+
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditor
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesEditor::ProjectFilesEditor(QWidget *parent, ProjectFilesFactory *factory,
+                                       TextEditor::TextEditorActionHandler *handler)
+    : TextEditor::BaseTextEditor(parent),
+      _factory(factory),
+      _actionHandler(handler)
+{
+    Manager *manager = factory->manager();
+    ProjectFilesDocument *doc = new ProjectFilesDocument(manager);
+    setBaseTextDocument(doc);
+}
+
+ProjectFilesEditor::~ProjectFilesEditor()
+{ }
+
+ProjectFilesFactory *ProjectFilesEditor::factory() const
+{ return _factory; }
+
+TextEditor::TextEditorActionHandler *ProjectFilesEditor::actionHandler() const
+{ return _actionHandler; }
+
+TextEditor::BaseTextEditorEditable *ProjectFilesEditor::createEditableInterface()
+{ return new ProjectFilesEditable(this); }
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesDocument
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesDocument::ProjectFilesDocument(Manager *manager)
+    : _manager(manager)
+{
+    setMimeType(QLatin1String(Constants::FILES_MIMETYPE));
+}
+
+ProjectFilesDocument::~ProjectFilesDocument()
+{ }
+
+bool ProjectFilesDocument::save(const QString &name)
+{
+    if (! BaseTextDocument::save(name))
+        return false;
+
+    _manager->notifyChanged(name);
+    return true;
+}
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.h b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
new file mode 100644
index 0000000000000000000000000000000000000000..14077aca5b738c244e5c9384c109ab5fa84751cb
--- /dev/null
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
@@ -0,0 +1,94 @@
+#ifndef GENERICPROJECTFILESEDITOR_H
+#define GENERICPROJECTFILESEDITOR_H
+
+#include <texteditor/basetexteditor.h>
+#include <texteditor/basetextdocument.h>
+
+#include <coreplugin/editormanager/ieditorfactory.h>
+
+namespace GenericProjectManager {
+namespace Internal {
+
+class Manager;
+class ProjectFilesEditable;
+class ProjectFilesEditor;
+class ProjectFilesDocument;
+class ProjectFilesFactory;
+
+class ProjectFilesFactory: public Core::IEditorFactory
+{
+    Q_OBJECT
+
+public:
+    ProjectFilesFactory(Manager *manager, TextEditor::TextEditorActionHandler *handler);
+    virtual ~ProjectFilesFactory();
+    
+    Manager *manager() const;
+
+    virtual Core::IEditor *createEditor(QWidget *parent);
+
+    virtual QStringList mimeTypes() const;
+    virtual QString kind() const;
+    virtual Core::IFile *open(const QString &fileName);
+
+private:
+    Manager *_manager;
+    TextEditor::TextEditorActionHandler *_actionHandler;
+    QStringList _mimeTypes;
+};
+
+class ProjectFilesEditable: public TextEditor::BaseTextEditorEditable
+{
+    Q_OBJECT
+
+public:
+    ProjectFilesEditable(ProjectFilesEditor *editor);
+    virtual ~ProjectFilesEditable();
+
+    virtual QList<int> context() const;
+    virtual const char *kind() const;
+
+    virtual bool duplicateSupported() const;
+    virtual Core::IEditor *duplicate(QWidget *parent);
+
+private:
+    QList<int> _context;
+};
+
+class ProjectFilesEditor: public TextEditor::BaseTextEditor
+{
+    Q_OBJECT
+
+public:
+    ProjectFilesEditor(QWidget *parent, ProjectFilesFactory *factory,
+                       TextEditor::TextEditorActionHandler *handler);
+    virtual ~ProjectFilesEditor();
+
+    ProjectFilesFactory *factory() const;
+    TextEditor::TextEditorActionHandler *actionHandler() const;
+
+    virtual TextEditor::BaseTextEditorEditable *createEditableInterface();
+
+private:
+    ProjectFilesFactory *_factory;
+    TextEditor::TextEditorActionHandler *_actionHandler;
+};
+
+class ProjectFilesDocument: public TextEditor::BaseTextDocument
+{
+    Q_OBJECT
+
+public:
+    ProjectFilesDocument(Manager *manager);
+    virtual ~ProjectFilesDocument();
+
+    virtual bool save(const QString &name);
+
+private:
+    Manager *_manager;
+};
+
+} // end of namespace Internal
+} // end of namespace GenericProjectManager
+
+#endif // GENERICPROJECTFILESEDITOR_H
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
index 28a629b011db685d7a2a04e25fbe60a3ed50d646..61fba763c9749913b074f650aba5181acc253caf 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
@@ -35,6 +35,8 @@
 #include <coreplugin/uniqueidmanager.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <QtDebug>
+
 using namespace GenericProjectManager::Internal;
 
 Manager::Manager()
@@ -60,9 +62,24 @@ ProjectExplorer::Project *Manager::openProject(const QString &fileName)
 {
     QFileInfo fileInfo(fileName);
 
-    if (fileInfo.isFile())
-        return new GenericProject(this, fileName);
+    if (fileInfo.isFile()) {
+        GenericProject *project = new GenericProject(this, fileName);
+        return project;
+    }
 
     return 0;
 }
 
+void Manager::registerProject(GenericProject *project)
+{ _projects.append(project); }
+
+void Manager::unregisterProject(GenericProject *project)
+{ _projects.removeAll(project); }
+
+void Manager::notifyChanged(const QString &fileName)
+{
+    foreach (GenericProject *project, _projects) {
+        project->refresh();
+    }
+}
+
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.h b/src/plugins/genericprojectmanager/genericprojectmanager.h
index 56da98651902b9046492d89faa6053c0417725fe..608313e13f028f513caaed7b6c3e4a975644211e 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.h
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.h
@@ -35,6 +35,8 @@
 namespace GenericProjectManager {
 namespace Internal {
 
+class GenericProject;
+
 class Manager: public ProjectExplorer::IProjectManager
 {
     Q_OBJECT
@@ -49,9 +51,15 @@ public:
     virtual QString mimeType() const;
     virtual ProjectExplorer::Project *openProject(const QString &fileName);
 
+    void notifyChanged(const QString &fileName);
+
+    void registerProject(GenericProject *project);
+    void unregisterProject(GenericProject *project);
+
 private:
     int _projectContext;
     int _projectLanguage;
+    QList<GenericProject *> _projects;
 };
 
 } // namespace Internal
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro
index 57a849d161be64b4159566f0cea93d0ee992a4d8..fa8bb3a987e1ad85cfbe402d9e79a8b3baf8feb3 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.pro
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro
@@ -8,6 +8,7 @@ HEADERS = genericproject.h \
     genericprojectconstants.h \
     genericprojectnodes.h \
     genericprojectwizard.h \
+    genericprojectfileseditor.h \
     pkgconfigtool.h \
     makestep.h
 SOURCES = genericproject.cpp \
@@ -15,6 +16,7 @@ SOURCES = genericproject.cpp \
     genericprojectmanager.cpp \
     genericprojectnodes.cpp \
     genericprojectwizard.cpp \
+    genericprojectfileseditor.cpp \
     pkgconfigtool.cpp \
     makestep.cpp
 RESOURCES += genericproject.qrc
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
index 75d70955a6e66aa07b9e0b7ad73b7d800d3871bc..2fe1e713910079d402a5ace5f4f4da6c99cbf14d 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
@@ -30,21 +30,30 @@
 #include "genericprojectplugin.h"
 #include "genericprojectmanager.h"
 #include "genericprojectwizard.h"
+#include "genericprojectconstants.h"
+#include "genericprojectfileseditor.h"
 #include "makestep.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/mimedatabase.h>
 
+#include <texteditor/texteditoractionhandler.h>
+
 #include <QtCore/QtPlugin>
 #include <QtCore/QDebug>
 
+using namespace GenericProjectManager;
 using namespace GenericProjectManager::Internal;
 
 GenericProjectPlugin::GenericProjectPlugin()
+    : _projectFilesEditorFactory(0)
 { }
 
 GenericProjectPlugin::~GenericProjectPlugin()
-{ }
+{
+    removeObject(_projectFilesEditorFactory);
+    delete _projectFilesEditorFactory;
+}
 
 bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage)
 {
@@ -58,7 +67,15 @@ bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage
     if (! mimeDB->addMimeTypes(mimetypesXml, errorMessage))
         return false;
 
-    addAutoReleasedObject(new Manager);
+    Manager *manager = new Manager;
+
+    TextEditor::TextEditorActionHandler *actionHandler =
+            new TextEditor::TextEditorActionHandler(Constants::C_FILESEDITOR);
+
+    _projectFilesEditorFactory = new ProjectFilesFactory(manager, actionHandler);
+    addObject(_projectFilesEditorFactory);
+
+    addAutoReleasedObject(manager);
     addAutoReleasedObject(new MakeBuildStepFactory);
     addAutoReleasedObject(new GenericProjectWizard);
 
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.h b/src/plugins/genericprojectmanager/genericprojectplugin.h
index 287ef500ff1364ff93ff5b2d25564e3b4dcd97be..e78d975e21f62db0be487aef6b9bedfd516415cf 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.h
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.h
@@ -37,6 +37,8 @@
 namespace GenericProjectManager {
 namespace Internal {
 
+class ProjectFilesFactory;
+
 class GenericProjectPlugin: public ExtensionSystem::IPlugin
 {
     Q_OBJECT
@@ -47,6 +49,9 @@ public:
 
     virtual bool initialize(const QStringList &arguments, QString *errorString);
     virtual void extensionsInitialized();
+
+private:
+    ProjectFilesFactory *_projectFilesEditorFactory;
 };
 
 } // namespace Internal