diff --git a/Resources/UK/Browse/Choices b/Resources/UK/Browse/Choices
index 282c41d8f5b0d1fa73a9ce76ccfa2c0490945fc4..01fc236ad9ea830796c88beb9fa22eec2d81497a 100644
--- a/Resources/UK/Browse/Choices
+++ b/Resources/UK/Browse/Choices
@@ -120,7 +120,7 @@ LeftMargin:0
 RightMargin:0
 QuoteMargin:0
 Leading:4
-LeftIndent:12800
+LeftIndent:38400
 #LeftMargin:1600
 #RightMargin:6400
 #QuoteMargin:19200
diff --git a/Resources/UK/Browse/Res,fae b/Resources/UK/Browse/Res,fae
index 878b010eff5cb8e0e53aca54545528fc909fe6d3..f4234bf3610ac10fdc4b29efdae5969b85fa1107 100644
Binary files a/Resources/UK/Browse/Res,fae and b/Resources/UK/Browse/Res,fae differ
diff --git a/Resources/UK/Phoenix/Choices b/Resources/UK/Phoenix/Choices
index 15e4cff4e361427c0810ea2f36e4b124f21121c3..dc09fa517bab34440134eb0b812454b1d39613a0 100644
--- a/Resources/UK/Phoenix/Choices
+++ b/Resources/UK/Phoenix/Choices
@@ -119,7 +119,7 @@ LeftMargin:1600
 RightMargin:6400
 QuoteMargin:19200
 Leading:4
-LeftIndent:12800
+LeftIndent:38400
 
 # Fetch controls
 # ==============
diff --git a/Resources/UK/Ursula/Choices b/Resources/UK/Ursula/Choices
index 196aba2b4c93a65227bb344ad3122c4487bd1cd4..8dd39abfae572511e182f69a2cabdba04000aff6 100644
--- a/Resources/UK/Ursula/Choices
+++ b/Resources/UK/Ursula/Choices
@@ -119,7 +119,7 @@ LeftMargin:1600
 RightMargin:6400
 QuoteMargin:19200
 Leading:4
-LeftIndent:12800
+LeftIndent:38400
 
 # Fetch controls
 # ==============
diff --git a/c/Encoding b/c/Encoding
index 9dc8e63b0b12669e180f0f5a6cba47ab5912c7a7..f19b93e5e552e0ac78c3c721048f2b1d0071af3f 100644
--- a/c/Encoding
+++ b/c/Encoding
@@ -146,7 +146,7 @@ static int encoding_tick_entry(ObjectId o, int enc, int state)
 /*             object.                           */
 /*************************************************/
 
-static void encoding_prepare_menu(ObjectId o, browser_data *b)
+static void encoding_prepare_menu(ObjectId o, browser_data * b)
 {
   menu_set_tick(0, o, 0x11FFF, b->encoding_priority != priority_user);
 
diff --git a/c/Fetch b/c/Fetch
index e0f169477c82882287748ee0abb218dea591f421..bcd24d3133c53129792b945feb0920444a785810 100644
--- a/c/Fetch
+++ b/c/Fetch
@@ -1275,7 +1275,7 @@ void fetch_fetcher(browser_data * b)
 
       /* We're not waiting, but if there's also no data left to fetch, */
       /* then we're just chugging through the list of tokens that the  */
-      /* library is generating, telling various bits of the code about */
+      /* library has generated, telling various bits of the code about */
       /* their contents (e.g. a new image, a new form). In this case,  */
       /* change the fetch status so the status bar can reflect the new */
       /* situation.                                                    */
diff --git a/c/FetchHTML b/c/FetchHTML
index f9b05996c4fdd9ec70e71d5018fe2cab20dda32d..e81e1d7585b2d44fe300fbb97d4c24dc6a2cc285 100644
--- a/c/FetchHTML
+++ b/c/FetchHTML
@@ -517,7 +517,7 @@ _kernel_oserror * html_close(int handle)
       if (tl & (1u<<12)) Printf("html_close: free block %p for 'context' field of 'urlstat' structure\n",up->context);
     #endif
 
-    free(up->context);
+    HtmlEndParse(up->context);
     up->context = NULL;
   }
 
@@ -694,6 +694,7 @@ _kernel_oserror * html_get_next_token(browser_data * b, unsigned int handle, int
                         &status,         /* Protocol status              */
                         &r,              /* Number of bytes read         */
                         remaining);      /* Number of bytes left to get  */
