diff --git a/src/library.cpp b/src/library.cpp
index 892818ff9ca873509226b13ab4b67ebd9b4e4b3a..87cc5d99d882d58394f95fd5a2863bb5c64a495a 100644
--- a/src/library.cpp
+++ b/src/library.cpp
@@ -277,12 +277,24 @@ void lammps_commands_string(void *ptr, char *str)
 
   BEGIN_CAPTURE
   {
-    char *ptr = strtok(copy,"\n");
-    if (ptr) concatenate_lines(ptr);
-    while (ptr) {
-      lmp->input->one(ptr);
-      ptr = strtok(NULL,"\n");
-      if (ptr) concatenate_lines(ptr);
+    char *ptr = copy;
+    for (int i=0; i < n-1; ++i) {
+
+      // handle continuation character as last character in line or string
+      if ((copy[i] == '&') && (copy[i+1] == '\n'))
+        copy[i+1] = copy[i] = ' ';
+      else if ((copy[i] == '&') && (copy[i+1] == '\0'))
+        copy[i] = ' ';
+
+      if ((copy[i] == '\r') || (copy[i] == '\t'))
+        copy[i] = ' ';
+
+      if (copy[i] == '\n') {
+        copy[i] = '\0';
+        lmp->input->one(ptr);
+        ptr = copy + i+1;
+      } else if (copy[i+1] == '\0')
+        lmp->input->one(ptr);
     }
   }
   END_CAPTURE