diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index 1485cea1ac700a64c0407d509833ec98ae793d72..67d0c68c4b2f70749336b75841028de3bcb4efb2 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -180,17 +180,21 @@ aspect GenRewrites {
 		// crasch from NullPointerException. Children should be filled
 		// in from rewrites instead
 		Restrictions restr = getRestrictions();
+		pStream.println(ind(3)+"List l;");
 		for (int i=0; i<restr.getNumOwlRestriction(); i++) {
 			OwlRestriction r = restr.getOwlRestriction(i);
+			pStream.println(ind(3)+"l = new List();");
+			pStream.println(ind(3)+"for (int i=0; i<getNumElement(); i++) {");
+			pStream.println(ind(4)+"if (getElement(i) instanceof "+r.name()+") {");
+			pStream.println(ind(5)+"l.add(getElement(i));");
+			pStream.println(ind(4)+"}");
+			pStream.println(ind(3)+"}");
 			if (r.allValuesFrom()) {
-				pStream.println(ind(3)+"node.set"+r.name()+"List(new List());");
-// 				pStream.println(ind(3)+"node.set"+r.name().substring(0,1).toLowerCase()+
-// 								r.name().substring(1)+"List(new List());");
+				pStream.println(ind(3)+"node.set"+r.name()+"List(l);");
+// 				pStream.println(ind(3)+"node.set"+r.name()+"List(new List());");
 			} else {
 				pStream.println(ind(3)+r.name()+" c"+ix+" = new "+r.name()+"();");
 				pStream.println(ind(3)+"node.set"+r.name()+"(c"+(ix++)+");");
-// 				pStream.println(ind(3)+"node.set"+r.name().substring(0,1).toLowerCase()+
-// 								r.name().substring(1)+"(c"+(ix++)+");");
 			}
 		}
 		pStream.println(ind(3)+"return node;");
@@ -200,107 +204,6 @@ aspect GenRewrites {
 
 }
 
-// JavaCC grammar is not generated, but hand-written  as general as is possible
-
-// aspect JavaCCGen {
-
-// 	public void ASTNode.genJavaCC(PrintStream pStream) {
-// 		for (int i=0; i<getNumChild(); i++) {
-// 			getChild(i).genAbsGrammar(pStream);
-// 		}		
-// 	}
-
-// 	public void Start.genJavaCC(PrintStream pStream) {
-// 		genJavaCCHeader(pStream);
-// 		pStream.println();
-// 		genTokenDefs(pStream);
-// 		pStream.println();
-// 		genJavaCCLiterals(pStream);
-// 		pStream.println();
-// 		genJavaCCIdentifiers(pStream);
-// 		pStream.println();
-// 		genJavaCCSeparators(pStream);
-// 		pStream.println();
-// 		genJavaCCOperators(pStream);
-// 		pStream.println();
-
-// 		// OK, so now it's time to start generating some real grammar
-// 		// productions.
-// 		genJavaCCGrammar(pStream);
-// 	}
-
-// 	void ASTNode.genTokenDefs(PrintStream pStream) {
-// 		for (int i=0; i<getNumChild(); i++) {
-// 			getChild(i).genTokenDefs(pStream);
-// 		}		
-// 	}
-
-// 	void Start.genTokenDefs(PrintStream pStream) {
-// 		pStream.println("<DEFAULT, BOUNDS> TOKEN : /* RESERVED WORDS */");
-// 		pStream.println("{");
-// 		pStream.println("  <XML \t : \"xml\" >");
-// 		super.genTokenDefs(pStream);
-// 		pStream.println("}");
-// 		pStream.println();
-// 	}
-
-// 	void OwlClassDecl.genTokenDefs(PrintStream pStream) {
-// 		pStream.println(" |<"+getId().toUpperCase()+" \t : \""+getId()+"\">");
-// 	}
-
-// 	void ASTNode.genJavaCCGrammar(PrintStream pStream) {
-// 		for (int i=0; i<getNumChild(); i++) {
-// 			getChild(i).genJavaCCGrammar(pStream);
-// 		}		
-// 	}
-
-// 	void Start.genJavaCCGrammar(PrintStream pStream) {
-// 		pStream.println("Start Start() #Start : {}");
-// 		pStream.println("{");
-// 		pStream.println("    (Device())*");
-// 		pStream.println("    { return jjtThis; }");
-// 		pStream.println("}");
-// 		pStream.println();
-// 		super.genJavaCCGrammar(pStream);
-// 	}
-	
-// 	void OwlClassDecl.genJavaCCGrammar(PrintStream pStream) {
-// 		pStream.println("void "+getId()+"() : {}");
-// 		pStream.println("{");
-// 		if (getId().equals("Device")) {
-// 			pStream.print("  \"<\"");
-// // 			pStream.print("\"<\" ( <DEVICE> \">\"");
-// // 			Restrictions restr = getRestrictions();
-// // 			for (int i=0; i< getNumRestriction(); i++) {
-// // 				OwlRestriction res = restr.getOwlRestriction(i);
-// // 				pStream.print("("+res.getRestrictionClassId()+")"+
-// // 							  (res.allValuesFrom()?"*":"")+" ");
-// // 			}
-// // 			pStream.println(" #Device("+getNumRestriction()+"))");
-// // 			// List all subclasses
-// // 			Iterator subIter = getSubClasses().iterator();
-// // 			while (subIter.hasNext()) {
-// // 				OwlClassDecl subClass = (OwlClassDecl) subIter.next();
-// // 				pStream.println("| "+subClass.getId()+"()");
-// // 			}
-// 		}
-// 		pStream.print("  ( <"+getId().toUpperCase()+"> \">\"");
-// 		Restrictions restr = getRestrictions();
-// 		for (int i=0; i< getNumRestriction(); i++) {
-// 			OwlRestriction res = restr.getOwlRestriction(i);
-// 			pStream.print("("+res.getRestrictionClassId()+"())"+
-// 						  (res.allValuesFrom()?"*":"")+" ");
-// 		}
-// 		pStream.println(" #"+getId()+"("+getNumRestriction()+"))");
-// 		// List all subclasses
-// 		Iterator subIter = getSubClasses().iterator();
-// 		while (subIter.hasNext()) {
-// 			OwlClassDecl subClass = (OwlClassDecl) subIter.next();
-// 			pStream.println("      | "+subClass.getId()+"()");
-// 		}
-// 		pStream.println("}");
-// 	}
-// }
 
 aspect ParserGen {
 	public void Start.genParser(PrintStream pStream) {
diff --git a/Types.jrag b/Types.jrag
index 7484a6e4162e653fdfe2dc979908cbca3420d7e0..b3158cee82ddd94ecf3ca5e9d6ce485a65335c22 100644
--- a/Types.jrag
+++ b/Types.jrag
@@ -109,7 +109,9 @@ aspect Restrictions {
 	}
   
 	void OwlRestriction.collectRestrictions(List l) {
-		l.add(this);
+		if (allValuesFrom()) {
+			l.add(this);
+		}
 	}
 	
 	syn int OwlClassDecl.getNumRestriction() = getRestrictions().getNumOwlRestriction();
@@ -130,7 +132,9 @@ aspect Restrictions {
 	}
 
 	void OwlRestriction.collectOwnRestrictions(List l) {
-		l.add(this);
+		if (allValuesFrom()) {
+			l.add(this);
+		}
 	}
 	
 	syn int OwlClassDecl.getNumOwnRestriction() = 
diff --git a/owl.ast b/owl.ast
index f1a604ad33027a698435f5fa79b84bd4c674dbeb..c228d970b13f9fba1ffd0cd80526473c5db943aa 100644
--- a/owl.ast
+++ b/owl.ast
@@ -82,6 +82,6 @@ abstract OwlValuesFrom: ComplexElement;
 
 
 Properties ::= Property:Element*;
-Restrictions ::= OwlRestriction*;
+//Restrictions ::= OwlRestriction*;
 
 abstract OwlProperty : ComplexElement;