diff --git a/base/src/TApplication.cxx b/base/src/TApplication.cxx
index f17fc69ec95c01dfb21374c9d13cc17e0dff9a86..77b57578e37bef40c3b752c0ec054e840d2b1f97 100644
--- a/base/src/TApplication.cxx
+++ b/base/src/TApplication.cxx
@@ -605,7 +605,7 @@ void TApplication::ProcessLine(const char *line, Bool_t sync, int *err)
       if (len>1) {
          if (strcmp(fn+len-1,"d")==0) mode = "d";
          else if (strcmp(fn+len-1,"o")==0) mode = "o";
-         len--;
+         if (mode) len--;
       }
       Bool_t compile = !strncmp(fn+len-1,"+",1);
       Bool_t remove  = !strncmp(fn+len-2,"++",2);
diff --git a/cint/src/loadfile.c b/cint/src/loadfile.c
index e4b89d04fb5677263480326fa936d19545d242f4..da38e3e4507a7ba24d49860258b327dd87ddc078 100644
--- a/cint/src/loadfile.c
+++ b/cint/src/loadfile.c
@@ -1040,8 +1040,8 @@ char *filenamein;
     } else {
       if (compiler_option) {
          switch(compiler_option[0]) {
-            case 'o': compiler_option = "ko";
-            case 'd': compiler_option = "kd";
+            case 'o': compiler_option = "ko"; break;
+            case 'd': compiler_option = "kd"; break;
             default: G__genericerror("Should not have been reached!");
          }
       } else {
diff --git a/cint/src/v6_loadfile.cxx b/cint/src/v6_loadfile.cxx
index e4b89d04fb5677263480326fa936d19545d242f4..da38e3e4507a7ba24d49860258b327dd87ddc078 100644
--- a/cint/src/v6_loadfile.cxx
+++ b/cint/src/v6_loadfile.cxx
@@ -1040,8 +1040,8 @@ char *filenamein;
     } else {
       if (compiler_option) {
          switch(compiler_option[0]) {
-            case 'o': compiler_option = "ko";
-            case 'd': compiler_option = "kd";
+            case 'o': compiler_option = "ko"; break;
+            case 'd': compiler_option = "kd"; break;
             default: G__genericerror("Should not have been reached!");
          }
       } else {