Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/ResolvExpr/CurrentObject.cc	(revision 5805d159c97b83ccde808266f1cab5c762339e93)
@@ -19,4 +19,6 @@
 #include "CurrentObject.h"
 
+#include "Common/Indenter.h"
+
 #include "SynTree/Declaration.h"
 #include "SynTree/Initializer.h"
@@ -45,19 +47,4 @@
 			assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error
 		}
-	}
-
-	struct Indenter {
-		static const int amt = 2;
-		unsigned int indent = 0;
-
-		Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
-		Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
-		Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
-		Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
-		Indenter & operator++() { return *this += 1; }
-		Indenter & operator--() { return *this -= 1; }
-	};
-	std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
-		return out << std::string(indent.indent, ' ');
 	}
 
Index: src/ResolvExpr/CurrentObject.h
===================================================================
--- src/ResolvExpr/CurrentObject.h	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/ResolvExpr/CurrentObject.h	(revision 5805d159c97b83ccde808266f1cab5c762339e93)
@@ -25,4 +25,5 @@
 	class MemberIterator;
 
+	// TODO: memory management of MemberIterators
 	class CurrentObject {
 	public:
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/ResolvExpr/Unify.cc	(revision 5805d159c97b83ccde808266f1cab5c762339e93)
@@ -42,4 +42,5 @@
 		virtual void visit(PointerType *pointerType);
 		virtual void visit(ArrayType *arrayType);
+		virtual void visit(ReferenceType *refType);
 		virtual void visit(FunctionType *functionType);
 		virtual void visit(StructInstType *aggregateUseType);
@@ -428,4 +429,12 @@
 	}
 
+	void Unify::visit(ReferenceType *refType) {
+		if ( ReferenceType *otherRef = dynamic_cast< ReferenceType* >( type2 ) ) {
+			result = unifyExact( refType->get_base(), otherRef->get_base(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
+			markAssertions( haveAssertions, needAssertions, refType );
+			markAssertions( haveAssertions, needAssertions, otherRef );
+		} // if
+	}
+
 	void Unify::visit(ArrayType *arrayType) {
 		ArrayType *otherArray = dynamic_cast< ArrayType* >( type2 );
