diff --git a/MelangeRoadmap2009.wiki b/MelangeRoadmap2009.md
similarity index 64%
rename from MelangeRoadmap2009.wiki
rename to MelangeRoadmap2009.md
index 12b1d2e..8278839 100644
--- a/MelangeRoadmap2009.wiki
+++ b/MelangeRoadmap2009.md
@@ -1,87 +1,84 @@
-#summary This page contains project roadmap for year 2009
-#labels Deprecated,Importance-Useful
-
-= Melange Roadmap 2009 =
+# Melange Roadmap 2009
 
 _This is the first draft of Melange Roadmap for 2009. This document is still incomplete (work in progress). We will be adding more description for each task listed below shortly._
 
-== release script ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* High
-  * *Scheduled for:* May 2009 
-  * *Who:* Pawel Solyga, Sverre Rabbelier, Dan Bentley 
-  * *ETA:* 1 week
+## release script
+  * **Lead:** Pawel Solyga
+  * **Priority:** High
+  * **Scheduled for:** May 2009
+  * **Who:** Pawel Solyga, Sverre Rabbelier, Dan Bentley
+  * **ETA:** 1 week
 
 To simplify the release process, release script will be created. Script will need to support Mercurial (hg) repository cause of our recent switch from SVN to hg. Release script will build, test using test suite, branch, tag new release and create tar.gz package to put into Download section on our code.google.com project page. In addition to that, script will also create app.yaml file from app.yaml.template and support cherrypicking of branches (previous releases) and deployment to testing GAE instances.
 
-== GHOP features support ==
-  * *Lead:* Lennard de Rijk
-  * *Developers:* Madhudusan C.S. (GSoC) Pawel Solyga
-  * *Priority:* High
-  * *Scheduled for:* May - September 2009
-  * *ETA:* 4 months
-  * *More:* http://code.google.com/p/soc/wiki/GSoC2009Ideas
+## GHOP features support
+  * **Lead:** Lennard de Rijk
+  * **Developers:** Madhudusan C.S. (GSoC) Pawel Solyga
+  * **Priority:** High
+  * **Scheduled for:** May - September 2009
+  * **ETA:** 4 months
+  * **More:** http://code.google.com/p/soc/wiki/GSoC2009Ideas
 
-Please see the [GHOP wiki topic] for more information.
+Please see the [wiki topic](GHOP.md) for more information.
 
 Melange GHOP features support GSoC project:
   * http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698486
 
-== test suite (unit, smoke and functional tests) ==
-  * *Priority:* Critical
-  * *Scheduled for:* May - June 2009
-  * *Who:* Melange Team
-  * *ETA:* ~1 month
+## test suite (unit, smoke and functional tests)
+  * **Priority:** Critical
+  * **Scheduled for:** May - June 2009
+  * **Who:** Melange Team
+  * **ETA:** ~1 month
 
-Right now Melange has a small set of basic unit tests (40). This task aims to extend our test suite with unit, smoke and functional tests. In addition to that we would also like to extend seed_db module which creates fake entities of different Melange models in the datastore for quick testing of Melange functionality locally and on deployed GAE application instance. seed_db module will be extended to seed all the models currently used within Melange.
+Right now Melange has a small set of basic unit tests (40). This task aims to extend our test suite with unit, smoke and functional tests. In addition to that we would also like to extend seed\_db module which creates fake entities of different Melange models in the datastore for quick testing of Melange functionality locally and on deployed GAE application instance. seed\_db module will be extended to seed all the models currently used within Melange.
 
 Summarizing:
   * unit tests
   * functional tests
   * smoke tests
-  * extending seed_db module 
-  * special view for seed_db module
+  * extending seed\_db module
+  * special view for seed\_db module
 
