diff --git a/src/basics/CMakeLists.txt b/src/basics/CMakeLists.txt
index 5bb35b856ed331f0de43b5d913d8fed05283e1ec..9e876d834508af0d340bfe4cdd18bcc6a37d3b11 100644
--- a/src/basics/CMakeLists.txt
+++ b/src/basics/CMakeLists.txt
@@ -53,7 +53,5 @@ target_include_directories(${library_name} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/Cor
 target_include_directories(${library_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 
 include (${CMAKE_PATH}/3rd/mpi.cmake)
-include (${CMAKE_PATH}/3rd/boost.cmake)
-linkBoost ("")
 
 vf_add_tests()
\ No newline at end of file
diff --git a/src/basics/Core/StringUtilities/StringUtil.cpp b/src/basics/Core/StringUtilities/StringUtil.cpp
index b98b13fd520542d6624158a53c1856c1ea17992c..42e8669c3e907c6f149b9bd4418a12fe73e7d211 100644
--- a/src/basics/Core/StringUtilities/StringUtil.cpp
+++ b/src/basics/Core/StringUtilities/StringUtil.cpp
@@ -1,6 +1,7 @@
 #include "StringUtil.h"
 
-#include <boost/algorithm/string.hpp>
+#include <regex>
+#include <sstream>
 
 std::string StringUtil::findAndReplace(const std::string &source, const std::string& find, const std::string& replace)
 {
@@ -97,11 +98,27 @@ std::vector<std::string> split(const std::string& str, char delim = ' ')
     return list;
 }
 
+std::vector<std::string> StringUtil::split(const std::string& input, const std::string& delim/*= " "*/)
+{
+    std::stringstream ss;
+    ss << "[" << delim << "]";
+
+    std::regex re(ss.str());
+    std::sregex_token_iterator first{input.begin(), input.end(), re, -1}, last; //the '-1' is what makes the regex split (-1 := what was not matched)
+    std::vector<std::string> tokens{first, last};
+    tokens.erase(std::remove_if(tokens.begin(), tokens.end(), [](std::string& token)
+    {
+        return token.empty();
+    }), tokens.end());
+
+    return tokens;
+}
+
 std::vector<int> StringUtil::toIntVector(const std::string& input)
 {
     std::vector<int> v;
     std::vector<std::string> inputEntries;
-    boost::algorithm::split(inputEntries, input, boost::is_any_of("\t\n "));
+    inputEntries = split(input, " \n\t");
     for(std::string entry : inputEntries)
         if (entry != "")
             v.push_back(toInt(entry));
@@ -112,7 +129,7 @@ std::vector<unsigned int> StringUtil::toUintVector(const std::string & input)
 {
 	std::vector<unsigned int> v;
 	std::vector<std::string> inputEntries;
-	boost::algorithm::split(inputEntries, input, boost::is_any_of("\t\n "));
+    inputEntries = split(input, " \n\t");
 	for(std::string entry : inputEntries)
 		if (entry != "")
 			v.push_back(toInt(entry));
@@ -123,7 +140,7 @@ std::vector<bool> StringUtil::toBoolVector(const std::string & input)
 {
 	std::vector<bool> v;
 	std::vector<std::string> inputEntries;
-	boost::algorithm::split(inputEntries, input, boost::is_any_of("\t\n "));
+    inputEntries = split(input, " \n\t");
 	for(std::string entry : inputEntries)
 	{
 		bool b = 0;
@@ -136,20 +153,14 @@ std::vector<bool> StringUtil::toBoolVector(const std::string & input)
 
 std::vector<std::string> StringUtil::toStringVector(const std::string & input)
 {
-	std::vector<std::string> v;
-	std::vector<std::string> inputEntries;
-	boost::algorithm::split(inputEntries, input, boost::is_any_of("\t\n "));
-	for(std::string entry : inputEntries)
-		if (entry != "")
-			v.push_back(toString(entry));
-	return v;
+    return split(input, " \n\t");
 }
 
 BASICS_EXPORT std::vector<double> StringUtil::toDoubleVector(const std::string & input)
 {
 	std::vector<double> v;
 	std::vector<std::string> inputEntries;
-	boost::algorithm::split(inputEntries, input, boost::is_any_of("\t\n "));
+    inputEntries = split(input, " \n\t");
 	for(std::string entry : inputEntries)
 		if (entry != "")
 			v.push_back(toDouble(entry));
diff --git a/src/basics/Core/StringUtilities/StringUtil.h b/src/basics/Core/StringUtilities/StringUtil.h
index dd7f77986f3b15d4f875d2a6f1c177553bac96e3..e860418cb826b800701c1ede60a378fa07f8cf92 100644
--- a/src/basics/Core/StringUtilities/StringUtil.h
+++ b/src/basics/Core/StringUtilities/StringUtil.h
@@ -18,6 +18,7 @@ public:
     static BASICS_EXPORT std::string findAndReplace(const std::string &source, const std::string& find, const std::string& replace);
     static BASICS_EXPORT std::string makeUpper(const std::string& instring);
     static BASICS_EXPORT std::string makeLower(const std::string& instring);
+    static BASICS_EXPORT std::vector<std::string> split(const std::string& input, const std::string& delim = " ");
     static BASICS_EXPORT bool contains(const std::string& source, const char *find);
     static BASICS_EXPORT std::string pad(const std::string& input, char pad, int length);
     static BASICS_EXPORT std::string trim(const std::string &input, const std::string &trim = std::string(" \t\n"));
diff --git a/src/basics/Core/StringUtilities/StringUtilTest.cpp b/src/basics/Core/StringUtilities/StringUtilTest.cpp
index 48df13bc2a1fe4c65b3c5c396876a7a5d29491ea..e87e15423ec74258f3be9a565c118954355aff38 100644
--- a/src/basics/Core/StringUtilities/StringUtilTest.cpp
+++ b/src/basics/Core/StringUtilities/StringUtilTest.cpp
@@ -36,5 +36,26 @@ TEST(StringUtilTest, toIntVector)
 
     auto result = StringUtil::toIntVector(input);
 
+    ASSERT_THAT(result,testing::Eq(expected_result));
+}
+
+TEST(StringUtilTest, splitIntoStringsWithDelimeter)
+{
+    const std::string input {"1   2\n3 4\t5"};
+    const std::string delimeter {" \n\t"};
+    std::vector<std::string> expected_result {"1", "2", "3", "4", "5"};
+
+    auto result = StringUtil::split(input, delimeter);
+
+    ASSERT_THAT(result,testing::Eq(expected_result));
+}
+
+TEST(StringUtilTest, toStringVector)
+{
+    const std::string input {"1   2\n3 4\t5"};
+    std::vector<std::string> expected_result {"1", "2", "3", "4", "5"};
+
+    auto result = StringUtil::toStringVector(input);
+
     ASSERT_THAT(result,testing::Eq(expected_result));
 }
\ No newline at end of file