diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp
index a21f73df182d9ac2ff1b8fc6222f5f2e2facb1e3..c561455ec6475b93a3208d8f4bc3f6d3376d23ca 100644
--- a/src/shared/cplusplus/Bind.cpp
+++ b/src/shared/cplusplus/Bind.cpp
@@ -1931,8 +1931,13 @@ bool Bind::visit(QtEnumDeclarationAST *ast)
     // unsigned enum_specifier_token = ast->enum_specifier_token;
     // unsigned lparen_token = ast->lparen_token;
     for (NameListAST *it = ast->enumerator_list; it; it = it->next) {
-        /*const Name *value =*/ this->name(it->value);
+        const Name *value = this->name(it->value);
+        if (!value)
+            continue;
+        QtEnum *qtEnum = control()->newQtEnum(it->value->firstToken(), value);
+        _scope->addMember(qtEnum);
     }
+
     // unsigned rparen_token = ast->rparen_token;
     return false;
 }
@@ -2833,6 +2838,7 @@ bool Bind::visit(EnumSpecifierAST *ast)
 {
     unsigned sourceLocation = location(ast->name, ast->firstToken());
     const Name *enumName = this->name(ast->name);
+
     Enum *e = control()->newEnum(sourceLocation, enumName);
     e->setStartOffset(tokenAt(sourceLocation).end()); // at the end of the enum or identifier token.
     e->setEndOffset(tokenAt(ast->lastToken() - 1).end());
diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
index c2c54c7e19608cf4d5f19588f2aa75f98ab486c2..af52242ce7ad404e6749fe746f1576e7a5466391 100644
--- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
+++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
@@ -133,6 +133,7 @@ class Token;
 
 // Qt symbols
 class QtPropertyDeclaration;
+class QtEnum;
 
 // Objective-C symbols
 class ObjCBaseClass;
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index 9a6f5a61c1e2e07564fa7310556a9d9d3fdf241e..abfe4561fe8d0145d73e22a721c2bda085933838 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -410,6 +410,13 @@ public:
         return d;
     }
 
+    QtEnum *newQtEnum(unsigned sourceLocation, const Name *name)
+    {
+        QtEnum *d = new QtEnum(translationUnit, sourceLocation, name);
+        symbols.push_back(d);
+        return d;
+    }
+
     ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name)
     {
         ObjCBaseClass *c = new ObjCBaseClass(translationUnit, sourceLocation, name);
@@ -720,6 +727,9 @@ QtPropertyDeclaration *Control::newQtPropertyDeclaration(unsigned sourceLocation
                                                          const Name *name)
 { return d->newQtPropertyDeclaration(sourceLocation, name); }
 
+QtEnum *Control::newQtEnum(unsigned sourceLocation, const Name *name)
+{ return d->newQtEnum(sourceLocation, name); }
+
 ObjCBaseClass *Control::newObjCBaseClass(unsigned sourceLocation, const Name *name)
 { return d->newObjCBaseClass(sourceLocation, name); }
 
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index 0d3f613d075424a93722fae314335c996c9f9730..3327544d496817ebc3cdcf4ce66e27266f062216 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -161,6 +161,9 @@ public:
     /// Creates a new QtPropertyDeclaration symbol.
     QtPropertyDeclaration *newQtPropertyDeclaration(unsigned sourceLocation, const Name *name = 0);
 
+    /// Creates a new QtEnum symbol.
+    QtEnum *newQtEnum(unsigned sourceLocation, const Name *name = 0);
+
     ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name);
     ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, const Name *name);
 
diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h
index b5bb9ced2867f5e6b2c9034b6cc8d069f1345aec..6d3aa93b508807a5c7e6c283bd7970ef5078adcb 100644
--- a/src/shared/cplusplus/Symbol.h
+++ b/src/shared/cplusplus/Symbol.h
@@ -205,6 +205,9 @@ public:
     /// Returns true if this Symbol is a QtPropertyDeclaration.
     bool isQtPropertyDeclaration() const;
 
+    /// Returns true if this Symbol is a QtEnum.
+    bool isQtEnum() const;
+
     bool isObjCBaseClass() const;
     bool isObjCBaseProtocol() const;
 