-== 1000 entity limitation fix ==
-  * *Priority:* High
-  * *Scheduled for:* May 2009
-  * *Who:* Dan Bentley, Pawel Solyga, Sverre Rabbelier
-  * *ETA:* 2-3 weeks
+## 1000 entity limitation fix
+  * **Priority:** High
+  * **Scheduled for:** May 2009
+  * **Who:** Dan Bentley, Pawel Solyga, Sverre Rabbelier
+  * **ETA:** 2-3 weeks
 
 Due to Google App Engine limitations we currently have problems with listing more than 1000 entities via the web interface. Fix for that has been already committed however it still requires some work including: addition of missing indexes, support for sharded counters to show total number of entries in the table/list, usage of deepFetch function in CSV export of tables in order to export whole table at once, not in batches like it is right now (just visible part of the table is exported).
 
-== statistics module (GSoC & GHOP) ==
-  * *Lead:* Pawel Solyga, Sverre Rabbelier
-  * *Priority:* High
-  * *Scheduled for:* May -  September 2009
-  * *Who:* Merio Ferraro (GSoC), Daniel Hans (GSoC), Sverre Rabbelier, Pawel Solyga, Lennard de Rijk  
-  * *ETA:* 3 months
+## statistics module (GSoC & GHOP)
+  * **Lead:** Pawel Solyga, Sverre Rabbelier
+  * **Priority:** High
+  * **Scheduled for:** May -  September 2009
+  * **Who:** Merio Ferraro (GSoC), Daniel Hans (GSoC), Sverre Rabbelier, Pawel Solyga, Lennard de Rijk
+  * **ETA:** 3 months
 
-Extract interesting statistics from the Melange datastore for the benefit of different Melange Roles including Program Administrator, Developer, Organization Administrator, Mentor.  Use it for: Graphs, Histograms, More Google Maps integration and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export.
-  
-   * use Google Chart API 
-   * use Google Visualization API
-   * display different kind of charts and statistics which can include students by country, number of organizations per program, students for each organization, students by school, mentors and org admins by country
-   * generate KML file with location of all mentors, students (connections between mentor and student too)
-   * create statistics dashboard page for organization admins, program administrators, developers (superadmins)
+Extract interesting statistics from the Melange datastore for the benefit of different Melange Roles including Program Administrator, Developer, Organization Administrator, Mentor.  Use it for: Graphs, Histograms, More Google Maps integration and [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) export.
+
+  * use Google Chart API
+  * use Google Visualization API
+  * display different kind of charts and statistics which can include students by country, number of organizations per program, students for each organization, students by school, mentors and org admins by country
+  * generate KML file with location of all mentors, students (connections between mentor and student too)
+  * create statistics dashboard page for organization admins, program administrators, developers (superadmins)
 
 Melange Statistics module GSoC projects:
   * http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698771
   * http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698336
 
-== bugs, features and enhancements from issue tracker ==
-  * *Priority:* High/Depends
-  * *Scheduled for:* May - September 2009
-  * *Who:* Melange Team
-  * *ETA:* hard to determine
+## bugs, features and enhancements from issue tracker
+  * **Priority:** High/Depends
+  * **Scheduled for:** May - September 2009
+  * **Who:** Melange Team
+  * **ETA:** hard to determine
 
 To be discussed during Monday (27th of May 2009) conference call what issues we will be working on in the first place.
 
-== surveys support (Quiz) ==
-  * *Priority:* High
-  * *Scheduled for:* June 2009
-  * *Who:* James Levy (GSoC), Sverre Rabbelier, Pawel Solyga
-  * *ETA:* 1 month
+## surveys support (Quiz)
+  * **Priority:** High
+  * **Scheduled for:** June 2009
+  * **Who:** James Levy (GSoC), Sverre Rabbelier, Pawel Solyga
+  * **ETA:** 1 month
 
 Survey is a set of questions with a different types of answers. Melange currently doesn't support surveys (quizes). In order to do midterm, final evaluations or any additional surveys within Melange the Surveys(Quiz) module is needed.
 Surveys can be created/edited/deleted by Program Administrator or Organization Administrator. Each of them can also list all created Surveys. Program Administrator can request to take a quiz (survey) to any Program user including Mentors, Students, Organization Administrators. Organization Administrator should be able to request to take a quiz from Organization Mentors or Students only. Quiz issuer should be able to list quiz results, list users who did not yet take a quiz and export all that information, results to CSV file. Surveys should have option to set quiz start and end date which will make them available only during this period.
