diff --git a/VirtualRobot/CMakeLists.txt b/VirtualRobot/CMakeLists.txt
index 7427eeee2b2091fdfb18fecf9c6ff31189958313..ee062a919258f5c7967ace2da968f94499800d17 100644
--- a/VirtualRobot/CMakeLists.txt
+++ b/VirtualRobot/CMakeLists.txt
@@ -309,26 +309,26 @@ SET(SOURCES
     
     MJCF/Document.cpp
     MJCF/elements.cpp
-    MJCF/elements/actuator.cpp
-    MJCF/elements/asset.cpp
-    MJCF/elements/body.cpp
-    MJCF/elements/contact.cpp
-    MJCF/elements/custom.cpp
-    MJCF/elements/default.cpp
-    MJCF/elements/equality.cpp
-    MJCF/elements/keyframe.cpp
-    MJCF/elements/option.cpp
-    MJCF/elements/sensor.cpp
-    MJCF/elements/size.cpp
-    MJCF/elements/statistic.cpp
-    MJCF/elements/tendon.cpp
-    MJCF/elements/visual.cpp
     MJCF/elements/core/AnyElement.cpp
     MJCF/elements/core/Attribute.cpp
     MJCF/elements/core/Element.cpp
     MJCF/elements/core/exceptions.cpp
     MJCF/elements/core/mjcf_utils.cpp
     MJCF/elements/core/Visitor.cpp
+    MJCF/elements/types/actuator.cpp
+    MJCF/elements/types/asset.cpp
+    MJCF/elements/types/body.cpp
+    MJCF/elements/types/contact.cpp
+    MJCF/elements/types/custom.cpp
+    MJCF/elements/types/default.cpp
+    MJCF/elements/types/equality.cpp
+    MJCF/elements/types/keyframe.cpp
+    MJCF/elements/types/option.cpp
+    MJCF/elements/types/sensor.cpp
+    MJCF/elements/types/size.cpp
+    MJCF/elements/types/statistic.cpp
+    MJCF/elements/types/tendon.cpp
+    MJCF/elements/types/visual.cpp
     
     Nodes/CameraSensor.cpp
     Nodes/CameraSensorFactory.cpp
@@ -515,20 +515,6 @@ SET(INCLUDES
     
     MJCF/Document.h
     MJCF/elements.h
-    MJCF/elements/actuator.h
-    MJCF/elements/asset.h
-    MJCF/elements/body.h
-    MJCF/elements/contact.h
-    MJCF/elements/custom.h
-    MJCF/elements/default.h
-    MJCF/elements/equality.h
-    MJCF/elements/keyframe.h
-    MJCF/elements/option.h
-    MJCF/elements/sensor.h
-    MJCF/elements/size.h
-    MJCF/elements/statistic.h
-    MJCF/elements/tendon.h
-    MJCF/elements/visual.h
     MJCF/elements/has_member.hpp
     MJCF/elements/core/AnyElement.h
     MJCF/elements/core/Attribute.h
@@ -536,6 +522,20 @@ SET(INCLUDES
     MJCF/elements/core/exceptions.h
     MJCF/elements/core/mjcf_utils.h
     MJCF/elements/core/Visitor.h
+    MJCF/elements/types/actuator.h
+    MJCF/elements/types/asset.h
+    MJCF/elements/types/body.h
+    MJCF/elements/types/contact.h
+    MJCF/elements/types/custom.h
+    MJCF/elements/types/default.h
+    MJCF/elements/types/equality.h
+    MJCF/elements/types/keyframe.h
+    MJCF/elements/types/option.h
+    MJCF/elements/types/sensor.h
+    MJCF/elements/types/size.h
+    MJCF/elements/types/statistic.h
+    MJCF/elements/types/tendon.h
+    MJCF/elements/types/visual.h
     
     Nodes/CameraSensor.h
     Nodes/CameraSensorFactory.h
diff --git a/VirtualRobot/MJCF/elements.h b/VirtualRobot/MJCF/elements.h
index d46b4400acd7e3493716d793992a6fad1bd7b31b..926b0ed7a2dcea7a22a17a178b6a510df83c2f17 100644
--- a/VirtualRobot/MJCF/elements.h
+++ b/VirtualRobot/MJCF/elements.h
@@ -1,20 +1,20 @@
 #pragma once
 
 #include "elements/core/AnyElement.h"
-#include "elements/actuator.h"
-#include "elements/asset.h"
-#include "elements/body.h"
-#include "elements/compiler.h"
-#include "elements/contact.h"
-#include "elements/default.h"
-#include "elements/equality.h"
-#include "elements/keyframe.h"
-#include "elements/option.h"
-#include "elements/sensor.h"
-#include "elements/size.h"
-#include "elements/statistic.h"
-#include "elements/tendon.h"
-#include "elements/visual.h"
+#include "elements/types/actuator.h"
+#include "elements/types/asset.h"
+#include "elements/types/body.h"
+#include "elements/types/compiler.h"
+#include "elements/types/contact.h"
+#include "elements/types/default.h"
+#include "elements/types/equality.h"
+#include "elements/types/keyframe.h"
+#include "elements/types/option.h"
+#include "elements/types/sensor.h"
+#include "elements/types/size.h"
+#include "elements/types/statistic.h"
+#include "elements/types/tendon.h"
+#include "elements/types/visual.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/actuator.cpp b/VirtualRobot/MJCF/elements/types/actuator.cpp
similarity index 98%
rename from VirtualRobot/MJCF/elements/actuator.cpp
rename to VirtualRobot/MJCF/elements/types/actuator.cpp
index 440cff2d67806671c11ebf3b0243e412b8cf5506..31df438f4e08cac13909cd52a95f6ecbc4b5bf01 100644
--- a/VirtualRobot/MJCF/elements/actuator.cpp
+++ b/VirtualRobot/MJCF/elements/types/actuator.cpp
@@ -1,6 +1,6 @@
 #include "actuator.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/actuator.h b/VirtualRobot/MJCF/elements/types/actuator.h
similarity index 99%
rename from VirtualRobot/MJCF/elements/actuator.h
rename to VirtualRobot/MJCF/elements/types/actuator.h
index 78c151ca229a53a53f10a23e5bcf8017df231cf3..4f7399d1c9465b41b2706b0ce011e9b14955fef7 100644
--- a/VirtualRobot/MJCF/elements/actuator.h
+++ b/VirtualRobot/MJCF/elements/types/actuator.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/asset.cpp b/VirtualRobot/MJCF/elements/types/asset.cpp
similarity index 97%
rename from VirtualRobot/MJCF/elements/asset.cpp
rename to VirtualRobot/MJCF/elements/types/asset.cpp
index 7774133ad6135000cec0019ffdeed907d66b18d9..916feb621c9d0a99ed7950e1e718065741d5b5ee 100644
--- a/VirtualRobot/MJCF/elements/asset.cpp
+++ b/VirtualRobot/MJCF/elements/types/asset.cpp
@@ -1,6 +1,6 @@
 #include "asset.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/asset.h b/VirtualRobot/MJCF/elements/types/asset.h
similarity index 98%
rename from VirtualRobot/MJCF/elements/asset.h
rename to VirtualRobot/MJCF/elements/types/asset.h
index 4887a3fbc636f71f08fc8298a5835adda088a30d..33f718384cfe92b48211d906307f5d564362f273 100644
--- a/VirtualRobot/MJCF/elements/asset.h
+++ b/VirtualRobot/MJCF/elements/types/asset.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/body.cpp b/VirtualRobot/MJCF/elements/types/body.cpp
similarity index 99%
rename from VirtualRobot/MJCF/elements/body.cpp
rename to VirtualRobot/MJCF/elements/types/body.cpp
index 5d57cb0b60d23a14c9ed657029c14db68fe1de45..de08ed5983437056f93a9761a561fdab8fb844f0 100644
--- a/VirtualRobot/MJCF/elements/body.cpp
+++ b/VirtualRobot/MJCF/elements/types/body.cpp
@@ -1,6 +1,6 @@
 #include "body.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/body.h b/VirtualRobot/MJCF/elements/types/body.h
similarity index 99%
rename from VirtualRobot/MJCF/elements/body.h
rename to VirtualRobot/MJCF/elements/types/body.h
index 79c88a64476dd83b99572cbb74bc99de91f57d09..9bacb6b8ef9f49e4b7c4b7927c10700eebaa94bb 100644
--- a/VirtualRobot/MJCF/elements/body.h
+++ b/VirtualRobot/MJCF/elements/types/body.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/compiler.cpp b/VirtualRobot/MJCF/elements/types/compiler.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/compiler.cpp
rename to VirtualRobot/MJCF/elements/types/compiler.cpp
diff --git a/VirtualRobot/MJCF/elements/compiler.h b/VirtualRobot/MJCF/elements/types/compiler.h
similarity index 98%
rename from VirtualRobot/MJCF/elements/compiler.h
rename to VirtualRobot/MJCF/elements/types/compiler.h
index cf67891977a42cf80bc88464c2f0ee0f02775868..f63347b56ded633051f4095e1ec9838cecbaa6eb 100644
--- a/VirtualRobot/MJCF/elements/compiler.h
+++ b/VirtualRobot/MJCF/elements/types/compiler.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/contact.cpp b/VirtualRobot/MJCF/elements/types/contact.cpp
similarity index 97%
rename from VirtualRobot/MJCF/elements/contact.cpp
rename to VirtualRobot/MJCF/elements/types/contact.cpp
index e60977b27ac04b0fbd28c8eb7ba54953053199c7..27b412e864709535247272b36fd2947ad8946a6b 100644
--- a/VirtualRobot/MJCF/elements/contact.cpp
+++ b/VirtualRobot/MJCF/elements/types/contact.cpp
@@ -1,6 +1,6 @@
 #include "contact.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 using namespace mjcf;
 
diff --git a/VirtualRobot/MJCF/elements/contact.h b/VirtualRobot/MJCF/elements/types/contact.h
similarity index 98%
rename from VirtualRobot/MJCF/elements/contact.h
rename to VirtualRobot/MJCF/elements/types/contact.h
index 7287f5ea7937346f3226607ca3549ccba55b4e93..dff53f638c5e0513baed734a42747383a554f57f 100644
--- a/VirtualRobot/MJCF/elements/contact.h
+++ b/VirtualRobot/MJCF/elements/types/contact.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 #include "body.h"
 
 
diff --git a/VirtualRobot/MJCF/elements/custom.cpp b/VirtualRobot/MJCF/elements/types/custom.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/custom.cpp
rename to VirtualRobot/MJCF/elements/types/custom.cpp
diff --git a/VirtualRobot/MJCF/elements/custom.h b/VirtualRobot/MJCF/elements/types/custom.h
similarity index 55%
rename from VirtualRobot/MJCF/elements/custom.h
rename to VirtualRobot/MJCF/elements/types/custom.h
index 2a75c50d53211f0dec946c4f45d4d8639fb595dd..64fef95b4d0f24e68d5071817f3d0285a9e223dc 100644
--- a/VirtualRobot/MJCF/elements/custom.h
+++ b/VirtualRobot/MJCF/elements/types/custom.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/default.cpp b/VirtualRobot/MJCF/elements/types/default.cpp
similarity index 95%
rename from VirtualRobot/MJCF/elements/default.cpp
rename to VirtualRobot/MJCF/elements/types/default.cpp
index cfc82ab5365aac7486b6269d6f426457499e1072..fa50b0cdf42aba96c63803bf4a804f06dc9c4480 100644
--- a/VirtualRobot/MJCF/elements/default.cpp
+++ b/VirtualRobot/MJCF/elements/types/default.cpp
@@ -1,6 +1,6 @@
 #include "default.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/default.h b/VirtualRobot/MJCF/elements/types/default.h
similarity index 97%
rename from VirtualRobot/MJCF/elements/default.h
rename to VirtualRobot/MJCF/elements/types/default.h
index d62f1f41bbc996d92783f957d763ef1a129a7d56..9c22f0cf2aceb8b79b8261a81e5a6197f2da451d 100644
--- a/VirtualRobot/MJCF/elements/default.h
+++ b/VirtualRobot/MJCF/elements/types/default.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/equality.cpp b/VirtualRobot/MJCF/elements/types/equality.cpp
similarity index 97%
rename from VirtualRobot/MJCF/elements/equality.cpp
rename to VirtualRobot/MJCF/elements/types/equality.cpp
index fa14d433c767d9b9350f943c3f4e73eb470ffc77..2732d939bbecff717d11fe448750c5d92097f014 100644
--- a/VirtualRobot/MJCF/elements/equality.cpp
+++ b/VirtualRobot/MJCF/elements/types/equality.cpp
@@ -1,6 +1,6 @@
 #include "equality.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/equality.h b/VirtualRobot/MJCF/elements/types/equality.h
similarity index 98%
rename from VirtualRobot/MJCF/elements/equality.h
rename to VirtualRobot/MJCF/elements/types/equality.h
index 93abd1b034a63a898c422686b4426f8d5b952ecd..d31253e85e27cedd8534b572056e56c41d2d8d63 100644
--- a/VirtualRobot/MJCF/elements/equality.h
+++ b/VirtualRobot/MJCF/elements/types/equality.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 
 namespace mjcf
diff --git a/VirtualRobot/MJCF/elements/keyframe.cpp b/VirtualRobot/MJCF/elements/types/keyframe.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/keyframe.cpp
rename to VirtualRobot/MJCF/elements/types/keyframe.cpp
diff --git a/VirtualRobot/MJCF/elements/keyframe.h b/VirtualRobot/MJCF/elements/types/keyframe.h
similarity index 85%
rename from VirtualRobot/MJCF/elements/keyframe.h
rename to VirtualRobot/MJCF/elements/types/keyframe.h
index 0867ff7014e3500e9af436355ec302e732e5c8f1..9ca8c42315ddb31645e3ded2d90c6d74a46ff7bf 100644
--- a/VirtualRobot/MJCF/elements/keyframe.h
+++ b/VirtualRobot/MJCF/elements/types/keyframe.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/option.cpp b/VirtualRobot/MJCF/elements/types/option.cpp
similarity index 88%
rename from VirtualRobot/MJCF/elements/option.cpp
rename to VirtualRobot/MJCF/elements/types/option.cpp
index a285814750eab6f533689f7cae5ffd0dc78d0811..53d4730a1631fe13b32062ab5762e62f80088117 100644
--- a/VirtualRobot/MJCF/elements/option.cpp
+++ b/VirtualRobot/MJCF/elements/types/option.cpp
@@ -1,6 +1,6 @@
 #include "option.h"
 
-#include "../Document.h"
+#include "../../Document.h"
 
 
 using namespace mjcf;
diff --git a/VirtualRobot/MJCF/elements/option.h b/VirtualRobot/MJCF/elements/types/option.h
similarity index 97%
rename from VirtualRobot/MJCF/elements/option.h
rename to VirtualRobot/MJCF/elements/types/option.h
index 1dce69eeee39881aa7e97091b100703d38f52c8f..2dc4e1a2a33f8e626f2f60595c3fa4d50a43a60c 100644
--- a/VirtualRobot/MJCF/elements/option.h
+++ b/VirtualRobot/MJCF/elements/types/option.h
@@ -1,7 +1,7 @@
 #pragma once
 
-#include "core/Attribute.h"
-#include "core/mjcf_utils.h"
+#include "../core/Attribute.h"
+#include "../core/mjcf_utils.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/sensor.cpp b/VirtualRobot/MJCF/elements/types/sensor.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/sensor.cpp
rename to VirtualRobot/MJCF/elements/types/sensor.cpp
diff --git a/VirtualRobot/MJCF/elements/sensor.h b/VirtualRobot/MJCF/elements/types/sensor.h
similarity index 85%
rename from VirtualRobot/MJCF/elements/sensor.h
rename to VirtualRobot/MJCF/elements/types/sensor.h
index 3a775270bbee1049a6127742cd4949f76a263cdf..fbeda6e4ec75e2f04212457e5732096a42685bd8 100644
--- a/VirtualRobot/MJCF/elements/sensor.h
+++ b/VirtualRobot/MJCF/elements/types/sensor.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/size.cpp b/VirtualRobot/MJCF/elements/types/size.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/size.cpp
rename to VirtualRobot/MJCF/elements/types/size.cpp
diff --git a/VirtualRobot/MJCF/elements/size.h b/VirtualRobot/MJCF/elements/types/size.h
similarity index 84%
rename from VirtualRobot/MJCF/elements/size.h
rename to VirtualRobot/MJCF/elements/types/size.h
index 1b70617f605b3f0ed34b48d4189549c9ffb85959..4800f4e007100cb13a0d9b00ac1a5a130b3afb00 100644
--- a/VirtualRobot/MJCF/elements/size.h
+++ b/VirtualRobot/MJCF/elements/types/size.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/statistic.cpp b/VirtualRobot/MJCF/elements/types/statistic.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/statistic.cpp
rename to VirtualRobot/MJCF/elements/types/statistic.cpp
diff --git a/VirtualRobot/MJCF/elements/statistic.h b/VirtualRobot/MJCF/elements/types/statistic.h
similarity index 85%
rename from VirtualRobot/MJCF/elements/statistic.h
rename to VirtualRobot/MJCF/elements/types/statistic.h
index 85976bf9d6b979ee134c21f87c7233192b705268..be439e89f62f7bdc9a5d86265ec267fa700beafe 100644
--- a/VirtualRobot/MJCF/elements/statistic.h
+++ b/VirtualRobot/MJCF/elements/types/statistic.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/tendon.cpp b/VirtualRobot/MJCF/elements/types/tendon.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/tendon.cpp
rename to VirtualRobot/MJCF/elements/types/tendon.cpp
diff --git a/VirtualRobot/MJCF/elements/tendon.h b/VirtualRobot/MJCF/elements/types/tendon.h
similarity index 85%
rename from VirtualRobot/MJCF/elements/tendon.h
rename to VirtualRobot/MJCF/elements/types/tendon.h
index f923b72028d41d6868d4388af195fa388677c493..7fc81e5c2975767c8e87cd36f84c4e078403cb40 100644
--- a/VirtualRobot/MJCF/elements/tendon.h
+++ b/VirtualRobot/MJCF/elements/types/tendon.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {
diff --git a/VirtualRobot/MJCF/elements/visual.cpp b/VirtualRobot/MJCF/elements/types/visual.cpp
similarity index 100%
rename from VirtualRobot/MJCF/elements/visual.cpp
rename to VirtualRobot/MJCF/elements/types/visual.cpp
diff --git a/VirtualRobot/MJCF/elements/visual.h b/VirtualRobot/MJCF/elements/types/visual.h
similarity index 85%
rename from VirtualRobot/MJCF/elements/visual.h
rename to VirtualRobot/MJCF/elements/types/visual.h
index ed4e2537a5d0ddfa740fd15808aa56f050cbdc54..4c9233cbb44594ff3f4775397d756e2a6d9172fa 100644
--- a/VirtualRobot/MJCF/elements/visual.h
+++ b/VirtualRobot/MJCF/elements/types/visual.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "core/Attribute.h"
+#include "../core/Attribute.h"
 
 namespace mjcf
 {