@@ -242,6 +245,7 @@ public:
     virtual const BaseClass *asBaseClass() const { return 0; }
     virtual const ForwardClassDeclaration *asForwardClassDeclaration() const { return 0; }
     virtual const QtPropertyDeclaration *asQtPropertyDeclaration() const { return 0; }
+    virtual const QtEnum *asQtEnum() const { return 0; }
     virtual const ObjCBaseClass *asObjCBaseClass() const { return 0; }
     virtual const ObjCBaseProtocol *asObjCBaseProtocol() const { return 0; }
     virtual const ObjCClass *asObjCClass() const { return 0; }
@@ -267,6 +271,7 @@ public:
     virtual BaseClass *asBaseClass() { return 0; }
     virtual ForwardClassDeclaration *asForwardClassDeclaration() { return 0; }
     virtual QtPropertyDeclaration *asQtPropertyDeclaration() { return 0; }
+    virtual QtEnum *asQtEnum() { return 0; }
     virtual ObjCBaseClass *asObjCBaseClass() { return 0; }
     virtual ObjCBaseProtocol *asObjCBaseProtocol() { return 0; }
     virtual ObjCClass *asObjCClass() { return 0; }
diff --git a/src/shared/cplusplus/SymbolVisitor.h b/src/shared/cplusplus/SymbolVisitor.h
index 85959911a36cd3ee3c65ed2a699c2dc6202654b3..874315eb0f8d42d9efe544801f8d6485d89d01f1 100644
--- a/src/shared/cplusplus/SymbolVisitor.h
+++ b/src/shared/cplusplus/SymbolVisitor.h
@@ -89,6 +89,7 @@ public:
 
     // Qt
     virtual bool visit(QtPropertyDeclaration *) { return true; }
+    virtual bool visit(QtEnum *) { return true; }
 
     // Objective-C
     virtual bool visit(ObjCBaseClass *) { return true; }
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index 128c1d258f6e948e6b58e1583b6ce56cfb163b18..c820e39022f83ceb6967e54d28ecaaa681961cbe 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -687,6 +687,7 @@ void Class::visitSymbol0(SymbolVisitor *visitor)
 
 QtPropertyDeclaration::QtPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
     : Symbol(translationUnit, sourceLocation, name)
+    , _flags(NoFlags)
 { }
 
 QtPropertyDeclaration::~QtPropertyDeclaration()
@@ -708,6 +709,20 @@ void QtPropertyDeclaration::visitSymbol0(SymbolVisitor *visitor)
 { visitor->visit(this); }
 
 
+QtEnum::QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
+    : Symbol(translationUnit, sourceLocation, name)
+{ }
+
+QtEnum::~QtEnum()
+{ }
+
+FullySpecifiedType QtEnum::type() const
+{ return FullySpecifiedType(); }
+
+void QtEnum::visitSymbol0(SymbolVisitor *visitor)
+{ visitor->visit(this); }
+
+
 ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
     : Symbol(translationUnit, sourceLocation, name)
 { }
diff --git a/src/shared/cplusplus/Symbols.h b/src/shared/cplusplus/Symbols.h
index 7de9b2249e44170befebcefa1a4f9669f8215415..e4def13bce8b16c745a7215e336a506bb602c2b2 100644
--- a/src/shared/cplusplus/Symbols.h
+++ b/src/shared/cplusplus/Symbols.h
@@ -524,6 +524,7 @@ class CPLUSPLUS_EXPORT QtPropertyDeclaration: public Symbol
 {
 public:
     enum Flag {
+        NoFlags = 0,
         ReadFunction = 1 << 0,
         WriteFunction = 1 << 1,
         ResetFunction = 1 << 2,
@@ -566,6 +567,25 @@ private:
     int _flags;
 };
 
+class CPLUSPLUS_EXPORT QtEnum: public Symbol
+{
+public:
+    QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
+    virtual ~QtEnum();
+
+    // Symbol's interface
+    virtual FullySpecifiedType type() const;
+
+    virtual const QtEnum *asQtEnum() const
+    { return this; }
+
+    virtual QtEnum *asQtEnum()
+    { return this; }
+
+protected:
+    virtual void visitSymbol0(SymbolVisitor *visitor);
+};
+
 class CPLUSPLUS_EXPORT ObjCBaseClass: public Symbol
 {
 public: