#include "svgtiny_strings.h"
 #undef SVGTINY_STRING_ACTION2
 
+       /* Intern SVG's xmlns separately because it's an lwc_string
+        * and not a dom_string. We initialise its pointer to NULL
+        * because, during finalisation, the test to see if it needs
+        * to be free'd looks for NULL. Returning a LIBDOM_ERROR on
+        * failure is not perfect but it's the closest of the
+        * available options. */
+       state->interned_svg_xmlns = NULL;
+       if (lwc_intern_string("http://www.w3.org/2000/svg",
+                               26,
+                               &state->interned_svg_xmlns) != lwc_error_ok) {
+               return svgtiny_LIBDOM_ERROR;
+       }
+
        /* get graphic dimensions */
        state->viewport_width = viewport_width;
        state->viewport_height = viewport_height;
 #include "svgtiny_strings.h"
 #undef SVGTINY_STRING_ACTION2
 
+       if (state->interned_svg_xmlns != NULL) {
+               lwc_string_unref(state->interned_svg_xmlns);
+       }
+
        css_code = css_select_ctx_destroy(state->select_ctx);
        if (css_code != CSS_OK) {
                return svgtiny_LIBCSS_ERROR;
 
 #include "svgtiny_strings.h"
 #undef SVGTINY_STRING_ACTION2
 
+       /* Where we store the interned copy of the SVG XML namespace,
+        *
+        *   http://www.w3.org/2000/svg
+        *
+        * We handle it separately it has a different type
+        * (lwc_string) than those above (dom_string).
+        */
+       lwc_string *interned_svg_xmlns;
 };
 
 struct svgtiny_list;