+
       /* Deal with cookies */
 
       if (!e && (status & (1u<<16))) e = cookies_process_cookie(b);
@@ -1674,18 +1675,13 @@ _kernel_oserror * html_get_next_token(browser_data * b, unsigned int handle, int
   /* was not flagged as being in progress.                        */
   }
 
-  /* If no data has been fetched from the url_read_data call   */
-  /* from earlier on, and there hasn't been an error flagged   */
-  /* so far, and both the general 'authorisation taking place' */
-  /* and urlstat-based 'authorisation in progress' flags are   */
-  /* clear, ask the URL module for its current status. If it   */
-  /* says it has finished (which would explain this set of     */
-  /* circumstances - basically, having no data from the        */
-  /* url_read_data call but nothing else is wrong), set the    */
-  /* urlstat structure flag to say fetching is no longer in    */
-  /* progress.                                                 */
-
-  if (!r && !e && up->authorised != 1 && !authorising)
+  /* If we're not in the middle of authorisation, there hasn't */
+  /* been an error, and the urlstat structure for the fetch    */
+  /* flags that fetching is still in progress, ask the URL     */
+  /* module if things are finished yet. If so, do the relevant */
+  /* tidying up and unset the 'fetch in progress' flag.        */
+
+  if (!e && up->authorised != 1 && !authorising && up->fetching)
   {
     int s;
 
@@ -1696,7 +1692,16 @@ _kernel_oserror * html_get_next_token(browser_data * b, unsigned int handle, int
     }
     else s = URL_Status_Done; /* Internal URLs 'fetch' immediately */
 
-    if (s & URL_Status_Done) up->fetching = 0;
+    if (s & URL_Status_Done)
+    {
+      up->fetching = 0;
+
+      if (up->context)
+      {
+        HtmlEndParse(up->context);
+        up->context = NULL;
+      }
+    }
   }
 
   /* If we've been passed somewhere to put the size of the store, */
