diff --git a/NewDocumentEditor.md b/NewDocumentEditor.md
new file mode 100644
index 0000000..acae8cf
--- /dev/null
+++ b/NewDocumentEditor.md
@@ -0,0 +1,85 @@
+
+
+# Introduction
+The goal of the project is to develop and/or deploy new infrastructure for document editing in Melange. This infrastructure should provide revision control of the documents, displaying diffs between revisions, storing documents in HTML and markdown. MarkItUp! can be deployed as an optional editor.
+
+# Revision control architecture
+Revision control implementation involves creation of three separate models: Revision, RevisionInfo and RevisionContent.
+
+The main purposes of Revision are:
+  1. Denote that derived model implements revision control.
+  1. Store list of keys for RevisionInfo entities.
+
+```
+class Revision(soc.models.base.ModelWithFieldAttributes):
+  revisions = db.ListProperty(db.Key, verbose_name = ugettext("Revisions"))
+```
+
+Revision can be added to the list of base classes of the model, as GAE supports multiple inheritence for models since 1.2.4.
+
+RevisionInfo stores information about the revision. Revision number, author, date and time of creation, etc. All the meta goes here. RevisionInfo also contains reference to RevisionContent entity. Keys for the RevisionInfo entities may be implemented as `"%s_%d" % (entity_key, revnumber)`. This helps to retrieve given revision without retrieving model entity. Division of info and content is crucial for revision control. Some operations on revisions manipulate only info, but not the content. One can consider view that shows all the revisions for the current entity.
+```
+class RevisionInfo(soc.models.base.ModelWithFieldAttributes):
+  revnumber = db.IntegerProperty(required = True)
+  author = db.ReferenceProperty(reference_class = soc.models.user.User, required = True)
+  created = db.DateTimeProperty(auto_now_add = True)
+  content = db.ReferenceProperty(reference_class = RevisionContent, required = True)
+```
+
+RevisionContent stores the content. Content can be stored as plain text, JSON or something else. Revision model may implement methods to store the content in different formats. This methods can be redefined in derived models.
+```
+class RevisionContent(soc.models.base.ModelWithFieldAttributes):
+  content = db.TextProperty(verbose_name = ugettext("Content"))
+```
+
+# Project timeline
+## Week 1 (24 May - 30 May)
+  1. Dig into GAE datastore (read ["Programming Google App Engine"](http://oreilly.com/catalog/9780596522735), review google.appengine.ext.db, play with the datastore)
+  1. Deploy test Melange instance to appspot.com
+  1. Familiarize myself with the code base
+
+## Week 2 (31 May - 6 June)
+  1. Design revision control architecture
+  1. Digg deep into soc.models, soc.logic, soc.views packages
+
+## Week 3 (7 June - 13 June)
+  1. Implement Revision, RevisionInfo and RevisionContent
+  1. Implement logic for Revision
+  1. Refactor soc.views.models.base.View.create to support revision creation
+
+## Week 4 (14 June - 20 June)
+  1. Refactor soc.views.models.base.View.edit to support revision
+  1. Refactor Document model, logic and view to support revision control.
+
+## Week 5 (21 June - 27 June)
+  1. Implement view to list all revisions, roll back and show diff.
+  1. Fix bugs
+
+## Week 6 (28 June - 4 July)
+  1. Start working on HTML diffs
+  1. Try stuff from [HtmlDiff](http://esw.w3.org/HtmlDiff)
+
+## Week 7 (5 July - 11 July)
+  1. Implement HTML diffs for RevisionContent
+  1. Refactor views to show diffs between selected revisions
+
+## Week 8 (12 July - 18 July)
+  1. Intensive testing of revision control and diffs
+  1. Fix issues
+
+## Week 9 (19 July - 25 July)
+  1. Refactor RevisionContent to store custom number of fields as JSON
+  1. Refactor code to support new architecture
+  1. Start implementing integrating RC with StudentProposal model
+
+## Week 10 (26 July - 1 August)
+  1. Finish RC for StudentProposal
+
+## Week 11 (2 August - 8 August)
+  1. Work on auto-saving feature
+  1. Deploy some JS module to filter out changed form fields
+  1. Implement backend to store temporary forms
+
+## Week 12 (9 August - 15 August)
+  1. Finish work on auto-saving
+  1. Testing and code clean-up
\ No newline at end of file
diff --git a/NewDocumentEditor.wiki b/NewDocumentEditor.wiki
deleted file mode 100644
index 77cd536..0000000
--- a/NewDocumentEditor.wiki
+++ /dev/null
@@ -1,87 +0,0 @@
-#summary Tracks progress of the new document editor project.
-
-<wiki:toc max_depth="2"/>
-
-= Introduction =
-The goal of the project is to develop and/or deploy new infrastructure for document editing in Melange. This infrastructure should provide revision control of the documents, displaying diffs between revisions, storing documents in HTML and markdown. MarkItUp! can be deployed as an optional editor.
-
-= Revision control architecture =
-Revision control implementation involves creation of three separate models: Revision, !RevisionInfo and !RevisionContent.
-
-The main purposes of Revision are:
- # Denote that derived model implements revision control.
- # Store list of keys for !RevisionInfo entities.
-
-{{{
-class Revision(soc.models.base.ModelWithFieldAttributes):
-  revisions = db.ListProperty(db.Key, verbose_name = ugettext("Revisions"))
-}}}
-
-Revision can be added to the list of base classes of the model, as GAE supports multiple inheritence for models since 1.2.4.
-
-!RevisionInfo stores information about the revision. Revision number, author, date and time of creation, etc. All the meta goes here. !RevisionInfo also contains reference to !RevisionContent entity. Keys for the !RevisionInfo entities may be implemented as {{{"%s_%d" % (entity_key, revnumber)}}}. This helps to retrieve given revision without retrieving model entity. Division of info and content is crucial for revision control. Some operations on revisions manipulate only info, but not the content. One can consider view that shows all the revisions for the current entity.
-{{{
-class RevisionInfo(soc.models.base.ModelWithFieldAttributes):
-  revnumber = db.IntegerProperty(required = True)
-  author = db.ReferenceProperty(reference_class = soc.models.user.User, required = True)
-  created = db.DateTimeProperty(auto_now_add = True)
-  content = db.ReferenceProperty(reference_class = RevisionContent, required = True)
-}}}
-
-!RevisionContent stores the content. Content can be stored as plain text, JSON or something else. Revision model may implement methods to store the content in different formats. This methods can be redefined in derived models.
-{{{
-class RevisionContent(soc.models.base.ModelWithFieldAttributes):
-  content = db.TextProperty(verbose_name = ugettext("Content"))
-}}}
-
-= Project timeline =
-== Week 1 (24 May - 30 May) ==
- # Dig into GAE datastore (read [http://oreilly.com/catalog/9780596522735 "Programming Google App Engine"], review google.appengine.ext.db, play with the datastore)
- # Deploy test Melange instance to appspot.com
- # Familiarize myself with the code base
-
-== Week 2 (31 May - 6 June) ==
- # Design revision control architecture
- # Digg deep into soc.models, soc.logic, soc.views packages
-
-== Week 3 (7 June - 13 June) ==
- # Implement Revision, !RevisionInfo and !RevisionContent
- # Implement logic for Revision
- # Refactor soc.views.models.base.View.create to support revision creation 
-
-== Week 4 (14 June - 20 June) ==
- # Refactor soc.views.models.base.View.edit to support revision
- # Refactor Document model, logic and view to support revision control.
-
-== Week 5 (21 June - 27 June) ==
- # Implement view to list all revisions, roll back and show diff.
- # Fix bugs
-
-== Week 6 (28 June - 4 July) ==
- # Start working on HTML diffs
- # Try stuff from [http://esw.w3.org/HtmlDiff HtmlDiff]
-
-== Week 7 (5 July - 11 July) ==
- # Implement HTML diffs for !RevisionContent
- # Refactor views to show diffs between selected revisions
-
-== Week 8 (12 July - 18 July) ==
- # Intensive testing of revision control and diffs
- # Fix issues
-
-== Week 9 (19 July - 25 July) ==
- # Refactor !RevisionContent to store custom number of fields as JSON
- # Refactor code to support new architecture
- # Start implementing integrating RC with StudentProposal model
-
-== Week 10 (26 July - 1 August) ==
- # Finish RC for StudentProposal
-
-== Week 11 (2 August - 8 August) ==
- # Work on auto-saving feature
- # Deploy some JS module to filter out changed form fields
- # Implement backend to store temporary forms
-
-== Week 12 (9 August - 15 August) ==
- # Finish work on auto-saving
- # Testing and code clean-up
\ No newline at end of file
