diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/serializer/analysis/SerializationContext.java b/org.eclipse.xtext/src/org/eclipse/xtext/serializer/analysis/SerializationContext.java
index <HASH>..<HASH> 100644
--- a/org.eclipse.xtext/src/org/eclipse/xtext/serializer/analysis/SerializationContext.java
+++ b/org.eclipse.xtext/src/org/eclipse/xtext/serializer/analysis/SerializationContext.java
@@ -363,13 +363,13 @@ public abstract class SerializationContext implements ISerializationContext {
 		EClass type = getType();
 		int result = 1;
 		if (rule != null)
-			result *= rule.hashCode();
+			result = 31 * result + rule.hashCode();
 		if (action != null)
-			result *= action.hashCode() * 7;
+			result = 31 * result + action.hashCode();
 		if (type != null)
-			result *= type.hashCode() * 19;
+			result = 31 * result + type.hashCode();
 		if (parameterValues != null)
-			result *= parameterValues.hashCode() * 31;
+			result = 31 * result + parameterValues.hashCode();
 		return result;
 	}
[serializer/performance] fixed broken hashCode() function

'parameterValues' was usually emptySet() 
so parameterValues.hashCode() returned 0 
which caused this hashCode() method to return 0

nothing but collisions when used as key in maps! duh!