diff --git a/common/lib/xmodule/x_module.py b/common/lib/xmodule/x_module.py
index a2019cd5bf10d70bde54591c720a6eed42ab68b1..83671207484d28605f1826ec643b6b1572db6148 100644
--- a/common/lib/xmodule/x_module.py
+++ b/common/lib/xmodule/x_module.py
@@ -253,6 +253,7 @@ class XModuleDescriptor(Plugin):
         self.shared_state_key = kwargs.get('shared_state_key')
 
         self._child_instances = None
+        self._inherited_metadata = set()
 
     def inherit_metadata(self, metadata):
         """
@@ -264,6 +265,7 @@ class XModuleDescriptor(Plugin):
         # in self.inheritable_metadata and aren't already set in metadata
         for attr in self.inheritable_metadata:
             if attr not in self.metadata and attr in metadata:
+                self._inherited_metadata.add(attr)
                 self.metadata[attr] = metadata[attr]
 
     def get_children(self):
diff --git a/common/lib/xmodule/xml_module.py b/common/lib/xmodule/xml_module.py
index fa275c67d3107eeb62fbc8cbab25c0444596b5c4..6639a77d3e3dd5f090aa1744f901f35a3fc03db2 100644
--- a/common/lib/xmodule/xml_module.py
+++ b/common/lib/xmodule/xml_module.py
@@ -68,10 +68,10 @@ class XmlDescriptor(XModuleDescriptor):
         xml_object.tag = self.type
 
         for attr in ('format', 'graceperiod', 'showanswer', 'rerandomize', 'due'):
-            if attr in self.metadata:
+            if attr in self.metadata and attr not in self._inherited_metadata:
                 xml_object.set(attr, self.metadata[attr])
 
-        if 'graded' in self.metadata:
+        if 'graded' in self.metadata and 'graded' not in self._inherited_metadata:
             xml_object.set('graded', str(self.metadata['graded']).lower())
 
         if 'display_name' in self.metadata: