diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index e76e090..f7b527d 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -507,21 +507,27 @@ BOOST_PYTHON_MODULE( pykd )
             "Return a current process" ).staticmethod("getCurrent")
         .def("getProcess", TargetProcessAdapter::getProcess,
             "Return process by index").staticmethod("getProcess")
-        .def("systemID", TargetProcessAdapter::getSystemId,
+        .add_property("systemID", TargetProcessAdapter::getSystemId,
             "Retrun system process ID ( PID )" )
-        .def("peb", TargetProcessAdapter::getPebOffset,
+        .add_property("peb", TargetProcessAdapter::getPebOffset,
             "Return PEB address" )
+        .add_property("exeName", TargetProcessAdapter::getExeName,
+            "Return the process executbakle file name")
         .def("getNumberThreads", TargetProcessAdapter::getNumberThreads,
             "Return number of threads for this process" )
         .def("thread", TargetProcessAdapter::getThreadByIndex,
             "Return thread by its index" )
+        .def("currentThread", TargetProcessAdapter::getCurrentThread,
+            "Return current thread" )
         ;
 
     python::class_<kdlib::TargetThread, kdlib::TargetThreadPtr, boost::noncopyable>("targetThread", "Class representing process in the target system", python::no_init )
-        .def("systemID", TargetThreadAdapter::getSystemId,
+        .add_property("systemID", TargetThreadAdapter::getSystemId,
             "Retrun system thread ID ( TID )" )
-        .def("teb", TargetThreadAdapter::getTebOffset,
+        .add_property("teb", TargetThreadAdapter::getTebOffset,
             "Return TEB address" )
+        .def("setCurrent", TargetThreadAdapter::setCurrent,
+            "Set this thread current")
         ;
 
     python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init )
diff --git a/pykd/pyprocess.h b/pykd/pyprocess.h
index 4226eb4..2ed4239 100644
--- a/pykd/pyprocess.h
+++ b/pykd/pyprocess.h
@@ -20,24 +20,30 @@ struct TargetProcessAdapter {
         return kdlib::TargetProcess::getByIndex(index);
     }
 
-    static unsigned long getNumberProcesses() 
+    static unsigned long getNumberProcesses()
     {
         AutoRestorePyState  pystate;
         return kdlib::TargetProcess::getNumber();
     }
 
-    static kdlib::PROCESS_ID getSystemId(kdlib::TargetProcess& process )
+    static kdlib::PROCESS_ID getSystemId(kdlib::TargetProcess& process)
     {
         AutoRestorePyState  pystate;
         return process.getSystemId();
     }
 
-    static kdlib::MEMOFFSET_64 getPebOffset(kdlib::TargetProcess& process )
+    static kdlib::MEMOFFSET_64 getPebOffset(kdlib::TargetProcess& process)
     {
         AutoRestorePyState  pystate;
         return process.getPebOffset();
     }
 
+    static std::wstring getExeName(kdlib::TargetProcess& process)
+    {
+        AutoRestorePyState  pystate;
+        return process.getExecutableName();
+    }
+
     static unsigned long getNumberThreads(kdlib::TargetProcess& process )
     {
         AutoRestorePyState  pystate;
@@ -49,6 +55,12 @@ struct TargetProcessAdapter {
         AutoRestorePyState  pystate;
         return process.getThreadByIndex(index);
     }
+
+    static kdlib::TargetThreadPtr getCurrentThread(kdlib::TargetProcess& process)
+    {
+        AutoRestorePyState  pystate;
+        return process.getCurrentThread();
+    }
 };
 
 
@@ -65,6 +77,12 @@ struct TargetThreadAdapter {
         AutoRestorePyState  pystate;
         return thread.getTebOffset();
     }
+
+    static void setCurrent(kdlib::TargetThread& thread)
+    {
+        AutoRestorePyState  pystate;
+        return thread.setCurrent();
+    }
 };
 
 } // pykd namespace
diff --git a/test/scripts/targetprocess.py b/test/scripts/targetprocess.py
index e01203c..f7fd8d8 100644
--- a/test/scripts/targetprocess.py
+++ b/test/scripts/targetprocess.py
@@ -15,8 +15,8 @@ class ProcessTest(unittest.TestCase):
 
     def testGetCurrentProcess(self):
         proc = pykd.targetProcess.getCurrent()
-        self.assertNotEqual(0, proc.systemID() )
-        self.assertNotEqual(0, proc.peb() )
+        self.assertNotEqual(0, proc.systemID )
+        self.assertNotEqual(0, proc.peb )
 
     def testEnumThreads(self):
         proc = pykd.targetProcess.getCurrent()
@@ -24,15 +24,24 @@ class ProcessTest(unittest.TestCase):
         self.assertLess(0, threadNumber)
         for i in xrange(threadNumber):
             thread = proc.thread(i)
-            self.assertNotEqual(0, thread.systemID() )
-            self.assertNotEqual(0, thread.teb() )
+            self.assertNotEqual(0, thread.systemID )
+            self.assertNotEqual(0, thread.teb )
 
     def testEnumProcesses(self):
         processNumber = pykd.targetProcess.getNumber()
         for i in xrange(processNumber):
             proc = pykd.targetProcess.getProcess(i)
-            self.assertNotEqual(0, proc.systemID() )
-            self.assertNotEqual(0, proc.peb() )
+            self.assertNotEqual(0, proc.systemID)
+            self.assertNotEqual(0, proc.peb)
+
+    def testSetCurrentThread(self):
+        proc = pykd.targetProcess.getCurrent()
+        threadNumber = proc.getNumberThreads()
+        self.assertLess(0, threadNumber)
+        for i in xrange(threadNumber):
+            thread = proc.thread(i)
+            thread.setCurrent()
+