diff --git a/SetUpPylint.md b/SetUpPylint.md
new file mode 100644
index 0000000..5bb5343
--- /dev/null
+++ b/SetUpPylint.md
@@ -0,0 +1,96 @@
+# Getting started with pylint
+
+''How to get started with pylint and melange in eclipse''
+
+## Prerequisites
+
+Melange must be checked out succesfully and set up correctly, read Melange [[GettingStarted](GettingStarted.md)] guide for more. Also you will need to download [pylint](http://www.logilab.org/857) and its dependencies, [logilab-astng](http://www.logilab.org/project/logilab-astng) and [logilab-common](http://www.logilab.org/project/logilab-common).
+
+## Install
+
+To get pylint working correctly you must first install its dependencies, in order to install its dependencies you may need to have administrator privileges depending on who installed python in your computer(you or the administrator) to avoid confusion this guide will proceed as if you where the administrator.
+
+  * Extract both pylint and its dependencies.
+  * Execute `python setup.py install` from logilab-common folder.
+  * Execute `python setup.py install` from logilab-astng folder.
+  * Execute `python setup.py install` from pylint folder.
+
+### Putting pylint in your system path
+
+Now if you want to run pylint from your prefered shell you may want to put the executable in your system path. To do this you just put Python25Path/Scripts in your system path:
+
+If you are using ''windows'' you will place Python25Path\Scripts under the PATH variable [here](http://vlaurie.com/computers2/Articles/environment.htm) you can find a guide on how to set system variables on windows xp and go [here](http://banagale.com/changing-your-system-path-in-windows-vista.htm) if you are using vista.
+
+If you are using ''linux'' you will set {need to know where is the scripts directory!}
+
+Now pylint should be fully installed.
+
+## Making pylint work with pydev
+[Pydev](http://pydev.sourceforge.net/) is an eclipse plugin to work with python projects, the rest of this guide focus on making pylint work with pydev and Melange.
+
+Now to get pylint working with pydev you need to [install pydev](http://www.fabioz.com/pydev/manual_101_install.html) then you should configure pydev to run pylint every time pydev builds the workspace, [here](http://pydev.sourceforge.net/pylint.html) is a guide on that, you may need to know that the lint.py file should be placed on /usr/local/lib/pythonX.Y/site-packages/pylint on linux and PythonInstallDir\Lib\site-packages\pylint on windows.
+
+?-X.Y stands for the python version that you are running.
+
+### Making pylint 'see' app engine and its dependencies
+Now that pylint is installed in your system and configured in eclipse the first thing you need to do is make pydev see app engine dependencies [here](http://www.youtube.com/watch?v=e1dtyQ6wqzc) is a good youtube video on that.
+Now that pydev is finding all app engine references in Melange, pylint may not be seeing app engine dependencies correctly. In order to solve that possible problem you have to install app engine dependencies in your sites\_package directory the same way we did with pylint and its dependencies.
+
+  * Go to MelangeCheckoutDir\thirdparty\google\_appengine\lib\
+  * Run `python yaml\setup.py install`
+  * Run `python webob\setup.py install` (needs [setup\_tools](http://pypi.python.org/pypi/setuptools) to install)
+  * Run `python django\setup.py install`
+  * Run `python antlr3\setup.py install`
+
+## Pylint usage
+
+As this may be enough for most projects but Melange has special needs. Many aspects both in melange and app engine can't be identified by pylint so an instruction in the code can be marked as incorrect while is fully correct.
+Example:
+
+```
+org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
+key=org.key()
+```
+
+In the previous section of code Organization is a model. The second line is marked as incorrect because pylint says the method Model.get\_by\_key\_name() returns a list. If you look at the Model implementation in app engine folder you will see that the method get\_by\_key\_name() returns a result of Model.get() that in fact can returns, sometimes, a list.
+
+In order to avoid these problems the programmer should feel encouraged to place special comments in the code to make pylint ignore these lines of code, if that section of code is proved correct.
+
+Example:
+
+```
+org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
+# pylint: disable-msg=E1103
+key=org.key()
+# pylint: enable-msg=E1103
+```
+
+
+In the previous section of code pylint would normally say that there is an error in the third line. However since we placed a special comment telling pylint to ignore that error checking in that line, no warning is issued.
+
+By placing a comment like this before the wronged line:
+
+```
+# pylint: disable-msg=(Error Code)
+```
+
+The error with the declared error code is ignored for the rest of this module until it sees:
+
+```
+# pylint: enable-msg=(Error Code)
+```
+
+That re-enables that error checking trough the rest of the code.
+
+There are some cases where pylint error skipping shouldn't be re-enabled like:
+
+```
+# pylint: disable-msg=W0311
+```
+
+This comment disable pylint checking for 4 spaces identing, as you can se [here](http://code.google.com/p/soc/wiki/PythonStyleGuide) melange enforces the use of 2 spaces for identing so leaving this checking disabled can be intentional.
+
+## The pylint rc-file
+As a final note, Melange has already included in MelangeCheckoutDir\scripts\pylint\ a file named pylintrc that is a configurations file for pylint it has almost all the problems that you might have with pylint on Melange solved. To make eclipse pass it to pylint on every build add the following line to the pydev>pylint>Pylint arguments under the preferences view in eclipse:
+
+`--rcfile=Absolutepath_to_MelangeDir/scripts/pylint/pylintrc`
\ No newline at end of file
diff --git a/SetUpPylint.wiki b/SetUpPylint.wiki
deleted file mode 100644
index 99f6519..0000000
--- a/SetUpPylint.wiki
+++ /dev/null
@@ -1,99 +0,0 @@
-#summary How to use and set up pylint under eclipse for Melange
-#labels Importance-Useful,Phase-QA,Contents-Review
-
-= Getting started with pylint =
-
-''How to get started with pylint and melange in eclipse''
-
-==Prerequisites==
-
-Melange must be checked out succesfully and set up correctly, read Melange [[GettingStarted]] guide for more. Also you will need to download [http://www.logilab.org/857 pylint] and its dependencies, [http://www.logilab.org/project/logilab-astng logilab-astng] and [http://www.logilab.org/project/logilab-common logilab-common].
-
-==Install==
-
-To get pylint working correctly you must first install its dependencies, in order to install its dependencies you may need to have administrator privileges depending on who installed python in your computer(you or the administrator) to avoid confusion this guide will proceed as if you where the administrator.
-
-  * Extract both pylint and its dependencies.
-  * Execute `python setup.py install` from logilab-common folder.
-  * Execute `python setup.py install` from logilab-astng folder.
-  * Execute `python setup.py install` from pylint folder.
-
-===Putting pylint in your system path===
-
-Now if you want to run pylint from your prefered shell you may want to put the executable in your system path. To do this you just put Python25Path/Scripts in your system path:
-
-If you are using ''windows'' you will place Python25Path\Scripts under the PATH variable [http://vlaurie.com/computers2/Articles/environment.htm here] you can find a guide on how to set system variables on windows xp and go [http://banagale.com/changing-your-system-path-in-windows-vista.htm here] if you are using vista.
-
-If you are using ''linux'' you will set {need to know where is the scripts directory!}
-
-Now pylint should be fully installed.
-
-==Making pylint work with pydev==
-[http://pydev.sourceforge.net/ Pydev] is an eclipse plugin to work with python projects, the rest of this guide focus on making pylint work with pydev and Melange.
-
-Now to get pylint working with pydev you need to [http://www.fabioz.com/pydev/manual_101_install.html install pydev] then you should configure pydev to run pylint every time pydev builds the workspace, [http://pydev.sourceforge.net/pylint.html here] is a guide on that, you may need to know that the lint.py file should be placed on /usr/local/lib/pythonX.Y/site-packages/pylint on linux and PythonInstallDir\Lib\site-packages\pylint on windows.
-
-?-X.Y stands for the python version that you are running.
-
-===Making pylint 'see' app engine and its dependencies===
-Now that pylint is installed in your system and configured in eclipse the first thing you need to do is make pydev see app engine dependencies [http://www.youtube.com/watch?v=e1dtyQ6wqzc here] is a good youtube video on that.
-Now that pydev is finding all app engine references in Melange, pylint may not be seeing app engine dependencies correctly. In order to solve that possible problem you have to install app engine dependencies in your sites_package directory the same way we did with pylint and its dependencies.
-
-  * Go to MelangeCheckoutDir\thirdparty\google_appengine\lib\
-  * Run `python yaml\setup.py install`
-  * Run `python webob\setup.py install` (needs [http://pypi.python.org/pypi/setuptools setup_tools] to install)
-  * Run `python django\setup.py install`
-  * Run `python antlr3\setup.py install`
-
-==Pylint usage==
-
-As this may be enough for most projects but Melange has special needs. Many aspects both in melange and app engine can't be identified by pylint so an instruction in the code can be marked as incorrect while is fully correct.
-Example:
-
-{{{
-org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
-key=org.key()
-}}}
-
-In the previous section of code Organization is a model. The second line is marked as incorrect because pylint says the method Model.get_by_key_name() returns a list. If you look at the Model implementation in app engine folder you will see that the method get_by_key_name() returns a result of Model.get() that in fact can returns, sometimes, a list.
-
-In order to avoid these problems the programmer should feel encouraged to place special comments in the code to make pylint ignore these lines of code, if that section of code is proved correct.
-
-Example:
-
-{{{
-org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
-# pylint: disable-msg=E1103
-key=org.key()
-# pylint: enable-msg=E1103
-}}}
-
-
-In the previous section of code pylint would normally say that there is an error in the third line. However since we placed a special comment telling pylint to ignore that error checking in that line, no warning is issued.
-
-By placing a comment like this before the wronged line:
-
-{{{
-# pylint: disable-msg=(Error Code)
-}}}
-
-The error with the declared error code is ignored for the rest of this module until it sees:
-
-{{{
-# pylint: enable-msg=(Error Code)
-}}}
-
-That re-enables that error checking trough the rest of the code.
-
-There are some cases where pylint error skipping shouldn't be re-enabled like:
-
-{{{
-# pylint: disable-msg=W0311
-}}}
-
-This comment disable pylint checking for 4 spaces identing, as you can se [http://code.google.com/p/soc/wiki/PythonStyleGuide here] melange enforces the use of 2 spaces for identing so leaving this checking disabled can be intentional.
-
-==The pylint rc-file==
-As a final note, Melange has already included in MelangeCheckoutDir\scripts\pylint\ a file named pylintrc that is a configurations file for pylint it has almost all the problems that you might have with pylint on Melange solved. To make eclipse pass it to pylint on every build add the following line to the pydev>pylint>Pylint arguments under the preferences view in eclipse:
-
-`--rcfile=Absolutepath_to_MelangeDir/scripts/pylint/pylintrc`
\ No newline at end of file
