diff --git a/src/language/ASTNode.hpp b/src/language/ASTNode.hpp
index 54332a10c62d6ea7632b07d31d069633ce1af7bf..9313d90f246b056f492cd0991ee762287e51a89f 100644
--- a/src/language/ASTNode.hpp
+++ b/src/language/ASTNode.hpp
@@ -2,9 +2,9 @@
 #define AST_NODE_HPP
 
 #include <language/ASTNodeDataType.hpp>
-#include <language/DataVariant.hpp>
 #include <language/node_processor/ExecutionPolicy.hpp>
 #include <language/node_processor/INodeProcessor.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/PugsAssert.hpp>
 #include <utils/PugsMacros.hpp>
 
diff --git a/src/language/CMakeLists.txt b/src/language/CMakeLists.txt
index ee25c06d0a8dc2f04cdb4c761661aec147e9378b..2cf5f1473b8effce4cdbaa58a562cdfbd87720ee 100644
--- a/src/language/CMakeLists.txt
+++ b/src/language/CMakeLists.txt
@@ -28,7 +28,6 @@ add_library(
   ASTNodeUnaryOperatorExpressionBuilder.cpp
   ASTSymbolTableBuilder.cpp
   ASTSymbolInitializationChecker.cpp
-  EmbeddedData.cpp
   PugsParser.cpp)
 
 # Additional dependencies
diff --git a/src/language/FunctionTable.hpp b/src/language/FunctionTable.hpp
index af262d1962209aa9f10476448ebee78f5cba3fa3..61481766727e5aba548a86134fab6201607f33c5 100644
--- a/src/language/FunctionTable.hpp
+++ b/src/language/FunctionTable.hpp
@@ -3,7 +3,7 @@
 
 #include <language/ASTNode.hpp>
 #include <language/ASTNodeDataType.hpp>
-#include <language/DataVariant.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/PugsAssert.hpp>
 
 #include <pegtl/position.hpp>
diff --git a/src/language/SymbolTable.hpp b/src/language/SymbolTable.hpp
index 3b795f559dc0767cdfd849d771a57240a05899e1..2187df92736ed1552f5be4300375440f46ff5bfc 100644
--- a/src/language/SymbolTable.hpp
+++ b/src/language/SymbolTable.hpp
@@ -2,9 +2,9 @@
 #define SYMBOL_TABLE_HPP
 
 #include <language/ASTNodeDataType.hpp>
-#include <language/DataVariant.hpp>
 #include <language/EmbedderTable.hpp>
 #include <language/FunctionTable.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/PugsMacros.hpp>
 
 #include <pegtl/position.hpp>
diff --git a/src/language/modules/BuiltinModule.cpp b/src/language/modules/BuiltinModule.cpp
index cfb8b1a02fbea5947499dad0b2800ae2e951d202..1d1df91fde868610ea4ff51f66aa350aaca0f76d 100644
--- a/src/language/modules/BuiltinModule.cpp
+++ b/src/language/modules/BuiltinModule.cpp
@@ -1,7 +1,7 @@
 #include <language/modules/BuiltinModule.hpp>
 
-#include <language/TypeDescriptor.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <language/utils/TypeDescriptor.hpp>
 #include <utils/Exceptions.hpp>
 
 #include <memory>
diff --git a/src/language/modules/MeshModule.cpp b/src/language/modules/MeshModule.cpp
index 1255c44e3d28c493badde1d90a66b6cd8d580790..9f8b1029f23ecfb5cd1568956fc96c005ee6dce2 100644
--- a/src/language/modules/MeshModule.cpp
+++ b/src/language/modules/MeshModule.cpp
@@ -3,9 +3,9 @@
 #include <language/FunctionTable.hpp>
 #include <language/PugsFunctionAdapter.hpp>
 #include <language/SymbolTable.hpp>
-#include <language/TypeDescriptor.hpp>
 #include <language/node_processor/ExecutionPolicy.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <language/utils/TypeDescriptor.hpp>
 #include <mesh/Connectivity.hpp>
 #include <mesh/GmshReader.hpp>
 #include <mesh/Mesh.hpp>
diff --git a/src/language/modules/VTKModule.cpp b/src/language/modules/VTKModule.cpp
index 8294be3d7b17b04b0abce932406deb61c765f8c5..6daa44f65f4d48c9e9154a8e1dc36c5473248fb5 100644
--- a/src/language/modules/VTKModule.cpp
+++ b/src/language/modules/VTKModule.cpp
@@ -1,7 +1,7 @@
 #include <language/modules/VTKModule.hpp>
 
-#include <language/TypeDescriptor.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <language/utils/TypeDescriptor.hpp>
 #include <mesh/Connectivity.hpp>
 #include <mesh/GmshReader.hpp>
 #include <mesh/Mesh.hpp>
diff --git a/src/language/node_processor/ExecutionPolicy.hpp b/src/language/node_processor/ExecutionPolicy.hpp
index 1cbf1a29bca48ae991c4caa8e7909294630adb0f..47fc3174ca5236c067bde9045a97f4d1c0fe160a 100644
--- a/src/language/node_processor/ExecutionPolicy.hpp
+++ b/src/language/node_processor/ExecutionPolicy.hpp
@@ -1,7 +1,7 @@
 #ifndef EXECUTION_POLICY_HPP
 #define EXECUTION_POLICY_HPP
 
-#include <language/DataVariant.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/PugsMacros.hpp>
 
 #include <memory>
