diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp
index aa3a352..4f1b7ec 100644
--- a/pykd/dbgext.cpp
+++ b/pykd/dbgext.cpp
@@ -153,7 +153,8 @@ BOOST_PYTHON_MODULE( pykd )
         .def("begin", &dbgModuleClass::getBegin )
         .def("end", &dbgModuleClass::getEnd )
         .def("name", &dbgModuleClass::getName )
-        .def("contain", &dbgModuleClass::contain );
+        .def("contain", &dbgModuleClass::contain )
+        .def("__getattribute__", &dbgModuleClass::getOffset );
     boost::python::class_<dbgExtensionClass>( 
             "ext",
             "windbg extension",
diff --git a/pykd/dbgmodule.cpp b/pykd/dbgmodule.cpp
index 4ff09f8..0764417 100644
--- a/pykd/dbgmodule.cpp
+++ b/pykd/dbgmodule.cpp
@@ -4,6 +4,7 @@
 #include "dbgmodule.h"
 #include "dbgexcept.h"
 #include "dbgmem.h"
+#include "dbgsym.h"
 
 /////////////////////////////////////////////////////////////////////////////////
 
@@ -127,3 +128,23 @@ dbgModuleClass::reloadSymbols()
 
 /////////////////////////////////////////////////////////////////////////////////
 
+ULONG64
+dbgModuleClass::getOffset( const std::string  &symName )
+{
+    OffsetMap::iterator  offset = m_offsets.find( symName ); 
+    if ( offset != m_offsets.end() )
+    {
+        return offset->second;
+    }
+    
+    ULONG64  offsetVal = findAddressForSymbol( m_name, symName );
+    if (  (ULONG64)~0 == offsetVal )
+        return offsetVal;
+        
+    m_offsets.insert( std::make_pair( symName, offsetVal ) );
+    
+    return offsetVal;                    
+}
+
+/////////////////////////////////////////////////////////////////////////////////
+
diff --git a/pykd/dbgmodule.h b/pykd/dbgmodule.h
index 6cc84b4..4d159fa 100644
--- a/pykd/dbgmodule.h
+++ b/pykd/dbgmodule.h
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <string>
+#include <map>
 
 #include <boost/python.hpp>
 #include <boost/python/object.hpp>
@@ -48,6 +49,10 @@ public:
     void
     reloadSymbols();
     
+    ULONG64
+    getOffset( const std::string  &symName );
+    
+    
 private:
 
     ULONG64         m_base;
@@ -55,6 +60,9 @@ private:
     ULONG64         m_end;        
     
     std::string     m_name;
+    
+    typedef std::map<std::string, ULONG64>  OffsetMap;
+    OffsetMap       m_offsets;
 };
 
 /////////////////////////////////////////////////////////////////////////////////
diff --git a/samples/proclist.py b/samples/proclist.py
index ff0c2d4..eb1a2c4 100644
--- a/samples/proclist.py
+++ b/samples/proclist.py
@@ -7,7 +7,6 @@ def loadSymbols():
 
    global nt
    nt = loadModule( "nt" )
-   nt.PsActiveProcessHead = getOffset( "nt", "PsActiveProcessHead" )
 
 
 def processInfo():