diff --git a/GSoC2009Ideas.wiki b/GSoC2009Ideas.md
similarity index 78%
rename from GSoC2009Ideas.wiki
rename to GSoC2009Ideas.md
index 3d63a0f..b45c5ee 100644
--- a/GSoC2009Ideas.wiki
+++ b/GSoC2009Ideas.md
@@ -1,72 +1,83 @@
-#summary Ideas List for GSoC 2009
-#labels Contents-Complete,Importance-Deprecated
+# Introduction
 
-= Introduction =
-
- _While Melange will apply as an organization, there is no guarantee that we will be accepted as an organization for GSoC 2009.  You're invited to drop by at #melange IRC to discuss.  Help us make it happen._
+> _While Melange will apply as an organization, there is no guarantee that we will be accepted as an organization for GSoC 2009.  You're invited to drop by at #melange IRC to discuss.  Help us make it happen._
 
 
-== [PossibleMentors Possible Mentors] ==
+## [Possible Mentors](PossibleMentors.md)
 These are, in order, the most likely or best mentors for this project idea.
 
-== Skills ==
+## Skills
 
   * All developers will need to have experience in, or be willing to learn Python.
   * Prior experience with Django or an equivalent framework would be a distinct plus.
   * Knowledge of JavaScript (AJAX), and a feeling for web design is big plus as well.
 
-== Difficulty==
+## Difficulty
 'Easy', 'Moderate' or 'Hard'.  Hard is not necessarily better!  We are risk averse!
 
-== Early Spinoffs ==
+## Early Spinoffs
 
 We want code that we can actually use, not code that shows great promise.  At the half way stage, you MUST have something complete that we can actually use as a 'spin off' of the work.  In discussing projects we will try to help you find ways to have spinoffs along the way.
 
 
-----
-----
-= Idea Details =
-----
-----
 
-= Full Function Wiki =
+---
 
-===Description===
-Either integrating [http://en.wikipedia.org/wiki/MoinMoin MoinMoin] or [http://en.wikipedia.org/wiki/Rietveld_(Software) Rietveld].  We're looking for a bit more than just having these in the same web server!  We want to be able to do diffs and revision histories on our documents.  We'd like to be able to have Melange tables show up in wiki pages.  We'd like to be able to create wiki pages based on a template specified as a quiz.
 
-----
+---
 
-= Quiz Adapter =
+# Idea Details
 
-===Description===
+---
+
+
+---
+
+
+# Full Function Wiki
+
+### Description
+Either integrating [MoinMoin](http://en.wikipedia.org/wiki/MoinMoin) or [Rietveld](http://en.wikipedia.org/wiki/Rietveld_(Software)).  We're looking for a bit more than just having these in the same web server!  We want to be able to do diffs and revision histories on our documents.  We'd like to be able to have Melange tables show up in wiki pages.  We'd like to be able to create wiki pages based on a template specified as a quiz.
+
+
+---
+
+
+# Quiz Adapter
+
+### Description
 Melange currently has two different systems for forms.  There is the quiz system which is very flexible and dynamically changeable.  There is the custom page system, which is very well, customizable.  We'd like to marry the two systems which currently don't speak very much to each other by having a student who writes an adapter.  Ultimately we'd like to either have a super quiz system where we can use some of the customizations used on custom pages, or a super custom page system which is as flexible and dynamic as the quiz system.
 
-----
 
-= Statistics Module =
-
-===Description===
-Extract interesting statistics from the Melange data for the benefit of the program admin.  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)
+---
 
 
-===Skills===
-  * AJAX skills a plus. 
+# Statistics Module
 
-===Difficulty===
-  * Moderate to hard. 
+### Description
+Extract interesting statistics from the Melange data for the benefit of the program admin.  Use it for: Graphs, Histograms, More Google Maps integration and [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) export.
 
-===Early Spin Off===
+  * 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)
+
+
+### Skills
+  * AJAX skills a plus.
+
+### Difficulty
+  * Moderate to hard.
+
+### Early Spin Off
   * (For example) At half way stage ability to show a pie chart of students by location.  Also ability to show some stats of any kind broken down by the number of active projects in the organization, or by new or repeat organization.  Your mid term goals need to be clearly stated in your application.
 
-----
 
-= Other ideas =
+---
+
+
+# Other ideas
 
   * integrate OpenSocial into Melange
   * add features required for running Google Highly Open Participation Contest
@@ -100,7 +111,7 @@
   * Better geo location features
   * Nice upload of profile photo with crop functionality via JS library.
 
-===GHOP Melange features===
+### GHOP Melange features
 
   * Submitting Your Claim for Prizes Online and Submitting Your Parental Consent Form - instead of faxing or sending this forms via email to LH, student will have ability to upload scanned document to their GHOP profile account, Program Administrator will have access to special view listing all the GHOP students allowing her to filter the ones that didn't send form yet and by selecting them and clicking ‚'Remind' button, Melange would automatically send reminder email to all of the selected students (simple and efficient).
 More:
@@ -108,10 +119,10 @@
   * Special button to generate addresses from profiles in DHL,FedEx friendly format.
   * Parsing phone numbers in user profiles, acceptable formats: +1.650.214.8031, 16502148031, 1-650-214-8031, 1 (650) 214-8031, 1 (650) 214 8031, 1 650 214 8031
   * Mentors and org admins should be able to track students progress, completed tasks, open/reopened tasks, claimed tasks, there will be special views for that with filter options (status of the tasks should be open to public or not , Melange API ?)
