diff --git a/src/OpenFOAM/primitives/strings/string/string.C b/src/OpenFOAM/primitives/strings/string/string.C
index d131a686ca00fd7878a51701dda41cbb64ab896e..dac116893cc191a07292608e343d2fa61845b5e7 100644
--- a/src/OpenFOAM/primitives/strings/string/string.C
+++ b/src/OpenFOAM/primitives/strings/string/string.C
@@ -209,32 +209,16 @@ Foam::string& Foam::string::expand()
                 *this = home(user)/file;
             }
         }
-        else
+        else if (operator[](0) == '.')
         {
-            // expand a lone initial '.' and './' into CWD
-            // otherwise strip leading './' sequences
-            while
-            (
-                operator[](0) == '.'
-             && (size() == 1 || operator[](1) == '/')
-            )
+            // Expand initial '.' and './' into cwd
+            if (size() == 1)
             {
-                // handle leading ".////" as well
-                size_type slashPos = 1;
-                while (size() > slashPos && operator[](slashPos) == '/')
-                {
-                    ++slashPos;
-                }
-
-                if (size() <= slashPos)
-                {
-                    *this = cwd();
-                    break;
-                }
-                else
-                {
-                    std::string::erase(0, slashPos);
-                }
+                *this = cwd();
+            }
+            else if (operator[](1) == '/')
+            {
+                std::string::replace(0, 1, cwd());
             }
         }
     }