diff --git a/Resources/UK/Browse/Res,fae b/Resources/UK/Browse/Res,fae
index a0f4342b5e9a5cf17169e561bcb953f6c6bc2526..7a30971458543071fe4db7769946e7a257169eec 100644
Binary files a/Resources/UK/Browse/Res,fae and b/Resources/UK/Browse/Res,fae differ
diff --git a/Resources/UK/Phoenix/Res,fae b/Resources/UK/Phoenix/Res,fae
index 5402a9937664a17ea8846ec3f279c9c52e0bf193..70cfc4dc997552e880614cbeb1081fd3828320be 100644
Binary files a/Resources/UK/Phoenix/Res,fae and b/Resources/UK/Phoenix/Res,fae differ
diff --git a/Resources/UK/Ursula/Res,fae b/Resources/UK/Ursula/Res,fae
index 4aa35b6d1022bc905a3a1b3a70a82c6c2e49bd95..ad34a4ce7cecfe6dafb594d240db65472138cde7 100644
Binary files a/Resources/UK/Ursula/Res,fae and b/Resources/UK/Ursula/Res,fae differ
diff --git a/c/Choices b/c/Choices
index 8e5a727044d14733030f44656c01df5927049a97..c06ea96f4fd128f6795508bab777e29f40dbac8e 100644
--- a/c/Choices
+++ b/c/Choices
@@ -60,20 +60,20 @@
 
 /* Locals */
 
-char *consonant = "bcdfghjklmnpqrstvwxyz";
-char *vowel = "aeiou";
+static char *consonant                = "bcdfghjklmnpqrstvwxyz";
+static char *vowel                    = "aeiou";
 
-static int      * subwindows        = NULL;
-static ObjectId   current_subwindow = CDSubNone;
-static ObjectId   colourdbox_id     = 0;
+static ObjectId * subwindows          = NULL;
+static int        current_subwindow   = CDSubNone;
+static ObjectId   colourdbox_id       = 0;
 
-static int        save_ticked = -1;
-static int        disp_ticked = -1;
+static int        save_ticked         = -1;
+static int        disp_ticked         = -1;
 
 static int        choices_modechanged = 0;
 
-global_choices  * new_choices       = NULL;
-ObjectId          choices_windowid  = 0;
+global_choices  * new_choices         = NULL;
+ObjectId          choices_windowid    = 0;
 
 /* Static function prototypes */
 
