diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index 84e0b78..f27bdea 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -1810,7 +1810,8 @@
   parts = regexplode(str, "@WE[A-SU]*[0-9]");
   i = sizeof(parts);
 
-  if (i>1) {
+  if (i>1)
+  {
     int j, t;
     closure *name_cls;
 
@@ -1823,7 +1824,8 @@
       else if (stringp(obs[j]))
         name_cls[j] = obs[j];
 
-    while ((i-= 2)>0) {
+    while ((i-= 2)>0)
+    {
       int ob_nr;
       // zu ersetzendes Token in Fall und Objektindex aufspalten
       ob_nr = parts[i][<1]-'1';
@@ -1889,28 +1891,37 @@
         default:
           continue;
       }
-      
+
       // wenn tmp ein String war, weisen wir es hier pauschal zu
       if (stringp(tmp))
         parts[i] = tmp;
 
       // auf Wunsch wird nach Satzenden gross geschrieben
       if (caps)
-        switch (parts[i-1][<2..]) {
-          case ". ":  case "! ":  case "? ":
-          case ".":   case "!":   case "?":
-          case ".\n": case "!\n": case "?\n":
-          case "\" ": case "\"\n":
+      {
+        // Wenn das vorhergehende parts[i] == "" ist, sind wir am Anfang vom
+        // String und dies wird wie ein Satzende vorher behandelt.
+        if (parts[i-1] == "")
             parts[i] = capitalize(parts[i]);
-            break;
+        else
+        {
+          switch (parts[i-1][<2..])
+          {
+            case ". ":  case "! ":  case "? ":
+            case ".":   case "!":   case "?":
+            case ".\n": case "!\n": case "?\n":
+            case "\" ": case "\"\n":
+              parts[i] = capitalize(parts[i]);
+              break;
+          }
         }
+      }
     }
     return implode(parts, "");
   }
   return str;
 }
 
-
 //replacements for dropped efuns in LD
 #if !__EFUN_DEFINED__(extract)
 deprecated varargs string extract(string str, int from, int to) {
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index 84e0b78..f27bdea 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -1810,7 +1810,8 @@
   parts = regexplode(str, "@WE[A-SU]*[0-9]");
   i = sizeof(parts);
 
-  if (i>1) {
+  if (i>1)
+  {
     int j, t;
     closure *name_cls;
 
@@ -1823,7 +1824,8 @@
       else if (stringp(obs[j]))
         name_cls[j] = obs[j];
 
-    while ((i-= 2)>0) {
+    while ((i-= 2)>0)
+    {
       int ob_nr;
       // zu ersetzendes Token in Fall und Objektindex aufspalten
       ob_nr = parts[i][<1]-'1';
@@ -1889,28 +1891,37 @@
         default:
           continue;
       }
-      
+
       // wenn tmp ein String war, weisen wir es hier pauschal zu
       if (stringp(tmp))
         parts[i] = tmp;
 
       // auf Wunsch wird nach Satzenden gross geschrieben
       if (caps)
-        switch (parts[i-1][<2..]) {
-          case ". ":  case "! ":  case "? ":
-          case ".":   case "!":   case "?":
-          case ".\n": case "!\n": case "?\n":
-          case "\" ": case "\"\n":
+      {
+        // Wenn das vorhergehende parts[i] == "" ist, sind wir am Anfang vom
+        // String und dies wird wie ein Satzende vorher behandelt.
+        if (parts[i-1] == "")
             parts[i] = capitalize(parts[i]);
-            break;
+        else
+        {
+          switch (parts[i-1][<2..])
+          {
+            case ". ":  case "! ":  case "? ":
+            case ".":   case "!":   case "?":
+            case ".\n": case "!\n": case "?\n":
+            case "\" ": case "\"\n":
+              parts[i] = capitalize(parts[i]);
+              break;
+          }
         }
+      }
     }
     return implode(parts, "");
   }
   return str;
 }
 
-
 //replacements for dropped efuns in LD
 #if !__EFUN_DEFINED__(extract)
 deprecated varargs string extract(string str, int from, int to) {
