diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
index 6262dcebaac2ce2e09300551d64d1e204477dbf6..30a08ea884f9d2900886ecd46b5a34fe765561ad 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
@@ -104,7 +104,7 @@ bool CheckUndefinedSymbols::isType(const QByteArray &name) const
         TemplateDeclarationAST *templateDeclaration = _templateDeclarationStack.at(i);
 
         for (DeclarationListAST *it = templateDeclaration->template_parameters; it; it = it->next) {
-            DeclarationAST *templateParameter = it->declaration;
+            DeclarationAST *templateParameter = it->value;
 
             if (templateParameterName(templateParameter) == name)
                 return true;
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index b05525b8547fbc367ec9d01bb896b3feec851769..0a6b1f16355fcba712dc8f61bd48e1ca396a1e83 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -414,7 +414,7 @@ void Document::check(CheckMode mode)
 
     if (TranslationUnitAST *ast = _translationUnit->ast()->asTranslationUnit()) {
         for (DeclarationListAST *decl = ast->declarations; decl; decl = decl->next) {
-            semantic.check(decl->declaration, globals);
+            semantic.check(decl->value, globals);
         }
     } else if (ExpressionAST *ast = _translationUnit->ast()->asExpression()) {
         semantic.check(ast, globals);
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 18357aee9d6c7cc787b838ee9318b58005b5870c..9cb2d1f7425bd99cebc758171b36b125350f6940 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -552,21 +552,6 @@ unsigned CtorInitializerAST::lastToken() const
     return colon_token + 1;
 }
 
-unsigned DeclarationListAST::firstToken() const
-{
-    return declaration->firstToken();
-}
-
-unsigned DeclarationListAST::lastToken() const
-{
-    for (const DeclarationListAST *it = this; it; it = it->next) {
-        if (! it->next)
-            return it->declaration->lastToken();
-    }
-
-    return 0;
-}
-
 unsigned DeclaratorAST::firstToken() const
 {
     if (attributes)
@@ -1642,7 +1627,7 @@ unsigned TemplateTypeParameterAST::lastToken() const
 
     for (DeclarationListAST *it = template_parameters; it; it = it->next) {
         if (! it->next)
-            return it->declaration->lastToken();
+            return it->value->lastToken();
     }
 
     if (less_token)
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index e10ce1b57ae3bd97a4c2182fe235c5cb8143f0dd..3bc6f8e17461886bf4937616bc59cdb4727b0241 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -362,22 +362,6 @@ public:
     virtual DeclarationAST *asDeclaration() { return this; }
 };
 
-class CPLUSPLUS_EXPORT DeclarationListAST: public AST
-{
-public:
-    DeclarationAST *declaration;
-    DeclarationListAST *next;
-
-public:
-    virtual DeclarationListAST *asDeclarationList() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-};
-
 class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
 {
 public:
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index 7a9f9164d23e2419d5d55f9d92935c6b9758f53e..23578a006bb72489962ece69d1bca0c522a6b976 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -65,14 +65,6 @@ void TypeofSpecifierAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void DeclarationListAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(declaration, visitor);
-    }
-    visitor->endVisit(this);
-}
-
 void DeclaratorAST::accept0(ASTVisitor *visitor)
 {
     if (visitor->visit(this)) {
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index a5281cb50d3c7ef6d694c1e315a9e38f70b43fc8..8ad6d640aa2edc381f29973bd58aedb255b8a8b6 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -228,9 +228,6 @@ public:
     virtual bool visit(ObjCFastEnumerationAST *) { return true; }
     virtual bool visit(ObjCSynchronizedStatementAST *) { return true; }
 
-    virtual bool visit(DeclarationListAST *) { return true; }
-    virtual void endVisit(DeclarationListAST *) { }
-
     virtual void endVisit(AccessDeclarationAST *) { }
     virtual void endVisit(ArrayAccessAST *) { }
     virtual void endVisit(ArrayDeclaratorAST *) { }
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index 1e0cf11ae36bc22d84851641345b70b32d434360..ccc08845c315b75db1c1abee839dc99d980d62ae 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -84,7 +84,6 @@ class CoreDeclaratorAST;
 class CppCastExpressionAST;
 class CtorInitializerAST;
 class DeclarationAST;
-class DeclarationListAST;
 class DeclarationStatementAST;
 class DeclaratorAST;
 class DeclaratorIdAST;
@@ -202,7 +201,7 @@ class UsingDirectiveAST;
 class WhileStatementAST;
 
 typedef List<ExpressionAST *> ExpressionListAST;
-
+typedef List<DeclarationAST *> DeclarationListAST;
 
 } // end of namespace CPlusPlus
 
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 1e7afdd166d93e00550e5ea0eb2d7e3bb5300ea3..eb82e6331f5c2aae8ed96d9b75f5861c6451b1ef 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -363,7 +363,7 @@ bool CheckDeclaration::visit(MemInitializerAST *ast)
 bool CheckDeclaration::visit(LinkageBodyAST *ast)
 {
     for (DeclarationListAST *decl = ast->declarations; decl; decl = decl->next) {
-       semantic()->check(decl->declaration, _scope);
+       semantic()->check(decl->value, _scope);
     }
     return false;
 }
@@ -428,7 +428,7 @@ bool CheckDeclaration::visit(TemplateDeclarationAST *ast)
     Scope *scope = new Scope(_scope->owner());
 
     for (DeclarationListAST *param = ast->template_parameters; param; param = param->next) {
-       semantic()->check(param->declaration, scope);
+       semantic()->check(param->value, scope);
     }
 
     semantic()->check(ast->declaration, _scope,
@@ -547,7 +547,7 @@ bool CheckDeclaration::visit(ObjCProtocolDeclarationAST *ast)
 
     int previousObjCVisibility = semantic()->switchObjCVisibility(Function::Public);
     for (DeclarationListAST *it = ast->member_declarations; it; it = it->next) {
-        semantic()->check(it->declaration, protocol->members());
+        semantic()->check(it->value, protocol->members());
     }
     (void) semantic()->switchObjCVisibility(previousObjCVisibility);
 
@@ -626,14 +626,14 @@ bool CheckDeclaration::visit(ObjCClassDeclarationAST *ast)
 
     if (ast->inst_vars_decl) {
         for (DeclarationListAST *it = ast->inst_vars_decl->instance_variables; it; it = it->next) {
-            semantic()->check(it->declaration, klass->members());
+            semantic()->check(it->value, klass->members());
         }
     }
 
     (void) semantic()->switchObjCVisibility(Function::Public);
 
     for (DeclarationListAST *it = ast->member_declarations; it; it = it->next) {
-        semantic()->check(it->declaration, klass->members());
+        semantic()->check(it->value, klass->members());
     }
 
     (void) semantic()->switchObjCVisibility(previousObjCVisibility);
diff --git a/src/shared/cplusplus/CheckDeclarator.cpp b/src/shared/cplusplus/CheckDeclarator.cpp
index b44c90f955c8f4fa259e44da41296491b1d61330..6fd92458752b75a57d9fdef5a495e39e3e522298 100644
--- a/src/shared/cplusplus/CheckDeclarator.cpp
+++ b/src/shared/cplusplus/CheckDeclarator.cpp
@@ -174,7 +174,7 @@ bool CheckDeclarator::visit(FunctionDeclaratorAST *ast)
     if (ast->parameters) {
         DeclarationListAST *parameter_declarations = ast->parameters->parameter_declarations;
         for (DeclarationListAST *decl = parameter_declarations; decl; decl = decl->next) {
-            semantic()->check(decl->declaration, fun->arguments());
+            semantic()->check(decl->value, fun->arguments());
         }
 
         if (ast->parameters->dot_dot_dot_token)
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index 6baef4682ed3aeae4f8cb45cad26aed33124c395..8c70f153d5272df5c1d5b9c36a366e6bb3aeea3c 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -347,7 +347,7 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast)
     int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
 
     for (DeclarationListAST *member = ast->member_specifiers; member; member = member->next) {
-        semantic()->check(member->declaration, klass->members());
+        semantic()->check(member->value, klass->members());
     }
 
     (void) semantic()->switchMethodKey(previousMethodKey);
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index f86ee1a976d9a6504151e09f6aabce03cda03a98..76c374d93f5053849edd094022c70a8986d6bf49 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -435,7 +435,7 @@ bool Parser::parseTranslationUnit(TranslationUnitAST *&node)
 
         if (parseDeclaration(declaration)) {
             *decl = new (_pool) DeclarationListAST;
-            (*decl)->declaration = declaration;
+            (*decl)->value = declaration;
             decl = &(*decl)->next;
         } else {
             rewind(start_declaration + 1);
@@ -562,7 +562,7 @@ bool Parser::parseLinkageBody(DeclarationAST *&node)
             DeclarationAST *declaration = 0;
             if (parseDeclaration(declaration)) {
                 *declaration_ptr = new (_pool) DeclarationListAST;
-                (*declaration_ptr)->declaration = declaration;
+                (*declaration_ptr)->value = declaration;
                 declaration_ptr = &(*declaration_ptr)->next;
             } else {
                 rewind(start_declaration + 1);
@@ -1340,7 +1340,7 @@ bool Parser::parseTemplateParameterList(DeclarationListAST *&node)
     DeclarationAST *declaration = 0;
     if (parseTemplateParameter(declaration)) {
         *template_parameter_ptr = new (_pool) DeclarationListAST;
-        (*template_parameter_ptr)->declaration = declaration;
+        (*template_parameter_ptr)->value = declaration;
         template_parameter_ptr = &(*template_parameter_ptr)->next;
 
         while (LA() == T_COMMA) {
@@ -1349,7 +1349,7 @@ bool Parser::parseTemplateParameterList(DeclarationListAST *&node)
             declaration = 0;
             if (parseTemplateParameter(declaration)) {
                 *template_parameter_ptr = new (_pool) DeclarationListAST;
-                (*template_parameter_ptr)->declaration = declaration;
+                (*template_parameter_ptr)->value = declaration;
                 template_parameter_ptr = &(*template_parameter_ptr)->next;
             }
         }
@@ -1480,7 +1480,7 @@ bool Parser::parseParameterDeclarationList(DeclarationListAST *&node)
     DeclarationAST *declaration = 0;
     if (parseParameterDeclaration(declaration)) {
         *parameter_declaration_ptr = new (_pool) DeclarationListAST;
-        (*parameter_declaration_ptr)->declaration = declaration;
+        (*parameter_declaration_ptr)->value = declaration;
         parameter_declaration_ptr = &(*parameter_declaration_ptr)->next;
         while (LA() == T_COMMA) {
             consumeToken();
@@ -1491,7 +1491,7 @@ bool Parser::parseParameterDeclarationList(DeclarationListAST *&node)
             declaration = 0;
             if (parseParameterDeclaration(declaration)) {
                 *parameter_declaration_ptr = new (_pool) DeclarationListAST;
-                (*parameter_declaration_ptr)->declaration = declaration;
+                (*parameter_declaration_ptr)->value = declaration;
                 parameter_declaration_ptr = &(*parameter_declaration_ptr)->next;
             }
         }
@@ -1587,7 +1587,7 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
             DeclarationAST *declaration = 0;
             if (parseMemberSpecification(declaration)) {
                 *declaration_ptr = new (_pool) DeclarationListAST;
-                (*declaration_ptr)->declaration = declaration;
+                (*declaration_ptr)->value = declaration;
                 declaration_ptr = &(*declaration_ptr)->next;
             } else {
                 rewind(start_declaration + 1);
@@ -4380,7 +4380,7 @@ bool Parser::parseObjCInterface(DeclarationAST *&node,
         DeclarationAST *declaration = 0;
         while (parseObjCInterfaceMemberDeclaration(declaration)) {
             *nextMembers = new (_pool) DeclarationListAST;
-            (*nextMembers)->declaration = declaration;
+            (*nextMembers)->value = declaration;
             nextMembers = &((*nextMembers)->next);
         }
 
@@ -4411,7 +4411,7 @@ bool Parser::parseObjCInterface(DeclarationAST *&node,
         DeclarationAST *declaration = 0;
         while (parseObjCInterfaceMemberDeclaration(declaration)) {
             *nextMembers = new (_pool) DeclarationListAST;
-            (*nextMembers)->declaration = declaration;
+            (*nextMembers)->value = declaration;
             nextMembers = &((*nextMembers)->next);
         }
 
@@ -4482,7 +4482,7 @@ bool Parser::parseObjCProtocol(DeclarationAST *&node,
         DeclarationAST *declaration = 0;
         while (parseObjCInterfaceMemberDeclaration(declaration)) {
             *nextMembers = new (_pool) DeclarationListAST;
-            (*nextMembers)->declaration = declaration;
+            (*nextMembers)->value = declaration;
             nextMembers = &((*nextMembers)->next);
         }
 
@@ -4650,7 +4650,7 @@ bool Parser::parseObjCMethodDefinitionList(DeclarationListAST *&node)
 
         if (declaration) {
             *next = new (_pool) DeclarationListAST;
-            (*next)->declaration = declaration;
+            (*next)->value = declaration;
             next = &((*next)->next);
         }
     }
@@ -4738,7 +4738,7 @@ bool Parser::parseObjClassInstanceVariables(ObjCInstanceVariablesDeclarationAST
         const unsigned start = cursor();
 
         *next = new (_pool) DeclarationListAST;
-        parseObjCInstanceVariableDeclaration((*next)->declaration);
+        parseObjCInstanceVariableDeclaration((*next)->value);
 
         if (start == cursor()) {
             // skip stray token.
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index 24fbe7865faacf5ef3d50fb81f9828bb7d6ed878..ea6d196889a85f89ae6bb3e148b6c94ed83a074d 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -497,12 +497,12 @@ void tst_AST::cpp_initializer_or_function_declaration()
     QCOMPARE(param_clause->dot_dot_dot_token, 0U);
 
     // check the parameter
-    DeclarationListAST *declarations = param_clause->parameter_declarations->asDeclarationList();
+    DeclarationListAST *declarations = param_clause->parameter_declarations;
     QVERIFY(declarations);
-    QVERIFY(declarations->declaration);
+    QVERIFY(declarations->value);
     QVERIFY(! declarations->next);
 
-    ParameterDeclarationAST *param = declarations->declaration->asParameterDeclaration();
+    ParameterDeclarationAST *param = declarations->value->asParameterDeclaration();
     QVERIFY(param);
     QVERIFY(param->type_specifier != 0);
     QVERIFY(param->type_specifier->next == 0);
diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index 6da954ae92fceceeed6bd2c676c7c12a806ebdf2..3cacddb7952cac4ba12b3072b065c3e8cd8e08f8 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -59,7 +59,7 @@ public:
             TranslationUnitAST *ast = unit->ast()->asTranslationUnit();
             QVERIFY(ast);
             for (DeclarationListAST *decl = ast->declarations; decl; decl = decl->next) {
-                sem.check(decl->declaration, globals);
+                sem.check(decl->value, globals);
             }
         }