[577546] Identify dodgy downcasts
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtm2qvts/MappingAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtm2qvts/MappingAnalysis.java
index 5679fcb..4d56785 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtm2qvts/MappingAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtm2qvts/MappingAnalysis.java
@@ -193,6 +193,7 @@
 			// propertyType;//environmentFactory.getCompleteModel().getCompleteClass(propertyType);
 			if (!QVTscheduleUtil.conformsToClassOrBehavioralClass(valueClassDatum, targetCompleteClass)) { // Allow value to be physical or behavioral
 				if (!QVTscheduleUtil.conformsToClassOrBehavioralClass(valueClassDatum, targetCompleteClass)) { // Allow value to be physical or behavioral
+					// See Bug 577546 where this is a dodgy downcast case.
 					// FIXME we could synthesize a cast, but it's easier to do oclAsType() in QVTm
 					// if
 					// (!valueCompleteClass.conformsTo(targetCompleteClass.getBehavioralClass())
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtschedule/src/org/eclipse/qvtd/pivot/qvtschedule/utilities/QVTscheduleUtil.java b/plugins/org.eclipse.qvtd.pivot.qvtschedule/src/org/eclipse/qvtd/pivot/qvtschedule/utilities/QVTscheduleUtil.java
index 153137e..8a36a58 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtschedule/src/org/eclipse/qvtd/pivot/qvtschedule/utilities/QVTscheduleUtil.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtschedule/src/org/eclipse/qvtd/pivot/qvtschedule/utilities/QVTscheduleUtil.java
@@ -197,7 +197,15 @@
 	}
 
 	public static boolean conformsToClassOrBehavioralClass(@NonNull CompleteClass thisCompleteClass, @NonNull CompleteClass thatCompleteClass) {
-		return thisCompleteClass.conformsTo(thatCompleteClass) || thisCompleteClass.conformsTo(thatCompleteClass.getBehavioralClass());
+		if (thisCompleteClass.conformsTo(thatCompleteClass)) {
+			return true;
+		}
+		org.eclipse.ocl.pivot.Class behavioralClass = thatCompleteClass.getBehavioralClass();
+		if (behavioralClass == null) {
+			return false;
+		}
+		// See Bug 577546 (and Bug 574431) This is a dodgy downcast case.
+		return thisCompleteClass.conformsTo(behavioralClass);
 	}
 
 	public static boolean conformsToClassOrBehavioralClass(@NonNull ClassDatum thisClassDatum, @NonNull CompleteClass thatCompleteClass) {