diff --git a/src/language/node_processor/BuiltinFunctionProcessor.hpp b/src/language/node_processor/BuiltinFunctionProcessor.hpp
index 7a7397e31fea27d66727bd9f5d99fce147ebb1d3..6d688284b4ab456fb6b4b5b9bc60d803c2992584 100644
--- a/src/language/node_processor/BuiltinFunctionProcessor.hpp
+++ b/src/language/node_processor/BuiltinFunctionProcessor.hpp
@@ -5,7 +5,7 @@
 #include <language/node_processor/FunctionArgumentConverter.hpp>
 #include <language/node_processor/INodeProcessor.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
-#include <language/utils/RuntimeError.hpp>
+#include <utils/Exceptions.hpp>
 
 class BuiltinFunctionExpressionProcessor final : public INodeProcessor
 {
@@ -63,8 +63,8 @@ class BuiltinFunctionProcessor : public INodeProcessor
     try {
       return m_function_expression_processor->execute(context_exec_policy);
     }
-    catch (RuntimeError& e) {
-      throw parse_error(e.message(), {m_argument_node.begin()});
+    catch (NormalError& e) {
+      throw parse_error(e.what(), {m_argument_node.begin()});
     }
   }
 
diff --git a/src/language/utils/PugsFunctionAdapter.hpp b/src/language/utils/PugsFunctionAdapter.hpp
index 5e9a6cf763bb892d2b2eedf1b1c91c26c8d64f16..262977cdf45ee775833c0689cace9713019c3a69 100644
--- a/src/language/utils/PugsFunctionAdapter.hpp
+++ b/src/language/utils/PugsFunctionAdapter.hpp
@@ -5,7 +5,6 @@
 #include <language/ast/ASTNodeDataType.hpp>
 #include <language/node_processor/ExecutionPolicy.hpp>
 #include <language/utils/ASTNodeDataTypeTraits.hpp>
-#include <language/utils/RuntimeError.hpp>
 #include <language/utils/SymbolTable.hpp>
 #include <utils/Array.hpp>
 #include <utils/Exceptions.hpp>
@@ -158,7 +157,7 @@ class PugsFunctionAdapter<OutputType(InputType...)>
                     << rang::style::reset << '\n'
                     << "note: provided function " << rang::fgB::magenta << function.name() << ": "
                     << function.domainMappingNode().string() << rang::style::reset << std::ends;
-      throw RuntimeError(error_message.str());
+      throw NormalError(error_message.str());
     }
 
     return flatten_list;
diff --git a/src/language/utils/RuntimeError.hpp b/src/language/utils/RuntimeError.hpp
deleted file mode 100644
index b5e2c11a5d5df5f08789581606d894733dbd6d59..0000000000000000000000000000000000000000
--- a/src/language/utils/RuntimeError.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef RUNTIME_ERROR_HPP
-#define RUNTIME_ERROR_HPP
-
-#include <string>
-
-class RuntimeError
-{
- private:
-  std::string m_message;
-
- public:
-  const std::string&
-  message() const
-  {
-    return m_message;
-  }
-
-  RuntimeError(const std::string& message) : m_message{message} {}
-
-  RuntimeError()                    = delete;
-  RuntimeError(const RuntimeError&) = delete;
-  RuntimeError(RuntimeError&&)      = delete;
-
-  ~RuntimeError() = default;
-};
-
-#endif   // RUNTIME_ERROR_HPP
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 042dca3f0d80e37f3753ca8566d70b4ef0e2f124..195aa699acf565f8edd2ef5a80a515ede3092348 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -70,7 +70,6 @@ add_executable (unit_tests
   test_PCG.cpp
   test_PugsAssert.cpp
   test_RevisionInfo.cpp
-  test_RuntimeError.cpp
   test_SparseMatrixDescriptor.cpp
   test_SymbolTable.cpp
   test_TinyMatrix.cpp
diff --git a/tests/test_RuntimeError.cpp b/tests/test_RuntimeError.cpp
deleted file mode 100644
index cd1216cca89ca87535d872ca4d79a5127ae4c956..0000000000000000000000000000000000000000
--- a/tests/test_RuntimeError.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <catch2/catch.hpp>
-
-#include <language/utils/RuntimeError.hpp>
-
-// clazy:excludeall=non-pod-global-static
-
-TEST_CASE("RuntimeError", "[language]")
-{
-  RuntimeError e{"error message"};
-  REQUIRE(e.message() == "error message");
-}