Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SynTree/Mutator.h	(revision c5d7701933b319f37bdfd125567ff5ffc52d83ef)
@@ -101,4 +101,5 @@
 	virtual Type * mutate( ArrayType * arrayType ) = 0;
 	virtual Type * mutate( ReferenceType * refType ) = 0;
+	virtual Type * mutate( QualifiedType * qualType ) = 0;
 	virtual Type * mutate( FunctionType * functionType ) = 0;
 	virtual Type * mutate( StructInstType * aggregateUseType ) = 0;
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SynTree/SynTree.h	(revision c5d7701933b319f37bdfd125567ff5ffc52d83ef)
@@ -110,4 +110,5 @@
 class ArrayType;
 class ReferenceType;
+class QualifiedType;
 class FunctionType;
 class ReferenceToType;
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SynTree/Type.cc	(revision c5d7701933b319f37bdfd125567ff5ffc52d83ef)
@@ -105,4 +105,23 @@
 }
 
+
+QualifiedType::QualifiedType( const Type::Qualifiers & tq, const std::list< Type * > & types ) : Type( tq, {} ), types( types ) {
+}
+
+QualifiedType::QualifiedType( const QualifiedType & other ) : Type( other ) {
+	cloneAll( other.types, types );
+}
+
+QualifiedType::~QualifiedType() {
+	deleteAll( types );
+}
+
+void QualifiedType::print( std::ostream & os, Indenter indent ) const {
+	os << "Qualified Type: ";
+	printAll( types, os, indent+1 );
+	Type::print( os, indent+1 );
+}
+
+
 // Empty Variable declarations:
 const Type::FuncSpecifiers noFuncSpecifiers;
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SynTree/Type.h	(revision c5d7701933b319f37bdfd125567ff5ffc52d83ef)
@@ -315,4 +315,18 @@
 };
 
+class QualifiedType : public Type {
+public:
+	std::list<Type *> types;
+
+	QualifiedType( const Type::Qualifiers & tq, const std::list< Type * > & types );
+	QualifiedType( const QualifiedType & tq );
+	virtual ~QualifiedType();
+
+	virtual QualifiedType *clone() const override { return new QualifiedType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
+};
+
 class ReferenceType : public Type {
 public:
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SynTree/Visitor.h	(revision c5d7701933b319f37bdfd125567ff5ffc52d83ef)
@@ -103,4 +103,5 @@
 	virtual void visit( ArrayType * arrayType ) = 0;
 	virtual void visit( ReferenceType * refType ) = 0;
+	virtual void visit( QualifiedType * qualType ) = 0;
 	virtual void visit( FunctionType * functionType ) = 0;
 	virtual void visit( StructInstType * aggregateUseType ) = 0;