@@ -96,9 +96,11 @@ static int               choices_save_m_click_handler    (int eventcode, Toolbox
 static int               choices_option_state_handler    (int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle);
 static int               choices_redraw_fakepage_handler (int eventcode, WimpPollBlock * event, IdBlock * id_block, void * handle);
 static int               choices_open_choice_window      (int eventcode, WimpPollBlock * event, IdBlock * id_block, void * handle);
+
 static _kernel_oserror * choices_colour_set_component    (ObjectId window, ComponentId component, int colour);
 static _kernel_oserror * choices_set_save_field          (ObjectId obj, ComponentId comp, int state);
 static _kernel_oserror * choices_set_display_field       (ObjectId obj, ComponentId comp, int state);
+static ObjectId          choices_find_component          (ComponentId component);
 
 /*************************************************/
 /* choices_show_subwindow()                      */
@@ -233,6 +235,7 @@ static _kernel_oserror * choices_show_subwindow(ObjectId choices_window, int sub
 int choices_to_be_shown(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
   _kernel_oserror       *e;
+  ObjectId              window;
 
   #ifdef TRACE
     if (tl & (1u<<29)) Printf("choices_to_be_shown: Called\n");
@@ -269,19 +272,21 @@ int choices_to_be_shown(int eventcode, ToolboxEvent * event, IdBlock * idb, void
 
   /* Create all choices subwindows.  Set their ObjectIds to NULL if they cannot be created */
 
-  e = toolbox_create_object(0, "ChSub0", subwindows + CDSubBrowseDefaults); if (e) subwindows[CDSubBrowseDefaults] = NULL;
-  e = toolbox_create_object(0, "ChSub1", subwindows + CDSubWindows);        if (e) subwindows[CDSubWindows]        = NULL;
-  e = toolbox_create_object(0, "ChSub2", subwindows + CDSubColours);        if (e) subwindows[CDSubColours]        = NULL;
-  e = toolbox_create_object(0, "ChSub3", subwindows + CDSubFonts);          if (e) subwindows[CDSubFonts]          = NULL;
-  e = toolbox_create_object(0, "ChSub4", subwindows + CDSubHotlist);        if (e) subwindows[CDSubHotlist]        = NULL;
-  e = toolbox_create_object(0, "ChSub5", subwindows + CDSubHistory);        if (e) subwindows[CDSubHistory]        = NULL;
-  e = toolbox_create_object(0, "ChSub6", subwindows + CDSubSub6);           if (e) subwindows[CDSubSub6]           = NULL;
-  e = toolbox_create_object(0, "ChSub7", subwindows + CDSubSub7);           if (e) subwindows[CDSubSub7]           = NULL;
-  e = toolbox_create_object(0, "ChSub8", subwindows + CDSubSub8);           if (e) subwindows[CDSubSub8]           = NULL;
+  /* Might be worth changing this to a loop in the future */
+
+  e = toolbox_create_object(0, "ChSub0", &subwindows[0]); if (e) subwindows[0] = NULL;
+  e = toolbox_create_object(0, "ChSub1", &subwindows[1]); if (e) subwindows[1] = NULL;
+  e = toolbox_create_object(0, "ChSub2", &subwindows[2]); if (e) subwindows[2] = NULL;
+  e = toolbox_create_object(0, "ChSub3", &subwindows[3]); if (e) subwindows[3] = NULL;
+  e = toolbox_create_object(0, "ChSub4", &subwindows[4]); if (e) subwindows[4] = NULL;
+  e = toolbox_create_object(0, "ChSub5", &subwindows[5]); if (e) subwindows[5] = NULL;
+  e = toolbox_create_object(0, "ChSub6", &subwindows[6]); if (e) subwindows[6] = NULL;
+  e = toolbox_create_object(0, "ChSub7", &subwindows[7]); if (e) subwindows[7] = NULL;
+  e = toolbox_create_object(0, "ChSub8", &subwindows[8]); if (e) subwindows[8] = NULL;
 
-  ChkError(choices_show_subwindow(idb->self_id, CDSubBrowseDefaults));
+  ChkError(choices_show_subwindow(idb->self_id, 0));
 
-  ChkError(radiobutton_set_state(0, idb->self_id, CDBrowseDefaults, 1));
+  ChkError(radiobutton_set_state(0, idb->self_id, CDFirstSubRadio + 0, 1));
 
   ChkError(choices_set_contents());
 
@@ -301,9 +306,13 @@ int choices_to_be_shown(int eventcode, ToolboxEvent * event, IdBlock * idb, void
   if (!e) e = event_register_toolbox_handler(-1, ECD_HiSaveBt,       choices_save_m_button_handler,    NULL);
   if (!e) e = event_register_toolbox_handler(-1, ECDSaveMenuClick,   choices_save_m_click_handler,     NULL);
   if (!e) e = event_register_toolbox_handler(-1, ECDDispMenuClick,   choices_display_m_click_handler,  NULL);
-  if (!e) e = event_register_toolbox_handler(subwindows[CDSubBrowseDefaults], OptionButton_StateChanged, choices_option_state_handler, NULL);
+  if (!e) e = event_register_toolbox_handler(-1, OptionButton_StateChanged, choices_option_state_handler, NULL);
+
+  if ((window = choices_find_component(CD_FakePage)) != 0)
+  {
+    if (!e) e = event_register_wimp_handler(window, Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
+  }
 
-  if (!e) e = event_register_wimp_handler(*(subwindows + CDSubColours), Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
   if (!e) e = event_register_wimp_handler(idb->self_id, Wimp_EOpenWindow, choices_open_choice_window, NULL);
   /* Deal with errors */
 
@@ -321,9 +330,13 @@ int choices_to_be_shown(int eventcode, ToolboxEvent * event, IdBlock * idb, void
     event_deregister_toolbox_handler(-1, ECD_HiSaveBt,       choices_save_m_button_handler,    NULL);
     event_deregister_toolbox_handler(-1, ECDSaveMenuClick,   choices_save_m_click_handler,     NULL);
     event_deregister_toolbox_handler(-1, ECDDispMenuClick,   choices_display_m_click_handler,  NULL);
-    event_deregister_toolbox_handler(subwindows[CDSubBrowseDefaults], OptionButton_StateChanged, choices_option_state_handler, NULL);
+    event_deregister_toolbox_handler(-1, OptionButton_StateChanged, choices_option_state_handler, NULL);
+
+    if ((window = choices_find_component(CD_FakePage)) != 0)
+    {
+      event_deregister_wimp_handler(window, Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
+    }
 
-    event_deregister_wimp_handler(*(subwindows + CDSubColours), Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
     event_deregister_wimp_handler(idb->self_id, Wimp_EOpenWindow, choices_open_choice_window, NULL);
 
     ChkError(e);
@@ -373,6 +386,7 @@ static void choices_delete_subwindows(void)
 int choices_hidden(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
   _kernel_oserror * e;
+  ObjectId          window;
 
   /* Close subwindow */
 
@@ -397,9 +411,12 @@ int choices_hidden(int eventcode, ToolboxEvent * event, IdBlock * idb, void * ha
   event_deregister_toolbox_handler(-1, ECD_HiSaveBt,       choices_save_m_button_handler,    NULL);
   event_deregister_toolbox_handler(-1, ECDSaveMenuClick,   choices_save_m_click_handler,     NULL);
   event_deregister_toolbox_handler(-1, ECDDispMenuClick,   choices_display_m_click_handler,  NULL);
-  event_deregister_toolbox_handler(subwindows[CDSubBrowseDefaults], OptionButton_StateChanged, choices_option_state_handler, NULL);
+  event_deregister_toolbox_handler(-1, OptionButton_StateChanged, choices_option_state_handler, NULL);
 
-  event_deregister_wimp_handler(*(subwindows + CDSubColours), Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
+  if ((window = choices_find_component(CD_FakePage)) != 0)
+  {
+    event_deregister_wimp_handler(window, Wimp_ERedrawWindow, choices_redraw_fakepage_handler, NULL);
+  }
   event_deregister_wimp_handler(idb->self_id, Wimp_EOpenWindow, choices_open_choice_window, NULL);
 
   choices_windowid = 0;
@@ -419,25 +436,19 @@ int choices_hidden(int eventcode, ToolboxEvent * event, IdBlock * idb, void * ha
 
 static int choices_radio_click_handler(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
-  ObjectId window;
+  int window, state;
 
-  switch(idb->self_component)
+  radiobutton_get_state(0, idb->self_id, idb->self_component, &state, NULL);
+
+  /* Is this a radiobutton selected event? */
+
+  if (state)
   {
-    case CDBrowseDefaults: window = CDSubBrowseDefaults; break;
-    case CDWindows:        window = CDSubWindows;        break;
-    case CDColours:        window = CDSubColours;        break;
-    case CDFonts:          window = CDSubFonts;          break;
-    case CDHotlist:        window = CDSubHotlist;        break;
-    case CDHistory:        window = CDSubHistory;        break;
-    case CDSub6:           window = CDSubSub6;           break;
-    case CDSub7:           window = CDSubSub7;           break;
-    case CDSub8:           window = CDSubSub8;           break;
-
-    default:               window = CDNoSubwindows;      break;
+    window = idb->self_component - CDFirstSubRadio;
+    if (window > CDNoSubwindows) window = CDSubNone;
+    choices_show_subwindow(idb->self_id, window);
   }
 
-  choices_show_subwindow(idb->self_id, window);
-
   return 1;
 }
 
@@ -453,59 +464,39 @@ static int choices_radio_click_handler(int eventcode, ToolboxEvent * event, IdBl
 
 static _kernel_oserror * choices_set_contents(void)
 {
+  ObjectId window;
   /* No error handling here, as we want to allow items to be missing */
 
-  if (subwindows[CDSubBrowseDefaults])
-  {
-    writablefield_set_value(0, subwindows[CDSubBrowseDefaults], CD_Homepage, new_choices->home_page);
-
-    optionbutton_set_state(0, subwindows[CDSubBrowseDefaults], CD_UnderlineLinks, new_choices->underline_links);
-    optionbutton_set_state(0, subwindows[CDSubBrowseDefaults], CD_UseDocColours,  new_choices->use_source_cols);
-    optionbutton_set_state(0, subwindows[CDSubBrowseDefaults], CD_ShowForeground, new_choices->show_foreground);
-    optionbutton_set_state(0, subwindows[CDSubBrowseDefaults], CD_ShowBackground, new_choices->show_background);
-
-    /* Get encoding name */
-
-    choices_set_encoding_field();
-  }
-
-  if (subwindows[CDSubWindows])
-  {
-    optionbutton_set_state(0, subwindows[CDSubWindows], CD_URLBar,     new_choices->url_bar);
-    optionbutton_set_state(0, subwindows[CDSubWindows], CD_StatusBar,  new_choices->status_bar);
-    optionbutton_set_state(0, subwindows[CDSubWindows], CD_ButtonBar,  new_choices->button_bar);
-    optionbutton_set_state(0, subwindows[CDSubWindows], CD_FullScreen, new_choices->full_screen);
-  }
-
-  if (subwindows[CDSubColours])
-  {
-    choices_colour_set_component(subwindows[CDSubColours], CD_BackColour, new_choices->background_colour);
-    choices_colour_set_component(subwindows[CDSubColours], CD_TextColour, new_choices->text_colour);
-    choices_colour_set_component(subwindows[CDSubColours], CD_LinkColour, new_choices->link_colour);
-    choices_colour_set_component(subwindows[CDSubColours], CD_UsedColour, new_choices->used_colour);
-    choices_colour_set_component(subwindows[CDSubColours], CD_FolwColour, new_choices->followed_colour);
-    choices_colour_set_component(subwindows[CDSubColours], CD_SlctColour, new_choices->selected_colour);
-  }
-
-  if (subwindows[CDSubHotlist])
-  {
-    numberrange_set_value(0, subwindows[CDSubHotlist], CD_HlAutoOpen,   new_choices->auto_open_delay);
-    numberrange_set_value(0, subwindows[CDSubHotlist], CD_HlAutoScroll, new_choices->auto_scroll_delay);
-
-    choices_set_display_field(subwindows[CDSubHotlist], CD_HlDispDisp, new_choices->hotlist_show);
-
-    choices_set_save_field(subwindows[CDSubHotlist], CD_HlSaveDisp, new_choices->save_hotlist);
-  }
-
-  if (subwindows[CDSubHistory])
-  {
-    numberrange_set_value(0, subwindows[CDSubHistory], CD_HiLines,   new_choices->v_hist_size);
-    numberrange_set_value(0, subwindows[CDSubHistory], CD_HiMaxSize, new_choices->g_hist_size);
-
-    choices_set_display_field(subwindows[CDSubHistory], CD_HiDispDisp, new_choices->show_urls);
-
-    choices_set_save_field(subwindows[CDSubHistory], CD_HiSaveDisp, new_choices->save_history);
-  }
+  if ((window = choices_find_component(CD_Homepage))       != 0) writablefield_set_value(0, window, CD_Homepage, new_choices->home_page);
+  if ((window = choices_find_component(CD_UnderlineLinks)) != 0) optionbutton_set_state(0, window, CD_UnderlineLinks, new_choices->underline_links);
+  if ((window = choices_find_component(CD_UseDocColours))  != 0) optionbutton_set_state(0, window, CD_UseDocColours,  new_choices->use_source_cols);
+  if ((window = choices_find_component(CD_ShowForeground)) != 0) optionbutton_set_state(0, window, CD_ShowForeground, new_choices->show_foreground);
+  if ((window = choices_find_component(CD_ShowBackground)) != 0) optionbutton_set_state(0, window, CD_ShowBackground, new_choices->show_background);
+
+  /* Get encoding name */
+  choices_set_encoding_field(); //
+
+  if ((window = choices_find_component(CD_URLBar))         != 0) optionbutton_set_state(0, window, CD_URLBar,     new_choices->url_bar);
+  if ((window = choices_find_component(CD_StatusBar))      != 0) optionbutton_set_state(0, window, CD_StatusBar,  new_choices->status_bar);
+  if ((window = choices_find_component(CD_ButtonBar))      != 0) optionbutton_set_state(0, window, CD_ButtonBar , new_choices->button_bar);
+  if ((window = choices_find_component(CD_FullScreen))     != 0) optionbutton_set_state(0, window, CD_FullScreen, new_choices->full_screen);
+
+  if ((window = choices_find_component(CD_BackColour))     != 0) choices_colour_set_component(window, CD_BackColour, new_choices->background_colour);
+  if ((window = choices_find_component(CD_TextColour))     != 0) choices_colour_set_component(window, CD_TextColour, new_choices->text_colour);
+  if ((window = choices_find_component(CD_LinkColour))     != 0) choices_colour_set_component(window, CD_LinkColour, new_choices->link_colour);
+  if ((window = choices_find_component(CD_UsedColour))     != 0) choices_colour_set_component(window, CD_UsedColour, new_choices->used_colour);
+  if ((window = choices_find_component(CD_FolwColour))     != 0) choices_colour_set_component(window, CD_FolwColour, new_choices->followed_colour);
+  if ((window = choices_find_component(CD_SlctColour))     != 0) choices_colour_set_component(window, CD_SlctColour, new_choices->selected_colour);
+
+  if ((window = choices_find_component(CD_HlAutoOpen))     != 0) numberrange_set_value(0, window, CD_HlAutoOpen, new_choices->auto_open_delay);
+  if ((window = choices_find_component(CD_HlAutoScroll))   != 0) numberrange_set_value(0, window, CD_HlAutoScroll, new_choices->auto_scroll_delay);
+  if ((window = choices_find_component(CD_HlDispDisp))     != 0) choices_set_display_field(window, CD_HlDispDisp, new_choices->hotlist_show);
+  if ((window = choices_find_component(CD_HlSaveDisp))     != 0) choices_set_save_field(window, CD_HlSaveDisp, new_choices->save_hotlist);
+
+  if ((window = choices_find_component(CD_HiLines))        != 0) numberrange_set_value(0, window, CD_HiLines,   new_choices->v_hist_size);
+  if ((window = choices_find_component(CD_HiMaxSize))      != 0) numberrange_set_value(0, window, CD_HiMaxSize, new_choices->g_hist_size);
+  if ((window = choices_find_component(CD_HiDispDisp))     != 0) choices_set_display_field(window, CD_HiDispDisp, new_choices->show_urls);
+  if ((window = choices_find_component(CD_HiSaveDisp))     != 0) choices_set_save_field(window, CD_HiSaveDisp, new_choices->save_history);
 
   return NULL;
 }
@@ -523,16 +514,16 @@ static _kernel_oserror * choices_get_contents(void)
   _kernel_oserror         * e;
   WimpGetWindowStateBlock   s;
   browser_data            * b;
+  ObjectId                  window;
   char                    * tempstring;
-  int                       state;
   int                       reqsize;
 
   /* The lack of error chechking is to allow */
   /* items to be missing from the dialogue.  */
 
-  if (subwindows[CDSubBrowseDefaults])
+  if ((window = choices_find_component(CD_Homepage)) != 0)
   {
-    e = writablefield_get_value(0, subwindows[CDSubBrowseDefaults], CD_Homepage, NULL, 0, &reqsize);
+    e = writablefield_get_value(0, window, CD_Homepage, NULL, 0, &reqsize);
 
     if (!e)
     {
@@ -540,7 +531,7 @@ static _kernel_oserror * choices_get_contents(void)
 
       if (tempstring)
       {
-        e = writablefield_get_value(0, subwindows[CDSubBrowseDefaults], CD_Homepage, tempstring, reqsize, NULL);
+        e = writablefield_get_value(0, window, CD_Homepage, tempstring, reqsize, NULL);
 
         if (!e)
         {
@@ -562,32 +553,11 @@ static _kernel_oserror * choices_get_contents(void)
     }
   }
 
-  if (subwindows[CDSubWindows])
-  {
-    e = optionbutton_get_state(0, subwindows[CDSubWindows], CD_URLBar,     &state);
-    if (!e) new_choices->url_bar     = !!state;
-
-    e = optionbutton_get_state(0, subwindows[CDSubWindows], CD_StatusBar,  &state);
-    if (!e) new_choices->status_bar  = !!state;
-
-    e = optionbutton_get_state(0, subwindows[CDSubWindows], CD_ButtonBar,  &state);
-    if (!e) new_choices->button_bar  = !!state;
-
-    e = optionbutton_get_state(0, subwindows[CDSubWindows], CD_FullScreen, &state);
-    if (!e) new_choices->full_screen = !!state;
-  }
-
-  if (subwindows[CDSubHotlist])
-  {
-    numberrange_get_value(0, subwindows[CDSubHotlist], CD_HlAutoOpen,   &new_choices->auto_open_delay);
-    numberrange_get_value(0, subwindows[CDSubHotlist], CD_HlAutoScroll, &new_choices->auto_scroll_delay);
-  }
+  if ((window = choices_find_component(CD_HlAutoOpen))     != 0) numberrange_get_value(0, window, CD_HlAutoOpen,   &new_choices->auto_open_delay);
+  if ((window = choices_find_component(CD_HlAutoScroll))   != 0) numberrange_get_value(0, window, CD_HlAutoScroll, &new_choices->auto_scroll_delay);
 
-  if (subwindows[CDSubHistory])
-  {
-    numberrange_get_value(0, subwindows[CDSubHistory], CD_HiLines,   &new_choices->v_hist_size);
-    numberrange_get_value(0, subwindows[CDSubHistory], CD_HiMaxSize, &new_choices->g_hist_size);
-  }
+  if ((window = choices_find_component(CD_HiLines))        != 0) numberrange_get_value(0, window, CD_HiLines,   &new_choices->v_hist_size);
+  if ((window = choices_find_component(CD_HiMaxSize))      != 0) numberrange_get_value(0, window, CD_HiMaxSize, &new_choices->g_hist_size);
 
   memcpy(&choices, new_choices, sizeof(global_choices));
 
@@ -659,10 +629,16 @@ static int choices_set_button_handler(int eventcode, ToolboxEvent * event, IdBlo
 static int choices_cancel_button_handler(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
   _kernel_oserror *e = NULL;
+  ObjectId        window;
 
   memcpy(new_choices, &choices, sizeof(global_choices));
 
   choices_set_contents();
+
+  /* Attempt to redraw fake page display */
+
+  if ((window = choices_find_component(CD_FakePage)) != 0) button_set_flags(0, window, CD_FakePage, 0, 0);
+
   if (e) show_error_ret(e);
 
   return 1;
@@ -685,6 +661,8 @@ static int choices_cancel_button_handler(int eventcode, ToolboxEvent * event, Id
 static int choices_save_button_handler(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
   _kernel_oserror *e = NULL;
+  ObjectId        window;
+
   e = choices_get_contents();
   if (e)
   {
@@ -692,6 +670,10 @@ static int choices_save_button_handler(int eventcode, ToolboxEvent * event, IdBl
     return 1;
   }
 
+  /* Attempt to redraw fake page display */
+
+  if ((window = choices_find_component(CD_FakePage)) != 0) button_set_flags(0, window, CD_FakePage, 0, 0);
+
   e = save_save_choices(NULL);
   if (e) show_error_ret(e);
 
@@ -709,11 +691,16 @@ static int choices_save_button_handler(int eventcode, ToolboxEvent * event, IdBl
 _kernel_oserror * choices_set_encoding_field(void)
 {
   _kernel_oserror *e;
-  ObjectId    objid;
+  ObjectId    objid, destwind;
   ComponentId compid;
   char *textptr;
   int sizereqd;
 
+  /* Find which window the encoding display is in */
+
+  destwind = choices_find_component(CD_EncodingDisply);
+  if (!destwind) return NULL;
+
   /* Find menu item which contains encoding name */
 
   if (encoding_get_encoding_item(new_choices->encoding, &objid, &compid))
@@ -734,7 +721,7 @@ _kernel_oserror * choices_set_encoding_field(void)
         free(textptr);
         return e;
       }
-      e = displayfield_set_value(0, subwindows[CDSubBrowseDefaults], CD_EncodingDisply, textptr);
+      e = displayfield_set_value(0, destwind, CD_EncodingDisply, textptr);
 
       free(textptr);
       if (e)
@@ -751,7 +738,7 @@ _kernel_oserror * choices_set_encoding_field(void)
   {
     /* The encoding name could not be found in the menu structure */
 
-    RetError(displayfield_set_value(0, subwindows[CDSubBrowseDefaults], CD_EncodingDisply, "Unknown encoding")); //
+    RetError(displayfield_set_value(0, destwind, CD_EncodingDisply, "Unknown encoding")); //
   }
 
   return NULL;
@@ -1449,7 +1436,6 @@ static int choices_redraw_fakepage_handler(int eventcode, WimpPollBlock * event,
   WimpRedrawWindowBlock   block;
   WimpGetWindowStateBlock state;
   int                     more, ypos, xtarget, ptsize, gadsize, xstart, nolines;
-  unsigned int            flags;
   int                     fontheight = 0;
   int                     gotfont    = 0;
   BBox                    icon_coords, fbox;
@@ -1486,22 +1472,22 @@ static int choices_redraw_fakepage_handler(int eventcode, WimpPollBlock * event,
 
   nolines = 1; /* Start with one line (half at top, half at bottom) */
 
-  if (!gadget_get_flags(0, idb->self_id, CD_LinkColourBt, &flags))
+  if (choices_find_component(CD_LinkColourBt))
   {
     nolines ++;
     display_this[0] = 1;
   }
-  if (!gadget_get_flags(0, idb->self_id, CD_UsedColourBt, &flags))
+  if (choices_find_component(CD_UsedColourBt))
   {
     nolines ++;
     display_this[1] = 1;
   }
-  if (!gadget_get_flags(0, idb->self_id, CD_FolwColourBt, &flags))
+  if (choices_find_component(CD_FolwColourBt))
   {
     nolines ++;
     display_this[2] = 1;
   }
-  if (!gadget_get_flags(0, idb->self_id, CD_SlctColourBt, &flags))
+  if (choices_find_component(CD_SlctColourBt))
   {
     nolines ++;
     display_this[3] = 1;
@@ -1635,7 +1621,8 @@ static int choices_redraw_fakepage_handler(int eventcode, WimpPollBlock * event,
 
 static int choices_option_state_handler(int eventcode, ToolboxEvent * event, IdBlock * idb, void * handle)
 {
-  int state;
+  int      state;
+  ObjectId window;
   ChkError(optionbutton_get_state(0, idb->self_id, idb->self_component, &state));
 
   switch(idb->self_component)
@@ -1644,18 +1631,24 @@ static int choices_option_state_handler(int eventcode, ToolboxEvent * event, IdB
     {
       new_choices->underline_links = !!state;
 
-      /* Don't bother with errors as fake page display might not exist */
+      /* Attempt to redraw fake page display */
 
-      if (subwindows[CDSubColours])
-      {
-        button_set_flags(0, subwindows[CDSubColours], CD_FakePage, 0, 0);
-      }
+      if ((window = choices_find_component(CD_FakePage)) != 0) button_set_flags(0, window, CD_FakePage, 0, 0);
       break;
     }
 
     case CD_UseDocColours:  new_choices->use_source_cols = !!state; break;
     case CD_ShowForeground: new_choices->show_foreground = !!state; break;
     case CD_ShowBackground: new_choices->show_background = !!state; break;
+
+    case CD_URLBar:         new_choices->url_bar         = !!state; break;
+    case CD_StatusBar:      new_choices->status_bar      = !!state; break;
+    case CD_ButtonBar:      new_choices->button_bar      = !!state; break;
+    case CD_FullScreen:     new_choices->full_screen     = !!state; break;
+
+    /* Haven't recognised this option button event so pass it on */
+
+    default: return 0;
   }
 
   return 1;
@@ -1698,3 +1691,32 @@ static int choices_open_choice_window(int eventcode, WimpPollBlock * event, IdBl
 
   return 1;
 }
+
+/*************************************************/
+/* choices_find_component()                      */
+/*                                               */
+/* Scans all the choices subwindows for the      */
+/* requested component and returns the id of the */
+/* first window in which it was seen.            */
+/*                                               */
+/* Parameters: The component to find.            */
+/*                                               */
+/* Returns:    Where to return the object id to. */
+/*             0 if the component was not found  */
+/*************************************************/
+
+static ObjectId choices_find_component(ComponentId component)
+{
+  int          findwindow;
+  unsigned int flags;
+
+  for(findwindow = 0; findwindow < CDNoSubwindows; findwindow++)
+  {
+    if (subwindows[findwindow])
+    {
+      if (!gadget_get_flags(0, subwindows[findwindow], component, &flags)) return subwindows[findwindow];
+    }
+  }
+
+  return 0;
+}
diff --git a/h/Choices b/h/Choices
index ed4431e45cf03528cde6b42cc9009ea5efca829a..f07695aba847ce062e0eafa786c6467eb54a6c4e 100644
--- a/h/Choices
+++ b/h/Choices
@@ -28,17 +28,7 @@
 #define CDSet              0x2600
 #define CDCancel           0x2601
 #define CDSaveButton       0x2602
-
-#define CDBrowseDefaults   0x2603
-#define CDWindows          0x2604
-#define CDColours          0x2605
-#define CDFonts            0x2606
-#define CDHotlist          0x2607
-#define CDHistory          0x2608
-#define CDSub6             0x2609
-#define CDSub7             0x260a
-#define CDSub8             0x260b
-
+#define CDFirstSubRadio    0x2603
 #define CDPlaceHolder      0x260f
 
 /* Choices main dialogue and menu event codes */
@@ -68,20 +58,13 @@
 /* Choices subwindows */
 
 #define CDSubNone          -1
-#define CDSubBrowseDefaults 0
-#define CDSubWindows        1
-#define CDSubColours        2
-#define CDSubFonts          3
-#define CDSubHotlist        4
-#define CDSubHistory        5
-#define CDSubSub6           6
-#define CDSubSub7           7
-#define CDSubSub8           8
-
 #define CDNoSubwindows      9
 
 /* Choices Subwindow component ids */
 
+/* In all cases there may only be one of each */
+/* of these components.                       */
+
 /* In BrowseDefaults sub window: */
 
 #define CD_Homepage       0x2650
@@ -101,6 +84,9 @@
 
 /* In colours sub window: */
 
+/* The colour display button MUST have a component id */
+/* one less than it's equivalent menu button.         */
+
 #define CD_BackColour   0x2690
 #define CD_BackColourBt 0x2691
 #define CD_TextColour   0x2692
@@ -113,6 +99,10 @@
 #define CD_FolwColourBt 0x2699
 #define CD_SlctColour   0x269a
 #define CD_SlctColourBt 0x269b
+
+/* The window in which the fake page button resides */
+/* must not be auto redraw.                         */
+
 #define CD_FakePage     0x269c
 
 /* In fonts subwindow */
@@ -121,6 +111,9 @@
 
 /* In hotlist subwindow */
 
+/* The Display fields must have component id one */
+/* less than their equivalent menu buttons.      */
+
 #define CD_HlSaveDisp   0x26d0
 #define CD_HlSaveBt     0x26d1
 #define CD_HlDispDisp   0x26d2