diff --git a/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java b/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java
index 807dc70..6eb7989 100644
--- a/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java
+++ b/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java
@@ -107,7 +107,7 @@ public class Detector {
     	
     	for (SyntacticGroup group : sentence.getGroups()) {
     		
-    		SyntacticGroup nextGroup = group.getFollowingGroup();
+    		/*SyntacticGroup nextGroup = group.getFollowingGroup();
     		SyntacticGroup nextnextGroup = null;
     		SyntacticGroup nextnextnextGroup = null;
     		if (nextGroup != null) {
@@ -115,9 +115,9 @@ public class Detector {
     			if (nextnextGroup != null) {
     				nextnextnextGroup = nextnextGroup.getFollowingGroup();
     			}
-    		}
+    		}*/
     		
-    		/*if (group.getType().startsWith("NG")) {
+    		if (group.getType().startsWith("NG")) {
 	    		ArrayList<SyntacticGroup> nestedGroups = new ArrayList<SyntacticGroup>();
 	    		nestedGroups.add(group);
 	    		
@@ -127,11 +127,11 @@ public class Detector {
 	    			nextGroup = nextGroup.getFollowingGroup();
 	    		}
 	    		
-	    		Mention mention = create_mention(nestedGroups, valence.get(ValenceDicts.NounsValence));
+	    		Mention mention = createMention(nestedGroups, valence.get(ValenceDicts.NounsValence));
 	    		sentence.addMention(mention);
-    		}*/
+    		}
     		
-    		if (group.getType().startsWith("NG") && nextGroup != null && 
+    		/*if (group.getType().startsWith("NG") && nextGroup != null && 
     				nextnextGroup != null && nextnextnextGroup != null &&
     				quatroCompatibility(group, nextGroup, nextnextGroup, 
     						nextnextnextGroup, valence.get(ValenceDicts.NounsValence))) {
@@ -166,11 +166,11 @@ public class Detector {
                 List<Token> heads = group.getSemanticHeadTokens();
 
                 sentence.addMention(new Mention(segments, heads));
-            }
+            }*/
     	}
     }
     
-    private static boolean isProperSchema(String schema, ArrayList<String> group1Types,
+    /*private static boolean isProperSchema(String schema, ArrayList<String> group1Types,
     		ArrayList<String> group2Types) {
     	for (String group1Type : group1Types) {
     		if (schemaContains(schema, group1Type)) {
@@ -182,7 +182,7 @@ public class Detector {
     		}
     	}
     	return false;
-    }
+    }*/
     
     /*private static boolean isProperSchema(String schema, ArrayList<String> group1Types,
     		ArrayList<String> group2Types) {
@@ -205,7 +205,7 @@ public class Detector {
     	return false;
     }*/
     
-    private static boolean groupsValenceCompatibility(SyntacticGroup NG1,
+    /*private static boolean groupsValenceCompatibility(SyntacticGroup NG1,
     		SyntacticGroup NG2, Sentence sentence, 
     		Map<String,ArrayList<String>> walentyMapping) {
     	Token NG1Head = NG1.getSemanticHeadTokens().get(0);
@@ -295,7 +295,7 @@ public class Detector {
     	return false;
     }
     
-    /*private static boolean isTripleProperSchema(String schema, ArrayList<String> group1Types,
+    private static boolean isTripleProperSchema(String schema, ArrayList<String> group1Types,
     		ArrayList<String> group2Types, ArrayList<String> group3Types) {
     	
     	ArrayList<String> group1MPositions = getMatchingPositions(schema, group1Types);
@@ -319,7 +319,54 @@ public class Detector {
     	return false;
     }*/
     
-    /*private static boolean isProperSchema(String schema, 
+    private static Mention createMention(ArrayList<SyntacticGroup> nestedGroups,
+    		Map<String,ArrayList<String>> walentyNouns) {
+    	
+    	SyntacticGroup initialGroup = nestedGroups.get(0);
+    	String initialGroupHead = initialGroup.getSemanticHeadTokens().get(0).getBase();
+    	
+    	List<Token> heads = initialGroup.getSemanticHeadTokens();
+    	List<Token> segments = new ArrayList<Token>();
+    	
+		if (!walentyNouns.containsKey(initialGroupHead)) {
+            segments.addAll(initialGroup.getTokens());
+		} else {
+			
+			ArrayList<String> schemata = walentyNouns.get(initialGroupHead);
+			ArrayList<ArrayList<String>> groupsRealizations = new ArrayList<ArrayList<String>>();
+			ArrayList<SyntacticGroup> largestMatch = new ArrayList<SyntacticGroup>();
+			largestMatch.add(initialGroup);
+			
+			for (int i=1; i < nestedGroups.size(); i++) {
+				SyntacticGroup group = nestedGroups.get(i);
+				ArrayList<String> realizations = group.getWalentyRealizations();
+				groupsRealizations.add(realizations);
+				if (realizationsMatch(schemata, groupsRealizations)) {
+					largestMatch.add(group);
+				} else {
+					break;
+				}
+			}
+			
+			for (SyntacticGroup group : largestMatch) {
+				segments.addAll(group.getTokens());
+			}
+
+		}
+		return new Mention(segments, heads);
+    }
+    
+    private static boolean realizationsMatch(ArrayList<String> schemata,
+    		ArrayList<ArrayList<String>> groupsRealizations) {
+    	for (String schema : schemata) {
+    		if (isProperSchema(schema, groupsRealizations)) {
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    
+    private static boolean isProperSchema(String schema, 
     		ArrayList<ArrayList<String>> groupsRealizations) {
     	
     	ArrayList<ArrayList<String>> matchingPositions = new ArrayList<ArrayList<String>>();
@@ -328,13 +375,14 @@ public class Detector {
     	}
     	
     	if (matchingPositionsExists(matchingPositions)) {
-    		ArrayList<ArrayList<String>> product = cartesianProduct(matchingPositions);
+    		return true;
+    		/*ArrayList<ArrayList<String>> product = cartesianProduct(matchingPositions);
     		for (ArrayList<String> combination : product) {
     			Set<String> combinationSet = new HashSet<String>(combination);
     			if (combinationSet.size() == matchingPositions.size()) {
     				return true;
     			}
-    		}
+    		}*/
     	}
     	return false;
     }
@@ -381,7 +429,7 @@ public class Detector {
     		}
     	}
     	return positions;
-    }*/
+    }
     
     private static boolean schemaContains(String schema, String phraseType) {
     	for (String position : schema.split("\\s\\+\\s")) {