Index: src/Virtual/ExpandCasts.cc
===================================================================
--- src/Virtual/ExpandCasts.cc	(revision a5f0529a63fd135c870940242904abe5132d58e6)
+++ src/Virtual/ExpandCasts.cc	(revision e1780a25bb3bcc2a648b6f83ef973a84ff0e7ca4)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jul 24 13:59:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jul 26 14:16:00 2017
-// Update Count     : 0
+// Last Modified On : Tus Aug  2 14:59:00 2017
+// Update Count     : 1
 //
 
@@ -78,5 +78,5 @@
 
 	void VirtualCastCore::premutate( FunctionDecl * functionDecl ) {
-		if ( (! vcast_decl) && functionDecl->get_statements() &&
+		if ( (! vcast_decl) &&
 		     functionDecl->get_name() == "__cfa__virtual_cast" ) {
 			vcast_decl = functionDecl;
@@ -101,16 +101,19 @@
 		assertf( castExpr->get_result(), "Virtual Cast target not found before expansion." );
 
-		//assert( vcast_decl );
+		assert( vcast_decl );
 		assert( pvt_decl );
 
 		// May only cast to a pointer or reference type.
 		// A earlier validation should give a syntax error, this is
-		// just to make sure errors don't creep in.
+		// just to make sure errors don't creep during translation.
+		// Move to helper with more detailed error messages.
 		PointerType * target_type =
 			dynamic_cast<PointerType *>( castExpr->get_result() );
-        assert( target_type );
+		assert( target_type );
 
 		StructInstType * target_struct =
 			dynamic_cast<StructInstType *>( target_type->get_base() );
+		assert( target_struct );
+
 		StructDecl * target_decl = target_struct->get_baseStruct();
 
@@ -124,16 +127,22 @@
 
 		Expression * result = new CastExpr(
-			//new ApplicationExpr( new VariableExpr( vcast_decl ), {
+			//new ApplicationExpr(
+				//new AddressExpr( new VariableExpr( vcast_decl ) ),
+				//new CastExpr( new VariableExpr( vcast_decl ),
+				//	new PointerType( noQualifiers,
+				//		vcast_decl->get_type()->clone()
+				//		)
+				//	),
 			new UntypedExpr( new NameExpr( "__cfa__virtual_cast" ), {
-				new CastExpr(
-					new AddressExpr( new VariableExpr( table ) ),
-					pointer_to_pvt(1)
-					),
-				new CastExpr(
-					castExpr->get_arg(),
-					pointer_to_pvt(2)
-					) }
-				),
-			castExpr->get_result()
+					new CastExpr(
+						new AddressExpr( new VariableExpr( table ) ),
+						pointer_to_pvt(1)
+						),
+					new CastExpr(
+						castExpr->get_arg(),
+						pointer_to_pvt(2)
+						)
+				} ),
+			castExpr->get_result()->clone()
 			);
 
