diff --git a/GSoC2011MelangeTesting.md b/GSoC2011MelangeTesting.md
new file mode 100644
index 0000000..5675f2c
--- /dev/null
+++ b/GSoC2011MelangeTesting.md
@@ -0,0 +1,149 @@
+
+
+# Introduction
+> This page will serve as a log and a resource for all the development activity being done in this project on testing. I have to write tests for the logic and views of Melange. The framework has undergone a major revision and the old tests are to be re-written.
+
+
+# Meetings and Agendas
+
+## Monday May 16, 2011 (Community Bonding Period) 10:10 UTC
+
+### Notes
+> Location : Gmail Chat
+
+> Chaired by : Leo (Chong Liu)
+
+> Notes taken by: Praveen
+
+  * Told Leo that :
+    * I have not been unable to concentrate on the project due to exams.
+    * I have started reading the books which I had ordered, _'Django 1.1 Testing and Debugging, Karen M. Tracey'_ and _'Python Testing, Daniel Arbuckle'_
+  * We discussed how to get started with the project.
+  * Leo suggested:
+    * start with soc.logic which are relatively easier and do not require much knowledge of Django and GAE
+    * reuse the old tests which will require some modifications according to the new framework
+    * after soc.logic attack modules.gsoc.logic and modules.gci.logic
+    * write a python/shell script to calculate the frequency of a particular class and function which will give an idea about its importance and need for its thorough testing
+  * We also discussed what functional testing is which I had not able to explain to Leo
+
+## Wednesday May 24, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Told Leo that I am going slow at the project and had not implemented the view yet that we were supposed to do.
+  * We discussed what should the basic approach be while writing a test.
+  * Leo asked me to refer to some open-source web test runners and see how do they do it and implement a view for my Melange instance. He suggested gaeunit.
+  * Leo also told me about 'Mocks'.
+
+> ### Coding Plan for this week
+  * Implement the view
+  * Write test for at least one module in app.soc.logic
+
+## Friday May 27, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Asked Leo what apiproxy is. I encountered apiproxy in the source of gaeunit. He explained apiproxy is like a mapping from a function to a function to which it stubs out or replaces.
+  * Told Leo that I do not want to use gaeunit and rather write my own code for melange. Leo suggested to study gaeunit and see how they do the magic.
+  * Asked Leo a couple of questions regarding TaskQueues and the meeting concluded with Leo asking me to explore and explore and learn.
+
+## Monday May 30, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Reported my initial research regarding gaeunit to Leo
+  * We discussed about how to handle the requests by the browser as there is a time restriction on a process in GAE.
+  * gaeunit does not use TaskQueues and so Leo suggested that the other way to handle the requests would be by using a JavaScript. But I did not find any JavaScript in the code of gaeunit.
+  * Since my main project is on testing, Leo put before me two options to choose from i.e to finish the online runner in a week or treat it as a side project and start testing. I chose to finish the online runner as I had already spent lot of time studying about it.
+  * The conference call was suspended for the week.
+
+## Monday June 6, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Told Leo that I have written the code for the online test runner and that it needs debugging.
+  * Leo looked at the errors and told me that Nose uses some modules which are restricted by GAE. So we may have to try other options to make the runner.
+  * The decision was made to write our own runner with the help of methods in unittest module in python.
+
+> During: Melange Conference Call   Chaired by: Sverre   Notes by: Praveen
+
+  * Told Sverre that I have been working on the online test runner in the week.
+  * Sverre asked me to take it as a side project and start working on the Testing project now as the time is passing by.
+  * Leo gave me two days to work on the test runner and finish the work which I started. If I am not successful, start testing.
+
+
+## Wednesday June 8, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Informed Leo that I have finished writing the code for the online test runner and that the runner works on the local instance only.
+  * It does not work on the live instance because our tests make use of gaetestbed library which imports mail\_stub from appengine library and mail\_stub can not work on a live instance as it starts a subprocess which is not allowed.
+  * Leo asked me to start testing.
+
+
+## Friday June 10, 2011
+
+### Notes
+> Location: Gmail Chat
+
+> Chaired by: Leo
+
+> Notes by: Praveen
+
+  * Told Leo that I started working on testing today.
+  * I asked him if every module in app.soc.logic needs to be tested. He told that all the non-trivial modules which are used presently needs to be tested.
+  * I told him that I will start with the easier modules like soc.logic.tags, soc.logic.system etc.
+
+
+
+
+# Coding Plan
+
+## May 16 - May 22 (Community Bonding Period)
+  * Upload a GAE instance and write a view to run all the tests and return all results back
+  * Write a python script to calculate the frequency of a term in the codebase
+  * Read Django and GAE documentation.
+
+## May 23 - June 15 (Official Coding Period)
+  * Generate the directory structure of soc.logic
+  * Write tests for app.soc.logic and then for modules.gsoc.logic and modules.gci.logic
+
+# Links
+**My GSoC Proposal https://github.com/praveen97uma/GSoC-Docs/wiki/Testing,-Code-Guru-and-Quality-Assurance/**
+
+**My melange instance http://melangetesting.appspot.com**
+
+**A Web Test Runner http://code.google.com/p/gaeunit/**
+
+# External Testing Resources
+**_All I really need to know about [testable, maintainable, packagable] “scripts”_ http://www.testingtv.com/2010/01/27/all-i-really-need-to-know-about-testable-maintainable-packagable-scripts/**
+
+**Building Tests for Large, Untested Codebases http://www.testingtv.com/2009/12/31/building-tests-for-large-untested-codebases/**
+
+**Paver - Easy Build and Deployment Automation Tool for Python Projects http://www.testingtv.com/2010/02/03/paver-easy-build-and-deployment-automation-for-python-projects/**
+
diff --git a/GSoC2011MelangeTesting.wiki b/GSoC2011MelangeTesting.wiki
deleted file mode 100644
index a024557..0000000
--- a/GSoC2011MelangeTesting.wiki
+++ /dev/null
@@ -1,153 +0,0 @@
-#summary Progress tracker for Melange project: Testing, Code Guru and Quality Assurance, GSoC 2011
-#labels Phase-QA,Importance-Details,Contents-Update
-
-<wiki:toc max_depth="3" />
-
-= Introduction =
-  This page will serve as a log and a resource for all the development activity being done in this project on testing. I have to write tests for the logic and views of Melange. The framework has undergone a major revision and the old tests are to be re-written.
-
-
-= Meetings and Agendas =
-
-== Monday May 16, 2011 (Community Bonding Period) 10:10 UTC ==
-
-===Notes===
-  Location : Gmail Chat
-
-  Chaired by : Leo (Chong Liu)
-
-  Notes taken by: Praveen
-
-  * Told Leo that :
-    * I have not been unable to concentrate on the project due to exams.
-    * I have started reading the books which I had ordered, _'Django 1.1 Testing and Debugging, Karen M. Tracey'_ and _'Python Testing, Daniel Arbuckle'_
-  * We discussed how to get started with the project.
-  * Leo suggested:
-    * start with soc.logic which are relatively easier and do not require much knowledge of Django and GAE
-    * reuse the old tests which will require some modifications according to the new framework
-    * after soc.logic attack modules.gsoc.logic and modules.gci.logic
-    * write a python/shell script to calculate the frequency of a particular class and function which will give an idea about its importance and need for its thorough testing
-  * We also discussed what functional testing is which I had not able to explain to Leo
-
-== Wednesday May 24, 2011 ==
-
-===Notes===
-   Location: Gmail Chat
-       
-   Chaired by: Leo     
-
-   Notes by: Praveen
-
-  * Told Leo that I am going slow at the project and had not implemented the view yet that we were supposed to do.
-  * We discussed what should the basic approach be while writing a test.
-  * Leo asked me to refer to some open-source web test runners and see how do they do it and implement a view for my Melange instance. He suggested gaeunit.
-  * Leo also told me about 'Mocks'.
-
-  ===Coding Plan for this week===
-  * Implement the view
-  * Write test for at least one module in app.soc.logic
-
-== Friday May 27, 2011 ==
-
-===Notes===
-    Location: Gmail Chat
-     
-    Chaired by: Leo  
-   
-    Notes by: Praveen
-
-   * Asked Leo what apiproxy is. I encountered apiproxy in the source of gaeunit. He explained apiproxy is like a mapping from a function to a function to which it stubs out or replaces.
-   * Told Leo that I do not want to use gaeunit and rather write my own code for melange. Leo suggested to study gaeunit and see how they do the magic.
-   * Asked Leo a couple of questions regarding TaskQueues and the meeting concluded with Leo asking me to explore and explore and learn. 
-
-==Monday May 30, 2011 ==
-
-===Notes===
-    Location: Gmail Chat 
-    
-    Chaired by: Leo  
-   
-    Notes by: Praveen
-
-   * Reported my initial research regarding gaeunit to Leo
-   * We discussed about how to handle the requests by the browser as there is a time restriction on a process in GAE.
-   * gaeunit does not use TaskQueues and so Leo suggested that the other way to handle the requests would be by using a JavaScript. But I did not find any JavaScript in the code of gaeunit.
-   * Since my main project is on testing, Leo put before me two options to choose from i.e to finish the online runner in a week or treat it as a side project and start testing. I chose to finish the online runner as I had already spent lot of time studying about it.
-   * The conference call was suspended for the week.
-
-==Monday June 6, 2011 ==
-
-===Notes===
-    Location: Gmail Chat
-     
-    Chaired by: Leo
-     
-    Notes by: Praveen
-
-   * Told Leo that I have written the code for the online test runner and that it needs debugging.
-   * Leo looked at the errors and told me that Nose uses some modules which are restricted by GAE. So we may have to try other options to make the runner.
-   * The decision was made to write our own runner with the help of methods in unittest module in python.
-
-   During: Melange Conference Call   Chaired by: Sverre   Notes by: Praveen
-
-   * Told Sverre that I have been working on the online test runner in the week.
-   * Sverre asked me to take it as a side project and start working on the Testing project now as the time is passing by.
-   * Leo gave me two days to work on the test runner and finish the work which I started. If I am not successful, start testing.
-
-
-== Wednesday June 8, 2011 ==
-
-===Notes===
-    Location: Gmail Chat
-     
-    Chaired by: Leo
-     
-    Notes by: Praveen
-
-   * Informed Leo that I have finished writing the code for the online test runner and that the runner works on the local instance only.
-   * It does not work on the live instance because our tests make use of gaetestbed library which imports mail_stub from appengine library and mail_stub can not work on a live instance as it starts a subprocess which is not allowed.
-   * Leo asked me to start testing.
-
-
-== Friday June 10, 2011 ==
-
-===Notes===
-    Location: Gmail Chat
-     
-    Chaired by: Leo
-     
-    Notes by: Praveen
-
-   * Told Leo that I started working on testing today.
-   * I asked him if every module in app.soc.logic needs to be tested. He told that all the non-trivial modules which are used presently needs to be tested.
-   * I told him that I will start with the easier modules like soc.logic.tags, soc.logic.system etc.
-
-
- 
- 
-= Coding Plan =
-
-== May 16 - May 22 (Community Bonding Period) == 
-  * Upload a GAE instance and write a view to run all the tests and return all results back
-  * Write a python script to calculate the frequency of a term in the codebase
-  * Read Django and GAE documentation.
-
-== May 23 - June 15 (Official Coding Period) ==
-  * Generate the directory structure of soc.logic
-  * Write tests for app.soc.logic and then for modules.gsoc.logic and modules.gci.logic
-
-= Links =
-* My GSoC Proposal [https://github.com/praveen97uma/GSoC-Docs/wiki/Testing,-Code-Guru-and-Quality-Assurance/]
-
-* My melange instance [http://melangetesting.appspot.com]
-
-* A Web Test Runner [http://code.google.com/p/gaeunit/]
-
-= External Testing Resources =
-* _All I really need to know about [testable, maintainable, packagable] “scripts”_ [http://www.testingtv.com/2010/01/27/all-i-really-need-to-know-about-testable-maintainable-packagable-scripts/]
-
-* Building Tests for Large, Untested Codebases [http://www.testingtv.com/2009/12/31/building-tests-for-large-untested-codebases/]
-
-* Paver - Easy Build and Deployment Automation Tool for Python Projects [http://www.testingtv.com/2010/02/03/paver-easy-build-and-deployment-automation-for-python-projects/]
-
-* Coverage Testing - The Good and the Bad [http://www.testingtv.com/2009/12/29/coverage-testing-the-good-and-the-bad/]
\ No newline at end of file