-  * Each task should have one of the following status: 
-    * Open: This task has not yet been claimed, 
-    * Reopened: This task has been claimed but never finished and has been reopened,    
-    * Claimed: This task has been claimed and someone is working on it, 
+  * Each task should have one of the following status:
+    * Open: This task has not yet been claimed,
+    * Reopened: This task has been claimed but never finished and has been reopened,
+    * Claimed: This task has been claimed and someone is working on it,
     * ActionNeeded: Work on this task must be submitted for review within 24 hours,
     * Closed: Work on this task has been successfully completed.
   * Mentors and org admins should be able to setup task updates notifications
@@ -122,14 +133,14 @@
   * Any additional statistics in Melange project should use Google Chart API and Google Visualization API
   * Maybe it would be wise to add progress variable to each task so that GHOP student can update the value of it during the time he works on the particular task (0%-100%), that will also allow mentor to track progress of students tasks, when task is 100% complete mentor can get email notification to take action on particular student task (Close it)
   * Informing mentor about completed task
-  * Each GHOP task should be tagged (Documentation, User Interface, Code, etc), GHOP admin/host can setup available tags in GHOP Melange configuration page, that way later on there are no typos and Melange can easily generate statistics for particular types of tasks. Tasks will typically fall into the following categories: 
-    * Code: Tasks related to writing or refactoring code, 
-    * Documentation: Tasks related to creating/editing documents, 
-    * Outreach: Tasks related to community management and outreach/marketing, 
+  * Each GHOP task should be tagged (Documentation, User Interface, Code, etc), GHOP admin/host can setup available tags in GHOP Melange configuration page, that way later on there are no typos and Melange can easily generate statistics for particular types of tasks. Tasks will typically fall into the following categories:
+    * Code: Tasks related to writing or refactoring code,
+    * Documentation: Tasks related to creating/editing documents,
+    * Outreach: Tasks related to community management and outreach/marketing,
     * Quality Assurance: Tasks related to testing and ensuring code is of high quality,
-    * Research: Tasks related to studying a problem and recommending solutions, 
-    * Training: Tasks related to helping others learn more, 
-    * Translation: Tasks related to localization, 
+    * Research: Tasks related to studying a problem and recommending solutions,
+    * Training: Tasks related to helping others learn more,
+    * Translation: Tasks related to localization,
     * User Interface: Tasks related to user experience research or user interface design and interaction
   * Each GHOP tasks should have internal (mentors/org admins/hosts) or maybe public difficulty level, which can be later helpful in selecting grand prize winners and runner ups (not only amount of tasks counts but also quality of student work, task difficulty and other factors), organization has quick access to overview of what kind of tasks each student did and what's it's total point sum etc., this might be also available only for admins and mentors just in order to make a Grand Prize winners choosing process easier.
   * GHOP Melange should have a special configuration page
@@ -148,10 +159,12 @@
   * GHOP Grand Prize winners are selected based on completed number of tasks, tasks quality, difficulty, student community activity and things like that, so it is not just number of completed tasks
 
 
-----
 
-= Some Rough Notes =
+---
 
-   * Did we mention that we have an active IRC channel, #melange?
-   * Melange is planning to participate in GSoC and planning to provide support for the GSoC infrastructure for GSoC in 2009.  Confused?  So are we at times.  If you see GSoC/M then the person who wrote it is making it clearer that it's about Melange participating in GSoC as a mentoring organization.  "We're getting ready for GSoC/M", means we're preparing pages like this one, getting mentors to commit to being mentors etc.  "We're getting ready for GSoC" could mean we're fine tuning the code ready for running the entire GSoC program.
-   * Some words for you, to inspire more ideas: *[http://code.google.com/p/soc/wiki/TestingGuidelines Automated Testing]*, *World Domination* (ask), *Access Control Module*, *Profiling*, *Log Analysis*, *[http://code.google.com/p/soc/issues/list?can=2&q=&sort=-id Issue Tracker]*, *[http://code.google.com/p/soc/wiki/AccessControl Security]*, *Optimization(s)*, *Mentor Summit*, *GHoP*.
\ No newline at end of file
+
+# Some Rough Notes
+
+  * Did we mention that we have an active IRC channel, #melange?
+  * Melange is planning to participate in GSoC and planning to provide support for the GSoC infrastructure for GSoC in 2009.  Confused?  So are we at times.  If you see GSoC/M then the person who wrote it is making it clearer that it's about Melange participating in GSoC as a mentoring organization.  "We're getting ready for GSoC/M", means we're preparing pages like this one, getting mentors to commit to being mentors etc.  "We're getting ready for GSoC" could mean we're fine tuning the code ready for running the entire GSoC program.
+  * Some words for you, to inspire more ideas: **[Automated Testing](http://code.google.com/p/soc/wiki/TestingGuidelines)**, **World Domination** (ask), **Access Control Module**, **Profiling**, **Log Analysis**, **[Issue Tracker](http://code.google.com/p/soc/issues/list?can=2&q=&sort=-id)**, **[Security](http://code.google.com/p/soc/wiki/AccessControl)**, **Optimization(s)**, **Mentor Summit**, **GHoP**.
\ No newline at end of file
