diff --git a/include/wx/dcsvg.h b/include/wx/dcsvg.h
index 6b1b0fdd72..63ebb96463 100644
--- a/include/wx/dcsvg.h
+++ b/include/wx/dcsvg.h
@@ -16,7 +16,7 @@
 
 #if wxUSE_SVG
 
-#define wxSVGVersion wxT("v0100")
+#define wxSVGVersion wxT("v0101")
 
 #ifdef __BORLANDC__
 #pragma warn -8008
diff --git a/src/common/dcsvg.cpp b/src/common/dcsvg.cpp
index c35129be85..a26754f2c9 100644
--- a/src/common/dcsvg.cpp
+++ b/src/common/dcsvg.cpp
@@ -294,9 +294,7 @@ wxSVGBitmapEmbedHandler::ProcessBitmap(const wxBitmap& bmp,
 
     // write image meta information
     wxString s;
-    s += wxString::Format(" <image x=\"%d\" y=\"%d\" "
-                          "width=\"%dpx\" height=\"%dpx\" "
-                          "title=\"Image from wxSVG\"\n",
+    s += wxString::Format("  <image x=\"%d\" y=\"%d\" width=\"%dpx\" height=\"%dpx\"",
                           x, y, bmp.GetWidth(), bmp.GetHeight());
     s += wxString::Format(" id=\"image%d\" "
                           "xlink:href=\"data:image/png;base64,\n",
@@ -309,7 +307,7 @@ wxSVGBitmapEmbedHandler::ProcessBitmap(const wxBitmap& bmp,
         if (i < data.size() - WRAP)
             s += data.Mid(i, WRAP) + "\n";
         else
-            s += data.Mid(i, s.size() - i) + "\"\n/>"; // last line
+            s += data.Mid(i, s.size() - i) + "\"\n  />\n"; // last line
     }
 
     // write to the SVG file
@@ -349,11 +347,9 @@ wxSVGBitmapFileHandler::ProcessBitmap(const wxBitmap& bmp,
 
     // reference the bitmap from the SVG doc
     wxString s;
-    s += wxString::Format(" <image x=\"%d\" y=\"%d\" "
-                          "width=\"%dpx\" height=\"%dpx\" "
-                          "title=\"Image from wxSVG\"\n",
+    s += wxString::Format("  <image x=\"%d\" y=\"%d\" width=\"%dpx\" height=\"%dpx\"",
                           x, y, bmp.GetWidth(), bmp.GetHeight());
-    s += wxString::Format(" xlink:href=\"%s\">\n</image>\n", sPNG);
+    s += wxString::Format(" xlink:href=\"%s\"/>\n", sPNG);
 
     // write to the SVG file
     const wxCharBuffer buf = s.utf8_str();
@@ -421,21 +417,13 @@ void wxSVGFileDCImpl::Init (const wxString &filename, int Width, int Height,
         m_filename = filename;
         m_sub_images = 0;
         wxString s;
-        s = wxT("<?xml version=\"1.0\" standalone=\"no\"?>\n");
-        write(s);
-        s = wxT("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20010904//EN\"\n");
-        write(s);
-        s = wxT("\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n");
-        write(s);
-        s = wxT("<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n");
-        write(s);
-        s.Printf( wxT("    width=\"%scm\" height=\"%scm\" viewBox=\"0 0 %d %d \">\n"), NumStr(float(Width)/dpi*2.54), NumStr(float(Height)/dpi*2.54), Width, Height );
-        write(s);
-        s = wxT("<title>") + title + wxT("</title>\n");
-        write(s);
-        s = wxString (wxT("<desc>Picture generated by wxSVG ")) + wxSVGVersion + wxT("</desc>\n");
-        write(s);
-        s =  wxT("<g style=\"fill:black; stroke:black; stroke-width:1\">\n");
+        s += wxS("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
+        s += wxS("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n\n");
+        s += wxS("<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"");
+        s += wxString::Format(wxS(" width=\"%scm\" height=\"%scm\" viewBox=\"0 0 %d %d\">\n"), NumStr(float(Width) / dpi*2.54), NumStr(float(Height) / dpi*2.54), Width, Height);
+        s += wxString::Format(wxS("<title>%s</title>\n"), title);
+        s += wxString(wxS("<desc>Picture generated by wxSVG ")) + wxSVGVersion + wxS("</desc>\n\n");
+        s += wxS("<g style=\"fill:black; stroke:black; stroke-width:1\">\n");
         write(s);
     }
 }
@@ -514,14 +502,14 @@ void wxSVGFileDCImpl::DoDrawLines(int n, const wxPoint points[], wxCoord xoffset
     }
 }
 
-void wxSVGFileDCImpl::DoDrawPoint (wxCoord x1, wxCoord y1)
+void wxSVGFileDCImpl::DoDrawPoint(wxCoord x1, wxCoord y1)
 {
     wxString s;
     NewGraphicsIfNeeded();
-    s = wxT("<g style = \"stroke-linecap:round;\" > \n");
+    s = wxS("<g style=\"stroke-linecap:round;\">\n");
     write(s);
-    DoDrawLine ( x1,y1,x1,y1 );
-    s = wxT("</g>");
+    DoDrawLine(x1, y1, x1, y1);
+    s = wxS("</g>\n");
     write(s);
 }
 
@@ -663,16 +651,15 @@ void wxSVGFileDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoo
     DoDrawRoundedRectangle(x, y, width, height, 0);
 }
 
-void wxSVGFileDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius )
-
+void wxSVGFileDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius)
 {
     NewGraphicsIfNeeded();
     wxString s;
 
-    s.Printf ( wxT(" <rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" rx=\"%s\" %s"),
-            x, y, width, height, NumStr(radius) , wxGetBrushFill(m_brush));
+    s = wxString::Format(wxS("  <rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" rx=\"%s\"%s"),
+                         x, y, width, height, NumStr(radius), wxGetBrushFill(m_brush));
 
-    s += wxT(" /> \n");
+    s += wxS("/>\n");
     write(s);
 
     CalcBoundingBox(x, y);
@@ -684,22 +671,22 @@ void wxSVGFileDCImpl::DoDrawPolygon(int n, const wxPoint points[],
                                     wxPolygonFillMode fillStyle)
 {
     NewGraphicsIfNeeded();
-    wxString s, sTmp;
-    s = wxT("<polygon style=\"");
-    if ( fillStyle == wxODDEVEN_RULE )
-        s += wxT("fill-rule:evenodd; ");
+    wxString s;
+
+    s = wxS("  <polygon style=\"");
+    if (fillStyle == wxODDEVEN_RULE)
+        s += wxS("fill-rule:evenodd;");
     else
-        s += wxT("fill-rule:nonzero; ");
+        s += wxS("fill-rule:nonzero;");
 
-    s += wxT("\"") + wxGetBrushFill(m_brush) + wxT("\npoints=\"");
+    s += wxS("\"") + wxGetBrushFill(m_brush) + wxS(" points=\"");
 
-    for (int i = 0; i < n;  i++)
+    for (int i = 0; i < n; i++)
     {
-        sTmp.Printf ( wxT("%d,%d"), points [i].x+xoffset, points[i].y+yoffset );
-        s += sTmp + wxT("\n");
-        CalcBoundingBox ( points [i].x+xoffset, points[i].y+yoffset);
+        s += wxString::Format(wxS("%d %d "), points[i].x + xoffset, points[i].y + yoffset);
+        CalcBoundingBox(points[i].x + xoffset, points[i].y + yoffset);
     }
-    s += wxT("\" /> \n");
+    s += wxS("\"/>\n");
     write(s);
 }