diff --git a/pykd/module.cpp b/pykd/module.cpp
index aec39ab..824452f 100644
--- a/pykd/module.cpp
+++ b/pykd/module.cpp
@@ -299,19 +299,14 @@ std::string Module::getSymbolNameByVa( ULONG64 offset, bool showDisplacement )
 
 ///////////////////////////////////////////////////////////////////////////////////
 
-std::string Module::getStrictSymbolNameByVa( ULONG64 offset )
+python::tuple Module::getSymbolAndDispByVa( ULONG64 offset )
 {
     offset = prepareVa(offset);
 
     LONG displacement = 0;
+    SymbolPtr sym = getSymSession()->findByRva( (ULONG)(offset - m_base ), SymTagNull, &displacement );
 
-    const ULONG rva = (ULONG)(offset - m_base );
-    SymbolPtr sym = getSymSession()->findByRva( rva , SymTagNull, &displacement );
-
-    if (displacement || rva != sym->getRva())
-        throw SymbolException( "Not exact address of symbol" );
-
-    return sym->getName();
+    return python::make_tuple(sym->getName(), displacement);
 }
 
 ///////////////////////////////////////////////////////////////////////////////////
diff --git a/pykd/module.h b/pykd/module.h
index d754ca3..0f08607 100644
--- a/pykd/module.h
+++ b/pykd/module.h
@@ -133,7 +133,7 @@ public:
 
     std::string getSymbolNameByVa( ULONG64 offset, bool showDisplacement = true );
 
-    std::string getStrictSymbolNameByVa( ULONG64 offset );
+    python::tuple getSymbolAndDispByVa( ULONG64 offset );
 
     void getSourceLine( ULONG64 offset, std::string &fileName, ULONG &lineNo, LONG &displacement );
 
diff --git a/pykd/python/pymod.cpp b/pykd/python/pymod.cpp
index 0d00f0a..b296da3 100644
--- a/pykd/python/pymod.cpp
+++ b/pykd/python/pymod.cpp
@@ -370,8 +370,8 @@ BOOST_PYTHON_MODULE( pykd )
             "Return offset of the symbol" )
         .def("findSymbol", &Module::getSymbolNameByVa, Module_findSymbol( python::args("offset", "showDisplacement"),
             "Return symbol name by virtual address" ) )
-        .def("getSymbolName", &Module::getStrictSymbolNameByVa,
-            "Return symbol name by virtual address (without displacement)" )
+        .def("findSymbolAndDisp", &Module::getSymbolAndDispByVa,
+            "Return tuple(symbol_name, displacement) by virtual address" )
         .def("rva", &Module::getSymbolRva,
             "Return rva of the symbol" )
         .def("sizeof", &Module::getSymbolSize,
diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py
index 1aefc20..c249447 100644
--- a/test/scripts/moduletest.py
+++ b/test/scripts/moduletest.py
@@ -56,16 +56,15 @@ class ModuleTest( unittest.TestCase ):
         self.assertEqual( "_FuncWithName2+10", target.module.findSymbol( target.module.offset("_FuncWithName2") + 0x10 ) )
         self.assertEqual( "_FuncWithName2", target.module.findSymbol( target.module.offset("_FuncWithName2") + 0x10, showDisplacement = False ) )
 
-    def testGetSymbolName( self ):
+    def testFindSymbolAndDisp( self ):
         vaFuncWithName0 = target.module.offset("FuncWithName0")
-        self.assertEqual( "FuncWithName0", target.module.getSymbolName(vaFuncWithName0) )
-        self.assertRaises( pykd.SymbolException, target.module.getSymbolName, vaFuncWithName0 + 1 )
-        self.assertRaises( pykd.SymbolException, target.module.getSymbolName, vaFuncWithName0 - 1 )
+        self.assertEqual( ("FuncWithName0", 0), target.module.findSymbolAndDisp(vaFuncWithName0) )
+        self.assertEqual( ("FuncWithName0", 2), target.module.findSymbolAndDisp(vaFuncWithName0+2) )
 
     def testType( self ):
         self.assertEqual( "structTest", target.module.type("structTest").name() );
         self.assertEqual( "structTest", target.module.type("g_structTest").name() );
-        
+
     def testSourceFile( self ):
         fileName = pykd.getSourceFile(target.module.FuncWithName0 )
         self.assertTrue( re.search('targetapp\\.cpp', fileName ) )