diff --git a/fluid/Fd_Snap_Action.h b/fluid/Fd_Snap_Action.h
index bfb32624cb8259f88b9aa43e53857770ad51307e..a7485c77055e7e2548a7a415fbeff5dc0a0f844a 100644
--- a/fluid/Fd_Snap_Action.h
+++ b/fluid/Fd_Snap_Action.h
@@ -20,7 +20,7 @@
 #include "fluid.h"
 #include "Fl_Window_Type.h"
 
-#include "../src/Fl_String.H"
+#include <string>
 
 struct Fl_Menu_Item;
 
diff --git a/fluid/autodoc.h b/fluid/autodoc.h
index 1d6ec621b1a3bfd9fd4684824c1373b7c2847f08..51f9739ea9002b1975cfe47044ac5bec4e69a45b 100644
--- a/fluid/autodoc.h
+++ b/fluid/autodoc.h
@@ -22,12 +22,12 @@
 #ifndef fl_screenshot_H
 #define fl_screenshot_H
 
-#include "../src/Fl_String.H"
-
 #include <FL/Fl_Export.H>
 #include <FL/Fl_Window.H>
 #include <FL/Fl_Rect.H>
 
+#include <string>
+
 /** Class to initialize a Rect by providing the margin around a rect. */
 class Fl_Margin : public Fl_Rect {
 public:
diff --git a/fluid/code.cxx b/fluid/code.cxx
index 0e715441a2cd27fb0c6fa5f875e86d61e494bc2b..3c789abd38db3320ed9c99838f4214e6a0183f52 100644
--- a/fluid/code.cxx
+++ b/fluid/code.cxx
@@ -798,7 +798,7 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_codeview) {
   // Remember the last code file location for MergeBack
   if (s && g_project.write_mergeback_data && !to_codeview) {
     std::string proj_filename = g_project.projectfile_path() + g_project.projectfile_name();
-    int i, n = proj_filename.size();
+    int i, n = (int)proj_filename.size();
     for (i=0; i<n; i++) if (proj_filename[i]=='\\') proj_filename[i] = '/';
     Fl_Preferences build_records(Fl_Preferences::USER_L, "fltk.org", "fluid-build");
     Fl_Preferences path(build_records, proj_filename.c_str());
diff --git a/fluid/code.h b/fluid/code.h
index 84d6a4218752444cd9bffcf4543e9182845e7797..758e7bf453403d07cbf597a1993cc31f06911f6b 100644
--- a/fluid/code.h
+++ b/fluid/code.h
@@ -18,10 +18,10 @@
 #define _FLUID_CODE_H
 
 #include <FL/fl_attr.h>
-#include "../src/Fl_String.H"
 
 #include <stdarg.h>
 #include <stdio.h>
+#include <string>
 
 class Fl_Type;
 struct Fd_Identifier_Tree;
diff --git a/fluid/fluid.h b/fluid/fluid.h
index e8730efb2d5f6868e38aea77a3f4b5d22bdcd1dc..1402319362d2ccb2075ee2f23e65f2cc863d6c48 100644
--- a/fluid/fluid.h
+++ b/fluid/fluid.h
@@ -20,7 +20,8 @@
 #include "fluid_filename.h"
 #include <FL/Fl_Preferences.H>
 #include <FL/Fl_Menu_Item.H>
-#include "../src/Fl_String.H"
+
+#include <string>
 
 #define BROWSERWIDTH 300
 #define BROWSERHEIGHT 500
diff --git a/fluid/fluid_filename.cxx b/fluid/fluid_filename.cxx
index 45cb7469c7229dac48ba9b3e94d78c169a104fc6..9bb3b1f73214b14726f2c90a681f0536c8a83ee4 100644
--- a/fluid/fluid_filename.cxx
+++ b/fluid/fluid_filename.cxx
@@ -30,12 +30,11 @@
 */
 
 #include <stdlib.h>
+#include <string>
 
 #include <FL/filename.H>
 #include <FL/Fl.H>
 #include <FL/fl_string_functions.h>
-
-#include "../src/Fl_String.H"       // NOTE: FLTK 1.4.x only !
 #include "../src/flstring.h"
 
 
@@ -187,7 +186,7 @@ std::string fl_filename_shortened(const std::string &filename, int max_chars) {
   static int home_chars = -1;
   if (home_chars==-1) {
     home = fl_filename_expand(tilde);
-    home_chars = fl_utf_nb_char((const uchar*)home.c_str(), home.size());
+    home_chars = fl_utf_nb_char((const uchar*)home.c_str(), (int)home.size());
   }
   std::string homed_filename;
 #if defined(_WIN32) || defined(__APPLE__)
@@ -203,7 +202,7 @@ std::string fl_filename_shortened(const std::string &filename, int max_chars) {
   // C style pointer will stay valid until filename is modified.
   const unsigned char *u8str = reinterpret_cast<const unsigned char *>(homed_filename.c_str());
   // Count the number of UTF-8 characters in the name.
-  int num_chars = fl_utf_nb_char(u8str, homed_filename.size());
+  int num_chars = fl_utf_nb_char(u8str, (int)homed_filename.size());
   if (num_chars+ell_bytes-1 > max_chars) {
     // Create a new string by replacing characters in the middle.
     int remove_chars = num_chars - max_chars + ell_bytes;
diff --git a/fluid/fluid_filename.h b/fluid/fluid_filename.h
index 7bcea51fb1fc01d4e945d943568f1da2309ef1e1..5fa23c82e8a078f2762de87859124c5d375d3921 100644
--- a/fluid/fluid_filename.h
+++ b/fluid/fluid_filename.h
@@ -39,7 +39,7 @@
 
 #  if defined(__cplusplus)
 
-#include "../src/Fl_String.H"
+#include <string>
 
 std::string fl_filename_shortened(const std::string &filename, int maxchars);
 std::string fl_filename_name(const std::string &filename);
diff --git a/fluid/mergeback.h b/fluid/mergeback.h
index 658e949289ddd80aa02aba40aedc4c2dd6823527..f828e96691f6c7f8ec4fee91a290809aa4ccf0cc 100644
--- a/fluid/mergeback.h
+++ b/fluid/mergeback.h
@@ -22,9 +22,8 @@
 
 #include <FL/fl_attr.h>
 
-#include "../src/Fl_String.H"
-
 #include <stdio.h>
+#include <string>
 
 const int FD_TAG_GENERIC = 0;
 const int FD_TAG_CODE = 1;
diff --git a/fluid/shell_command.cxx b/fluid/shell_command.cxx
index a6c49c82360b603ecb91135a0ca04ed980ad6ba7..e961fc24c94f3600b17d60a3553fee492227032e 100644
--- a/fluid/shell_command.cxx
+++ b/fluid/shell_command.cxx
@@ -364,7 +364,7 @@ void shell_pipe_cb(FL_SOCKET, void*) {
 
 static void expand_macro(std::string &cmd, const std::string &macro, const std::string &content) {
   for (int i=0;;) {
-    i = cmd.find(macro, i);
+    i = (int)cmd.find(macro, i);
     if (i==(int)std::string::npos) break;
     cmd.replace(i, macro.size(), content);
   }
diff --git a/fluid/shell_command.h b/fluid/shell_command.h
index f167d3c33221aa80bb55a13c7e902bd6ee25f96e..e5f8e3e8799c5f49200859c4eab6437252ed81dc 100644
--- a/fluid/shell_command.h
+++ b/fluid/shell_command.h
@@ -19,11 +19,11 @@
 
 #include "fluid.h"
 
-#include "../src/Fl_String.H"
 #include <FL/Enumerations.H>
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string>
 #if defined(_WIN32) && !defined(__CYGWIN__)
 #  include <direct.h>
 #  include <windows.h>
diff --git a/src/Fl_Help_View.cxx b/src/Fl_Help_View.cxx
index 3c1081d9b72d5fdc4a95f391e140d8d9e14a1c74..572318def2da897bf2f04b851dd34f25f5510cc6 100644
--- a/src/Fl_Help_View.cxx
+++ b/src/Fl_Help_View.cxx
@@ -52,7 +52,6 @@
 #include <FL/Fl_Pixmap.H>
 #include <FL/Fl_Menu_Item.H>
 #include "Fl_Int_Vector.H"
-#include "Fl_String.H"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -63,6 +62,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <math.h>
+#include <string>
 
 #define MAX_COLUMNS     200
 
@@ -304,14 +304,14 @@ void Fl_Help_View::hv_draw(const char *t, int x, int y, int entity_extra_length)
 /* Note: Don't use Doxygen docs for this internal class.
 
   Internal class to manage the Fl_Help_View edit buffer.
-  This is a subclass of Fl_String since FLTK 1.4.0.
+  This is a subclass of Fl_String since FLTK 1.4.0 and std::string since 1.5.0.
 
   This class is for internal use in this file. Its sole purpose is to
   allow buffer management to avoid buffer overflows in stack variables
   used to edit strings for formatting and drawing (STR #3275).
 */
 
-class HV_Edit_Buffer : public Fl_String {
+class HV_Edit_Buffer : public std::string {
 public:
   // use default constructor and destructor, none defined here
 
@@ -1021,7 +1021,7 @@ Fl_Help_View::draw()
           if (qch < 0)
             buf += '&';
           else {
-            int utf8l = buf.size();
+            size_t utf8l = buf.size();
             buf.add(qch);
             utf8l = buf.size() - utf8l; // length of added UTF-8 text
             const char *oldptr = ptr;
diff --git a/src/Fl_Native_File_Chooser_Kdialog.H b/src/Fl_Native_File_Chooser_Kdialog.H
index 8b50b36fad890665af88c73ad756083abb1e41f7..b90f77ca49a62518dcaf14370912068ddc5a86a0 100644
--- a/src/Fl_Native_File_Chooser_Kdialog.H
+++ b/src/Fl_Native_File_Chooser_Kdialog.H
@@ -24,7 +24,7 @@
  */
 
 #include <FL/Fl_Native_File_Chooser.H>
-#include "Fl_String.H"
+#include <string>
 
 class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK_Driver {
   friend class Fl_Native_File_Chooser;
@@ -46,7 +46,7 @@ class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK
   int count() const FL_OVERRIDE;
   const char *filename() const FL_OVERRIDE;
   const char *filename(int i) const FL_OVERRIDE;
-  virtual void build_command(Fl_String& command);
+  virtual void build_command(std::string& command);
   int show() FL_OVERRIDE;
   char *parse_filter(const char *f);
   const char *filter() const FL_OVERRIDE;
@@ -58,7 +58,7 @@ class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK
   const char *directory() const FL_OVERRIDE;
   void title(const char *val) FL_OVERRIDE;
   const char *title() const FL_OVERRIDE;
-  void shell_quote(Fl_String& s);
+  void shell_quote(std::string& s);
 };
 
 /**
diff --git a/src/Fl_Native_File_Chooser_Kdialog.cxx b/src/Fl_Native_File_Chooser_Kdialog.cxx
index 75c5e60509840b80bd2f189b777299a64e490613..d0580162dbd769befec2c9fcd52078690be0eead 100644
--- a/src/Fl_Native_File_Chooser_Kdialog.cxx
+++ b/src/Fl_Native_File_Chooser_Kdialog.cxx
@@ -73,7 +73,7 @@ static int fnfc_dispatch(int /*event*/, Fl_Window* /*win*/) {
 }
 
 
-void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) {
+void Fl_Kdialog_Native_File_Chooser_Driver::build_command(std::string& command) {
   const char *option;
   switch (_btype) {
     case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
@@ -105,7 +105,7 @@ void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) {
   // Build command
   command = "kdialog";
   if (_title) {
-    Fl_String quoted_title = _title; shell_quote(quoted_title);
+    std::string quoted_title = _title; shell_quote(quoted_title);
     command += " --title ";
     command += quoted_title;
   }
@@ -114,7 +114,7 @@ void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) {
   command += " ";
   command += preset;
   if (_parsedfilt) {
-    Fl_String quoted_filt = _parsedfilt; shell_quote(quoted_filt);     // NOTE: orig code used double quoting -erco 1/10/24
+    std::string quoted_filt = _parsedfilt; shell_quote(quoted_filt);     // NOTE: orig code used double quoting -erco 1/10/24
     command += " ";
     command += quoted_filt;
   }
@@ -146,7 +146,7 @@ int Fl_Kdialog_Native_File_Chooser_Driver::show() {
       return retval;
   }
 
-  Fl_String command;
+  std::string command;
   build_command(command);
   //fprintf(stderr, "DEBUG: POPEN: %s\n", command.c_str());
   FILE *pipe = popen(command.c_str(), "r");
@@ -310,8 +310,8 @@ const char *Fl_Kdialog_Native_File_Chooser_Driver::title() const {
 // Add shell quotes around string 's'.
 // Handles quoting embedded quotes.
 //
-void Fl_Kdialog_Native_File_Chooser_Driver::shell_quote(Fl_String& s) {
-  Fl_String out = "'";                          // leading quote
+void Fl_Kdialog_Native_File_Chooser_Driver::shell_quote(std::string& s) {
+  std::string out = "'";                          // leading quote
   for (int t=0; t<(int)s.size(); t++) {
     if (s[t] == '\'') out += "'\"'\"'";         // quote any quotes
     else              out += s[t];
diff --git a/src/Fl_Native_File_Chooser_Zenity.H b/src/Fl_Native_File_Chooser_Zenity.H
index 790180378c3bb73b3380785f4535fdd82550520b..6d9804341c033a83d7df79d5b1d74092906b9415 100644
--- a/src/Fl_Native_File_Chooser_Zenity.H
+++ b/src/Fl_Native_File_Chooser_Zenity.H
@@ -30,8 +30,8 @@ class Fl_Zenity_Native_File_Chooser_Driver : public Fl_Kdialog_Native_File_Choos
   static bool did_find_zenity;
   static bool have_looked_for_zenity;
   Fl_Zenity_Native_File_Chooser_Driver(int val);
-  void append_filter(Fl_String& command);
-  void build_command(Fl_String& command) FL_OVERRIDE;
+  void append_filter(std::string& command);
+  void build_command(std::string& command) FL_OVERRIDE;
 };
 
 /**
diff --git a/src/Fl_Native_File_Chooser_Zenity.cxx b/src/Fl_Native_File_Chooser_Zenity.cxx
index 908e68cdacb7848e9d39d359d3d9636f0888c45e..c765b88276197663ef5b7d0f571f31e70754ab56 100644
--- a/src/Fl_Native_File_Chooser_Zenity.cxx
+++ b/src/Fl_Native_File_Chooser_Zenity.cxx
@@ -36,8 +36,8 @@ bool Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity = false;
 Fl_Zenity_Native_File_Chooser_Driver::Fl_Zenity_Native_File_Chooser_Driver(int val) :  Fl_Kdialog_Native_File_Chooser_Driver(val) {
 }
 
-void Fl_Zenity_Native_File_Chooser_Driver::append_filter(Fl_String& ret_command) {
-  // TODO: This could probably be simplified + toughened with Fl_String -erco 1/10/24
+void Fl_Zenity_Native_File_Chooser_Driver::append_filter(std::string& ret_command) {
+  // TODO: This could probably be simplified + toughened with std::string -erco 1/10/24
   int l;
   int lcommand = 10000;
   char *command = new char[lcommand];
@@ -72,11 +72,11 @@ void Fl_Zenity_Native_File_Chooser_Driver::append_filter(Fl_String& ret_command)
     p = strtok(NULL, "\n");
   }
   free(parsed_filter_copy);
-  ret_command += command;        // append to parent's Fl_String
+  ret_command += command;        // append to parent's std::string
   delete [] command;
 }
 
-void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) {
+void Fl_Zenity_Native_File_Chooser_Driver::build_command(std::string& command) {
   const char *option;
   switch (_btype) {
     case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
@@ -100,14 +100,14 @@ void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) {
   }
 
   // Build preset
-  Fl_String preset;
+  std::string preset;
   if (_preset_file) {
-    Fl_String quoted_filename = _preset_file; shell_quote(quoted_filename);
+    std::string quoted_filename = _preset_file; shell_quote(quoted_filename);
     preset = "--filename=";
     preset += quoted_filename;
   } else if (_directory) {
     // This doesn't actually seem to do anything, but supply it anyway.
-    Fl_String quoted_dir = _directory; shell_quote(quoted_dir);
+    std::string quoted_dir = _directory; shell_quote(quoted_dir);
     preset = "--filename=";
     preset += quoted_dir;
   }
@@ -115,7 +115,7 @@ void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) {
   // Build command
   command = "zenity";
   if (_title) {
-    Fl_String quoted_title = _title; shell_quote(quoted_title);
+    std::string quoted_title = _title; shell_quote(quoted_title);
     command += " --title ";
     command += quoted_title;
   }
diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx
index 0bf56653131d83aa8851cf93b100cdcd700f9cde..f68668b1e589b23742bd5b3803c581214d3fa1ef 100644
--- a/src/Fl_Terminal.cxx
+++ b/src/Fl_Terminal.cxx
@@ -29,13 +29,13 @@
 #include <string.h>     // strlen
 #include <stdarg.h>     // vprintf, va_list
 #include <assert.h>
+#include <string>
 
 #include <FL/Fl.H>
 #include <FL/Fl_Terminal.H>
 #include <FL/fl_utf8.h> // fl_utf8len1
 #include <FL/fl_draw.H>
 #include <FL/fl_string_functions.h>
-#include "Fl_String.H"
 
 /////////////////////////////////
 ////// Static Functions /////////
@@ -3948,7 +3948,7 @@ int Fl_Terminal::handle(int e) {
   \return A string allocated with strdup(3) which must be free'd, text is UTF-8.
 */
 const char* Fl_Terminal::text(bool lines_below_cursor) const {
-  Fl_String lines;          // lines of text we'll return
+  std::string lines;          // lines of text we'll return
   // See how many display rows we need to include
   int disprows = lines_below_cursor ? disp_rows() - 1    // all display lines
                                     : cursor_row();      // only lines up to cursor
diff --git a/src/drivers/Unix/Fl_Unix_System_Driver.cxx b/src/drivers/Unix/Fl_Unix_System_Driver.cxx
index 58064a90a270b0205365d2c9d2cadd3565c16175..3671aabd7458d9cfe87c30c6a5e8374d247eb740 100644
--- a/src/drivers/Unix/Fl_Unix_System_Driver.cxx
+++ b/src/drivers/Unix/Fl_Unix_System_Driver.cxx
@@ -21,7 +21,6 @@
 #include <FL/fl_string_functions.h>  // fl_strdup
 #include <FL/platform.H>
 #include "../../flstring.h"
-#include "../../Fl_String.H"
 #include "../../Fl_Timeout.h"
 
 #include <locale.h>
@@ -31,6 +30,7 @@
 #include <pwd.h>
 #include <string.h>     // strerror(errno)
 #include <errno.h>      // errno
+#include <string>
 #if HAVE_DLSYM && HAVE_DLFCN_H
 #include <dlfcn.h>   // for dlsym
 #endif
@@ -538,7 +538,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
     char *buffer)
 {
   // Find the path to the user's home directory.
-  Fl_String home_path = getenv("HOME");
+  std::string home_path = getenv("HOME");
   if (home_path.empty()) {
     struct passwd *pw = getpwuid(getuid());
     if (pw)
@@ -546,7 +546,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
   }
 
   // 1: Generate the 1.4 path for this vendor and application.
-  Fl_String prefs_path_14 = getenv("XDG_CONFIG_HOME");
+  std::string prefs_path_14 = getenv("XDG_CONFIG_HOME");
   if (prefs_path_14.empty()) {
     prefs_path_14 = home_path + "/.config";
   } else {
@@ -567,7 +567,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
 
   // 2: If this base path does not exist, try the 1.3 path
   if (::access(prefs_path_14.c_str(), F_OK) == -1) {
-    Fl_String prefs_path_13 = home_path + "/.fltk/" + vendor;
+    std::string prefs_path_13 = home_path + "/.fltk/" + vendor;
     if (::access(prefs_path_13.c_str(), F_OK) == 0) {
       prefs_path_13.append("/");
       prefs_path_13.append(application);
diff --git a/test/unittest_core.cxx b/test/unittest_core.cxx
index 476fdfeb02cfb2625a533f843fe9998e970cd930..c3dad3b37aa8ea015deeaf9583ac56f24081909b 100644
--- a/test/unittest_core.cxx
+++ b/test/unittest_core.cxx
@@ -19,72 +19,25 @@
 #include <FL/Fl_Group.H>
 #include <FL/Fl_Button.H>
 #include <FL/Fl_Terminal.H>
-#include "../src/Fl_String.H"
 #include <FL/Fl_Preferences.H>
 #include <FL/fl_callback_macros.H>
 #include <FL/filename.H>
 #include <FL/fl_utf8.h>
 
-#if (0) // FIXME - Fl_String
+#include <string>
 
-/* Test all Fl_String functions that are no part of the class. */
-TEST(Fl_String, Non-Member Functions) {
-  Fl_String a = "a", b = "b", empty = "", result;
-  result = a + b;
-  EXPECT_STREQ(result.c_str(), "ab");
-  result = a + empty;
-  EXPECT_STREQ(result.c_str(), "a");
-  result = a + "c";
-  EXPECT_STREQ(result.c_str(), "ac");
-  result = empty + "x";
-  EXPECT_STREQ(result.c_str(), "x");
-  EXPECT_TRUE(!(a == b));
-  EXPECT_TRUE(a == a);
-  EXPECT_FALSE((a != a));              // neq -erco
-  EXPECT_TRUE((a != b));               // neq -erco
-  EXPECT_TRUE(empty == empty);
-  EXPECT_TRUE(a+b == "ab");
-  EXPECT_TRUE(a+"b" == "a" + b);
-
-  return true;
-}
-
-/* Test additions to Fl_Preferences. */
-TEST(Fl_String, fl_filename_...) {
-  const Fl_String ref = "/test/me.txt";
-  Fl_String name = fl_filename_name(ref);
-  EXPECT_STREQ(name.c_str(), "me.txt");
-  name = fl_filename_name(Fl_String("/test/"));
-  EXPECT_STREQ(name.c_str(), "");
-  Fl_String path = fl_filename_path(ref);
-  EXPECT_STREQ(path.c_str(), "/test/");
-  Fl_String ext = fl_filename_ext(ref);
-  EXPECT_STREQ(ext.c_str(), ".txt");
-  ext = fl_filename_setext(ref, ".rtf");
-  EXPECT_STREQ(ext.c_str(), "/test/me.rtf");
-  fl_putenv("FL_UNITTEST=unit/test");
-  name = fl_filename_expand(Fl_String("abc/$FL_UNITTEST/xyz"));
-  EXPECT_STREQ(name.c_str(), "abc/unit/test/xyz");
-  Fl_String abs = fl_filename_absolute(Fl_String("./abc/def.txt"));
-  Fl_String rel = fl_filename_relative(abs);
-  EXPECT_STREQ(rel.c_str(), "abc/def.txt");
-  EXPECT_STREQ(ref.c_str(), "/test/me.txt");
-  return true;
-}
-
-#endif
 
 /* Test additions to Fl_Preferences. */
 TEST(Fl_Preferences, Strings) {
   {
     Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests");
-    prefs.set("a", Fl_String());
-    prefs.set("b", Fl_String("Hello"));
-    prefs.set("c", Fl_String("Hel\\l\nö"));
+    prefs.set("a", std::string());
+    prefs.set("b", std::string("Hello"));
+    prefs.set("c", std::string("Hel\\l\nö"));
   }
   {
     Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests");
-    Fl_String r;
+    std::string r;
     prefs.get("a", r, "x");
     EXPECT_STREQ(r.c_str(), "");
     prefs.get("b", r, "x");
@@ -100,7 +53,7 @@ TEST(Fl_Preferences, Strings) {
 #if 0
 
 TEST(fl_filename, ext) {
-  Fl_String r = fl_filename_ext("test.txt");
+  std::string r = fl_filename_ext("test.txt");
   EXPECT_STREQ(r.c_str(), ".txt");
   r = fl_filename_ext("test");
   EXPECT_STREQ(r.c_str(), "");
@@ -110,22 +63,22 @@ TEST(fl_filename, ext) {
 }
 
 TEST(fl_filename, setext) {
-  Fl_String r = fl_filename_setext(Fl_String("test.txt"), ".rtf");
+  std::string r = fl_filename_setext(std::string("test.txt"), ".rtf");
   EXPECT_STREQ(r.c_str(), "test.rtf");
-  r = fl_filename_setext(Fl_String("test"), ".rtf");
+  r = fl_filename_setext(std::string("test"), ".rtf");
   EXPECT_STREQ(r.c_str(), "test.rtf");
-  r = fl_filename_setext(Fl_String("test.txt"), "");
+  r = fl_filename_setext(std::string("test.txt"), "");
   EXPECT_STREQ(r.c_str(), "test");
-  r = fl_filename_setext(Fl_String(""), ".rtf");
+  r = fl_filename_setext(std::string(""), ".rtf");
   EXPECT_STREQ(r.c_str(), ".rtf");
-  r = fl_filename_setext(Fl_String("path/test"), ".rtf");
+  r = fl_filename_setext(std::string("path/test"), ".rtf");
   EXPECT_STREQ(r.c_str(), "path/test.rtf");
   return true;
 }
 
 TEST(fl_filename, relative) {
-  Fl_String base = "/var/tmp/somedir";
-  Fl_String r = fl_filename_relative("/var/tmp/somedir/foo.txt", base);
+  std::string base = "/var/tmp/somedir";
+  std::string r = fl_filename_relative("/var/tmp/somedir/foo.txt", base);
   EXPECT_STREQ(r.c_str(), "foo.txt");
   r = fl_filename_relative("/var/tmp/foo.txt", base);
   EXPECT_STREQ(r.c_str(), "../foo.txt");
@@ -137,8 +90,8 @@ TEST(fl_filename, relative) {
 }
 
 TEST(fl_filename, absolute) {
-  Fl_String base = "/var/tmp/somedir";
-  Fl_String r = fl_filename_absolute("foo.txt", base);
+  std::string base = "/var/tmp/somedir";
+  std::string r = fl_filename_absolute("foo.txt", base);
   EXPECT_STREQ(r.c_str(), "/var/tmp/somedir/foo.txt");
   r = fl_filename_absolute("/var/tmp/foo.txt", base);
   EXPECT_STREQ(r.c_str(), "/var/tmp/foo.txt");
@@ -152,11 +105,11 @@ TEST(fl_filename, absolute) {
 
 bool cb1a_ok = false, cb1b_ok = false, cb1c_ok = false;
 int cb1_alloc = 0;
-class MyString : public Fl_String {
+class MyString : public std::string {
 public:
-  MyString() : Fl_String() { cb1_alloc++; }
-  MyString(const MyString &str) : Fl_String(str) { cb1_alloc++; }
-  MyString(const char *t) : Fl_String(t) { cb1_alloc++; }
+  MyString() : std::string() { cb1_alloc++; }
+  MyString(const MyString &str) : std::string(str) { cb1_alloc++; }
+  MyString(const char *t) : std::string(t) { cb1_alloc++; }
   ~MyString() { cb1_alloc--; }
 };
 void cb1(MyString a, int b) {
@@ -187,9 +140,9 @@ TEST(Fl_Callback_Macros, FL_FUNCTION_CALLBACK) {
 
 TEST(Fl_Callback_Macros, FL_METHOD_CALLBACK) {
   Fl_Group::current(NULL);
-  Fl_String *str = new Fl_String("FLTK");
+  std::string *str = new std::string("FLTK");
   Fl_Button *btn = new Fl_Button(10, 10, 100, 100);
-  FL_METHOD_CALLBACK_2(btn, Fl_String, str, insert, int, 2, const char*, "XX");
+  FL_METHOD_CALLBACK_2(btn, std::string, str, insert, int, 2, const char*, "XX");
   btn->do_callback();
   EXPECT_STREQ(str->c_str(), "FLXXTK");
   delete btn;