diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp
index 6c506c1700cb36087e63c60e38ca349511b9a70f..93725ee22465845d5e86f0fa28ea557a7ec82d4b 100644
--- a/src/shared/cplusplus/Symbol.cpp
+++ b/src/shared/cplusplus/Symbol.cpp
@@ -161,7 +161,7 @@ private:
 };
 
 Symbol::Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
-    : _translationUnit(translationUnit),
+    : _control(translationUnit->control()),
       _sourceLocation(sourceLocation),
       _sourceOffset(0),
       _startOffset(0),
@@ -183,15 +183,10 @@ Symbol::~Symbol()
 { }
 
 Control *Symbol::control() const
-{
-    if (_translationUnit)
-        return _translationUnit->control();
-
-    return 0;
-}
+{ return _control; }
 
 TranslationUnit *Symbol::translationUnit() const
-{ return _translationUnit; }
+{ return _control->translationUnit(); }
 
 void Symbol::visitSymbol(SymbolVisitor *visitor)
 {
diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h
index f45ce88c0c4e93cdccdc935358a23e89862efd8e..628261b4b9a63c7485d679d8cd7cbe44976cce5c 100644
--- a/src/shared/cplusplus/Symbol.h
+++ b/src/shared/cplusplus/Symbol.h
@@ -87,9 +87,6 @@ public:
     /// Destroy this Symbol.
     virtual ~Symbol();
 
-    /// Returns this Symbol's Control object.
-    Control *control() const;
-
     /// Returns this Symbol's source location.
     unsigned sourceLocation() const;
 
@@ -323,10 +320,14 @@ public:
 protected:
     virtual void visitSymbol0(SymbolVisitor *visitor) = 0;
 
+    /// Returns this Symbol's Control object.
+    Control *control() const;
+
+    /// Returns this Symbol's TranslationUnit.
     TranslationUnit *translationUnit() const;
 
 private:
-    TranslationUnit *_translationUnit;
+    Control *_control;
     unsigned _sourceLocation;
     unsigned _sourceOffset;
     unsigned _startOffset;