diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag
index a155ba6933c363acb94226f42710ffcb4be39c61..de75849cdcff24775329b20d6cddda5fad51c2f0 100644
--- a/CompilerGeneration.jrag
+++ b/CompilerGeneration.jrag
@@ -102,8 +102,8 @@ aspect AbsGrammarGeneration {
 			// Thing is handled explicitly
 			return;
 		}
-		System.out.println(name());
-		dumpTree(" ",System.out);
+		// System.out.println(name());
+		// dumpTree(" ",System.out);
 		pStream.print(name());
 		pStream.print(" : "+getSuperClass().name());	
 		pStream.print(" ::=");
@@ -120,17 +120,25 @@ aspect AbsGrammarGeneration {
 
     void OwlProperty.genAbsGrammarEntry(PrintStream pStream) {
 		pStream.print(name());
-		pStream.print(":Thing");
-// 		if (allValuesFrom()) {
-			pStream.print("*");
+		pStream.print(":"+range().type()+"*");
+// 		pStream.print(":Thing");
+// // 		if (allValuesFrom()) {
+// 			pStream.print("*");
 // 		}
     }
 
+    void OwlDatatypeProperty.genAbsGrammarEntry(PrintStream pStream) {
+		pStream.print("<"+name());
+		pStream.print(":String>");
+		// pStream.print(":"+range().type()+"*");
+    }
+
 	void Element.genAbsGrammarEntry(PrintStream pStream) {}
 
 	void ObjectPropertyDomain.genAbsGrammarEntry(PrintStream pStream) {
 		pStream.print(objectProperty().name());
-		pStream.print(":Thing*");
+		pStream.print(domain().name()+"*");
+		// pStream.print(":Thing*");
 	}
 
 	void DataPropertyDomain.genAbsGrammarEntry(PrintStream pStream) {
diff --git a/Names.jrag b/Names.jrag
index c5b6a402566c59d8073c568312656f4a0f16d865..93bd45ea582bb119b96b621c71721e85dee46a6d 100644
--- a/Names.jrag
+++ b/Names.jrag
@@ -23,6 +23,7 @@ aspect Names {
 	syn String Element.name() = "";
 	eq OClass.name() = getId();
 	eq OwlProperty.name() = getId();
+	eq RdfsDomain.name() = getId();
 	eq OwlRestriction.name() = getRestrictionClassId();
 	eq Declaration.name() = getElement(0).name();
 	eq Clazz.name() = iri().trim();
diff --git a/Rewrites.jrag b/Rewrites.jrag
index 3bbd2aa7ffd6491000325a804977d935a8781444..f15cbb9c46f6ed234408d1f398f5465b571c280f 100644
--- a/Rewrites.jrag
+++ b/Rewrites.jrag
@@ -51,6 +51,9 @@ aspect MiscUtilities {
 		if (s.indexOf('#') > -1) {
 			s = s.substring(s.indexOf('#')+1,s.length()).trim();
 		} 
+		if (s.indexOf(';') > -1) {
+			s = s.substring(s.indexOf(';')+1,s.length()).trim();
+		} 
 		if (s.equals("string")) {
 			s = "String";
 		}
@@ -172,6 +175,11 @@ aspect MiscUtilities {
 		return "_Unknown_";		
 	}
 
+	// eq RdfsDomain.getId() {
+	// 	 System.out.println(((OwlClassUse) getElement(0)).getId());
+	// return ((OwlClassUse)getElement(0)).getId();
+	// }
+
     syn lazy String Element.type() = null;
 
     eq RdfsRange.type() {
@@ -190,7 +198,7 @@ aspect MiscUtilities {
 		}
 		// Fall through. Could not find Id, so let's return something
 		// well known
-		return "_Unknown_";
+		return "Thing";
     }
 
     eq OwlDataRange.type() {
@@ -231,7 +239,6 @@ aspect MiscUtilities {
     }
 
 	 syn boolean Declaration.isClassDecl() {
-		  dumpTree(" ",System.out);
 		  return getElement(0).isClass();
 	 }
 	eq OwlClassDecl.isClassDecl() = true;
diff --git a/Types.jrag b/Types.jrag
index 9084961f07102a348b41cbac813caa8e272cf70c..443204c1dbf608358b06d4d1366bdcec07989b38 100644
--- a/Types.jrag
+++ b/Types.jrag
@@ -340,15 +340,56 @@ aspect Properties {
 		return false;
 	}
 
+    syn lazy RdfsDomain Element.domain() = null;
+
+    eq OwlObjectProperty.domain() {
+		for (int i=0; i<getNumElement(); i++) {
+			 // getElement(i).dumpTree("",System.out);
+			 // System.out.println("Checking "+getElement(i));
+			if (getElement(i) instanceof RdfsDomain) {
+				 // System.out.println("Yes");
+				return (RdfsDomain) getElement(i);
+			}
+		}
+		return null;
+    }
+    eq OwlFunctionalProperty.domain() {
+		for (int i=0; i<getNumElement(); i++) {
+			if (getElement(i) instanceof RdfsDomain) {
+				return (RdfsDomain) getElement(i);
+			}
+		}
+		return null;
+    }
+    eq OwlDatatypeProperty.domain() {
+		for (int i=0; i<getNumElement(); i++) {
+			if (getElement(i) instanceof RdfsDomain) {
+				return (RdfsDomain) getElement(i);
+			}
+		}
+		return null;
+    }
+
     syn lazy RdfsRange Element.range() = null;
     
+    eq OwlProperty.range() {
+		for (int i=0; i<getNumElement(); i++) {
+			if (getElement(i) instanceof RdfsRange) {
+				return (RdfsRange) getElement(i);
+			}
+		}
+		// Default to Thing
+		System.out.println("* Default range to Thing");
+		return new RdfsRange(new List().add(new RdfResource(new Value("Thing"))),new List());
+    }
     eq OwlObjectProperty.range() {
 		for (int i=0; i<getNumElement(); i++) {
 			if (getElement(i) instanceof RdfsRange) {
 				return (RdfsRange) getElement(i);
 			}
 		}
-		return null;
+		// Default to Thing
+		return new RdfsRange(new List().add(new RdfResource(new Value("Thing"))),new List());
     }
     eq OwlFunctionalProperty.range() {
 		for (int i=0; i<getNumElement(); i++) {
@@ -356,7 +397,8 @@ aspect Properties {
 				return (RdfsRange) getElement(i);
 			}
 		}
-		return null;
+		// return null;
+		return new RdfsRange(new List().add(new RdfResource(new Value("Thing"))),new List());
     }
     eq OwlDatatypeProperty.range() {
 		for (int i=0; i<getNumElement(); i++) {
@@ -364,7 +406,8 @@ aspect Properties {
 				return (RdfsRange) getElement(i);
 			}
 		}
-		return null;
+		return new RdfsRange(new List().add(new RdfResource(new Value("Thing"))),new List());
+		// return null;
     }
 
 	syn ObjectProperty ObjectPropertyDomain.objectProperty() {