Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 8f9cc50b091ccf00d76ddcc332e7e31fe53bfaac)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 33a7b6db7e7a3b3fa85ef51cb227fdc43223b1fd)
@@ -218,7 +218,10 @@
 		std::list< Declaration* > members;
 		aggInst->lookup( name, members );
+		TypeSubstitution sub = TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->get_parameters().begin() );
 		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
 			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
+				MemberExpr * memExpr = new MemberExpr( dwt, expr->clone() );
+				sub.apply( memExpr );
+				alternatives.push_back( Alternative( memExpr, env, newCost ) );
 				renameTypes( alternatives.back().expr );
 			} else {
@@ -800,5 +803,4 @@
 		AlternativeFinder funcFinder( indexer, env );
 		funcFinder.findWithAdjustment( memberExpr->get_aggregate() );
-
 		for ( AltList::const_iterator agg = funcFinder.alternatives.begin(); agg != funcFinder.alternatives.end(); ++agg ) {
 			if ( StructInstType *structInst = dynamic_cast< StructInstType* >( agg->expr->get_result() ) ) {
