diff --git a/pub/lib/file_in.cpp b/pub/lib/file_in.cpp
index 4024c67c6ba238044b9f36d9f8fd33ccee84692f..e5b113d63124e300eb094de3bd36d0912ae1fe54 100644
--- a/pub/lib/file_in.cpp
+++ b/pub/lib/file_in.cpp
@@ -499,75 +499,78 @@ void NFileIn::Load_96(FILE* F_in, string fshort)
     // Read block 1 = format tag.
     if (!triv::freadln(F_in, &lin))
         throw "file empty or starting with empty line";
-    if (lin != string("ASCII-96"))
+    if (lin != "ASCII-96")
         throw ".i96 file starts with illegal header [" + lin + "]";
 
     // Read block 2: string parameters.
-    if (!triv::freadln(F_in, &lin) || lin.length() < 9 || lin.substr(0, 9) != string("(a24,a56)"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 9 || lin.substr(0, 9) != "(a24,a56)")
         throw "no valid intro to block 2";
-    if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != string("fil"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != "fil")
         throw "tag 'fil' not found in block 2";
     if (triv::strip(lin.substr(24)) != fshort) {
         cout << "warning: i96 file '" << fshort << "' renamed from '" << lin.substr(24) << "'\n";
     }
-    if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != string("tit"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != "tit")
         throw "tag 'tit' not found in block 2";
     fout->lDoc.push_back(triv::strip(lin.substr(24)));
-    while (triv::freadln(F_in, &lin) && lin.length() >= 3 && lin.substr(0, 3) == string("doc"))
+    while (triv::freadln(F_in, &lin) && lin.length() >= 3 && lin.substr(0, 3) == "doc")
         if (lin.length() >= 24)
             fout->lDoc.push_back(triv::strip(lin.substr(24)));
-    if (lin.substr(0, 3) != string("dir"))
+    if (lin.substr(0, 3) != "dir")
         throw "tag 'dir' not found in block 2, line '" + lin + "'";
     while (triv::freadln(F_in, &lin)
-           && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 2")))
+           && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 2"))
         ;
 
     // Read block 3: integer parameters.
     if (!triv::freadln(F_in, &lin))
         throw "missed &eob 2";
-    if (lin.length() < 9 || lin.substr(0, 9) != string("(a24,i16)"))
+    if (lin.length() < 9 || lin.substr(0, 9) != "(a24,i16)")
         throw "no valid intro to block 3";
     while (triv::freadln(F_in, &lin)
-           && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 3")))
+           && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 3"))
         ;
 
     // Read block 4: floating-point parameters.
     if (!triv::freadln(F_in, &lin))
         throw "missed &eob 3";
-    if (lin.length() < 16 || lin.substr(0, 16) != string("(a24,a24,g20.10)"))
+    if (lin.length() < 16 || lin.substr(0, 16) != "(a24,a24,g20.10)")
         throw "Intro to block 4 is invalid :'" + lin + "'";
-    while (triv::freadln(F_in, &lin) && lin.length() >= 48 && lin.substr(0, 4) != string("&eob")) {
-        if (sscanf(lin.substr(48).c_str(), "%lg", &r0) != 1)
-            throw "no real value in rpar line";
-        fout->RPar.push_back(CParam(lin.substr(0, 24), lin.substr(24, 24), r0));
+    while (triv::freadln(F_in, &lin) && !(lin.length() >= 4 && lin.substr(0, 4)=="&eob")) {
+        if (lin.length()<=48 || sscanf(lin.substr(48).c_str(), "%lg", &r0) != 1)
+            cout << "warning: file " << fshort << " has empty rpar " << lin.substr(0, 16) << "\n";
+        else
+            fout->RPar.push_back(CParam(lin.substr(0, 24), lin.substr(24, 24), r0));
     }
 
     // Read block 5: coordinate names and units.
-    if (lin.substr(0, 6) != string("&eob 4"))
+    if (lin.substr(0, 6) != "&eob 4")
         throw "no valid eob 4";
     if (!triv::freadln(F_in, &lin) || lin.length() < 9
-        || lin.substr(0, 12) != string("(a4,a24,a24)"))
+        || lin.substr(0, 12) != "(a4,a24,a24)")
         throw "no valid intro to block 5";
-    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("x"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != "x")
         throw "no x coordinate";
     fout->xco = CCoord(triv::strip(lin.substr(4, 24)),
                        lin.length()>28 ? triv::strip(lin.substr(28, 24)) : "");
-    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("y"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != "y")
         throw "no y coordinate";
     fout->yco = CCoord(triv::strip(lin.substr(4, 24)),
                        lin.length()>28 ? triv::strip(lin.substr(28, 24)) : "");
-    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("z"))
-        throw "no z coordinate";
-    fout->ZCo.push_back(CCoord(triv::strip(lin.substr(4, 24)),
-                               lin.length()>28 ? triv::strip(lin.substr(28, 24)) : ""));
+    while (triv::freadln(F_in, &lin) && !(lin.length() >= 4 && lin.substr(0, 4)=="&eob")) {
+        if (lin.length()<=4 || lin.substr(0, 1) != "z")
+            throw "no z coordinate";
+        fout->ZCo.push_back(CCoord(triv::strip(lin.substr(4, 24)),
+                                   lin.length()>28 ? triv::strip(lin.substr(28, 24)) : ""));
+    }
 
     // Read block 6: history.
-    if (!triv::freadln(F_in, &lin) || lin.length() < 6 || lin.substr(0, 6) != string("&eob 5"))
+    if (lin.length() < 6 || lin.substr(0, 6) != "&eob 5")
         throw "no valid eob 5";
-    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 5) != string("(a80)"))
+    if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 5) != "(a80)")
         throw "no valid intro to block 6";
     while (triv::freadln(F_in, &lin) > 0
-           && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 6")))
+           && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 6"))
         fout->lDoc.push_back(lin);
 
     // Read block 7 = spectra.
@@ -581,7 +584,7 @@ void NFileIn::Load_96(FILE* F_in, string fshort)
     for (int j = 0; j < nspec; ++j) {
         sout = PSpec(new CSpec);
         if (!triv::freadln(F_in, &lin) || lin.length() < 10
-            || lin.substr(0, 9) != string("&spectrum")
+            || lin.substr(0, 9) != "&spectrum"
             || sscanf(lin.substr(10).c_str(), "%i", &ival) != 1 || ival != j + 1)
             throw "no valid intro to spectrum";
         if (!triv::freadln(F_in, &lin) || sscanf(lin.c_str(), "%i %lg", &n, &r0) != 2)
diff --git a/pub/lib/toplevel.cpp b/pub/lib/toplevel.cpp
index 350192fbf93eeaacb3277cc311689de6f3f05e92..c73cbe90662cf815950d5327d03b79b6324dd38e 100644
--- a/pub/lib/toplevel.cpp
+++ b/pub/lib/toplevel.cpp
@@ -187,7 +187,7 @@ void CFrida::interactive()
             cout << "'" << cmdline << "' failed:\n  " << ex << "\n";
             NMacro::clear();
         } catch (const char* ex) {
-            cout << "BUG: '" << cmdline << "' failed with unforeseen message:\n  " << ex << "\n";
+            cout << "'" << cmdline << "' failed:\n  " << ex << "\n";
             NMacro::clear();
         } catch (std::exception& ex) {
             cout << "BUG: '" << cmdline << "' failed with unforeseen std exception:\n  "