Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 5f6c42cb45588a8c01434a4cdd21e083c2b29265)
+++ src/SymTab/Mangler.cc	(revision 8360977bb829bdb44991648e6c891fc1e71629ea)
@@ -149,13 +149,39 @@
 	void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) {
 		printQualifiers( refType );
+
 		mangleName << ( refType->get_name().length() + prefix.length() ) << prefix << refType->get_name();
 	}
 
+	void Mangler::mangleGenericRef( ReferenceToType *refType, std::string prefix ) {
+		printQualifiers( refType );
+
+		std::ostringstream oldName( mangleName.str() );
+		mangleName.clear();
+
+		mangleName << prefix << refType->get_name();
+
+		std::list< Expression* >& params = refType->get_parameters();
+		if ( ! params.empty() ) {
+			mangleName << "_";
+			std::list< Type* > paramTypes;
+			for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
+				TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+				assert(paramType && "Aggregate parameters should be type expressions");
+				paramTypes.push_back( paramType->get_type() );
+			}
+			acceptAll( paramTypes, *this );
+			mangleName << "_";
+		}
+
+		oldName << mangleName.str().length() << mangleName.str();
+		mangleName.str( oldName.str() );
+	}
+
 	void Mangler::visit( StructInstType *aggregateUseType ) {
-		mangleRef( aggregateUseType, "s" );
+		mangleGenericRef( aggregateUseType, "s" );
 	}
 
 	void Mangler::visit( UnionInstType *aggregateUseType ) {
-		mangleRef( aggregateUseType, "u" );
+		mangleGenericRef( aggregateUseType, "u" );
 	}
 
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 5f6c42cb45588a8c01434a4cdd21e083c2b29265)
+++ src/SymTab/Mangler.h	(revision 8360977bb829bdb44991648e6c891fc1e71629ea)
@@ -58,4 +58,5 @@
 		void mangleDecl( DeclarationWithType *declaration );
 		void mangleRef( ReferenceToType *refType, std::string prefix );
+		void mangleGenericRef( ReferenceToType *refType, std::string prefix );
   
 		void printQualifiers( Type *type );
