diff --git a/VirtualRobot/CMakeLists.txt b/VirtualRobot/CMakeLists.txt
index 8e143a46a7ae5f9791a952362311f0707229f2bd..64ba542d46056a7fd704d6f8be58c53ae1f31a6c 100644
--- a/VirtualRobot/CMakeLists.txt
+++ b/VirtualRobot/CMakeLists.txt
@@ -518,6 +518,7 @@ SET(INCLUDES
     MJCF/elements/has_member.hpp
     MJCF/elements/core/AnyElement.h
     MJCF/elements/core/Attribute.h
+    MJCF/elements/core/const_aware_ptr.hpp
     MJCF/elements/core/Element.h
     MJCF/elements/core/exceptions.h
     MJCF/elements/core/mjcf_utils.h
diff --git a/VirtualRobot/MJCF/elements/core/Attribute.h b/VirtualRobot/MJCF/elements/core/Attribute.h
index 845e0c08e75eb3663718cdfd0de0d4458a2fe14f..e420dcf18494cb668d2bfafc9cfbc52188dc1c6b 100644
--- a/VirtualRobot/MJCF/elements/core/Attribute.h
+++ b/VirtualRobot/MJCF/elements/core/Attribute.h
@@ -101,6 +101,9 @@ namespace mjcf
         /// Indicate whether the attribute has a default (implies optional).
         virtual bool hasDefault() const = 0;
         
+        /// Indicate whether the attribute is set.
+        bool isSet() const { return this->owner().isAttributeSet(this->name); }
+        
         
     protected:
         
@@ -181,6 +184,7 @@ namespace mjcf
     private:
         
         AttrT defaultValue; ///< The default value.
+        
     };