diff --git a/TestON/core/xmlparser.py b/TestON/core/xmlparser.py
new file mode 100644
index 0000000..9a2321c
--- /dev/null
+++ b/TestON/core/xmlparser.py
@@ -0,0 +1,66 @@
+#/usr/bin/env python
+'''
+Created on 07-Jan-2013
+       
+@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+
+    TestON is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 2 of the License, or
+    (at your option) any later version.
+
+    TestON is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.		
+
+
+'''
+
+import xmldict
+import re
+
+class xmlparser :
+    
+    def __init__(self) :
+        self.default = ''
+
+    def parse(self,fileName) :
+        '''
+         This will parse the params or topo or cfg file and return content in the file as Dictionary
+        '''
+        self.fileName = fileName
+        matchFileName = re.match(r'(.*)\.(params|topo|cfg)', self.fileName, re.M | re.I)
+        if matchFileName:
+            xml = open(fileName).read()
+            try :
+                parsedInfo = xmldict.xml_to_dict(xml)
+                return parsedInfo
+            except :
+                print "There is no such file to parse " + fileName 
+        else :
+            print "file name is not correct"
+
+    def parseParams(self,paramsPath):
+        '''
+         It will take the params file path and will return the params dictionary
+        '''
+        paramsPath = re.sub("\.","/",paramsPath) 
+        paramsPath = re.sub("tests|examples","",paramsPath)
+        params = self.parse(main.tests_path+paramsPath+".params")
+        paramsAsString = str(params)
+        return eval(paramsAsString)
+
+    def parseTopology(self,topologyPath):
+        '''
+          It will take topology file path and will return topology dictionary
+        '''
+        topologyPath = re.sub("\.","/",topologyPath)
+        topologyPath = re.sub("tests|examples","",topologyPath)
+        topology = self.parse(main.tests_path+"/"+topologyPath+".topo")
+        topoAsString = str(topology)
+        return eval(topoAsString)
+                                                                  
