diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -113,6 +113,8 @@
       return $ \libBuildInfo -> libBuildInfo
         { includeDirs = llvmIncludeDir : includeDirs libBuildInfo
         , extraLibDirs = llvmLibraryDir : extraLibDirs libBuildInfo
+          -- Set the RPATH so the Clang libs can be found later.
+        , ldOptions = ("-Wl,-rpath," ++ llvmLibraryDir) : ldOptions libBuildInfo
         }
 
   let Just lib = library pd
diff --git a/clang-pure.cabal b/clang-pure.cabal
--- a/clang-pure.cabal
+++ b/clang-pure.cabal
@@ -1,5 +1,5 @@
 name:                  clang-pure
-version:               0.2.0.5
+version:               0.2.0.6
 synopsis:              Pure C++ code analysis with libclang
 description:
   Pure C++ code analysis with libclang.
diff --git a/src/Language/C/Clang/Cursor.hs b/src/Language/C/Clang/Cursor.hs
--- a/src/Language/C/Clang/Cursor.hs
+++ b/src/Language/C/Clang/Cursor.hs
@@ -31,6 +31,7 @@
   , cursorDescendants
   , cursorSpelling
   , cursorExtent
+  , cursorLocation
   , cursorUSR
   , cursorReferenced
   , cursorType
diff --git a/src/Language/C/Clang/Cursor/Typed.hs b/src/Language/C/Clang/Cursor/Typed.hs
--- a/src/Language/C/Clang/Cursor/Typed.hs
+++ b/src/Language/C/Clang/Cursor/Typed.hs
@@ -27,6 +27,7 @@
   , cursorDescendants
 
   , cursorExtent
+  , cursorLocation
 
   , cursorSpelling
 
@@ -94,6 +95,9 @@
 
 cursorExtent :: HasExtent kind => CursorK kind -> SourceRange
 cursorExtent = fromJust . UT.cursorExtent . withoutKind
+
+cursorLocation :: CursorK kind -> SourceLocation
+cursorLocation = UT.cursorLocation . withoutKind
 
 class HasSpelling (kind :: CursorKind)
 
diff --git a/src/Language/C/Clang/Internal/FFI.hsc b/src/Language/C/Clang/Internal/FFI.hsc
--- a/src/Language/C/Clang/Internal/FFI.hsc
+++ b/src/Language/C/Clang/Internal/FFI.hsc
@@ -213,6 +213,15 @@
         return ( srp, free srp )
       return $ Just $ SourceRange srn
 
+cursorLocation :: Cursor -> SourceLocation
+cursorLocation c = uderef c $ \cp -> do
+  slp <- [C.exp| CXSourceLocation* { ALLOC(
+    clang_getCursorLocation(*$(CXCursor *cp))
+    )} |]
+  sln <- newLeaf (cursorTranslationUnit c) $ \_ ->
+    return ( slp, free slp )
+  return $ SourceLocation sln
+
 cursorUSR :: Cursor -> ByteString
 cursorUSR c = uderef c $ \cp -> withCXString $ \cxsp ->
   [C.block| void {
