diff --git a/ReleaseDocument.wiki b/ReleaseDocument.wiki
deleted file mode 100644
index fca0504..0000000
--- a/ReleaseDocument.wiki
+++ /dev/null
@@ -1,158 +0,0 @@
-#summary Release Document for Melange
-#labels Importance-Featured,Phase-Deploy,Contents-Complete,Featured
-
-This document aims to describe the procedure for creating a new Melange Release. As the purpose of this document is to ease cutting a new release, it should be used as a guide on how to create a release. Paraphrasing Pirates of the Caribbean "it's more more like guidelines anyway".
-
-<wiki:toc max_depth="2" />
-
-= Release Timing =
-
-In general a new Release will be cut on Monday and Thursday evening (that is, around 19-22 UTC).  A good reason to cut the release at a later time could be that a certain issue needs to be resolved (but only if the issue cannot wait to be resolved until the next release). Likewise, a reason to cut a release at an earlier time could be the presence of a high priority issue that has been resolved and that needs to be deployed as soon as possible (see below for the procedure on critical fixes).  
-
-= Release responsibility =
-
-In order to equally spread the burden of cutting a new release the owner that cuts the releases will be rotated with each release. The  schedule is ordered alphabetically by default, and wraps around as soon as the last owner in the list has cut a release. Note that this schedule is not set in stone either, and can be modified at the discretion of the owners. If a change is made in the schedule it should of course be the goal to compensate for this change (as to not have one owner end up doing many releases in a row).
-
-= Critical Fixes =
-
-When there are critical fixes a 'patch release' should be made instead of doing a full release. The reason for this is that regular releases should always be tested extensively (see below for instructions), whereas with critical fixes there usually is no time for such exhaustive testing. The justification for this lack of testing is that critical fixes are usually small in size, and their behavior is easily verified, that is, the answer to "is the critical issue addressed by this fix?" is usually obvious. If such is not the case (e.g., the critical fix cannot be trivially verified) then it is up to the owners to decide if applying the fix without thorough testing is worth the risk of adding a new issue in doing so.
-
-= How to cut a release = 
-
-There are several steps that need to be done, and one conditions that should be met, in order to cut a release. The one condition is simple, all owners should agree on a version of trunk that will be used to cut the release from. As described above, this decision is usually made on Monday and Thursday. Once a version has been chosen the chosen version should be tested to catch any obvious problems before cutting the release from that version (see below for testing instructions).
-
-* The name of the branch and tags are up for discussion on melange-soc-dev, once a decision has been made the document will be updated. *
-
-== Creating the release branch ==
-
-Once the owner doing the release has verified that the chosen version is indeed fit to be used for the release, a new branch should be created from that version (using the release script). The name of the branch should be in the format "$major-$minor-$year$month$day",  the release script will enforce this format and require you only to specify the correct major and minor version and optional patch level. For example, a valid branch name is "0-5-20090313" . Once the branch has been created, use the release script to export the branch to a separate directory, to prevent cruft in the worktree from affecting any further tests. Deploy this release to an appspot test instance with the release script and verify that everything works (see below for testing instructions). Once testing is completed use the release script to deploy this release to http://melange-demo.appspot.com and notify the testers that a new release is in need of testing through the melange-soc mailing list. 
-
-== Creating the release tag ==
-
-Once the testers have verified that the release works as expected, and that all issues that have been addressed with this release are indeed fixed, a tag should be created from the release branch. This testing should take between 24 and 48 hours with the preference being closer to 48. This way testers from different timezones have a chance to test (see below on test instance policies). Using the release script the owner creates a new tag from the release branch, which will have the same name as the branch. This tag should then be deployed to http://melange-demo.appspot.com with the release script. Also, send a mail to "Melange Dev List" <melange-soc-dev@googlegroups.com> announcing the new release so that Google can create a release from this tag. Tags may have an optional 'patch level' suffix, if rather then creating a new branch an existing branch is updated, the format for branches is "$major-$minor-$year$month$day$patchlevel", such as "0-5-20090313p0".
-
-== Changelog ==
-
-After cutting the release a changelog (between the current and the previous release) should be made using the release script. In the changelog all new commits from trunk that are included in the release, that were not previously included, should be listed, together with a short description.
-
-== Dealing with critical issues in the chosen version ==
-If the chosen version contains any critical issues, these should be addressed before the release is deployed. Depending on how far the release process has been completed already, the release should be aborted, or it should be completed and the found issues should be addressed in a patch release. In the latter case the release should be deployed after these issues have been addressed and the owners have agreed on an appropriate new revision to cut the release from.
-
-= Rollback of a release =
-
-Should there be any critical issues that are noticed shortly after the release is deployed, and the release does not address an issue that is more critical than the new found issue, a rollback should be done. Due to the way AppEngine works it is possible to do such a rollback by setting the default version back to the previous release, for this reason the previous release version, and the one before that, should always be kept available.
-
-= Testing instructions =
-
-It is important that each release is tested as to ensure the quality of the new release. Since the current test suite is far from complete, manual testing is required instead. In the future this manual testing will be entirely replaced by running the test suite, which is currently only a minor quality indicator. For the purpose of stimulating the progression of the test suite a conversion guide is included (see below).
-
-== What to test ==
-
-When describing what should be tested it is expected that "Create a new user" is understood to mean "Create a new user and verify that everything works as expected". For example, the new user profile should have the fields set in the way they were provided when creating the profile, etc. Also, one should test that only in the appropriate role it is possible to perform the described action (only a developer should be able to change the site settings). In order to make sure that Melange functions as expected the following things should be tested:
-
-	* Signing in as a new user
-	* Creating your own user profile (as a new user)
-	* Editing your own user profile as an existing user
-	* Listing of a user's roles
-	* List of a user's outstanding request
-	* List of notifications
-
-	* Creating a new document in a user's private space
-	* Editing an existing document
-	* Listing a user's documents
-
-	* Create a new user
-	* Edit an existing user
-	* Change a user e-mail address
-	* Set a user account to invalid
-	* Make a user a developer
-	* Delete a user
-
-	* Editing the Site Settings
-	* Adding a feed to the Site Home page
-	* Setting a Site Wide notice
-	* Putting the Site in maintenance mode
-	* List site documents
-	* Set the site home page
-	* Create a site document
-	* Feature a site document
-
-	* Inviting a new Host
-	* Accepting a Host invitation
-	* Creating a Host profile
-	* Deleting a host profile
-
-	* Creating a new program
-	* Editing a new program
-	* Setting a program home page
-	* Set all program agreements
-	* Edit the program timeline
-	* Create a program document
-	* Feature a program document
-
-	* Creating a new org application
-	* List of your own org applications
-	* List of all org applications
-	* Pre-Accepting an org application
-	* Pre-Rejecting an org application
-	* Accepting an org application
-	* Rejecting an org application
-	* Ignoring an org application
-	* Deleting an org application
-	* Bulk-accepting all org applications
-	* Bulk-rejecting all org applications
-
-== How to test ==
-
-In order to ease testing the /seed_db, /clear_db, and /reseed_db urls can be used. By default it creates a fair amount of the most-used entities. Refer to the seed_db module for a description of all supported arguments (among which a way to add an arbitrary amount of users to the datastore). If during testing an entity type is missing (or there are not enough entities of that type), these should be added to ease testing later on.
-
-== When is the testing done ==
-
-Testing is of course never done, but a rough guideline at the moment is that is done when all functionality that is in use has been tested. When certain functionality is covered by a test suite, manual testing of that feature can be replaced by running the test suite. If the test suite fails, verify that the tested behaviour is indeed not working and take appropriate action (see below).
-
-== When a test fails ==
-
-When a problem is discovered, create a http://tinyurl.com/new-issue describing the problem, describing how to reproduce the problem. If the fix is obvious and trivial it is acceptable to instead fix the issue, commit the fix, and continue testing. If however, the fix is unclear, or would take a significant amount of time, it is preferable to file an issue before fixing it, to prevent double work.
-
-== When a test passes ==
-
-When an issue marked as fixed is found to work correctly on the melange-demo site its status should be changed to verified. Testers who have contributed more than a dozen useful Issues are candidates for being given issue tracker rights to enable them to modify status as well as the default of being able to create issues and add comment.
-
-== Converting manual testing to tests in the suite ==
-
-To prevent manual testing, automated tests can be written that perform the required actions and validate the result. For this purpose a test harness has been created that is suited to test both the views and the logic. Model code need not be tested as AppEngine has it's own test suite, which we should not duplicate. When testing view code it is preferable to stub out Django's rendering code. This eliminates the need to test the HTML output, and allows the test to instead focus on whether the proper template is used, and the contents of the context object. Refer to the existing test code for examples. In order to ensure that the interface looks as expected Selenium can be used, this ensures that not only the views use the proper value but that they also render properly.
-
-= Test instance policies =
-
-There are several appspot instances that have been reserved for testing purposes. The two that are currently in use are http://melange-dev.appspot.com and http://melange-demo.appspot.com.
-
-== Policies for http://melange-dev.appspot.com ==
-The aim of melange-dev is to always have the most recent revision, regardless of whether this revision contains any issues. This allows both testers and developers to quickly identify any problems, especially those that only occur on appspot. The best way to ensure this is to have the continuous build automatically deploy the latest release to melange-dev. It is acceptable to wipe the datastore on melange-dev when the need to do so arises.
-
-== Policies for http://melange-demo.appspot.com ==
-
-On melange-demo only properly tested branches (see above) should be deployed. In order to facilitate regular testing it is desirable that on melange-demo the datastore is treated with the same care as on an official instance. This means that in the case of a schema change (see below) the same measures should be taken as those that will be used on an official instance. An added benefit is that all conversions tools are tested on melange-demo first, so that issues with the conversion tool can be spotted as well.
-
-= Site Maintenance =
-
-It may be necessary to put the Site in maintenance mode (for example, when AppEngine goes into read-only mode). When the site is in maintenance mode only Developers can access it, all other users will be directed to /maintenance, which displays the current Site Wide notice.
-
-== Notifying users ==
-
-When site maintenance is required this should be announced at least 48 hours in advance by means of a "Site Wide Notice" (see below). The notice should explain the reason for the maintenance, the start and end date in UTC (with a link to http://www.timeanddate.com/ for easy conversion to other timezones) and, optionally, a link to more information.
-
-== Enabling maintenance mode ==
-
-Before enabling maintenance mode, a Site Wide Notice should be set explaining the reason for and duration of the maintenance (see above). This notice can be set by a Developer in the "Site Settings" menu. Once the notice has been configured, maintenance mode can be enabled by setting the start and end date (note, these should be entered in UTC).
-
-= Downtime =
-
-Due to the nature of AppEngine there should be little need for actual downtime. During a push the old version continues to serve until the new version has been set as the default. Downtime should only be necessary when major datastore modification is needed, for example in the case of a schema change (see below), when putting the site in maintenance mode is not an option. If such downtime is required, it might be desirable to deploy a version that consists of a simple app that accepts any url and redirects to a static maintenance page.
-
-= Schema Changes =
-
-If new properties are added to an entity that has "required=True", existing data will fail to load. In order to prevent the errors this should be anticipated by filling in these fields for all existing entities before pushing the a release that has the schema-breaking change. This can be achieved by adding a new url to the sitemap that, when called, updates a batch of entities that need updating. Due to the invasive nature of such changes it is desirable to avoid such changes if possible. For example, it might be possible to enforce the "required=True" in the view, rather than in the model. This way the entity cannot be saved without filling in the new property, but it will load fine. Once all entities have been updated the "required=True" can be added to the model, if desired.
-
-= Data backup =
-
-In order to prevent data loss when something goes wrong, regular backups should be made of important documents and other entities that would be cumbersome to recreate. Currently the only way to do this is through (csv) export, and there is no easy way to import these backups in the case of failure. It is desirable that an automatic solution (such as Google App Engine Backup and Restore) is implemented and used on a regular basis, but the details are beyond the scope of this document.
