diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp
index 7b9ca1ed7faeb251e911a61803594198790a6bd2..d08d1c4d93d17a471c03f4c591d58ec4c9aa580e 100644
--- a/src/shared/cplusplus/ASTVisitor.cpp
+++ b/src/shared/cplusplus/ASTVisitor.cpp
@@ -77,12 +77,7 @@ int ASTVisitor::tokenKind(unsigned index) const
 { return translationUnit()->tokenKind(index); }
 
 const char *ASTVisitor::spell(unsigned index) const
-{
-    if (! index)
-        return 0;
-
-    return translationUnit()->tokenAt(index).spell();
-}
+{ return translationUnit()->spell(index); }
 
 Identifier *ASTVisitor::identifier(unsigned index) const
 { return translationUnit()->identifier(index); }
diff --git a/src/shared/cplusplus/TranslationUnit.cpp b/src/shared/cplusplus/TranslationUnit.cpp
index 40a95c0f05d7f49860012e780ec2cc7ad75583f9..ebadf35c75a9d2cfaf485b4034838ae656bc0075 100644
--- a/src/shared/cplusplus/TranslationUnit.cpp
+++ b/src/shared/cplusplus/TranslationUnit.cpp
@@ -134,6 +134,14 @@ const Token &TranslationUnit::tokenAt(unsigned index) const
 int TranslationUnit::tokenKind(unsigned index) const
 { return _tokens->at(index).kind; }
 
+const char *TranslationUnit::spell(unsigned index) const
+{
+    if (! index)
+        return 0;
+
+    return _tokens->at(index).spell();
+}
+
 Identifier *TranslationUnit::identifier(unsigned index) const
 { return _tokens->at(index).identifier; }
 
diff --git a/src/shared/cplusplus/TranslationUnit.h b/src/shared/cplusplus/TranslationUnit.h
index aa490701ef9d01ab7ad6478571bd10e996e6c674..7a57950ac34078034cc5ef76b68d9a0d2a2e596b 100644
--- a/src/shared/cplusplus/TranslationUnit.h
+++ b/src/shared/cplusplus/TranslationUnit.h
@@ -87,6 +87,7 @@ public:
     unsigned tokenCount() const;
     const Token &tokenAt(unsigned index) const;
     int tokenKind(unsigned index) const;
+    const char *spell(unsigned index) const;
 
     unsigned matchingBrace(unsigned index) const;
     Identifier *identifier(unsigned index) const;