diff --git a/c/FontManage b/c/FontManage
index 60df4012987f7e4a4021e20705922bb831c48ad0..8b80be669524f03cfc2e50baf753c642d1d82329 100644
--- a/c/FontManage
+++ b/c/FontManage
@@ -1155,10 +1155,10 @@ _kernel_oserror * fm_putsl(fm_face handle, int x, int y, char * s, int chars, in
   /* the terminator wrote over whther or not    */
   /* there is an error.                         */
 
-  if (chars < strlen(s))
+  if (s[chars] != '\0')
   {
     c        = s[chars];
-    s[chars] = 0;
+    s[chars] = '\0';
 
     e = fm_puts(handle,x,y,s,os,blend);
 
diff --git a/c/Forms b/c/Forms
index 213e3d8050ee5707e5b83339aeac602a879dcb17..82b6d1cf55a88805f751f5de7f1edf2bd0cd7cd5 100644
--- a/c/Forms
+++ b/c/Forms
@@ -567,8 +567,8 @@ static _kernel_oserror * form_validate_select(browser_data * b, HStream * tp, in
 /*                                               */
 /* If more than one is selected, all but the     */
 /* last are deselected (unless the passed token  */
-/* is selected). If none are selected, the       */
-/* passed token is selected.                     */
+/* is selected). If none are selected, that's    */
+/* allowed (Netscape Navigator - hmph).          */
 /*                                               */
 /* This behaviour is important when loading      */
 /* forms as it ensures that the correct default  */
@@ -580,10 +580,6 @@ static _kernel_oserror * form_validate_select(browser_data * b, HStream * tp, in
 /* also ensures sensible behaviour when the user */
 /* clicks on the selected button.                */
 /*                                               */
-/* If the token passed in is selected, it will   */
-/* stay selected. This ensures that clicking on  */
-/* an already selected radio works.              */
-/*                                               */
 /* This function initiates appropriate redraws.  */
 /*                                               */
 /* Parameters: Pointer to a browser_data struct  */
@@ -672,19 +668,6 @@ static _kernel_oserror * form_validate_radio(browser_data * b, HStream * token)
     fp = (form_field *) (((int) fp) + fp->header.size * 4);
   }
 
-  /* If no items were found selected, find the record for the token */
-  /* given tothe function and selected it.                          */
-
-  if (!foundone)
-  {
-    fp = form_find_record(b, token, 0);
-    if (!fp) return NULL;
-
-    fp->value.checked = 1;
-
-    browser_update_token(b, fp->header.token, 0, 0);
-  }
-
   /* Finished */
 
   return NULL;
@@ -845,7 +828,7 @@ _kernel_oserror * form_put_field(browser_data * b, HStream * token, char * value
         /* If the 'value' parameter passed to the function is NULL, the */
         /* item will be deselected, else it will be selected.           */
 
-        changed           = ((!!value) != (fp->value.checked));
+        changed           = ((!value) != (!fp->value.checked));
         fp->value.checked = !!value;
       }
       break;
@@ -856,7 +839,7 @@ _kernel_oserror * form_put_field(browser_data * b, HStream * token, char * value
       {
         /* Set the item's selected state as for option boxes above */
 
-        changed           = ((!!value) != (fp->value.checked));
+        changed           = ((!value) != (!fp->value.checked));
         fp->value.checked = !!value;
 
         /* For radios, need to make sure only one is selected */
@@ -874,13 +857,13 @@ _kernel_oserror * form_put_field(browser_data * b, HStream * token, char * value
         /* If value is NULL, change it to be an empty string instead - */
         /* avoids having to keep checking for (value == NULL) later.   */
 
-        value = value ? value : "";
+        value = value ? value : fp->value.select.selection;
 
         /* Try to find the first selected item in the field; */
         /* if not found, point to the first item.            */
 
-        o = strchr(fp->value.select.selection, FORM_SELCHAR);
-        if (!o) o = fp->value.select.selection;
+        o = strchr(value, FORM_SELCHAR);
+        if (!o) o = value;
 
         /* If the value passed to the function differs from that */
         /* already set for the field, change to the new value    */
@@ -898,7 +881,7 @@ _kernel_oserror * form_put_field(browser_data * b, HStream * token, char * value
         /* (some SELECT field types only allow one item to be    */
         /* selected at any one time).                            */
 
-        form_validate_select(b, token, o - fp->value.select.selection);
+        form_validate_select(b, token, o - value);
       }
       break;
     }
@@ -984,14 +967,15 @@ static void form_build_selection(const int * value, char * selection)
 /*                                               */
 /* Add a new field to the last form in the list  */
 /* (always the right one due to the sequential   */
-/* nature of HTML). The value is initialised as  */
-/* passed in; for radio and checkbox this is     */
-/* taken to be NULL = not selected, otherwise    */
-/* selected. For SELECT fields, this is taken as */
-/* a pointer to the value part of the token;     */
-/* this will be converted to a zero terminated   */
-/* list of bytes where FORM_UNSELCHAR = not      */
-/* selected, FORM_SELCHAR = selected.            */
+/* nature of HTML forms). The value is           */
+/* initialised as passed in; for radios and      */
+/* checkboxes this is taken to be NULL = not     */
+/* selected, otherwise selected. For SELECT      */
+/* fields, this is taken as a pointer to the     */
+/* value part of the token; this will be         */
+/* converted to a zero terminated list of bytes  */
+/* where FORM_UNSELCHAR = not selected,          */
+/* FORM_SELCHAR = selected.                      */
 /*                                               */
 /* Parameters: Pointer to a browser_data struct  */
 /*             relevant to the form;             */
@@ -1216,7 +1200,7 @@ static char * form_select_text(browser_data * b, HStream * tp, char * selection)
       f = (char *) p;
     }
 
-    /* Move past the selected/unselected inidicator char */
+    /* Move past the selected/unselected indicator char */
 
     p++;
 
@@ -1368,7 +1352,7 @@ static _kernel_oserror * form_reset_form(browser_data * b, HStream * token)
         {
           /* Value is a simple text string for these types */
 
-          value = tp->text;
+          value = tp->text ? tp->text : "";
         }
         break;
 
@@ -2662,6 +2646,7 @@ static int form_encode_flex_data(void ** data, const char * enctype, int start_a
          !isalnum((int) *p)
 
          && *p != ' '
+         && *p != '_'
          && *p != ENCODE_DATASEP
          && *p != ENCODE_FIELDSEP
          && *p != ENCODE_VALUESEP
@@ -3251,9 +3236,9 @@ _kernel_oserror * form_click_field(browser_data * b, HStream * token, int mode,
       case form_password: e = form_start_textarea_edit(b, token, mode);
       break;
 
-      /* For check (option) boxes and radios, toggle values as appropriate */
+      /* For check (option) boxes and radios, toggle or values as appropriate */
 
-      case form_checkbox: /* same as form_radio: no break */
+      case form_checkbox: /* As for radios, so no 'break' */
       case form_radio:    e = form_put_field(b, token, (char *) !fp->value.checked, 1);
       break;
 
diff --git a/c/Frames b/c/Frames
index 4bddb55406dbed1b483eeb59dc2d9fe6a14780fc..42e50f141e9fb579250f643b9625192e77074499 100644
--- a/c/Frames
+++ b/c/Frames
@@ -2492,15 +2492,11 @@ browser_data * frames_find_target(browser_data * b, HStream * t)
      )
      return b;
 
-  /* If all else fails, want to try getting to the highest possible */
-  /* level - after all, accidentally opening what was meant to be a */
-  /* full size page inside some tiny frame would be pretty bad...!  */
+  /* If all else fails, we don't recognise the name or it is */
+  /* illegal. Safest to open in a new window, leaving the    */
+  /* original document intact.                               */
 
-  ancestor = b->ancestor;
-  if (!ancestor) ancestor = b->real_parent;
-  if (!ancestor) ancestor = b;
-
-  return ancestor;
+  return NULL;
 }
 
 /*************************************************/
diff --git a/c/Hotlist b/c/Hotlist
index d53f15de54bc9688ae0e5820bb195ee51b73e719..b543f28021126f9a113b334c8bf6427c48fc5b6a 100644
--- a/c/Hotlist
+++ b/c/Hotlist
@@ -576,7 +576,24 @@ static _kernel_oserror * hotlist_new_directory(hotlist_item * parent, char * dir
   hotlist_item     * item;
   _kernel_oserror  * e;
 
-  if (!directory_name) return NULL;
+  lookup_token("HotlistUntitled:(Untitled)",0,0);
+
+  if (!directory_name) directory_name = tokens;
+  else
+  {
+    while (*directory_name && *directory_name <= ' ') directory_name ++;
+
+    if (!*directory_name) directory_name = tokens;
+    else
+    {
+      int len = strlen(directory_name) - 1;
+
+      while (len && directory_name[len] <= ' ') len--;
+
+      if (!len) directory_name = tokens;
+      else directory_name[len + 1] = '\0';
+    }
+  }
 
   /* Allocate space for the item and its name */
 
@@ -670,6 +687,33 @@ static _kernel_oserror * hotlist_new_url(hotlist_item * parent, unsigned int pos
   hotlist_item    * item;
   _kernel_oserror * e;
 
+  /* Do we have a URL string? */
+
+  if (!url) return NULL;
+
+  while (*url && *url <= ' ') url++;
+
+  if (!*url) return NULL;
+
+  /* Do we have a useful title string? */
+
+  if (!url_description) url_description = url;
+  else
+  {
+    while (*url_description && *url_description <= ' ') url_description ++;
+
+    if (!*url_description) url_description = url;
+    else
+    {
+      int len = strlen(url_description) - 1;
+
+      while (len && url_description[len] <= ' ') len--;
+
+      if (!len) url_description = url;
+      else url_description[len + 1] = '\0';
+    }
+  }
+
   /* Allocate a new hotlist_item structure */
 
   if ((item = malloc(sizeof(hotlist_item))) == NULL)
@@ -1920,8 +1964,6 @@ _kernel_oserror * hotlist_add(char * description, char * url, int at_bottom)
 
   position = at_bottom ? HOTLIST_POSITION_END : HOTLIST_POSITION_BEGINNING;
 
-  if (!description || !*description) description = lookup_token("HotlistUntitled:(Untitled)",0,0);
-
   /* Add the item and ensure the window extent etc. is correct */
 
   e = hotlist_new_url(hotlist_root,
@@ -3268,19 +3310,24 @@ static _kernel_oserror * hotlist_load_directory(FILE * fileptr, hotlist_item * t
 
       str_ptr = strtok(NULL, "><");
 
-      /* Add this item */
+      /* Get ready to add this item, provided that the URL string has */
+      /* '://' in - i.e. looks fully specified                        */
 
-      if (target_type == 0)
+      if (strstr(url, "://"))
       {
-        e = hotlist_new_url(target, HOTLIST_POSITION_END, str_ptr, url);
-        target_type = 1;
-      }
-      else
-      {
-        e = hotlist_new_url(target, HOTLIST_POSITION_AFTER, str_ptr, url);
+        if (target_type == 0)
+        {
+          e = hotlist_new_url(target, HOTLIST_POSITION_END, str_ptr, url);
+          target_type = 1;
+        }
+        else
+        {
+          e = hotlist_new_url(target, HOTLIST_POSITION_AFTER, str_ptr, url);
+        }
+        if (e) goto hotlist_load_directory_exit; /* (See near end of function) */
+
+        target = hotlist_newitem;
       }
-      if (e) goto hotlist_load_directory_exit; /* (See near end of function) */
-      target = hotlist_newitem;
     }
 
     /* Treat any '<ul>' tags as the start of a new directory. The name comes */
@@ -6253,8 +6300,6 @@ _kernel_oserror * hotlist_add_position(int x, int y, char * description, char *
   int                       winx, winy;
   int                       top, position;
 
-  if (!description || !*description) description = lookup_token("HotlistUntitled:(Untitled)",0,0);
-
   /* Calculate window relative coordinates */
 
   RetError(window_get_wimp_handle(0,
@@ -6359,6 +6404,7 @@ _kernel_oserror * hotlist_add_html_file(int x, int y, char * path)
   unsigned int              item_height, item_dir_width, item_url_width;
   int                       winx, winy;
   int                       top, position;
+  char                    * dirname;
 
   /* Calculate window relative coordinates */
 
@@ -6404,6 +6450,12 @@ _kernel_oserror * hotlist_add_html_file(int x, int y, char * path)
     targetitem = hotlist_root;
   }
 
+  dirname = strrchr(path, '.');
+  if (dirname) dirname ++;
+  if (!dirname || !*dirname) dirname = lookup_token("HotlistUntitled:(Untitled)",0,0);
+
+  RetError(hotlist_new_directory(targetitem, dirname, position, &newitem));
+
   /* Open the file */
 
   fileptr = fopen(path, "r");
@@ -6420,52 +6472,21 @@ _kernel_oserror * hotlist_add_html_file(int x, int y, char * path)
     return &erb;
   }
 
-  /* Load it, adding to the bottom of the root directory */
+  /* Load it, adding to the new directory */
 
-  e = hotlist_load_directory(fileptr, hotlist_root);
+  e = hotlist_load_directory(fileptr, newitem);
 
   fclose(fileptr);
 
-  /* Clear all of the various flags for redraw, */
-  /* selection etc. now that we have a new      */
-  /* hotlist.                                   */
-
-  hotlist_clear_flags(hotlist_root, hl_ALL, HOTLIST_G_REDRAW_NOW);
-
   if (e) return e;
 
-  /* Move to the intended load position; first, find */
-  /* the item we just added, then move it to the     */
-  /* relevant position relative to the target item,  */
-  /* as worked out above.                            */
-
-  newitem = hotlist_root->data.directory_content;
-  while (newitem && newitem->next) newitem = newitem->next;
-
-  if (newitem)
-  {
-    /* Need to set the selected flags on the directory, or hotlist_move_item */
-    /* will think we're moving only part of it, and will end up just copying */
-    /* the directory item.                                                   */
-
-    hotlist_set_flags(newitem, hl_ALL, HOTLIST_G_IS_SELECTED);
-
-    RetError(hotlist_move_item(newitem, targetitem, position));
-
-    /* Now deselect it... */
-
-    hotlist_clear_flags(newitem, hl_ALL, HOTLIST_G_IS_SELECTED);
-  }
-
   /* Handle redraw */
 
   hotlist_preopen();
 
-  /* Optimise the redraw to do as little as possible depending */
-  /* upon where in the list the item was added.                */
+  hotlist_set_flags(hotlist_root, hl_ALL, HOTLIST_G_REDRAW_NOW);
 
-  RetError(hotlist_redraw_items(top,
-                                hotlist_count_displayed_items(hotlist_root->data.directory_content)));
+  RetError(hotlist_redraw_now());
 
   /* Exit through the 'has modified' routine */
 
diff --git a/c/Images b/c/Images
index 85d23997b23a0200ab9f280bfd92788aa16175d0..119caa98ab42ffea639c54d047248dfcb894e070 100644
--- a/c/Images
+++ b/c/Images
@@ -75,7 +75,7 @@ static void              image_remove_all_data        (browser_data * b, int ima
 static void              image_delay                  (browser_data * b, int image);
 static void              image_abandon                (browser_data * b, int image);
 static void              image_delete_image_entry     (int image);
-static void              image_refetch                (browser_data * b, int image, int priority);
+static void              image_refetch                (browser_data * b, int image, int priority, int redraw);
 
 static _kernel_oserror * image_update_area            (browser_data * b, int x, int y, BBox * ubox, int image, int redraw);
 static _kernel_oserror * image_update_image           (browser_data * b, int image, BBox * box);
@@ -1820,10 +1820,15 @@ _kernel_oserror * image_discard(browser_data * b)
 /*             Value to set Priority flag to (so */
 /*             that if 'show foreground images'  */
 /*             is turned off, the image will     */
-/*             override it).                     */
+/*             override it);                     */
+/*                                               */
+/*             1 to redraw the image, 0 to not   */
+/*             bother (e.g. for many images,     */
+/*             may want to redraw the whole      */
+/*             window instead).                  */
 /*************************************************/
 
-static void image_refetch(browser_data * b, int image, int priority)
+static void image_refetch(browser_data * b, int image, int priority, int redraw)
 {
   int i;
 
@@ -1880,7 +1885,8 @@ static void image_refetch(browser_data * b, int image, int priority)
 
     idata[image].priority = priority;
     idata[image].hadfirst = 0;
-    image_update_image(b, image, NULL);
+
+    if (redraw) image_update_image(b, image, NULL);
   }
 
   /* Deal with all cross referencers of the base image */
@@ -1891,7 +1897,8 @@ static void image_refetch(browser_data * b, int image, int priority)
     {
       idata[i].priority = priority;
       idata[i].hadfirst = 0;
-      image_update_image(b, i, NULL);
+
+      if (redraw) image_update_image(b, i, NULL);
     }
   }
 }
@@ -1918,7 +1925,7 @@ void image_reload(browser_data * b, HStream * token)
 
   if (image < 0) return;
 
-  image_refetch(b, image, 1);
+  image_refetch(b, image, 1, 1);
 }
 
 /*************************************************/
@@ -1926,7 +1933,10 @@ void image_reload(browser_data * b, HStream * token)
 /*                                               */
 /* If image loading has been suspended for any   */
 /* reason, it can be resumed by calling this     */
-/* function.                                     */
+/* function. Any images already loaded will be   */
+/* reshown. The priority flag for images is not  */
+/* set, so the browser must be set to display    */
+/* foreground images for anything to show up.    */
 /*                                               */
 /* Parameters: Pointer to a browser_data struct  */
 /*             relevant to the images;           */
@@ -1963,7 +1973,7 @@ void image_restart_fetches(browser_data * b, int foreground, int background)
              (idata[image].background  && background) ||
              (!idata[image].background && foreground)
            )
-           image_refetch(idata[image].owner, image, 0);
+           image_refetch(idata[image].owner, image, 0, 0);
       }
     }
   }
diff --git a/c/Main b/c/Main
index d56a44de93797be574f1c95b8b88a14014c5dd31..3ca6951ccd7720a7a79364ae6492d39c07b318a0 100644
--- a/c/Main
+++ b/c/Main
@@ -483,7 +483,7 @@ static void initialise_app(void)
 
   /* Find out window tool sizes */
 
-  ChkError(windows_initialise_tool_sizes());
+  show_error(windows_initialise_tool_sizes());
 }
 
 /*************************************************/
@@ -1113,6 +1113,22 @@ int main(int argc, char * argv[])
       }
     }
 
