Index: /ModelExtender/src/de/uni_hildesheim/sse/model_extender/convert/ModelExtender.java
===================================================================
--- /ModelExtender/src/de/uni_hildesheim/sse/model_extender/convert/ModelExtender.java	(revision 200)
+++ /ModelExtender/src/de/uni_hildesheim/sse/model_extender/convert/ModelExtender.java	(revision 201)
@@ -136,86 +136,101 @@
         if (!additionalVariableMatcher.matches()) {
             System.err.println("Found invalid variable name: " + additionalVariable.getName());
+        } else {
+            List<AbstractVariable> variablesWithSameBasename
+                = findAllVaraiblesWithBaseName(additionalVariableMatcher.group(1));
+            
+            
+            String op1 = null;
+            int val1 = 0;
+            try {
+                op1 = additionalVariableMatcher.group(2);
+                val1 = Integer.parseInt(additionalVariableMatcher.group(3));
+            } catch (NumberFormatException e) {
+                op1 = null;
+            }
+            
+            if (op1 == null) {
+                System.err.println("Warning: adding completly new variable: " + additionalVariable.getName());
+                return;
+            }
+            
+            for (AbstractVariable variableWithSameBaseName : variablesWithSameBasename) {
+                if (variableWithSameBaseName.equals(additionalVariable)) {
+                    continue;
+                }
+                
+                addAdditionalConstraints(additionalVariable, variableWithSameBaseName, op1, val1);
+            }
+        }
+    }
+    
+    /**
+     * Adds additional needed variables for the new variable that contains a >, < or = in combination
+     * with the already existing variable that contains a >, < or =.
+     * 
+     * @param additionalVariable The variable that gets added to the model.
+     * @param variableWithSameBaseName The already existing variable.
+     * @param op1 The operator of additionalVariable, must be <, >, =, <= or >=.
+     * @param val1 The value behind the operator of additionalVariable.
+     */
+    private void addAdditionalConstraints(AbstractVariable additionalVariable,
+            AbstractVariable variableWithSameBaseName, String op1, int val1) {
+        
+        Matcher varMatcher = VARIABLE_PATTERN.matcher(variableWithSameBaseName.getName());
+        
+        if (!varMatcher.matches()) {
+            System.err.println("Found invalid variable name: " + variableWithSameBaseName.getName());
             return;
         }
-        List<AbstractVariable> variablesWithSameBasename
-            = findAllVaraiblesWithBaseName(additionalVariableMatcher.group(1));
-        
-        
-        String op1 = null;
-        int val1 = 0;
+        
+        Variable additional = varPool.obtainVariable(additionalVariable);
+        Variable original = varPool.obtainVariable(variableWithSameBaseName);
+        OCLFeatureCall notAdditional = new OCLFeatureCall(additional, OclKeyWords.NOT);
+        OCLFeatureCall notOriginal = new OCLFeatureCall(original, OclKeyWords.NOT);
         try {
-            op1 = additionalVariableMatcher.group(2);
-            val1 = Integer.parseInt(additionalVariableMatcher.group(3));
+            String op2 = varMatcher.group(2);
+            int val2 = Integer.parseInt(varMatcher.group(3));
+            
+            switch (intersect(op1, val1, op2, val2)) {
+            case NONE:
+                // additional -> !original AND original -> !additional
+                // = additional XOR original
+                // = (!additional OR !original) AND (additional OR original)
+                addConstraint(new OCLFeatureCall(notAdditional, OclKeyWords.OR, notOriginal));
+                addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, original));
+                break;
+                
+            case ONE_IS_SUPERSET_OF_TWO:
+                // additional is superset of original
+                // original -> additional
+                // = additional OR !original
+                addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, notOriginal));
+                break;
+                
+            case TWO_IS_SUPERSET_OF_ONE:
+                // original is superset of additional
+                // additional -> original
+                // = original OR !additional
+                addConstraint(new OCLFeatureCall(original, OclKeyWords.OR, notAdditional));
+                break;
+                
+            case INTERSECT:
+                // No constraints here
+                break;
+                
+            case EQUAL:
+                // additional = original
+                // = additional -> original AND original -> additional
+                // = original OR !additional AND additional OR !original
+                addConstraint(new OCLFeatureCall(original, OclKeyWords.OR, notAdditional));
+                addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, notOriginal));
+                break;
+                
+            default:
+                // Why does checkstyle want a default here?!    
+            }
+            
         } catch (NumberFormatException e) {
-            op1 = null;
-        }
-        
-        if (op1 == null) {
-            System.err.println("Warning: adding completly new variable: " + additionalVariable.getName());
-            return;
-        }
-        
-        for (AbstractVariable variableWithSameBaseName : variablesWithSameBasename) {
-            if (variableWithSameBaseName.equals(additionalVariable)) {
-                continue;
-            }
-            
-            Matcher varMatcher = VARIABLE_PATTERN.matcher(variableWithSameBaseName.getName());
-            
-            if (!varMatcher.matches()) {
-                System.err.println("Found invalid variable name: " + variableWithSameBaseName.getName());
-                continue;
-            }
-            
-            Variable additional = varPool.obtainVariable(additionalVariable);
-            Variable original = varPool.obtainVariable(variableWithSameBaseName);
-            OCLFeatureCall notAdditional = new OCLFeatureCall(additional, OclKeyWords.NOT);
-            OCLFeatureCall notOriginal = new OCLFeatureCall(original, OclKeyWords.NOT);
-            try {
-                String op2 = varMatcher.group(2);
-                int val2 = Integer.parseInt(varMatcher.group(3));
-                
-                switch (intersect(op1, val1, op2, val2)) {
-                case NONE:
-                    // additional -> !original AND original -> !additional
-                    // = additional XOR original
-                    // = (!additional OR !original) AND (additional OR original)
-                    addConstraint(new OCLFeatureCall(notAdditional, OclKeyWords.OR, notOriginal));
-                    addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, original));
-                    break;
-                    
-                case ONE_IS_SUPERSET_OF_TWO:
-                    // additional is superset of original
-                    // original -> additional
-                    // = additional OR !original
-                    addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, notOriginal));
-                    break;
-                    
-                case TWO_IS_SUPERSET_OF_ONE:
-                    // original is superset of additional
-                    // additional -> original
-                    // = original OR !additional
-                    addConstraint(new OCLFeatureCall(original, OclKeyWords.OR, notAdditional));
-                    break;
-                    
-                case INTERSECT:
-                    // No constraints here
-                    break;
-                    
-                case EQUAL:
-                    // additional = original
-                    // = additional -> original AND original -> additional
-                    // = original OR !additional AND additional OR !original
-                    addConstraint(new OCLFeatureCall(original, OclKeyWords.OR, notAdditional));
-                    addConstraint(new OCLFeatureCall(additional, OclKeyWords.OR, notOriginal));
-                    break;
-                    
-                default:
-                    // Why does checkstyle want a default here?!    
-                }
-                
-            } catch (NumberFormatException e) {
-                // ignore, probably '=n' or so
-            }
+            // ignore, probably '=n' or so
         }
     }
