diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index eb992d4..ef04f35 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -57,13 +57,15 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( getSourceFile_, kdlib::getSourceFile, 0, 1 );
 
 //BOOST_PYTHON_FUNCTION_OVERLOADS( setHardwareBp_, setHardwareBp, 3, 4 );
 //
-//BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( TypeBuilder_createStruct, TypeBuilder::createStruct, 1, 2 );
+BOOST_PYTHON_FUNCTION_OVERLOADS( createStruct_, kdlib::defineStruct, 1, 2 );
 //
 BOOST_PYTHON_FUNCTION_OVERLOADS( Module_enumSymbols, ModuleAdapter::enumSymbols, 1, 2 );
 BOOST_PYTHON_FUNCTION_OVERLOADS( Module_findSymbol, ModuleAdapter::findSymbol, 2, 3 );
 
 BOOST_PYTHON_FUNCTION_OVERLOADS( findSymbol_, TypeInfoAdapter::findSymbol, 1, 2 );
 
+BOOST_PYTHON_FUNCTION_OVERLOADS( TypeInfo_ptrTo, TypeInfoAdapter::ptrTo, 1, 2 ); 
+
 //BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Module_findSymbol, Module::getSymbolNameByVa, 1, 2 );
 
 
@@ -257,8 +259,12 @@ BOOST_PYTHON_MODULE( pykd )
     python::def("containingRecord", &TypedVarAdapter::containingRecordByType,
         "Return instance of the typedVar class. It's value are loaded from the target memory."
         "The start address is calculated by the same method as the standard macro CONTAINING_RECORD does" );