+  #else
+
+    /* Non-debug builds have a WimpSlot close to the actual startup */
+    /* requirements. Debug builds have a huge slotsize because of   */
+    /* all of the debug information, despite this being copied away */
+    /* by the debugger on startup. This leaves a very large free    */
+    /* chunk within the WimpSlot size in which malloc may operate,  */
+    /* and thus creates a distinctly different environment for the  */
+    /* memory system in a debug build.                              */
+    /*                                                              */
+    /* To try and get closer to the non-debug memory usage, TRACE   */
+    /* builds will malloc the following large block in an attempt   */
+    /* to soak up that initial free space.                          */
+
+    malloc(2*1024*1024);
+
   #endif
 
   signal(SIGOSERROR, catch_errors); /* OS error */
diff --git a/c/Redraw b/c/Redraw
index 0ce0d848521365f72869c72eb5f7706a3b68bbd0..5e4088326b616382255b709102a03bdae7ed1aaf 100644
--- a/c/Redraw
+++ b/c/Redraw
@@ -365,11 +365,11 @@ int redraw_margin(browser_data * b, reformat_cell * d, HStream * t)
 
   if (t->tag == TABLE && ISBODY(t)) return redraw_left_margin(b, d);
 
-  /* Indent more depending on the header type, if the */
-  /* HStream represents a header.                     */
-
-  if (redraw_header(s)) return i + redraw_left_margin(b, d);
-
+//  if (redraw_header(s)) return i + redraw_left_margin(b, d);
+//
+//  /* Indent more depending on the header type, if the */
+//  /* HStream represents a header.                     */
+//
 //  if (redraw_header(s) == 1 || redraw_header(s) == 2) return (i + 4);
 //  if (redraw_header(s) == 3)                          return (i + 16 + 4);
 //  if (redraw_header(s) == 4 || redraw_header(s) == 5) return (i + 32 + 4);
