diff --git a/pykd/customtypes.cpp b/pykd/customtypes.cpp
index 9ae22ac..cf0af7f 100644
--- a/pykd/customtypes.cpp
+++ b/pykd/customtypes.cpp
@@ -42,7 +42,7 @@ void CustomStruct::appendField(const std::string &fieldName, TypeInfoPtr fieldTy
         throw TypeException(getName(), "duplicate field name: " + fieldName);
 
     ULONG offset = getSize();
-    offset += (offset % m_alignReq);
+    offset += offset % (m_align ? m_align : fieldType->getAlignReq());
     UdtFieldColl::push_back(
         UdtUtils::Field(offset, fieldName, fieldType)
     );
@@ -93,6 +93,13 @@ void CustomUnion::appendField(const std::string &fieldName, TypeInfoPtr fieldTyp
 
 ////////////////////////////////////////////////////////////////////////////////
 
+TypeInfoPtr PtrToVoid()
+{
+    return TypeInfoPtr( new PointerTypeInfo(ptrSize()) );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
 }   // namespace pykd
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/pykd/customtypes.h b/pykd/customtypes.h
index 199f559..ddfd44e 100644
--- a/pykd/customtypes.h
+++ b/pykd/customtypes.h
@@ -15,11 +15,11 @@ namespace pykd {
 class CustomStruct : public UdtFieldColl
 {
 public:
-    static TypeInfoPtr create(const std::string &name, ULONG alignReq = 0);
+    static TypeInfoPtr create(const std::string &name, ULONG align = 0);
 
 protected:
-    CustomStruct(const std::string &name, ULONG alignReq)
-        : UdtFieldColl(name), m_name(name), m_alignReq(alignReq ? alignReq : ptrSize()) 
+    CustomStruct(const std::string &name, ULONG align)
+        : UdtFieldColl(name), m_name(name), m_align(align) 
     {
     }
 
@@ -37,7 +37,7 @@ protected:
 
 private:
     std::string m_name;
-    ULONG m_alignReq;
+    ULONG m_align;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -64,6 +64,10 @@ private:
 
 ////////////////////////////////////////////////////////////////////////////////
 
+TypeInfoPtr PtrToVoid();
+
+////////////////////////////////////////////////////////////////////////////////
+
 }   // namespace pykd
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index d43e39b..4d21440 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -235,10 +235,12 @@ BOOST_PYTHON_MODULE( pykd )
         "Remove all breapoints" );
 
     // custom types
-    python::def( "createStruct", &CustomStruct::create, CustomStruct_create( python::args( "name", "alignReq" ), 
+    python::def( "createStruct", &CustomStruct::create, CustomStruct_create( python::args( "name", "align" ), 
         "Create empty structure. Use append() method for building" ) );
     python::def( "createUnion", &CustomUnion::create,
         "Create empty union. Use append() method for building" );
+    python::def( "pVoid", &PtrToVoid,
+        "Create \"Void *\" type" );
 
     python::class_<intBase>( "intBase", "intBase", python::no_init )
         .def( python::init<python::object&>() )
diff --git a/pykd/typeinfo.cpp b/pykd/typeinfo.cpp
index 95b3544..73bb42a 100644
--- a/pykd/typeinfo.cpp
+++ b/pykd/typeinfo.cpp
@@ -306,6 +306,10 @@ BitFieldTypeInfo::BitFieldTypeInfo( SymbolPtr &symbol )
 
 ///////////////////////////////////////////////////////////////////////////////////
 
+std::string PointerTypeInfo::VoidTypeName( "Void" );
+
+///////////////////////////////////////////////////////////////////////////////////
+
 PointerTypeInfo::PointerTypeInfo( SymbolPtr &symbol  ) 
 {
     SymbolPtr pointTo = symbol->getType();
@@ -331,7 +335,7 @@ PointerTypeInfo::PointerTypeInfo( SymbolPtr &symbol  )
         case SymTagBaseType:
             //  * pointer to Void
             if (btVoid == static_cast<BasicType>(pointTo->getBaseType()))
-                m_derefName = "Void";
+                m_derefName = VoidTypeName;
             break;
 
         case SymTagVTableShape:
@@ -359,6 +363,14 @@ PointerTypeInfo::PointerTypeInfo( SymbolPtr &symScope, const std::string &symNam
 
 /////////////////////////////////////////////////////////////////////////////////////
 
+PointerTypeInfo::PointerTypeInfo( ULONG size )
+    : m_size(size)
+    , m_derefName(VoidTypeName)
+{
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+
 std::string PointerTypeInfo::getName()
 {
     return getComplexName();
@@ -600,6 +612,18 @@ std::string UdtFieldColl::print()
 
 /////////////////////////////////////////////////////////////////////////////////////
 
+ULONG UdtFieldColl::getAlignReq()
+{
+    ULONG alignReq = 1;
+    const ULONG fieldCount = getFieldCount();
+    for ( ULONG i = 0; i < fieldCount; ++i )
+        alignReq = max(alignReq, lookupField(i).m_type->getAlignReq());
+
+    return alignReq;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+
 void UdtTypeInfo::getFields( 
         SymbolPtr &rootSym, 
         SymbolPtr &baseVirtualSym,
diff --git a/pykd/typeinfo.h b/pykd/typeinfo.h
index d3fe052..046fcff 100644
--- a/pykd/typeinfo.h
+++ b/pykd/typeinfo.h
@@ -161,6 +161,10 @@ public:
         throw TypeException( getName(), "type is not is not extensible" );
     }
 
+    virtual ULONG getAlignReq() {
+        return 1;
+    }
+
     void setConstant( const BaseTypeVariant& var )
     {
         m_constant = true;
@@ -292,6 +296,10 @@ public:
         return m_bitWidth;
     }
 
+    virtual ULONG getAlignReq() override {
+        return m_size;
+    }
+
 private:
 
     ULONG           m_size;
@@ -352,6 +360,8 @@ protected:
         return true;
     }
 
+    virtual ULONG getAlignReq() override;
+
 protected:
     UdtFieldColl(const std::string &typeName) : m_fields(typeName) {}
 
@@ -453,6 +463,10 @@ protected:
 
     virtual std::string print();
 
+    virtual ULONG getAlignReq() override {
+        return getSize();
+    }
+
     SymbolPtr    m_dia;
 };
 
@@ -471,6 +485,9 @@ public:
 
     PointerTypeInfo( SymbolPtr &symScope, const std::string &symName );
 
+    // void *
+    PointerTypeInfo( ULONG size );
+
     virtual std::string getName();
 
     virtual ULONG getSize();
@@ -483,6 +500,10 @@ public:
         return getDerefType();
     }
 
+    virtual ULONG getAlignReq() override {
+        return m_size;
+    }
+
     TypeInfoPtr getDerefType() {
         if (!m_derefType)
             throw TypeException("<ptr>", "this pointer can not be dereferenced");
@@ -500,6 +521,7 @@ public:
     }
 
 private:
+    static std::string VoidTypeName;
 
     TypeInfoPtr     m_derefType;
     ULONG           m_size;
@@ -537,6 +559,10 @@ public:
         return m_derefType;
     }
 
+    virtual ULONG getAlignReq() override {
+        return m_derefType->getAlignReq();
+    }
+
     TypeInfoPtr getDerefType() {
         return m_derefType;
     }