diff --git a/GCIUserManual.wiki b/GCIUserManual.wiki
index 1e78648..3f93660 100644
--- a/GCIUserManual.wiki
+++ b/GCIUserManual.wiki
@@ -91,23 +91,71 @@
 
 == Task ==
 
-  A task is for students to complete during the program. The status of a task could be any of 'Unapproved', 'Unpublished', 'Open', 'Reopened', 'ClaimRequested', 'Claimed', 'ActionNeeded', 'Closed', 'AwaitingRegistration', 'NeedsWork', 'NeedsReview', 'Invalid'] with a default status of 'Unapproved'.
+=== Prologue ===
 
-Following is a typic task flow.
-  
-  # A Program Admin(PA) of the program first creates Task Difficulty Tags and Task Type Tags to be used in the creation of tasks.
-  # A Mentor of an organization suggests a new task/Edit an existing task and waits for approval ('Unapproved').
-    # If an Organization Admin (OA) of the organization thinks that the task is not good enough, he/she will delete the task ('Invalid').
-    # If an Organization Admin (OA) of the organization thinks that the task is good enough, he/she will approve and publishe the task ('Open').
-  # A student claims the task and waits for approval ('ClaimRequested').
-    # If an Organization Admin (OA) of the organization or a Mentor of the task thinks that the student is not good enough, he/she will disapproves the claim ('Open').
-    # If an Organization Admin (OA) of the organization or a Mentor of the task thinks that the student is good enough, he/she will approves the claim ('Claimed').
-  # The student works on the task.
-    # If the deadline passes and the student has not submited his/her work, the deadline is automatically extended for another 24 hours ('ActionNeeded').
-    # If the student still has not submited his/her work after the extended deadline, the task will be automatically re-opened ('Reopened'). Another iteration then starts from 3 (top flow) except that the same student cannot claim the task again.
-    # On the other hand, if the student does submit his/her work before either the original or the extended deadline, it is ready for a mentor of the task to review ('NeedsReview').
-  # A mentor of the task reviews the submitted work for the task.
-    # If the menor thinks the work is not good enough and looks hopeless, he/she will re-opened the task ('Reopened'). Another iteration then starts from 3 (top flow) except that the same student cannot claim the task again.
-    # If the menor thinks the work is not good enough but looks promising, he/she will ask the student to do more work ('NeedsWork'). The mentor changes the deadline of the task and another iteration then starts from 4 (top flow).
-    # If the menor thinks the work is good enough, he/she will mark that the student has completed his/her work on this task ('AwaitingRegistration').
-  # The student completes his/her Student registration and then task is marked closed ('Closed').
\ No newline at end of file
+  A task can be claimed by students and hence completed during the program. At any point in time, every task will be in one of the following states:
+  # *Unapproved*
+  # *Unpublished*
+  # *Open*
+  # *Reopened*
+  # *ClaimRequested*
+  # *Claimed*
+  # *ActionNeeded*
+  # *NeedsWork*
+  # *NeedsReview*
+  # *Closed*
+  # *AwaitingRegistration*
+  # *Invalid*
+In addition every task will have mentor(s) assigned and time to complete value, in hours, associated with it.
+
+
+=== A typical work flow ===
+
+==== Setting up the scene ====
+
+  # Either an Org Admin(OA) creates or the Mentor suggests a new tasks under the organiazation.
+  # If the task was created by an OA it is automatically approved and hence in the *Unpublished* state
+  # If the task was suggested by a Mentor it is in the *Unapproved* state
+    # The OA can review the task and can either:
+      # Approve the task which changes the task status to *Unpublished*
+      # Or Publish the task directly which implicitly means the task is approved. This changes the status of the task *Open*. *Note to OAs*: It is not necessary to check the Approve box on the task edit form. If Publish box is checked it is implicitly assumed that the task is approved as well.  
+  # If the OA thinks that the task is irrelevant or is a spam, he can delete the task which sets the task status to *Invalid*.
+  # The OA can unpublish the task as long as the task is not claimed by any student i.e as long as it remains in the *Open* state. It is not possible to unpublish the task once the task status changes from *Open* to any of the claimed states. This is because the task never returns back to *Open* state.
+  # An OA or the Mentor can edit the task as long as the task is not claimed by any student i.e. as long as it remains in one of the *Unapproved*, *Unpublished* or *Open* states. It is not possible to edit the task once the task status changes from *Open* state to any of the claimed states because of the same reason mentioned in the previous point.
+
+==== Student enters ====
+
+All the action on the task henceforth happens on the task public page. The following happens only after the Task is published, i.e. in the *Open* state.
+
+  # A student submits the action "Request to claim" the task along with an optional comment and waits for approval. The task moves to *ClaimRequested* state.
+  # This locks down both the task and the student to the task, meaning:
+    # No other student can request to the claim the same task.
+    # The student cannot request to claim another task. This also implies that if a student is already working on a task, he cannot request to claim any other task.
+  # OA or any Mentor of the organization(irrespective of being a mentor of that task) can do one of the following with an optional comment:
+    # Approve the request if it is valid and the student deserves it. The task moves to *Claimed* state.
+    # Reject the request if the request is invalid, irrelevant or a spam. The task moves to *Reopened* state.
+
+==== Student gets involved ====
+
+  # If the claim request is accepted the deadline is set as specified by the time to complete field and the clock starts to tick. The student begins his/her work on the task.
+  # If the student completes the work set out by the task before the deadline, he/she can submit the work by posting an comment along with the URL to the work. Note that one of the comment or the URL field is mandatory. The task changes the state to *NeedsReview*.
+  # If the deadline passes with the student submitting no work, the deadline is automatically extended for another 24 hours. The task changes the state to *ActionNeeded* and the notification is sent to all the subscribers including the student if he has subscribed. For more about subscriptions read the section on subscriptions above.
+  # If the student fails to submit the work even after the extended deadline, the task will be automatically re-opened and the task status will be set to *Reopened*.
+  # If the student submits the work before this deadline passes, the same rule as the previous work submission rule applies.
+  # One of the Mentors of the task reviews the submitted work. The mentor can take one of the following actions:
+    # If the mentor is satisfied by the student's work he choses the action to "Close the task" along with an optional comment thereby marking the task as closed. The task moves to one of *AwaitingRegistration* or *Closed*. More about it below.
+    # If the mentor is not satisfied with the work but thinks that it requires rework and student can do it, he/she will choose the action "Needs More Work" with an optional comment. At this juncture the mentor has the option to extend the deadline for the student. The task status moves to *NeedsWork*. The cycle goes back to the point where student has to submit his/her work again.
+    # If the Mentor is completely unsatisfied with the student's work he/she will re-open the task. The task changes the state to *Reopened*. The new cycle with the same/another student requesting to claim the task begins.
+  # The student can withdraw from the task at any point in this entire workflow after he requests to claim the task. In such a case the task returns to *Reopened* state.
+
+==== Student exits ====
+
+  # If the student's request to claim the task is rejected, the student can continue to request to claim the same task again or proceed to request to claim any other published task.
+  # If the student successfully completes a task, the task is closed by the Mentor. If the student is not registered yet the task status is set to *AwaitingRegistration*.
+  # In this situation the student should register with a student profile by clicking on the link "Register as a Student".
+  # *Note* that we don't want the students to register until they successfully complete at least one task.
+  # Also it is mandatory for the student to register once he completes the task, otherwise he cannot request to claim any more tasks and this task is not counted towards winner calculations.
+  # Once the student registers, the task which he completed and was in *AwaitingRegistration* state is automatically set to *Closed* state and the student can continue requesting to claim other tasks towards his conquest to win Google Code In.
+
+==== Epilogue ====
+*Note:* Any registered user can post a comment on the task once the task is published.
\ No newline at end of file
