Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision c470ada0207d9011922938be7cbc87f706da5ed5)
+++ src/ResolvExpr/ConversionCost.cc	(revision 6e027d61b848988e72496c09044d2767a30b666d)
@@ -92,5 +92,5 @@
 
 	Cost convertToReferenceCost( Type * src, Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
-		PRINT( std::cerr << "convert to reference cost... diff " << diff << std::endl; )
+		PRINT( std::cerr << "convert to reference cost... diff " << diff << " " << src << " / " << dest << std::endl; )
 		if ( diff > 0 ) {
 			// TODO: document this
@@ -108,6 +108,15 @@
 			if ( srcAsRef && destAsRef ) { // pointer-like conversions between references
 				PRINT( std::cerr << "converting between references" << std::endl; )
-				if ( srcAsRef->get_base()->get_qualifiers() <= destAsRef->get_base()->get_qualifiers() && typesCompatibleIgnoreQualifiers( srcAsRef->get_base(), destAsRef->get_base(), indexer, env ) ) {
-					return Cost::safe;
+				Type::Qualifiers tq1 = srcAsRef->get_base()->get_qualifiers();
+				Type::Qualifiers tq2 = destAsRef->get_base()->get_qualifiers();
+				if ( tq1 <= tq2 && typesCompatibleIgnoreQualifiers( srcAsRef->get_base(), destAsRef->get_base(), indexer, env ) ) {
+					PRINT( std::cerr << " :: compatible and good qualifiers" << std::endl; )
+					if ( tq1 == tq2 ) {
+						// types are the same
+						return Cost::zero;
+					} else {
+						// types are the same, except otherPointer has more qualifiers
+						return Cost::safe;
+					}
 				} else {  // xxx - this discards reference qualifiers from consideration -- reducing qualifiers is a safe conversion; is this right?
 					int assignResult = func( srcAsRef->get_base(), destAsRef->get_base(), env, indexer );
@@ -271,8 +280,9 @@
 	void ConversionCost::visit( PointerType * pointerType ) {
 		if ( PointerType *destAsPtr = dynamic_cast< PointerType* >( dest ) ) {
-			PRINT( std::cerr << pointerType << " ===> " << destAsPtr; )
+			PRINT( std::cerr << pointerType << " ===> " << destAsPtr << std::endl; )
 			Type::Qualifiers tq1 = pointerType->get_base()->get_qualifiers();
 			Type::Qualifiers tq2 = destAsPtr->get_base()->get_qualifiers();
 			if ( tq1 <= tq2 && typesCompatibleIgnoreQualifiers( pointerType->get_base(), destAsPtr->get_base(), indexer, env ) ) {
+				PRINT( std::cerr << " :: compatible and good qualifiers" << std::endl; )
 				if ( tq1 == tq2 ) {
 					// types are the same
@@ -280,5 +290,4 @@
 				} else {
 					// types are the same, except otherPointer has more qualifiers
-					PRINT( std::cerr << " :: compatible and good qualifiers" << std::endl; )
 					cost = Cost::safe;
 				}
