diff --git a/FL/Fl_Device.H b/FL/Fl_Device.H
index 0c3476590d958dfc3cae9d1912a874d234572ef5..f88602aa48163d9a36657a2cf31b9a11f1f8820a 100644
--- a/FL/Fl_Device.H
+++ b/FL/Fl_Device.H
@@ -56,14 +56,13 @@ class Fl_Widget;
  
  Class Fl_Surface_Device can also be derived to define new kinds of graphical output
  usable with FLTK drawing functions.
- An example would be to draw to an SVG file. This would require to create a new class,
- say SVG_Surface, derived from class Fl_Surface_Device, and another new class,
- say SVG_Graphics_Driver, derived from class Fl_Graphics_Driver.
- Class SVG_Graphics_Driver should implement all virtual methods of the Fl_Graphics_Driver class
- to support all FLTK drawing functions and have them draw into SVG files. Alternatively,
- class SVG_Graphics_Driver could implement only some virtual methods, and only part of
- the FLTK drawing API would be usable when drawing to SVG files
- (see examples/SVG_File_Surface.cxx for a small, working implementation of this procedure).
+ An example would be to draw to a PDF file. This would require to create a new class,
+ say PDF_File_Surface, derived from class Fl_Surface_Device, and another new class,
+ say PDF_Graphics_Driver, derived from class Fl_Graphics_Driver.
+ Class PDF_Graphics_Driver should implement all virtual methods of the Fl_Graphics_Driver class
+ to support all FLTK drawing functions and have them draw into PDF files. Alternatively,
+ class PDF_Graphics_Driver could implement only some virtual methods, and only part of
+ the FLTK drawing API would be usable when drawing to PDF files.
  */
 class FL_EXPORT Fl_Surface_Device {
   /** The graphics driver in use by this surface. */
diff --git a/FL/Fl_SVG_File_Surface.H b/FL/Fl_SVG_File_Surface.H
index 272f7db1f23bd565f2794de689ff7f591d09f837..9f5c7ace6c300b0f954c4b5d944cd8371590b05d 100644
--- a/FL/Fl_SVG_File_Surface.H
+++ b/FL/Fl_SVG_File_Surface.H
@@ -39,8 +39,9 @@
      fclose(svg);
    }
  \endcode
