Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 97e32964dc1e5125b35bd5db0234e6b6f272fe14)
+++ src/Concurrency/Keywords.cc	(revision 6b224a52e644258a65fc4b1af5b45c5d9c835149)
@@ -21,5 +21,6 @@
 #include "Common/SemanticError.h"  // for SemanticError
 #include "Common/utility.h"        // for deleteAll, map_range
-#include "InitTweak/InitTweak.h"   // for isConstructor
+#include "CodeGen/OperatorTable.h" // for isConstructor
+#include "InitTweak/InitTweak.h"   // for getPointerBase
 #include "Parser/LinkageSpec.h"    // for Cforall
 #include "SymTab/AddVisit.h"       // for acceptAndAdd
@@ -298,5 +299,5 @@
 			LinkageSpec::Cforall,
 			nullptr,
-			new PointerType(
+			new ReferenceType(
 				noQualifiers,
 				new StructInstType(
@@ -455,10 +456,11 @@
 
 		//Makes sure it's not a copy
-		PointerType* pty = dynamic_cast< PointerType * >( ty );
-		if( ! pty ) throw SemanticError( "Mutex argument must be of pointer/reference type ", arg );
+		ReferenceType* rty = dynamic_cast< ReferenceType * >( ty );
+		if( ! rty ) throw SemanticError( "Mutex argument must be of reference type ", arg );
 
 		//Make sure the we are pointing directly to a type
-		Type* base = pty->get_base();
-		if(  dynamic_cast< PointerType * >( base ) ) throw SemanticError( "Mutex argument have exactly one level of indirection ", arg );
+		Type* base = rty->get_base();
+		if( dynamic_cast< ReferenceType * >( base ) ) throw SemanticError( "Mutex argument have exactly one level of indirection ", arg );
+		if( dynamic_cast< PointerType * >( base ) ) throw SemanticError( "Mutex argument have exactly one level of indirection ", arg );
 
 		//Make sure that typed isn't mutex
@@ -533,10 +535,8 @@
 		Visitor::visit(decl);
 
-		if( ! InitTweak::isConstructor(decl->get_name()) ) return;
+		if( ! CodeGen::isConstructor(decl->get_name()) ) return;
 
 		DeclarationWithType * param = decl->get_functionType()->get_parameters().front();
-		auto ptr = dynamic_cast< PointerType * >( param->get_type() );
-		// if( ptr ) std::cerr << "FRED1" << std::endl;
-		auto type  = dynamic_cast< StructInstType * >( ptr->get_base() );
+		auto type  = dynamic_cast< StructInstType * >( InitTweak::getPointerBase( param->get_type() ) );
 		// if( type ) std::cerr << "FRED2" << std::endl;
 		if( type && type->get_baseStruct()->is_thread() ) {
