diff --git a/GHOPUserManual.wiki b/GHOPUserManual.md
similarity index 73%
rename from GHOPUserManual.wiki
rename to GHOPUserManual.md
index e0f182a..7883ad1 100644
--- a/GHOPUserManual.wiki
+++ b/GHOPUserManual.md
@@ -1,22 +1,19 @@
-#summary Starter Manual for using GHOP module.
-#labels Importance-Deprecated,Phase-Support,Contents-Draft
-
-<wiki:toc max_depth="3" />
-
-= Introduction =
-
-  This document covers detailed explanation of how to use the Task-based work flow, GHOP module of Melange. These features are available for you to try out at the demo instance running at [http://melange-madhusudancs.appspot.com http://melange-madhusudancs.appspot.com]. It will soon be made available through [http://melange-demo.appspot.com http://melange-demo.appspot.com]
 
 
-= Details =
+# Introduction
 
-  This document is exclusively written for users of the GHOP module of Melange, and is in no way a developer manual. If any of you are willing to contribute to GHOP module in particular, please ping any one of the developers on our IRC channel: #melange @ irc.freenode.net or on our developer mailing list.
+> This document covers detailed explanation of how to use the Task-based work flow, GHOP module of Melange. These features are available for you to try out at the demo instance running at [http://melange-madhusudancs.appspot.com](http://melange-madhusudancs.appspot.com). It will soon be made available through [http://melange-demo.appspot.com](http://melange-demo.appspot.com)
 
-  The following document is divided into 5 separate sections, one for each role of Melange.
 
-== Program Admin(PA) ==
+# Details
 
-  A Program Admin(PA henceforth) is one who creates and manages a GHOP Program. He/She has all the rights of an Org Admin and a Mentor.
+> This document is exclusively written for users of the GHOP module of Melange, and is in no way a developer manual. If any of you are willing to contribute to GHOP module in particular, please ping any one of the developers on our IRC channel: #melange @ irc.freenode.net or on our developer mailing list.
+
+> The following document is divided into 5 separate sections, one for each role of Melange.
+
+## Program Admin(PA)
+
+> A Program Admin(PA henceforth) is one who creates and manages a GHOP Program. He/She has all the rights of an Org Admin and a Mentor.
 
   * Create/Edit Program Admin profile: TBD
   * Create the GHOP program: TBD
@@ -27,23 +24,23 @@
     * She can also set the maximum number of tasks that a student can claim simultaneously (1 for GHOP).
     * She can also set Winners and Runners-up per organization.
 
-=== Timeline ===
+### Timeline
 
 A PA must set:
 
   * All the program specific timeline in the edit program timeline link available from the sidebar
-  * Org App and all other survey timeline in the *Survey Create/Edit page*. Note Org Admins will not be able to apply as organizations just by setting the Org signup start and end dates in timeline but also be made sure that it is set in the Org App survey.
+  * Org App and all other survey timeline in the **Survey Create/Edit page**. Note Org Admins will not be able to apply as organizations just by setting the Org signup start and end dates in timeline but also be made sure that it is set in the Org App survey.
 
 
-== Organization Admin (OA) ==
+## Organization Admin (OA)
 
-  An Organization Admin (OA henceforth) is one who creates and manages an Organization under the GHOP Program that PA has created. An OA does not have all the rights of a Mentor.  To perform any of the operations mentioned below i.e. to become an OA or to apply as an organization, the basic minimum requirement is to login to http://socghop.appsot.com with your Google account and create a profile by clicking on the "Create profile" link on the sidebar.
+> An Organization Admin (OA henceforth) is one who creates and manages an Organization under the GHOP Program that PA has created. An OA does not have all the rights of a Mentor.  To perform any of the operations mentioned below i.e. to become an OA or to apply as an organization, the basic minimum requirement is to login to http://socghop.appsot.com with your Google account and create a profile by clicking on the "Create profile" link on the sidebar.
 
-  The workflow to apply as a an organization and hence to become an OA
+> The workflow to apply as a an organization and hence to become an OA
   * Once the Organization application period opens as per the program timeline a link titled "Apply to become an Organization" appears on the sidebar under the Programs menu's specific program for which Organization applications are open.
   * Login to http://socghop.appspot.com with the Google account you previously used to create your profile.
   * Click on the "Apply to become an Organization" link which is mentioned above.
-  * Fill up the application and submit. *Note:* This form asks to specify a backup admin for the Organization and this is mandatory. You must specify the Link ID of another person who would like to be the backup admin for your Organization. And to specify the Link ID here in the backup admin field he/she should have already created a profile on http://socghop.appspot.com and that Link ID must be used.
+  * Fill up the application and submit. **Note:** This form asks to specify a backup admin for the Organization and this is mandatory. You must specify the Link ID of another person who would like to be the backup admin for your Organization. And to specify the Link ID here in the backup admin field he/she should have already created a profile on http://socghop.appspot.com and that Link ID must be used.
   * Similarly you can submit applications to as many organizations as you would like to be OA of.
   * You can view the list of all the applications you have submitted by clicking on "List My Organization Applications" link under the same program.
   * The PA reviews your application and accepts or rejects it.
@@ -57,32 +54,32 @@
   * However if your application was rejected no notification will be sent to you. But you can anyways find this out by clicking on the "List of participating organizations" link that appears on the sidebar under the same program once the accepted organizations are announced.
 
 
-== Mentor ==
+## Mentor
 
-  A Mentor is one who mentors one or more student for accomplishing GHOP Tasks.
+> A Mentor is one who mentors one or more student for accomplishing GHOP Tasks.
 
   * Suggest a new task/Edit the task: The deadline for the task cannot exceed 30 days i.e in terms of hours it cannot exceed 720 hours.
 
-== Student ==
+## Student
 
-  A student is one who can claim a task, work on it, submit his work and win prizes.
+> A student is one who can claim a task, work on it, submit his work and win prizes.
 
   * If student submits no work and the initial deadline passes, the deadline is automatically extended for another 24 hours. This shoots a mail to all the subscribers to the task notifying about the deadline extension. The task of the status is set to ActionNeeded. If the student fails to submit any work in that extended deadline of 24 hours also, the task is automatically re-opened. To learn how to subscribe to the task read the Rules of subscription below.
 
-== Public ==
+## Public
 
-  Any user. Every such user is differentiated as a logged-in or non-logged-in user.
+> Any user. Every such user is differentiated as a logged-in or non-logged-in user.
 
-= General =
-== Subscription ==
+# General
+## Subscription
 
   * A user is subscribed to a GHOP Task if the star button on the top of the Task public page preceding the task title is a glowing icon and is not subscribed otherwise.
   * He/She can subscribe to the task by clicking on the non-glowing star icon
   * And unsubscribe by clicking on the glowing icon.
 
 Rules of the subscription game:
-  * A mentor is automatically subscribed to the task the moment he suggests the task. Assigned mentors are *not* automatically subscribed to the task.
+  * A mentor is automatically subscribed to the task the moment he suggests the task. Assigned mentors are **not** automatically subscribed to the task.
   * An Org Admin is automatically subscribed to the task the moment he creates the task.
-  * A student is automatically subscribed to the task the moment he *Requests* to claim the task.
+  * A student is automatically subscribed to the task the moment he **Requests** to claim the task.
   * All other users must manually subscribe to the task by clicking on the star button.
   * No user is automatically unsubscribed from the task. All the users irrespective of a student who has claimed the task, Org Admin who created the task and mentor who suggested the task should unsubscribe from the task manually.
\ No newline at end of file