-    python::def("customStruct", &kdlib::defineStruct,
+    python::def("createStruct", &kdlib::defineStruct,
         "return custom defined struct" );
+    python::def( "createStruct", &kdlib::defineStruct, createStruct_( python::args( "name", "align" ),
+            "Create custom struct" ) );
+    python::def( "createUnion", &kdlib::defineUnion, 
+            "Create custom union" );
 
     // CPU registers
     python::def( "reg", &getRegisterByName,
@@ -409,10 +415,6 @@ BOOST_PYTHON_MODULE( pykd )
             "Return a size of the type or variable" )
         .def("type", &kdlib::Module::getTypeByName,
             "Return typeInfo class by type name" )
-        //.def("getUdts", &Module::getUdts,
-        //    "Return a list of all user-defined type names" )
-        //.def("getEnums", &Module::getEnums,
-        //    "Return a list of all enumeration names" )
         .def("typedVar", &kdlib::Module::getTypedVarByAddr,
             "Return a typedVar class instance" )
         .def("typedVar",&kdlib::Module::getTypedVarByName,
@@ -467,10 +469,10 @@ BOOST_PYTHON_MODULE( pykd )
         //    "Return type as python dict ( for enum types )" )
         .def( "deref", &kdlib::TypeInfo::deref,
             "Return type of pointer" )
-        //.def( "append", &kdlib::TypeInfo::appendField,
-        //    "Add a new field to custom defined struct" )
-        .def( "ptrTo", &kdlib::TypeInfo::ptrTo,
-            "Return pointer to the type" )
+        .def( "append", &kdlib::TypeInfo::appendField,
+            "Add a new field to custom defined struct" )
+        .def( "ptrTo", &TypeInfoAdapter::ptrTo, TypeInfo_ptrTo( python::args( "ptrSize" ),
+            "Return pointer to the type" ) )
         .def( "arrayOf", &kdlib::TypeInfo::arrayOf,
             "Return array of the type" )
         .def( "isArray", &kdlib::TypeInfo::isArray,
@@ -519,8 +521,6 @@ BOOST_PYTHON_MODULE( pykd )
             "Return list of tuple ( filedName, fieldOffset, fieldValue )" )
         .def( "fieldName", &kdlib::TypedVar::getElementName,
             "Return name of struct field by index" )
-        //.def( "dataKind", &kdlib::TypedVar::getDataKind,
-        //    "Retrieves the variable classification of a data: DataIsXxx")
          .def("deref", &kdlib::TypedVar::deref,
             "Return value by pointer" )
         .def("type", &kdlib::TypedVar::getType,
@@ -578,12 +578,6 @@ BOOST_PYTHON_MODULE( pykd )
          .def("__getattr__",  &CPUContextAdaptor::getRegisterByName )
          .def("__getitem__",  &CPUContextAdaptor::getRegisterByIndex );
 
-   // python::class_<ScopeVars,ScopeVarsPtr,boost::noncopyable>( "locals",
-   //     "Class for access to local vars",  python::no_init  )
-   //         .def("__len__", &ScopeVars::getVarCount )
-   //         .def("__getitem__", &ScopeVars::getVarByIndex )
-   //         .def("__getitem__", &ScopeVars::getVarByName );
-
     python::class_<kdlib::SystemInfo>(
         "systemVersion", "Operation system version", python::no_init)
         //.def_readonly( "platformId", &SystemVersion::platformId,
diff --git a/pykd/typeinfo.h b/pykd/typeinfo.h
index 1cf7fb7..81dd195 100644
--- a/pykd/typeinfo.h
+++ b/pykd/typeinfo.h
@@ -73,6 +73,10 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
         return typeInfo.getElement(index);
     }
 
+    static kdlib::TypeInfoPtr ptrTo( kdlib::TypeInfo &typeInfo, size_t ptrSize = 0 ) {
+        return typeInfo.ptrTo(ptrSize);
+    }
+    
 };
 
 struct BaseTypesEnum {
diff --git a/test/scripts/customtypestest.py b/test/scripts/customtypestest.py
index bd702ed..d92e0c3 100644
--- a/test/scripts/customtypestest.py
+++ b/test/scripts/customtypestest.py
@@ -3,27 +3,25 @@
 import unittest
 import target
 import pykd
+from pykd import baseTypes
 
 class CustomTypesTest(unittest.TestCase):
     def testCommonStruct(self):
+        mySubStruct =pykd.createStruct("MySubCustomStruct")
+        mySubStruct.append( "m_uint1", baseTypes.UInt1B )
+        mySubStruct.append( "m_uint2", baseTypes.UInt2B )
 
-        tb = pykd.typeBuilder()
-   
-        mySubStruct =tb.createStruct("MySubCustomStruct")
-        mySubStruct.append( "m_uint1", tb.UInt1B )
-        mySubStruct.append( "m_uint2", tb.UInt2B )
+        mySubUnion = pykd.createUnion("MySubCustomUnion")
+        mySubUnion.append( "m_uint1", baseTypes.UInt1B )
+        mySubUnion.append( "m_uint2", baseTypes.UInt2B )
 
-        mySubUnion = tb.createUnion("MySubCustomUnion")
-        mySubUnion.append( "m_uint1", tb.UInt1B )
-        mySubUnion.append( "m_uint2", tb.UInt2B )
-
-        myType = tb.createStruct("MyCustomStruct")
-        myType.append( "m_uint1", tb.UInt1B  )
-        myType.append( "m_uint4", tb.UInt4B )
-        myType.append( "m_uint2", tb.UInt2B )
+        myType =pykd.createStruct("MyCustomStruct")
+        myType.append( "m_uint1", baseTypes.UInt1B  )
+        myType.append( "m_uint4", baseTypes.UInt4B )
+        myType.append( "m_uint2", baseTypes.UInt2B )
         myType.append( "m_struct", mySubStruct )
         myType.append( "m_union", mySubUnion )
-        myType.append( "m_uint8", tb.UInt8B )
+        myType.append( "m_uint8", baseTypes.UInt8B )
 
         self.assertTrue( myType.size() != 0 )
         self.assertTrue( myType.size() >= myType.fieldOffset("m_uint8") + myType.m_uint8.size() )
@@ -42,16 +40,12 @@ class CustomTypesTest(unittest.TestCase):
         self.assertTrue( myType.fieldOffset("m_struct") < myType.fieldOffset("m_union") )
         self.assertTrue( myType.fieldOffset("m_struct") + myType.m_struct.size() <= myType.fieldOffset("m_union") )
 
-        # print myType
-
     def testCommonUnion(self):
 
-        tb = pykd.typeBuilder()
-        
-        myType = tb.createUnion("MyCustomStruct")
-        myType.append( "m_uint1", tb.UInt1B )
-        myType.append( "m_uint4", tb.UInt4B )
-        myType.append( "m_uint2", tb.UInt2B )
+        myType = pykd.createUnion("MyCustomStruct")
+        myType.append( "m_uint1", baseTypes.UInt1B )
+        myType.append( "m_uint4", baseTypes.UInt4B )
+        myType.append( "m_uint2", baseTypes.UInt2B )
 
         self.assertFalse( myType.size() == 0 )
         self.assertTrue( myType.fieldOffset("m_uint1") == 0 )
@@ -59,74 +53,46 @@ class CustomTypesTest(unittest.TestCase):
         self.assertTrue( myType.fieldOffset("m_uint2") == 0 )
 
     def testEmptyType(self):
-        tb = pykd.typeBuilder()
-
-        myEmptyStruct1 = tb.createStruct("EmptyStruct1")
+    
+        myEmptyStruct1 = pykd.createStruct("EmptyStruct1")
         self.assertEqual( 0, myEmptyStruct1.size() )
 
-        myEmptyStruct1.append("m_emptyStruct2", tb.createStruct("EmptyStruct2"))
+        myEmptyStruct1.append("m_emptyStruct2", pykd.createStruct("EmptyStruct2"))
         self.assertEqual( 0, myEmptyStruct1.size() )
 
-        myEmptyUnion1 = tb.createUnion("EmptyUnion1")
+        myEmptyUnion1 = pykd.createUnion("EmptyUnion1")
         self.assertEqual( 0, myEmptyUnion1.size() )
 
         myEmptyStruct1.append("m_emptyUnion2", myEmptyUnion1)
         self.assertEqual( 0, myEmptyStruct1.size() )
 
-        myEmptyUnion1.append("m_emptyStruct3", tb.createStruct("EmptyStruct3"))
+        myEmptyUnion1.append("m_emptyStruct3", pykd.createStruct("EmptyStruct3"))
         self.assertEqual( 0, myEmptyUnion1.size() )
 
     def testDupFieldName(self):
     
-        tb = pykd.typeBuilder()
-    
-        myType = tb.createStruct("MyCustomStruct")
+        myType = pykd.createStruct("MyCustomStruct")
         exceptionRised = False
-        myType.append( "m_uint1", tb.UInt1B )
+        myType.append( "m_uint1", baseTypes.UInt1B )
         try:
-            myType.append( "m_uint1", tb.UInt1B )
+            myType.append( "m_uint1", baseTypes.UInt1B )
         except pykd.TypeException:
             exceptionRised = True
         self.assertTrue(exceptionRised)
 
-        myType = tb.createUnion("MyCustomStruct")
+        myType = pykd.createUnion("MyCustomStruct")
         exceptionRised = False
-        myType.append( "m_uint1", tb.UInt1B )
+        myType.append( "m_uint1", baseTypes.UInt1B )
         try:
-            myType.append( "m_uint1", tb.UInt1B )
+            myType.append( "m_uint1", baseTypes.UInt1B )
         except pykd.TypeException:
             exceptionRised = True
         self.assertTrue(exceptionRised)
-        
-    def testBasicType(self):
-        tb = pykd.typeBuilder()
-        self.assertEqual( 1, tb.UInt1B.size() )
-        self.assertEqual( 2, tb.UInt2B.size() )
-        self.assertEqual( 4, tb.UInt4B.size() )
-        self.assertEqual( 8, tb.UInt8B.size() )
-        self.assertEqual( 1, tb.Int1B.size() )
-        self.assertEqual( 2, tb.Int2B.size() )
-        self.assertEqual( 4, tb.Int4B.size() )
-        self.assertEqual( 8, tb.Int8B.size() )
-        self.assertEqual( 1, tb.Bool.size() )
-        self.assertEqual( 1, tb.Char.size() )
-        self.assertEqual( 2, tb.WChar.size() )
-        self.assertEqual( 4, tb.Long.size() )
-        self.assertEqual( 4, tb.ULong.size() )
 
-    def testVoidPtr(self):
-        self.assertEqual( 4, pykd.typeBuilder(4).VoidPtr.size() )
-        self.assertEqual( 8, pykd.typeBuilder(8).VoidPtr.size() )
-        self.assertEqual( pykd.ptrSize(), pykd.typeBuilder().VoidPtr.size() )
-        self.assertEqual( 4, pykd.typeBuilder(4).UInt1B.ptrTo().size() )
-        self.assertEqual( 8, pykd.typeBuilder(8).UInt1B.ptrTo().size() )
-        self.assertEqual( pykd.ptrSize(), pykd.typeBuilder().UInt1B.ptrTo().size() )
-        
     def testPtrToCustomType(self):
-        tb = pykd.typeBuilder()
-        mySubStruct =tb.createStruct("MySubCustomStruct")
-        mySubStruct.append( "m_uint1", tb.UInt1B )
-        mySubStruct.append( "m_uint2", tb.UInt2B )
+        mySubStruct =pykd.createStruct("MySubCustomStruct")
+        mySubStruct.append( "m_uint1", baseTypes.UInt1B )
+        mySubStruct.append( "m_uint2", baseTypes.UInt2B )
         mySubStructPtr = mySubStruct.ptrTo()
         self.assertEqual( pykd.ptrSize(), mySubStructPtr.size() )
 
diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py
index a29ec89..40a4a67 100644
--- a/test/scripts/pykdtest.py
+++ b/test/scripts/pykdtest.py
@@ -20,10 +20,11 @@ import typeinfo
 import typedvar
 import breakpoint
 import regtest
+import stacktest
+import customtypestest
+
 
 #import mspdbtest
-#import localstest
-#import customtypestest
 #import ehexcepttest
 #import ehstatustest
 #import ehsymbolstest
@@ -54,16 +55,16 @@ def getTestSuite( singleName = "" ):
                 unittest.TestLoader().loadTestsFromTestCase( typeinfo.TypeInfoTest ),
                 unittest.TestLoader().loadTestsFromTestCase( typedvar.TypedVarTest ),
                 unittest.TestLoader().loadTestsFromTestCase( regtest.CpuRegTest ),
-                #unittest.TestLoader().loadTestsFromTestCase( customtypestest.CustomTypesTest ),
+                unittest.TestLoader().loadTestsFromTestCase( customtypestest.CustomTypesTest ),
                 # ^^^
                 unittest.TestLoader().loadTestsFromTestCase( TerminateProcessTest ),
 
                 unittest.TestLoader().loadTestsFromTestCase( breakpoint.BreakpointTest ),
 
+                unittest.TestLoader().loadTestsFromTestCase( stacktest.StackTest ),
 
-
+                #unittest.TestLoader().loadTestsFromTestCase(  localstest.LocalVarsTest )
                 #unittest.TestLoader().loadTestsFromTestCase( mspdbtest.MsPdbTest ),
-                #unittest.TestLoader().loadTestsFromTestCase( localstest.LocalVarsTest ),
                 #unittest.TestLoader().loadTestsFromTestCase( ehexcepttest.EhExceptionTest ),
                 #unittest.TestLoader().loadTestsFromTestCase( ehstatustest.EhStatusTest ),
                 #unittest.TestLoader().loadTestsFromTestCase( ehsymbolstest.EhSymbolsTest ),
@@ -84,3 +85,4 @@ if __name__ == "__main__":
     target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0]
     
     unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() )
+