@@ -90,265 +87,345 @@
 
 This functionality will be used for midterm, final evaluations and additional surveys.
 
-<LH>
+
+
+&lt;LH&gt;
+
+
 Future feature: Allow other Melange users to create and administer surveys. Need to talk to legal about any implications before considering this feature from the Google perspective.
 
 Raises interesting ethical question: Should all evaluation data from user created surveys be public provided results are anonymized/user has ability to opt-out of having survey results published? Think survey results should only be published at an aggregate level in any case.
 
-If survey results are not public, should the Sponsor (Host) of a particular program using Melange have access to survey data? I think that Sponsors should have access to all this data. If system users prefer not to share this data with Sponsors, there are [http://www.limesurvey.org/content/view/5/83/lang,en/ other FOSS survey tool options].
+If survey results are not public, should the Sponsor (Host) of a particular program using Melange have access to survey data? I think that Sponsors should have access to all this data. If system users prefer not to share this data with Sponsors, there are [other FOSS survey tool options](http://www.limesurvey.org/content/view/5/83/lang,en/).
 
-</LH>
 
-== buildbot enhancements ==
-  * *Priority:* Medium
-  * *Scheduled for:* June 2009
-  * *Who:* Pawel Solyga, Sverre Rabbelier
-  * *ETA:* 1 week
+
+&lt;/LH&gt;
+
+
+
+## buildbot enhancements
+  * **Priority:** Medium
+  * **Scheduled for:** June 2009
+  * **Who:** Pawel Solyga, Sverre Rabbelier
+  * **ETA:** 1 week
 
 Our buildbot needs to be configured to use Hg repository and pull the commits from it every couple minutes or using post-commit-hooks support on code.google.com project hosting (support for post-commit-hooks for Mercurial repositories is not available yet). Our buildbot also needs to test our code using pylint, which can be part of the build script that buildbot is already configured to run. Emails from buildbot should be send to melange-soc-buildbot google group (http://groups.google.com/group/melange-soc-buildbot). Our wiki documentation should also be updated with information about buildbot url and new buildbot google group.
 
-== dealing with failed students ==
-  * *Priority:* Medium
-  * *Scheduled for:* July 2009
-  * *Who:* Lennard de Rijk, Pawel Solyga, Leslie Hawthorn, Madhudusan C.S. (GSoC)
-  * *ETA:* 1 week
+## dealing with failed students
+  * **Priority:** Medium
+  * **Scheduled for:** July 2009
+  * **Who:** Lennard de Rijk, Pawel Solyga, Leslie Hawthorn, Madhudusan C.S. (GSoC)
+  * **ETA:** 1 week
 
-In previous years students who have failed to complete GSoC project have just disappeared from the web application and no information about them was present on any program page. We are considering changing this. We would a have special link on the Organization Home page listing "failed" projects (e.g. disappearing students, failed via midterm or final evaluation). In addition to that there will be special comment support for those projects and both project mentors and student will be able to comment on the project to explain what happened and what was the reason of failure. 
+In previous years students who have failed to complete GSoC project have just disappeared from the web application and no information about them was present on any program page. We are considering changing this. We would a have special link on the Organization Home page listing "failed" projects (e.g. disappearing students, failed via midterm or final evaluation). In addition to that there will be special comment support for those projects and both project mentors and student will be able to comment on the project to explain what happened and what was the reason of failure.
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 This feature should be implemented regardless of Google's final thoughts on this feature. Post-mortem reports are a beautiful thing and also help people not go down the wrong path when considering a solving a specific problem. It's also useful for people to get a view of the social reasons things didn't work out: being overcommitted to other work, social obligations, etc. Things happen.
 
-For implementation for GSoC, I need to confirm with Legal that this is OK and sync with Chris quickly. I assume he'll be totally fine with it. 
+For implementation for GSoC, I need to confirm with Legal that this is OK and sync with Chris quickly. I assume he'll be totally fine with it.
 
 I also think we ought to send Sponsors an email when a post-mortem is posted (good feedback). Also cuts down on trolling reports (think: I failed because my mentors were mean to me. It clearly wasn't that I took a ten week vacation. Hrm, maybe that is useful to publish. This is also a good lesson in the fact that what you say publicly here as with all Open Source participation is something that people will see/look at when considering if they'd like to undertake projects with you in the future.)
 
-</lh>
 
-== ajaxy table view ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* High
-  * *Scheduled for:* July 2009
-  * *Who:* Pawel Solyga, Merio Ferraro (GSoC), Sverre Rabbelier
-  * *ETA:* 2-3 weeks
+
+&lt;/lh&gt;
+
+
+
+## ajaxy table view
+  * **Lead:** Pawel Solyga
+  * **Priority:** High
+  * **Scheduled for:** July 2009
+  * **Who:** Pawel Solyga, Merio Ferraro (GSoC), Sverre Rabbelier
+  * **ETA:** 2-3 weeks
 
 Our current list view is very limited, doesn't support ajax data fetching, column sorting and many other features like searching on client side using javascript or on server side using ajax calls. This task aims to improve it or replace it with some ready to use ajax table view.
 
-More information about this task can be found in our issue tracker Issue 201.
+More information about this task can be found in our issue tracker Issue 201 (on Google Code).
 
-== file upload support (avatars, patches, tax forms, etc) ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* Medium
-  * *Scheduled for:* July 2009
-  * *Who:* Pawel Solyga, Sverre Rabbelier
-  * *ETA:* 2-3 weeks
+## file upload support (avatars, patches, tax forms, etc)
+  * **Lead:** Pawel Solyga
+  * **Priority:** Medium
+  * **Scheduled for:** July 2009
+  * **Who:** Pawel Solyga, Sverre Rabbelier
+  * **ETA:** 2-3 weeks
 
 Main usage will be for tax forms and all sorts of documentation in GSoC, avatars and patches can wait.
 
-See [Ihttp://code.google.com/p/soc/issues/detail?id=44] Issue 44.
+See [Ihttp://code.google.com/p/soc/issues/detail?id=44] Issue 44 (on Google Code).
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 From Google perspective for source code, LH needs to check implications from legal perspective. Assume it's ok since we satisfy restrictions now with eligibility requirements.
 
 Tax forms from students in USA cannot be stored on GSoC site.
 
 I see this feature as being most useful for patches/source code (GHOP), student presentations, etc. Why not have all your program "work" in one place? Useful instead of searching around. At the very least we already provide students with the opportunity to show off their work via links on their student proposal page (e.g. to slides on Slideshare or videos, etc.)
 
-</lh> 
 
-== feeds support for comments, announcement, important dates, proposal updates ==
-  * *Priority:* Medium
-  * *Scheduled for:* July - August 2009
-  * *Who:* James Levy (GSoC), Sverre Rabbelier
-  * *ETA:* 1 month
 
-    * integration with FeedBurner API so we don't have to cache it
-    * feeds with important dates based on program timeline (can't we just feed from existing program calendar? - LH)
-    * feeds generated using cron jobs ?
-    * interface to post announcement by Program Administrators, Organization Administrators
-    * each student proposal gets a feed so mentors are aware of any proposal changes/updates
+&lt;/lh&gt;
+
+
+
+## feeds support for comments, announcement, important dates, proposal updates
+  * **Priority:** Medium
+  * **Scheduled for:** July - August 2009
+  * **Who:** James Levy (GSoC), Sverre Rabbelier
+  * **ETA:** 1 month
+
+  * integration with FeedBurner API so we don't have to cache it
+  * feeds with important dates based on program timeline (can't we just feed from existing program calendar? - LH)
+  * feeds generated using cron jobs ?
+  * interface to post announcement by Program Administrators, Organization Administrators
+  * each student proposal gets a feed so mentors are aware of any proposal changes/updates
 
 Melange news framework GSoC project:
   * http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698643
 
-== django patch + gaebar support ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* Low
-  * *Scheduled for:* August 2009
-  * *Who:* Pawel Solyga
-  * *ETA:* 2 weeks
+## django patch + gaebar support
+  * **Lead:** Pawel Solyga
+  * **Priority:** Low
+  * **Scheduled for:** August 2009
+  * **Who:** Pawel Solyga
+  * **ETA:** 2 weeks
 
 Melange currently uses Google App Engine and django, however some of the django functionality doesn't work on GAE. With django-patch support in Melange we would be able to leverage all features of django inside Melange. In addition django-patch is required to enable gaebar support in Melange. gaebar is Google App Engine Backup and Restore project which allows to easily import and export data from GAE datastore to local computer or to other instance of application running on GAE. With gaebar support we would be able to do regular backups.
 
-    * Make Melange compatible with django-patch
-    * Use gaebar to import, export data from Melange instances (backup)
-    * We might not need this if GAE export/import tool is introduced at Google I/O or somewhere in GAE roadmap (what will most likely happen since GAE Team is already working on it)
+  * Make Melange compatible with django-patch
+  * Use gaebar to import, export data from Melange instances (backup)
+  * We might not need this if GAE export/import tool is introduced at Google I/O or somewhere in GAE roadmap (what will most likely happen since GAE Team is already working on it)
 
-== PDF generation of CPT letters, certificates, other documents ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* Medium
-  * *Scheduled for:* August 2009
-  * *Who:* Pawel Solyga, Leslie Hawthorn
-  * *ETA:* 1 week
+## PDF generation of CPT letters, certificates, other documents
+  * **Lead:** Pawel Solyga
+  * **Priority:** Medium
+  * **Scheduled for:** August 2009
+  * **Who:** Pawel Solyga, Leslie Hawthorn
+  * **ETA:** 1 week
 
 Every year GSoC students request CPT letters or other documents that will confirm their participation in GSoC. Program Administrators print out GSoC student certificates for all students that successfully finished their projects. This process is very time consuming and we aim to automate it. External python script will be created with support for simple documents templates for different kind of documents including CPT letters and certificates. Script will be able to fetch data from Melange datastore about students and generate documents in pdf format using reportlab library. For certificates script will create one big ready to print pdf file that will include certificates for all students. For other documents where pdf generation will be much faster (few documents at a time) Program Administrator will be able to select students in Web UI, select document type he/she wants to send to the Student and with a click of a button, document pdf will be generated and send to user via email. Students should be also able to request those documents via web user interface and maybe cron jobs can autogenerate and send out those documents every couple hours automatically without any intervention from Program Administrator.
 
-    * external script which will use remote api and reportlab
-    * http://www.reportlab.org/rl_toolkit.html
+  * external script which will use remote api and reportlab
+  * http://www.reportlab.org/rl_toolkit.html
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 This feature will need to be able to embed images, e.g. scanned signature and company logo.
 
 Future feature: make this functionality available to organizations to easily produce letters of recommendation for their students. Allow easy sharing of recommendation templates/good example letters.
-</lh>
 
-== clubs support ==
-  * *Lead:* Lennard de Rijk
-  * *Priority:* Medium
-  * *Scheduled for:* August 2009
-  * *ETA:* 2 weeks
+
+&lt;/lh&gt;
+
+
+
+## clubs support
+  * **Lead:** Lennard de Rijk
+  * **Priority:** Medium
+  * **Scheduled for:** August 2009
+  * **ETA:** 2 weeks
 
 Clubs within Melange are similar to User Groups. We would like to enable users to create different Clubs within Melange (i.e Apache Club could include all GSoC Apache students, mentors and org admins). Club owner will be able to manage memeberships, add/remove/invite/delete members. Club Members will be able to quickly apply to different projects by reusing their already created Club profile.
 
-== dashboard view for Devs, Host, Org admin (all Roles) ==
-  * *Lead:* Pawel Solyga, Sverre Rabbelier
-  * *Priority:* Medium
-  * *Scheduled for:* August 2009
-  * *Who:* Merio Ferraro (GSoC), Daniel Hans (GSoC), Sverre Rabbelier, Pawel Solyga
-  * *ETA:* 2-3 weeks
+## dashboard view for Devs, Host, Org admin (all Roles)
+  * **Lead:** Pawel Solyga, Sverre Rabbelier
+  * **Priority:** Medium
+  * **Scheduled for:** August 2009
+  * **Who:** Merio Ferraro (GSoC), Daniel Hans (GSoC), Sverre Rabbelier, Pawel Solyga
+  * **ETA:** 2-3 weeks
 
 Showing failed students on the organization page with additional comments from both students and mentors. Requires additional discussion with GOSPO Team.
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 I see this as very different from dealing with failed students. People want to see things like:
   * How many of my mentors still need to complete surveys?
   * What time zones are my people in so it's easy to match them up?
 
 etc. There's all kind of data folks will want on a dashboard. This is a great place to solicit community feedback. We can choose how to limit what we implement and others are welcome to create their own views/etc. They have the source code.
 
-</lh>
 
-== KML GSoC generation ==
-  * *Lead:* Pawel Solyga
-  * *Priority:* Low
-  * *Scheduled for:* August 2009
-  * *Who:* Pawel Solyga, Merio Ferraro (GSoC), Daniel Hans (GSoC)
-  * *ETA:* 1 week
+
+&lt;/lh&gt;
+
+
+
+## KML GSoC generation
+  * **Lead:** Pawel Solyga
+  * **Priority:** Low
+  * **Scheduled for:** August 2009
+  * **Who:** Pawel Solyga, Merio Ferraro (GSoC), Daniel Hans (GSoC)
+  * **ETA:** 1 week
 
 KML should include location of all mentors and students and connections between them just like in previous years. Using libkml python bindings (http://code.google.com/p/libkml/).
 
 KML example from GSoC 2008 can be found here:
   * http://code.google.com/soc/soc_map2008.kml
 
-== integration with Google Documents API and Spreadsheets (exporting, importing data) == 
-  * *Priority:* Low
-  * *Scheduled for:* September 2009
-  * *Who:* Melange Team
-  * *ETA:* 2-3 weeks
+## integration with Google Documents API and Spreadsheets (exporting, importing data)
+  * **Priority:** Low
+  * **Scheduled for:** September 2009
+  * **Who:** Melange Team
+  * **ETA:** 2-3 weeks
 
 Currently Melange provides limited export of lists into CSV file. We would like to extend this export to support Google Spreadsheets API. With this functionality we could export all kinds of data into users GSpreadsheet and then edit it inside Google Documents or export it to different formats including CSV, Excel, ODF and any other formats supported by Google Docs.
 
-<lh>
-I think this feature is more useful for the organizations than for Google. Exporting directly to a Google spreadsheet is fine, but then I'm just going to download and work with the file locally. Spreadsheets doesn't do a good job with *gigantic* reports (e.g. 1000 GSoC students)
-</lh>
 
-== meetings organizer (integration with Calendar API) ==
-  * *Priority:* Medium
-  * *Scheduled for:* October 2009
-  * *Who:* Melange Team
-  * *ETA:* 3 weeks
+
+&lt;lh&gt;
+
+
+I think this feature is more useful for the organizations than for Google. Exporting directly to a Google spreadsheet is fine, but then I'm just going to download and work with the file locally. Spreadsheets doesn't do a good job with **gigantic** reports (e.g. 1000 GSoC students)
+
+
+&lt;/lh&gt;
+
+
+
+## meetings organizer (integration with Calendar API)
+  * **Priority:** Medium
+  * **Scheduled for:** October 2009
+  * **Who:** Melange Team
+  * **ETA:** 3 weeks
 
 We would like to enable Program Administrators, Students, Mentors and Org admins to organize meetings withing Melange (invite users to attend a meeting, list registered event/meeting users, add meeting webpage, integration with Calendar API for reminders).
 
-<lh>
-Also should allow tagging, e.g. Debian, Python, San Francisco and search based on tags. Should also autopublish to program calendar.
-</lh>
 
-== advanced search functionality in Melange ==
-  * *Priority:* Medium
-  * *Scheduled for:* October 2009
-  * *Who:* Melange Team
-  * *ETA:* 1 month
+
+&lt;lh&gt;
+
+
+Also should allow tagging, e.g. Debian, Python, San Francisco and search based on tags. Should also autopublish to program calendar.
+
+
+&lt;/lh&gt;
+
+
+
+## advanced search functionality in Melange
+  * **Priority:** Medium
+  * **Scheduled for:** October 2009
+  * **Who:** Melange Team
+  * **ETA:** 1 month
 
 Currently Melange doesn't support search functionality. We would like to add support for searching different Melange models including Users, Students, Mentors, Org admins, Students Proposals and Projects, Documents. This feature can be also integrated with ajaxy table view.
 
-== diff tool for proposals (documents, tracking changes, rietveld, history) ==
-  * *Priority:* Low
-  * *Scheduled for:* November 2009
-  * *Who:* Melange Team
-  * *ETA:* 3 weeks
+## diff tool for proposals (documents, tracking changes, rietveld, history)
+  * **Priority:** Low
+  * **Scheduled for:** November 2009
+  * **Who:** Melange Team
+  * **ETA:** 3 weeks
 
 We want to be able to do diffs and revision histories on our documents, student proposals.
-[http://en.wikipedia.org/wiki/Rietveld_(Software) Rietveld] source code might help us to archive this goal.
+[Rietveld](http://en.wikipedia.org/wiki/Rietveld_(Software)) source code might help us to archive this goal.
 
 
-== fully functional wiki mode in documents ==
-  * *Priority:* Medium
-  * *Scheduled for:* November 2009
-  * *Who:* Melange Team
-  * *ETA:* 1 month
+## fully functional wiki mode in documents
+  * **Priority:** Medium
+  * **Scheduled for:** November 2009
+  * **Who:** Melange Team
+  * **ETA:** 1 month
 
-This feature aims to introduce additional mode for wiki like syntax in Melange documents, by setting document mode you can choose between WYSIWYG editor and Wiki syntax mode. 
+This feature aims to introduce additional mode for wiki like syntax in Melange documents, by setting document mode you can choose between WYSIWYG editor and Wiki syntax mode.
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 :)
-</lh>
 
-== geolocation based search functionality ==
-  * *Priority:* Low
-  * *Scheduled for:* November 2009
-  * *Who:* Melange Team
-  * *ETA:* 2-3 weeks
+
+&lt;/lh&gt;
+
+
+
+## geolocation based search functionality
+  * **Priority:** Low
+  * **Scheduled for:** November 2009
+  * **Who:** Melange Team
+  * **ETA:** 2-3 weeks
 
 Every year GSoC students try to find other GSoCers that live in the same country or nearby their city. We would like to introduce geolocation based search functionality within Melange to allow Students, Mentors and Org admins to search for other Melange users nearby or in particular location. This feature can be integrated with meeting organizer to easily invite all users from within selected area.
 
-== gallery with presentations, photos, videos ==
-  * *Priority:* Low
-  * *Scheduled for:* November 2009
-  * *Who:* Melange Team
-  * *ETA:* 3 weeks
+## gallery with presentations, photos, videos
+  * **Priority:** Low
+  * **Scheduled for:** November 2009
+  * **Who:** Melange Team
+  * **ETA:** 3 weeks
 
 With so many GSoC projects every year and internet media era, Melange is looking for a way to share GSoC students project presentations, screenshots, screencasts, GSoC related events photos, videos etc. This task aims to implement some form of gallery with presentations, photos, videos support (embedding presentations from Google Documents or other services, embedding photos from PicasaWeb, Flickr, embedding videos from YouTube, Vimeo).
 
 Additional ideas:
-    * Embed YouTube videos on personal profile page
-    * Embed feeds, e.g. personal blog feed,  Identi.ca Feed, Twitter Feed, Facebook Feed
+  * Embed YouTube videos on personal profile page
+  * Embed feeds, e.g. personal blog feed,  Identi.ca Feed, Twitter Feed, Facebook Feed
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 :)
-</lh>
 
-== import data from previous years ==
-  * *Lead:* Dan Bentley
-  * *Priority:* Medium
-  * *Scheduled for:* July - December 2009
-  * *Who:* Dan Bentley
-  * *ETA:* hard to determine
 
-In previous years GSoC used different web application that was tight to Google infrastructure. The information about Students, Mentors and Org admins from previous years are still available and aim of this task is to import that data into our socghop instance of Melange. This task is non-trivial cause the data models in Melange and previous GSoC webapp are different so conversion script is required. 
+&lt;/lh&gt;
 
-== social features (friends, sending messages, gtalk) ==
-  * *Priority:* Low
-  * *Scheduled for:* December 2009
-  * *Who:* Lennard de Rijk, Pawel Solyga
-  * *ETA:* 1 month
+
+
+## import data from previous years
+  * **Lead:** Dan Bentley
+  * **Priority:** Medium
+  * **Scheduled for:** July - December 2009
+  * **Who:** Dan Bentley
+  * **ETA:** hard to determine
+
+In previous years GSoC used different web application that was tight to Google infrastructure. The information about Students, Mentors and Org admins from previous years are still available and aim of this task is to import that data into our socghop instance of Melange. This task is non-trivial cause the data models in Melange and previous GSoC webapp are different so conversion script is required.
+
+## social features (friends, sending messages, gtalk)
+  * **Priority:** Low
+  * **Scheduled for:** December 2009
+  * **Who:** Lennard de Rijk, Pawel Solyga
+  * **ETA:** 1 month
 
 Melange is looking for a way to extend communication between GSoC/GHOP participants (Mentors, Organization Administrators, Students). In order to do that we would like to implement a set of social features including possibility to send/receive messages to other users, add other users as friends or talk with other users via Google Talk via web interface (this features is in the Google App Engine roadmap).
 
 
-    * GTalk integration (we are dependent on App Engine support for that)
-    * Sending Messages
-    * Managing Friends (add, invite, delete, list, search for friends)
+  * GTalk integration (we are dependent on App Engine support for that)
+  * Sending Messages
+  * Managing Friends (add, invite, delete, list, search for friends)
 
-<lh>
+
+
+&lt;lh&gt;
+
+
 I think I'm just being a luddite, but I don't care about this at all. If I want to talk to someone, I am going to talk to them on IRC. I can see this being useful for first contact between mentors/students, e.g. "I'd like to talk to you about your proposal, can you please email me at ...."
 
 Is their some useful way to be more inclusive in which instant messaging tools we'd support?
-</lh>
 
-== OpenSocial integration ==
-  * *Priority:* Low
-  * *Scheduled for:* January 2010
-  * *Who:* Melange Team
-  * *ETA:* hard to determine
+
+&lt;/lh&gt;
+
+
+
+## OpenSocial integration
+  * **Priority:** Low
+  * **Scheduled for:** January 2010
+  * **Who:** Melange Team
+  * **ETA:** hard to determine
 
 This topic requires additional research in order to determine how we can use OpenSocial inside Melange and how long it will take to integrate that kind of functionality.
\ No newline at end of file
