char * line = malloc(linemax);
     err = "Trouble in init_win_from_file() with fgets().";
     exit_err(NULL == fgets(line, linemax, file), world, err);
+    char * title = malloc(strlen(line));
+    memcpy(title, line, strlen(line) - 1);
+    exit_err(NULL == fgets(line, linemax, file), world, err);
     int16_t height = atoi(line);
     exit_err(NULL == fgets(line, linemax, file), world, err);
     int16_t width = atoi(line);
     exit_err(fclose(file), world, err);
 
     struct WinMeta * wmeta = world->wins.meta;
-    return init_win(wmeta, w_name, height, width, world, f);
+    struct Win w;
+    init_win(wmeta, &w, title, height, width, world, f);
+    free(title);
+    return w;
 }
 
 
 
 
 
 
-/* Wrapper around init_win() that reads the desired window size from a file
- * at the path prefixing the provided win name "w_name" with "config/windows/".
- * "f" is the window drawing function (Win._draw()).
+/* Wrapper around init_win() that reads the desired window size and title from a
+ * file at the path prefixing the provided win name "w_name" with
+ * "config/windows/". "f"() is the window drawing function (Win._draw()).
  */
 extern struct Win init_win_from_file(struct World * world, char * w_name,
                                      void (* f) (struct Win *));
 
 
 
 
-extern struct Win init_win(struct WinMeta * wmeta, char * title,
-                           int16_t height, int16_t width,
-                           void * data, void * func)
+extern uint8_t init_win(struct WinMeta * wmeta, struct Win * w, char * title,
+                        int16_t height, int16_t width,
+                        void * data, void * func)
 {
-    struct Win w;
-    w._prev             = 0;
-    w._next             = 0;
-    w.frame.curses_win  = 0;
-    w._title            = title;
-    w.data              = data;
-    w._draw             = func;
+    w->_prev             = 0;
+    w->_next             = 0;
+    w->frame.curses_win  = 0;
+    w->_title             = malloc(strlen(title) + 1);
+    if (NULL == w->_title)
+    {
+        return 1;
+    }
+    sprintf(w->_title, title, strlen(title));
+    w->data              = data;
+    w->_draw             = func;
     if      (0 < width)
     {
-        w.frame.size.x = width;
+        w->frame.size.x = width;
     }
     else if (0 > width)
     {
-        w.frame.size.x = wmeta->padframe.size.x + width;
+        w->frame.size.x = wmeta->padframe.size.x + width;
     }
     else
     {
-        w.frame.size.x = wmeta->padframe.size.x;
+        w->frame.size.x = wmeta->padframe.size.x;
     }
     if      (0 < height && height <= wmeta->padframe.size.y - 1)
     {
-        w.frame.size.y = height;
+        w->frame.size.y = height;
     }
     else if (0 > height && wmeta->padframe.size.y + (height - 1) > 0)
     {
-        w.frame.size.y = wmeta->padframe.size.y + (height - 1);
+        w->frame.size.y = wmeta->padframe.size.y + (height - 1);
     }
     else
     {
-        w.frame.size.y = wmeta->padframe.size.y - 1;
+        w->frame.size.y = wmeta->padframe.size.y - 1;
     }
-    return w;
+    return 0;
 }
 
 
 
  *
  * Functions that return uint8_t return these error codes:
  * 0 - success
- * 1 - memory allocation error (of ncurses' pads/windows, or scroll hint texts)
+ * 1 - memory allocation error
  * 2 - would force virtual screen to grow beyond width or height of 2^16 cells
  *
  * TODO: Expose less internals to the API.
 
 
 
-/* Create a window as child of "wmeta" titled "title" of "height" and "width"
- * and appointing "func"() to interpret and draw the content stored at "data"
- * if the window is visible.
+/* Initialize a window child of "wmeta" to "title", "height" and "width" and
+ * appointing "func"() to interpret and draw the content stored at "data" when
+ * the window is visible.
  *
  * Pass 0 for "width" to make the window as wide as the terminal screen. Pass
  * negative values for "width" to make the size so many cells smaller than the
  * allowed height is also applied for positive values that exceed it or negative
  * values that would reduce the window height < 1 cell.
  *
- * Other members of the Win struct are initialized to 0. The window will stay
- * invisible until appended to the chain of visible windows via append_win().
+ * Other members of the Win struct are initialized to 0.
  */
-extern struct Win init_win(struct WinMeta * wmeta, char * title,
-                           int16_t height, int16_t width,
-                           void * data, void * func);
+extern uint8_t init_win(struct WinMeta * wmeta, struct Win * w, char * title,
+                        int16_t height, int16_t width,
+                        void * data, void * func);