@@ -276,31 +291,28 @@
         }
         
-        if (op1.equals("=") && op2.equals("=")) {
-            if (val1 == val2) {
-                result = IntersectionType.EQUAL;
-            } else {
-                result = IntersectionType.NONE;
-            }
-            
-        /*
-         * op1: '='
-         */
-        } else if (op1.equals("=") && op2.equals(">")) {
-            if (val1 > val2) {
-                result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
-            } else {
-                result = IntersectionType.NONE;
-            }
-        } else if (op1.equals("=") && op2.equals("<")) {
-            if (val1 < val2) {
-                result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
-            } else {
-                result = IntersectionType.NONE;
-            }
-        
-        /*
-         * op2: '='
-         */
-        } else if (op2.equals("=") && op1.equals(">")) {
+        if (op1.equals("=")) {
+            result = handleOp1Equals(val1, op2, val2);
+        } else if (op1.equals("<")) {
+            result = handleOp1Lower(val1, op2, val2);
+        } else if (op1.equals(">")) {
+            result = handleOp1Greater(val1, op2, val2);
+        } else {
+            System.err.println("Unkown operator: " + op1);
+        }
+        
+        return result;
+    }
+
+    /**
+     * Handles the case in {@link ModelExtender#intersect(String, int, String, int)} when OP1 is >.
+     * 
+     * @param val1 The value for the first operator.
+     * @param op2 The second operator; must be "=", "<", ">", "<=" or ">=".
+     * @param val2 The value for the second operator.
+     * @return The way the two intervals intersect.
+     */
+    private IntersectionType handleOp1Greater(int val1, String op2, int val2) {
+        IntersectionType result = null;
+        if (op2.equals("=")) {
             if (val1 < val2) {
                 result = IntersectionType.ONE_IS_SUPERSET_OF_TWO;
@@ -308,15 +320,5 @@
                 result = IntersectionType.NONE;
             }
-        } else if (op2.equals("=") && op1.equals("<")) {
-            if (val1 > val2) {
-                result = IntersectionType.ONE_IS_SUPERSET_OF_TWO;
-            } else {
-                result = IntersectionType.NONE;
-            }
-            
-        /*
-         * < and >
-         */
-        } else if (op1.equals(">") && op2.equals(">")) {
+        } else if (op2.equals(">")) {
             if (val1 < val2) {
                 result = IntersectionType.ONE_IS_SUPERSET_OF_TWO;
@@ -326,6 +328,33 @@
                 result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
             }
-            
-        } else if (op1.equals("<") && op2.equals("<")) {
+        } else if (op2.equals("<")) {
+            if (val1 + 1 <= val2 - 1) {
+                result = IntersectionType.INTERSECT;
+            } else {
+                result = IntersectionType.NONE;
+            }
+        } else {
+            System.err.println("Unkown operator: " + op2);
+        }
+        return result;
+    }
+
+    /**
+     * Handles the case in {@link ModelExtender#intersect(String, int, String, int)} when OP1 is <.
+     * 
+     * @param val1 The value for the first operator.
+     * @param op2 The second operator; must be "=", "<", ">", "<=" or ">=".
+     * @param val2 The value for the second operator.
+     * @return The way the two intervals intersect.
+     */
+    private IntersectionType handleOp1Lower(int val1, String op2, int val2) {
+        IntersectionType result = null;
+        if (op2.equals("=")) {
+            if (val1 > val2) {
+                result = IntersectionType.ONE_IS_SUPERSET_OF_TWO;
+            } else {
+                result = IntersectionType.NONE;
+            }
+        } else if (op2.equals("<")) {
             if (val1 > val2) {
                 result = IntersectionType.ONE_IS_SUPERSET_OF_TWO;
@@ -335,6 +364,5 @@
                 result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
             }
-            
-        } else if (op1.equals("<") && op2.equals(">")) {
+        } else if (op2.equals(">")) {
             if (val1 - 1 >= val2 + 1) {
                 result = IntersectionType.INTERSECT;
@@ -342,16 +370,41 @@
                 result = IntersectionType.NONE;
             }
-            
-        } else if (op1.equals(">") && op2.equals("<")) {
-            if (val1 + 1 <= val2 - 1) {
-                result = IntersectionType.INTERSECT;
-            } else {
-                result = IntersectionType.NONE;
-            }
-        
         } else {
-            System.err.println("Unkown operator: " + op1 + " or " + op2);
-        }
-        
+            System.err.println("Unkown operator: " + op2);
+        }
+        return result;
+    }
+
+    /**
+     * Handles the case in {@link ModelExtender#intersect(String, int, String, int)} when OP1 is =.
+     * 
+     * @param val1 The value for the first operator.
+     * @param op2 The second operator; must be "=", "<", ">", "<=" or ">=".
+     * @param val2 The value for the second operator.
+     * @return The way the two intervals intersect.
+     */
+    private IntersectionType handleOp1Equals(int val1, String op2, int val2) {
+        IntersectionType result = null;
+        if (op2.equals("=")) {
+            if (val1 == val2) {
+                result = IntersectionType.EQUAL;
+            } else {
+                result = IntersectionType.NONE;
+            }
+        } else if (op2.equals(">")) {
+            if (val1 > val2) {
+                result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
+            } else {
+                result = IntersectionType.NONE;
+            }
+        } else if (op2.equals("<")) {
+            if (val1 < val2) {
+                result = IntersectionType.TWO_IS_SUPERSET_OF_ONE;
+            } else {
+                result = IntersectionType.NONE;
+            }
+        } else {
+            System.err.println("Unkown operator: " + op2);
+        }
         return result;
     }
