return svgtiny_LIBCSS_ERROR;
        }
 
+       /* ...and the unit context, whose other fields were
+        * initialized along with the parser state itself */
+       state->unit_ctx.viewport_width  = FLTTOFIX(viewport_width);
+       state->unit_ctx.viewport_height = FLTTOFIX(viewport_height);
+
        return svgtiny_OK;
 }
 
 {
        dom_document *document;
        dom_element *svg;
-       struct svgtiny_parse_state state;
+       struct svgtiny_parse_state state = {
+               /* Initialize the unit context here because it has a
+                * const member and doing it any other way subverts
+                * the type system. The magic numbers below were taken
+                * from the libcss example program without much
+                * thought, because at the moment we don't support any
+                * properties with units. */
+               .unit_ctx = {
+                       .font_size_default = FLTTOFIX(16.0),
+                       .font_size_minimum = FLTTOFIX(6.0),
+                       .device_dpi        = FLTTOFIX(96.0),
+                       .root_style        = NULL,
+                       .pw                = NULL,
+                       .measure           = NULL,
+               }
+       };
        svgtiny_code code;
 
        assert(diagram);
 
 static struct css_select_handler svgtiny_select_handler;
 
 
+/* Every call to svgtiny_select_style() needs this, so let's only make
+ * one copy. */
+static const css_media media_all = {
+       .type = CSS_MEDIA_ALL,
+};
+
+
+
 /**
  * Convenient wrapper around css_select_style()
  *
                                const css_stylesheet *inline_sheet,
                                css_select_results **result)
 {
-       const css_media media_all = {
-               .type = CSS_MEDIA_ALL,
-       };
-
-       /* These magic numbers below were taken from the libcss
-        * example program without much thought, because at the moment
-        * we don't support any properties with units. */
-       const css_unit_ctx unitctx = {
-               .viewport_width    = FLTTOFIX(state->viewport_width),
-               .viewport_height   = FLTTOFIX(state->viewport_height),
-               .font_size_default = FLTTOFIX(16.0),
-               .font_size_minimum = FLTTOFIX(6.0),
-               .device_dpi        = FLTTOFIX(96.0),
-               .root_style        = NULL,
-               .pw                = NULL,
-               .measure           = NULL,
-       };
-
        return css_select_style(state->select_ctx,
                        node,
-                       &unitctx,
+                       &state->unit_ctx,
                        &media_all,
                        inline_sheet,
                        &svgtiny_select_handler,
 
         * precede it. */
        css_select_ctx *select_ctx;
 
+       /* A libcss unit context. This is used to compute and compose
+        * styles, and is convenient to create once and pass along
+        * with the rest of the state. */
+       css_unit_ctx unit_ctx;
+
        /* Keep track of the parent element's computed style so that
         * we can compose its children's computed styles with it. */
        css_computed_style *parent_style;