diff --git a/src/language/node_processor/FunctionArgumentConverter.hpp b/src/language/node_processor/FunctionArgumentConverter.hpp
index 467bc7b2444ad4c1b3aa8e48603e39d0364a3b7d..8733211dcefd7f25deb31345c6b66800de971ec2 100644
--- a/src/language/node_processor/FunctionArgumentConverter.hpp
+++ b/src/language/node_processor/FunctionArgumentConverter.hpp
@@ -1,8 +1,8 @@
 #ifndef FUNCTION_ARGUMENT_CONVERTER_HPP
 #define FUNCTION_ARGUMENT_CONVERTER_HPP
 
-#include <language/DataVariant.hpp>
 #include <language/node_processor/ExecutionPolicy.hpp>
+#include <language/utils/DataVariant.hpp>
 
 class IFunctionArgumentConverter
 {
diff --git a/src/language/node_processor/INodeProcessor.hpp b/src/language/node_processor/INodeProcessor.hpp
index 1aa4695204d4d489e294e015cd9affac3bd4164c..ce06b9484f7c7b141861bddfc88f5b5c3bf9eecc 100644
--- a/src/language/node_processor/INodeProcessor.hpp
+++ b/src/language/node_processor/INodeProcessor.hpp
@@ -1,8 +1,8 @@
 #ifndef I_NODE_PROCESSOR_HPP
 #define I_NODE_PROCESSOR_HPP
 
-#include <language/DataVariant.hpp>
 #include <language/node_processor/ExecutionPolicy.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/Demangle.hpp>
 
 #include <string>
diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp
index 169a1f19605ffb4c9656c99330a82bb79afb3a16..ab2523c722f41cb2c070a422c747b2e7af0a23ff 100644
--- a/src/language/utils/BuiltinFunctionEmbedder.hpp
+++ b/src/language/utils/BuiltinFunctionEmbedder.hpp
@@ -2,10 +2,10 @@
 #define BUILTIN_FUNCTION_EMBEDDER_HPP
 
 #include <language/ASTNodeDataType.hpp>
-#include <language/DataHandler.hpp>
-#include <language/DataVariant.hpp>
 #include <language/FunctionTable.hpp>
 #include <language/utils/ASTNodeDataTypeTraits.hpp>
+#include <language/utils/DataHandler.hpp>
+#include <language/utils/DataVariant.hpp>
 #include <utils/Demangle.hpp>
 #include <utils/Exceptions.hpp>
 #include <utils/PugsTraits.hpp>
diff --git a/src/language/utils/CMakeLists.txt b/src/language/utils/CMakeLists.txt
index c7ce6eefda728dc1f368b93ce050b39f737e5c18..3c6733cd4ae3d5c31776ad3a2328c97109d57829 100644
--- a/src/language/utils/CMakeLists.txt
+++ b/src/language/utils/CMakeLists.txt
@@ -3,7 +3,8 @@
 add_library(PugsLanguageUtils
   ASTDotPrinter.cpp
   ASTPrinter.cpp
-)
+  EmbeddedData.cpp
+  )
 
 
 
diff --git a/src/language/DataHandler.hpp b/src/language/utils/DataHandler.hpp
similarity index 100%
rename from src/language/DataHandler.hpp
rename to src/language/utils/DataHandler.hpp
diff --git a/src/language/DataVariant.hpp b/src/language/utils/DataVariant.hpp
similarity index 98%
rename from src/language/DataVariant.hpp
rename to src/language/utils/DataVariant.hpp
index 04dac529363c3ba4f6516f7c4fce8c55260b47e9..8c6667d51c74b6937e7f21c4462ad3d4cb976a92 100644
--- a/src/language/DataVariant.hpp
+++ b/src/language/utils/DataVariant.hpp
@@ -2,8 +2,8 @@
 #define DATA_VARIANT_HPP
 
 #include <algebra/TinyVector.hpp>
-#include <language/EmbeddedData.hpp>
 #include <language/FunctionSymbolId.hpp>
+#include <language/utils/EmbeddedData.hpp>
 #include <utils/PugsAssert.hpp>
 
 #include <tuple>
diff --git a/src/language/EmbeddedData.cpp b/src/language/utils/EmbeddedData.cpp
similarity index 67%
rename from src/language/EmbeddedData.cpp
rename to src/language/utils/EmbeddedData.cpp
index 1e75c78b6a39e8bbcd6456e4d9bcebacb60714c3..23ab3c2789e8b3995e6a475999dbb005184fd160 100644
--- a/src/language/EmbeddedData.cpp
+++ b/src/language/utils/EmbeddedData.cpp
@@ -1,6 +1,6 @@
-#include <language/EmbeddedData.hpp>
+#include <language/utils/EmbeddedData.hpp>
 
-#include <language/DataHandler.hpp>
+#include <language/utils/DataHandler.hpp>
 
 std::ostream&
 operator<<(std::ostream& os, const EmbeddedData&)
diff --git a/src/language/EmbeddedData.hpp b/src/language/utils/EmbeddedData.hpp
similarity index 100%
rename from src/language/EmbeddedData.hpp
rename to src/language/utils/EmbeddedData.hpp
diff --git a/src/language/TypeDescriptor.hpp b/src/language/utils/TypeDescriptor.hpp
similarity index 100%
rename from src/language/TypeDescriptor.hpp
rename to src/language/utils/TypeDescriptor.hpp
diff --git a/tests/test_DataVariant.cpp b/tests/test_DataVariant.cpp
index 590d394fb2b977d9fc53751923b73ffa9865736b..e8ce0a3c4f10d52987a486723d0c057894636b90 100644
--- a/tests/test_DataVariant.cpp
+++ b/tests/test_DataVariant.cpp
@@ -1,6 +1,6 @@
 #include <catch2/catch.hpp>
 
-#include <language/DataVariant.hpp>
+#include <language/utils/DataVariant.hpp>
 
 #include <sstream>