diff --git a/dune/stuff/common/string.hh b/dune/stuff/common/string.hh
index 4f004938adc003d31ee7ac00024ed900cfc698e6..dc440bbc4fd7a5101724f6e8b9665c0c57f8e4b9 100644
--- a/dune/stuff/common/string.hh
+++ b/dune/stuff/common/string.hh
@@ -95,11 +95,26 @@ inline std::vector<T>
 tokenize(const std::string& msg, const std::string& seperators,
          const boost::algorithm::token_compress_mode_type mode = boost::algorithm::token_compress_off)
 {
-  std::vector<T> strings;
+  std::vector<std::string> strings;
+  boost::algorithm::split(strings, msg, boost::algorithm::is_any_of(seperators), mode);
+  std::vector<T> ret(strings.size());
+  size_t i = 0;
+  // special case for empty strings to avoid non-default init
+  std::generate(
+      std::begin(ret), std::end(ret), [&]() { return strings[i++].empty() ? T() : convertFrom<T>(strings[i - 1]); });
+  return ret;
+}
+
+template <>
+inline std::vector<std::string> tokenize(const std::string& msg, const std::string& seperators,
+                                         const boost::algorithm::token_compress_mode_type mode)
+{
+  std::vector<std::string> strings;
   boost::algorithm::split(strings, msg, boost::algorithm::is_any_of(seperators), mode);
   return strings;
 }
 
+//! returns string with local time in current locale's format
 inline std::string fromTime(time_t cur_time = time(NULL))
 {
   return ctime(&cur_time);