- \note FLTK uses the PNG and JPEG libraries to encode images to the SVG format. If JPEG is
- not available at application build time, PNG is enough (but produces a quite larger output).
+ \note FLTK uses the PNG and JPEG libraries to encode images to the SVG format.
+ For this reason, class Fl_SVG_File_Surface is placed in the fltk_images library.
+ If JPEG is not available at application build time, PNG is enough (but produces a quite larger output).
  If PNG isn't available either, images don't appear in the SVG output.
 */
 class FL_EXPORT Fl_SVG_File_Surface : public Fl_Widget_Surface {
diff --git a/examples/Makefile b/examples/Makefile
index f26f7dccf41aee2211faaee1d3392300dddddd0d..4ed7c0567db69a63e6da81666795f34f4aec69ca 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -24,7 +24,6 @@ ALL = browser-simple$(EXEEXT) \
       progress-simple$(EXEEXT) \
       shapedwindow$(EXEEXT) \
       simple-terminal$(EXEEXT) \
-      SVG_File_Surface$(EXEEXT) \
       table-as-container$(EXEEXT) \
       table-simple$(EXEEXT) \
       table-sort$(EXEEXT) \
diff --git a/examples/SVG_File_Surface.cxx b/examples/SVG_File_Surface.cxx
deleted file mode 100644
index ca1ddfc39617afeacddf289a8584625c0ea62eab..0000000000000000000000000000000000000000
--- a/examples/SVG_File_Surface.cxx
+++ /dev/null
@@ -1,218 +0,0 @@
-//
-// "$Id$"
-//
-// Subclassing Fl_Surface_Device and Fl_Graphics_Driver in the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2018 by Bill Spitzak and others.
-//
-// This library is free software. Distribution and use rights are outlined in
-// the file "COPYING" which should have been included with this file.  If this
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Partial, working implementation of how to draw into an SVG file using the standard
-// FLTK drawing API.
-// File hello.svg is created in the current directory.
-
-#include <FL/fl_draw.H>
-#include <stdio.h>
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Graphics_Driver.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-
-class SVG_Graphics_Driver : public Fl_Graphics_Driver {
-  FILE *out_;
-  int width_;
-  const char *linecap_;
-  uchar red_, green_, blue_;
-public:
-  SVG_Graphics_Driver(FILE*);
-  ~SVG_Graphics_Driver();
-  FILE* file() {return out_;}
-protected:
-  const char *family_;
-  const char *bold_;
-  const char *style_;
-  void rect(int x, int y, int w, int h);
-  void rectf(int x, int y, int w, int h);
-  void line_style(int style, int width, char *dashes=0);
-  void line(int x1, int y1, int x2, int y2);
-  void font_(int f, int s);
-  void font(int f, int s);
-  void draw(const char *str, int n, int x, int y);
-  void draw(const char*, int, float, float) ;
-  void draw(int, const char*, int, int, int) ;
-  void color(uchar r, uchar g, uchar b);
-  void color(Fl_Color c);
-  double width(const char*, int) ;
-  int height() ;
-  int descent() ;
-};
-
-class SVG_File_Surface : public Fl_Surface_Device {
-  int width_, height_;
-public:
-  SVG_File_Surface(int width, int height, FILE*);
-  int width() { return width_; }
-  int height() { return height_; }
-  ~SVG_File_Surface();
-};
-
-
-SVG_Graphics_Driver::SVG_Graphics_Driver(FILE *f) {
-  out_ = f;
-  width_ = 1;
-  linecap_ = "butt";
-  family_ = "";
-  bold_ = "";
-  style_ = "";
-  red_ = green_ = blue_ = 0;
-}
-
-SVG_Graphics_Driver::~SVG_Graphics_Driver()
-{
-}
-
-void SVG_Graphics_Driver::rect(int x, int y, int w, int h) {
-  fprintf(out_, "<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" "
-	  "fill=\"none\" stroke=\"rgb(%u,%u,%u)\" stroke-width=\"%d\"/>\n", x, y, w, h, red_, green_, blue_, width_);
-}
-
-void SVG_Graphics_Driver::rectf(int x, int y, int w, int h) {
-  fprintf(out_, "<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" "
-	  "fill=\"rgb(%u,%u,%u)\" />\n", x, y, w, h, red_, green_, blue_);
-}
-
-void SVG_Graphics_Driver::line(int x1, int y1, int x2, int y2) {
-  fprintf(out_, 
-	  "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" "
-	  "style=\"stroke:rgb(%u,%u,%u);stroke-width:%d;stroke-linecap:%s\" />\n", 
-	  x1,y1,x2,y2, red_, green_, blue_, width_, linecap_);
-}
-
-void SVG_Graphics_Driver::font_(int ft, int s) {
-  Fl_Graphics_Driver::font(ft, s);
-  int famnum = ft/4;
-  if (famnum == 0) family_ = "Helvetica";
-  else if (famnum == 1) family_ = "Courier";
-  else family_ = "Times";
-  int modulo = ft % 4;
-  int use_bold = modulo == 1 || modulo == 3;
-  int use_italic = modulo >= 2;  
-  bold_ =  ( use_bold ? " font-weight=\"bold\"" : "" );
-  style_ =  ( use_italic ? " font-style=\"italic\"" : "" );
-  if (use_italic && famnum != 2) style_ = " font-style=\"oblique\"";
-}
-
-void SVG_Graphics_Driver::font(int ft, int s) {
-  Fl_Display_Device::display_device()->driver()->font(ft, s);
-  font_(ft, s);
-}
-
-void SVG_Graphics_Driver::line_style(int style, int width, char *dashes) {
-  if (width == 0) width = 1;
-  width_ = width;
-  if (style & FL_CAP_SQUARE) linecap_ = "square";
-  if (style & FL_CAP_ROUND) linecap_ = "round";
-  else linecap_ = "butt";
-}
-
-void SVG_Graphics_Driver::draw(const char *str, int n, int x, int y) {
-  // Caution: Internet Explorer ignores the xml:space="preserve" attribute
-  // work-around: replace all spaces by no-break space = U+00A0 = 0xC2-0xA0 (UTF-8) before sending to IE
-  fprintf(out_, "<text x=\"%d\" y=\"%d\" font-family=\"%s\"%s%s font-size=\"%d\" "
-          "xml:space=\"preserve\" "
-          " fill=\"rgb(%u,%u,%u)\" textLength=\"%d\">%.*s</text>\n",x, y, family_, bold_, style_, size(), red_, green_, blue_, (int)width(str, n), n, str);
-
-}
-
-void SVG_Graphics_Driver::draw(const char* str, int n, float fx, float fy) {
-  return draw(str, n, (int)fx, (int)fy);
-}
-
-void SVG_Graphics_Driver::draw(int angle, const char* str, int n, int x, int y) {
-  fprintf(out_, "<g transform=\"translate(%d,%d) rotate(%d)\">", x, y, -angle);
-  draw(str, n, 0, 0);
-  fputs("</g>\n", out_);
-}
-
-void SVG_Graphics_Driver::color(Fl_Color c) {
-  Fl_Graphics_Driver::color(c);
-  Fl::get_color(c, red_, green_, blue_);
-}
-
-void SVG_Graphics_Driver::color(uchar r, uchar g, uchar b) {
-  red_ = r;
-  green_ = g;
-  blue_ = b;
-}
-
-double SVG_Graphics_Driver::width(const char* str, int l) {
- return Fl_Display_Device::display_device()->driver()->width(str, l);
-}
-
-int SVG_Graphics_Driver::height() {
-  return Fl_Display_Device::display_device()->driver()->height();
-}
-
-int SVG_Graphics_Driver::descent() {
-  return Fl_Display_Device::display_device()->driver()->descent();
-}
-
-SVG_File_Surface::SVG_File_Surface(int w, int h, FILE *f) : Fl_Surface_Device(NULL) {
-  fprintf(f,
-	  "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n"
-	  "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \n"
-	  "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
-	  "<svg width=\"%dpx\" height=\"%dpx\" viewBox=\"0 0 %d %d\"\n"
-	  "xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n", w, h, w, h);
-  width_ = w; height_ = h;
-  driver(new SVG_Graphics_Driver(f));
-}
-
-SVG_File_Surface::~SVG_File_Surface() {
-  SVG_Graphics_Driver *driver = (SVG_Graphics_Driver*)this->driver();
-  fputs("</svg>\n", driver->file());
-  fflush(driver->file());
-  delete driver;
-}
-
-
-int main(int argc, char **argv) {
-  Fl_Window *window = new Fl_Window(340,180);
-  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
-  box->box(FL_UP_BOX);
-  box->labelfont(FL_BOLD+FL_ITALIC);
-  box->labelsize(36);
-  box->labeltype(FL_SHADOW_LABEL);
-  window->end();
-  window->show(argc, argv);
-  
-  FILE *out = fl_fopen("hello.svg", "w");
-  if (out) {
-    SVG_File_Surface *svg = new SVG_File_Surface(box->w(), box->h(), out);
-    Fl_Surface_Device::push_current(svg);
-    fl_color(box->color());
-    fl_rectf(0, 0, box->w(), box->h());
-    fl_font(box->labelfont(), 36);
-    fl_color(box->labelcolor());
-    fl_draw(box->label(), 5, 50);
-    Fl_Surface_Device::pop_current();
-    delete svg;
-    fclose(out);
-  }
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3c1f0f0d68fb12b2deeec89bef175222e1021268..1d3017730cf8037c585e923d77ddda3dc8b5138b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -161,7 +161,6 @@ set (CPPFILES
   fl_utf8.cxx
   fl_encoding_latin1.cxx
   fl_encoding_mac_roman.cxx
-  drivers/SVG/Fl_SVG_File_Surface.cxx
 )
 
 # find all header files in source directory <FL/...>
@@ -423,6 +422,7 @@ set (IMGCPPFILES
   Fl_PNM_Image.cxx
   Fl_Image_Reader.cxx
   Fl_SVG_Image.cxx
+  drivers/SVG/Fl_SVG_File_Surface.cxx
 )
 
 set (CFILES
diff --git a/src/Makefile b/src/Makefile
index 7fde7e8c967498e54ea66d247de3c34905df6e68..92215fbae9aa91e6e59765327888cfdea10f4383 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -212,7 +212,8 @@ IMGCPPFILES = \
 	Fl_PNG_Image.cxx \
 	Fl_PNM_Image.cxx \
 	Fl_Image_Reader.cxx \
-	Fl_SVG_Image.cxx
+	Fl_SVG_Image.cxx \
+	drivers/SVG/Fl_SVG_File_Surface.cxx
 
 CFILES = fl_call_main.c flstring.c numericsort.c vsnprintf.c
 
@@ -305,8 +306,7 @@ GDICFILES = \
 
 PSCPPFILES = \
 	drivers/PostScript/Fl_PostScript.cxx \
-	drivers/PostScript/Fl_PostScript_image.cxx \
-	drivers/SVG/Fl_SVG_File_Surface.cxx
+	drivers/PostScript/Fl_PostScript_image.cxx
 
 ################################################################
 FLTKFLAGS = -DFL_LIBRARY
diff --git a/src/makedepend b/src/makedepend
index 9cc20efc6a655d3572e1c4051dcc36f06e560e3d..bbb8aab9c437ff89fdec457d7c5a97ff7609fe49 100644
--- a/src/makedepend
+++ b/src/makedepend
@@ -254,6 +254,30 @@ drivers/PostScript/Fl_PostScript_image.o: ../FL/Fl_Widget.H
 drivers/PostScript/Fl_PostScript_image.o: ../FL/Fl_Widget_Surface.H
 drivers/PostScript/Fl_PostScript_image.o: ../FL/Fl_Window.H
 drivers/PostScript/Fl_PostScript_image.o: ../FL/platform_types.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../config.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/abi-version.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Enumerations.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Bitmap.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Cairo.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Device.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/fl_draw.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Export.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Graphics_Driver.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Group.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Image.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Pixmap.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Plugin.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Preferences.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_RGB_Image.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_SVG_File_Surface.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/fl_types.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/fl_utf8.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Widget.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Widget_Surface.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/Fl_Window.H
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/math.h
+drivers/SVG/Fl_SVG_File_Surface.o: ../FL/platform_types.h
 drivers/X11/Fl_X11_Screen_Driver.o: ../config.h
 drivers/X11/Fl_X11_Screen_Driver.o: ../FL/abi-version.h
 drivers/X11/Fl_X11_Screen_Driver.o: ../FL/Enumerations.H
diff --git a/test/Makefile b/test/Makefile
index 4dceb9d45c4d23efa82b503a0d59af8fa22cc094..66a25825c126258d9a50d8ea2ed456439091ca1f 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -370,9 +370,9 @@ demo$(EXEEXT): demo.o
 	$(OSX_ONLY) mkdir -p demo.app/Contents/Resources
 	$(OSX_ONLY) cp -f demo.menu demo.app/Contents/Resources/
 
-device$(EXEEXT): device.o
+device$(EXEEXT): device.o $(IMGLIBNAME)
 	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) device.o -o $@ $(LINKFLTK) $(IMAGELIBS) $(LDLIBS)
+	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) device.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
 	$(OSX_ONLY) ../fltk-config --post $@
 
 doublebuffer$(EXEEXT): doublebuffer.o
diff --git a/test/makedepend b/test/makedepend
index 727c06ffba7db19cad81f43dea1c9d7160e552d1..7164ca04456b7fb83c0ba264fa25ca9058f66505 100644
--- a/test/makedepend
+++ b/test/makedepend
@@ -530,6 +530,7 @@ device.o: ../FL/Fl_Light_Button.H
 device.o: ../FL/Fl_Menu_.H
 device.o: ../FL/Fl_Menu_Button.H
 device.o: ../FL/Fl_Menu_Item.H
+device.o: ../FL/Fl_Native_File_Chooser.H
 device.o: ../FL/Fl_Overlay_Window.H
 device.o: ../FL/Fl_Paged_Device.H
 device.o: ../FL/Fl_Pixmap.H
@@ -544,6 +545,7 @@ device.o: ../FL/Fl_Round_Button.H
 device.o: ../FL/Fl_Scrollbar.H
 device.o: ../FL/Fl_Shared_Image.H
 device.o: ../FL/Fl_Slider.H
+device.o: ../FL/Fl_SVG_File_Surface.H
 device.o: ../FL/Fl_Tile.H
 device.o: ../FL/fl_types.h
 device.o: ../FL/fl_utf8.h
@@ -1492,6 +1494,7 @@ pixmap_browser.o: ../FL/Fl_Menu_.H
 pixmap_browser.o: ../FL/Fl_Menu_Button.H
 pixmap_browser.o: ../FL/Fl_Menu_Item.H
 pixmap_browser.o: ../FL/fl_message.H
+pixmap_browser.o: ../FL/Fl_Native_File_Chooser.H
 pixmap_browser.o: ../FL/Fl_Paged_Device.H
 pixmap_browser.o: ../FL/Fl_Plugin.H
 pixmap_browser.o: ../FL/Fl_Preferences.H
@@ -1500,6 +1503,7 @@ pixmap_browser.o: ../FL/Fl_Return_Button.H
 pixmap_browser.o: ../FL/Fl_Scrollbar.H
 pixmap_browser.o: ../FL/Fl_Shared_Image.H
 pixmap_browser.o: ../FL/Fl_Slider.H
+pixmap_browser.o: ../FL/Fl_SVG_File_Surface.H
 pixmap_browser.o: ../FL/Fl_Tile.H
 pixmap_browser.o: ../FL/fl_types.h
 pixmap_browser.o: ../FL/fl_utf8.h