diff --git a/TestON/core/Thread.py b/TestON/core/Thread.py
index e20abc3..452437a 100644
--- a/TestON/core/Thread.py
+++ b/TestON/core/Thread.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 import threading
 
-class Thread(threading.Thread):
-    def __init__(self, target = None, threadID=None, name="", args=(), kwargs={}):
-        super(Thread, self).__init__()
+
+class Thread( threading.Thread ):
+    def __init__( self, target=None, threadID=None, name="", args=(),
+                  kwargs={} ):
+        super( Thread, self ).__init__()
         self.threadID = threadID
         self.name = name
         self.target = target
@@ -14,11 +16,16 @@
     def run( self ):
         try:
             if self.target is not None:
+                self.result = self.target( *self.args, **self.kwargs )
+            '''
+            if self.target is not None:
                 if len(self.args) != 0:
                     self.result = self.target( *self.args )
                 else:
                     self.result = self.target()
+                    # FIXME: handle kwargs?
+            '''
         except Exception as e:
-            print "Thread-" + str(self.threadID) + \
-                  ":something went wrong with " + self.name + " method"
+            print "Thread-" + str( self.threadID ) + " '" + self.name + "'"\
+                  ":something went wrong with " + self.target + " method"
             print e
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index 70de8ec..acbc0f1 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 '''
 Created on 22-Oct-2012
-    
+
 @author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
 
 
@@ -16,7 +16,7 @@
     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/>.		
+    along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 
 
 
@@ -90,7 +90,7 @@
         self.logs_path = logs_path
         self.driver = ''
         self.Thread = Thread
-        
+
         self.configparser()
         verifyOptions(options)
         load_logger()
@@ -99,17 +99,17 @@
         self.driversList=[]
         if type(self.componentDictionary) == str :
             self.componentDictionary = dict(self.componentDictionary)
-            
+
         for component in self.componentDictionary :
             self.driversList.append(self.componentDictionary[component]['type'])
-            
+
         self.driversList = list(set(self.driversList)) # Removing duplicates.
         # Checking the test_target option set for the component or not
         if type(self.componentDictionary) == dict:
             for component in self.componentDictionary.keys():
                 if 'test_target' in self.componentDictionary[component].keys():
                     self.test_target = component
-             
+
         # Checking for the openspeak file and test script
         self.logger.initlog(self)
 
