diff --git a/SDT/schema4.0/etc/domain.rnc b/SDT/schema4.0/etc/domain.rnc
index 4efe8813fe12a6a7aed462efdd08241eee53d322..eedce92f68935fb336fb4ecaf9d88d2d632a91b3 100644
--- a/SDT/schema4.0/etc/domain.rnc
+++ b/SDT/schema4.0/etc/domain.rnc
@@ -18,7 +18,7 @@ Domain =
     ModuleClasses?,
     element DeviceClasses {
       element DeviceClass {
-        attribute id { xsd:Name },
+        attribute id { xsd:NCName },
         DocDef,
         PropertiesDef?,
         ModuleClasses?,
@@ -107,10 +107,7 @@ ModuleClasses =
     element ModuleClass {
       attribute name { text },
       attribute optional { xsd:boolean }?,
-      element extends {
-        attribute domain { xsd:IDREF },
-        attribute class { text }
-      }?,
+      ExtendsDef?,
       DocDef,
       PropertiesDef?,
       Actions?,
@@ -157,3 +154,20 @@ Events =
       Data?
     }+
   }
+ExtendsDef =
+  element extends {
+    # TODO: Uppercase
+    attribute domain { xsd:IDREF },
+    attribute class { text },
+    element excludes {
+      #  TODO: Uppercase + "...s" -> Excludes
+      element exclude {
+        attribute name { text },
+        attribute type {
+          text
+          # TODO: add ExcludeTypes
+          
+        }
+      }+
+    }?
+  }
diff --git a/SDT/schema4.0/src/domain.rng b/SDT/schema4.0/src/domain.rng
index fd4813f47131fd65f3e00573c5d8e662e95a774c..1989aef03563180ab553d6fe743052f39ebe6ab5 100644
--- a/SDT/schema4.0/src/domain.rng
+++ b/SDT/schema4.0/src/domain.rng
@@ -229,6 +229,7 @@
 		</element>
 	</define>
 
+
 	<define name="DocText">
 		<zeroOrMore>
 			<choice>
@@ -285,12 +286,7 @@
 						</attribute>
 					</optional>
 					<optional>
-						<element name="extends">
-							<attribute name="domain">
-								<data type="IDREF"/>
-							</attribute>
-							<attribute name="class"/>
-						</element>
+						<ref name="ExtendsDef" />
 					</optional>
 					<ref name="DocDef"/>
 					<optional>
@@ -405,5 +401,29 @@
 		</element>
 	</define>
 
+
+	<define name="ExtendsDef">
+		<element name="extends"> <!-- TODO: Uppercase -->
+			<attribute name="domain">
+				<data type="IDREF"/>
+			</attribute>
+			<attribute name="class"/>
+			<optional>
+				<element name="excludes"> <!-- TODO: Uppercase + "...s" -> Excludes-->
+					<oneOrMore>
+						<element name="exclude">
+							<attribute name="name">
+								<text/>
+							</attribute>
+							<attribute name="type">
+								<text/> <!-- TODO: add ExcludeTypes -->
+							</attribute>
+						</element>
+					</oneOrMore>
+				</element>
+			</optional>
+		</element>
+	</define>
+
 </grammar>
 
diff --git a/SDT/schema4.0/src/domain.xsd b/SDT/schema4.0/src/domain.xsd
index 8222d4b94a049dcf5bdf8209d7b7564066cca60f..4bca234a2aca8db21f988184039f10c37c0c6016 100644
--- a/SDT/schema4.0/src/domain.xsd
+++ b/SDT/schema4.0/src/domain.xsd
@@ -57,7 +57,7 @@
         <xs:element minOccurs="0" ref="ModuleClasses"/>
         <xs:element minOccurs="0" ref="SubDevices"/>
       </xs:sequence>
-      <xs:attribute name="id" use="required" type="xs:Name"/>
+      <xs:attribute name="id" use="required" type="xs:NCName"/>
     </xs:complexType>
   </xs:element>
   <xs:element name="SubDevices">
@@ -240,12 +240,6 @@
       <xs:attribute name="optional" type="xs:boolean"/>
     </xs:complexType>
   </xs:element>
-  <xs:element name="extends">
-    <xs:complexType>
-      <xs:attribute name="domain" use="required" type="xs:IDREF"/>
-      <xs:attribute name="class" use="required"/>
-    </xs:complexType>
-  </xs:element>
   <xs:element name="Actions">
     <xs:complexType>
       <xs:sequence>
@@ -317,4 +311,26 @@
       <xs:attribute name="optional" type="xs:boolean"/>
     </xs:complexType>
   </xs:element>
+  <xs:element name="extends">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" ref="excludes"/>
+      </xs:sequence>
+      <xs:attribute name="domain" use="required" type="xs:IDREF"/>
+      <xs:attribute name="class" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="excludes">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="exclude"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="exclude">
+    <xs:complexType>
+      <xs:attribute name="name" use="required"/>
+      <xs:attribute name="type" use="required"/>
+    </xs:complexType>
+  </xs:element>
 </xs:schema>
diff --git a/SDT/schema4.0/test/extends-test.xml b/SDT/schema4.0/test/extends-test.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b28b70376c813f42b44b04f6057931c5de6b546
--- /dev/null
+++ b/SDT/schema4.0/test/extends-test.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Test the extends element -->
+
+<Domain id="extends-test" xmlns="http://homegatewayinitiative.org/xml/dal/4.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+	<ModuleClasses>
+		<ModuleClass name="TestExtendsParent">
+			<Data>
+				<DataPoint name="TestExtendsDataPoint1" writable="true">
+					<DataType>
+						<SimpleType type="integer" />
+					</DataType>
+				</DataPoint>
+				<DataPoint name="TestExtendsDataPoint2" writable="true">
+					<DataType>
+						<SimpleType type="integer" />
+					</DataType>
+				</DataPoint>
+			</Data>
+		</ModuleClass>
+		<ModuleClass name="TestExtendsChild">
+			<extends domain="extends-test" class="TestExtendsParent">
+				<excludes>
+					<exclude name="TestExtendsDataPoint2" type="datapoint" />
+				</excludes>
+			</extends>
+			<Data>
+				<DataPoint name="TestExtendsDataPoint3" writable="true">
+					<DataType>
+						<SimpleType type="integer" />
+					</DataType>
+				</DataPoint>
+			</Data>
+		</ModuleClass>
+	</ModuleClasses>
+</Domain>
\ No newline at end of file