diff --git a/c/Reformat b/c/Reformat
index 5199bbd166815327aa044ac79099ec8403d20e57..3a1a14e9bbc6c65b2a518d9fb380328da6baa4a0 100644
--- a/c/Reformat
+++ b/c/Reformat
@@ -356,6 +356,37 @@ static _kernel_oserror * reformat_token_width(reformat_width_data * w, unsigned
         width  = 0;
         length = 0; /* Not used, but stops compiler giving warnings */
 
+        /* Some fields can hold the selNONE or selMANY text, as well */
+        /* as the menu item texts.                                   */
+
+        if (HtmlSELECTmultiple(w->tp) || *p == 0xff)
+        {
+          e = fm_get_string_width(h,
+                                  lookup_token("selNONE:<None>",0,0),
+                                  Reformat_AsWideAsPossible_MP,
+                                  strlen(tokens),
+                                  -1,
+                                  &temp,
+                                  &width);
+
+          if (!e && width > l) l = width;
+        }
+
+        if (HtmlSELECTmultiple(w->tp))
+        {
+          e = fm_get_string_width(h,
+                                  lookup_token("selMANY:<Many>",0,0),
+                                  Reformat_AsWideAsPossible_MP,
+                                  strlen(tokens),
+                                  -1,
+                                  &temp,
+                                  &width);
+
+          if (!e && width > l) l = width;
+        }
+
+        /* Look for the width of the widest OPTION field */
+
         while (*p != 0xff)
         {
           p++;
@@ -375,12 +406,17 @@ static _kernel_oserror * reformat_token_width(reformat_width_data * w, unsigned
             break;
           }
 
+          /* Record if this is the widest and skip to the next field */
+
           if (width > l) l = width;
 
           p += strlen(p) + 1;
           p += strlen(p) + 1;
         }
 
+        /* Set the width and flag that we've done the calculation */
+        /* already so code lower down doesn't try.                */
+
         w->width = l + extra;
         done     = 1;
 
diff --git a/h/Encoding b/h/Encoding
index 08bd231e3a310bfad363b3c006602374dc713479..772d9125d9ed510928d8ef823db75b05f4312945 100644
--- a/h/Encoding
+++ b/h/Encoding
@@ -24,10 +24,10 @@
 
 /* Function prototypes */
 
-int  encoding_select               (int eventcode,ToolboxEvent * event,IdBlock * idb,void * handle);
-int  encoding_from_document_select (int eventcode,ToolboxEvent * event,IdBlock * idb,void * handle);
-int  encoding_show_menu            (int eventcode,ToolboxEvent * event,IdBlock * idb,void * handle);
+int  encoding_select               (int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle);
+int  encoding_from_document_select (int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle);
+int  encoding_show_menu            (int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle);
 
 void encoding_changed_by_meta      (int encoding, void * handle);
 
-void encoding_update_menus         (browser_data *d);
+void encoding_update_menus         (browser_data * b);