diff --git a/gnomine/src/gnomine.vala b/gnomine/src/gnomine.vala
index ca72470..2709399 100644
--- a/gnomine/src/gnomine.vala
+++ b/gnomine/src/gnomine.vala
@@ -38,6 +38,8 @@ public class GnoMine : Gtk.Application
     private Gtk.Action hint_action;
     private GnomeGamesSupport.FullscreenAction fullscreen_action;
     private GnomeGamesSupport.PauseAction pause_action;
+    private Gtk.AspectFrame new_game_screen;
+    private bool is_new_game_screen;
 
     private const GnomeGamesSupport.ScoresCategory scorecats[] =
     {
@@ -95,7 +97,7 @@ public class GnoMine : Gtk.Application
         new_game_button_alignment.show ();
 
         new_game_button = new Gtk.Button ();
-        new_game_button.clicked.connect (new_game);
+        new_game_button.clicked.connect (new_game_screen_cb);
         new_game_button_alignment.add (new_game_button);
         new_game_button.show ();
 
@@ -135,9 +137,34 @@ public class GnoMine : Gtk.Application
         minefield_view.look.connect (look_cb);
         minefield_view.unlook.connect (unlook_cb);
         main_vbox.pack_start (minefield_view, true, true, 0);
-        minefield_view.show ();
 
-        new_game ();
+        /* new game screen */
+        new_game_screen = new Gtk.AspectFrame (_("Field Size"), 0.5f, 0.5f, 1.0f, false);
+        new_game_screen.set_shadow_type (Gtk.ShadowType.NONE);
+        new_game_screen.set_size_request(200, 200);
+        main_vbox.pack_start (new_game_screen, true, true, 0);
+
+        var new_game_table = new Gtk.Table (2, 2, true);
+        new_game_screen.add (new_game_table);
+
+        var button_small = new Gtk.Button.with_mnemonic (dpgettext2 (null, "board size", "_Small"));
+        new_game_table.attach_defaults (button_small, 0, 1, 0, 1);
+        button_small.clicked.connect (small_size_clicked_cb);
+
+        var button_medium = new Gtk.Button.with_mnemonic (dpgettext2 (null, "board size", "_Medium"));
+        new_game_table.attach_defaults (button_medium, 1, 2, 0, 1);
+        button_medium.clicked.connect (medium_size_clicked_cb);
+
+        var button_large = new Gtk.Button.with_mnemonic (dpgettext2 (null, "board size", "_Large"));
+        new_game_table.attach_defaults (button_large, 0, 1, 1, 2);
+        button_large.clicked.connect (large_size_clicked_cb);
+
+        var button_custom = new Gtk.Button.with_mnemonic (dpgettext2 (null, "board size", "_Custom"));
+        new_game_table.attach_defaults (button_custom, 1, 2, 1, 2);
+        button_custom.clicked.connect (custom_size_clicked_cb);
+
+        new_game_screen.show_all ();
+        show_new_game_screen ();
     }
 
     public void start ()
@@ -256,8 +283,11 @@ public class GnoMine : Gtk.Application
         show_scores (0, false);
     }
 
-    private void new_game ()
+    private void show_new_game_screen ()
     {
+        if (is_new_game_screen)
+            return;
+
         if (minefield != null && minefield.n_cleared > 0 && !minefield.exploded && !minefield.is_complete)
         {
             var dialog = new Gtk.MessageDialog (window, Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.NONE, "%s", _("Cancel current game?"));
@@ -270,6 +300,27 @@ public class GnoMine : Gtk.Application
                 return;
         }
 
+        is_new_game_screen = true;
+        minefield_view.hide ();
+        new_game_screen.show ();
+        flag_label.set_text("");
+        clock.stop ();
+        clock.reset ();
+        set_face_image (smile_face_image);
+
+        hint_action.set_sensitive (false);
+        pause_action.set_sensitive (false);
+
+        minefield_view.paused = false;
+        pause_action.set_is_paused (false);
+    }
+
+    private void new_game ()
+    {
+        is_new_game_screen = false;
+        minefield_view.show ();
+        new_game_screen.hide ();
+
         clock.reset ();
         set_face_image (smile_face_image);
 
@@ -316,8 +367,11 @@ public class GnoMine : Gtk.Application
 
         update_flag_label ();
 
+        hint_action.set_sensitive (true);
         pause_action.set_sensitive (true);
+
         minefield_view.paused = false;
+        pause_action.set_is_paused (false);
     }
 
     private void hint_cb ()
@@ -330,9 +384,12 @@ public class GnoMine : Gtk.Application
         clock.add_seconds (10);
     }
 
-    private void new_game_cb ()
+    private void new_game_screen_cb ()
     {
-        new_game ();
+        if (is_new_game_screen)
+            new_game ();
+        else
+            show_new_game_screen ();
     }
 
     private void pause_cb (Gtk.Action action)
@@ -380,7 +437,7 @@ public class GnoMine : Gtk.Application
         if (show_scores (pos, true) == Gtk.ResponseType.REJECT)
             window.destroy ();
         else
-            new_game ();
+            show_new_game_screen ();
     }
 
     private void look_cb (MinefieldView minefield_view)
@@ -470,7 +527,6 @@ public class GnoMine : Gtk.Application
 
         settings.set_int (KEY_XSIZE, xsize);
         set_n_mines_limit ();
-        new_game ();
     }
 
     private void ysize_spin_cb (Gtk.SpinButton spin)
@@ -481,7 +537,6 @@ public class GnoMine : Gtk.Application
 
         settings.set_int (KEY_YSIZE, ysize);
         set_n_mines_limit ();
-        new_game ();
     }
 
     private void n_mines_spin_cb (Gtk.SpinButton spin)
@@ -491,7 +546,6 @@ public class GnoMine : Gtk.Application
             return;
 
         settings.set_int (KEY_NMINES, n_mines);
-        new_game ();
     }
 
     private void use_question_toggle_cb (Gtk.ToggleButton button)
@@ -510,54 +564,9 @@ public class GnoMine : Gtk.Application
 
     private Gtk.Dialog create_preferences ()
     {
-        var grid = new Gtk.Grid ();
-        grid.border_width = 5;
-        grid.set_row_spacing (18);
-        grid.set_column_spacing (18);
-
-        var frame = new GnomeGamesSupport.Frame (_("Field Size"));
-
-        var vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 6);
-
-        var small_button = new Gtk.RadioButton.with_mnemonic (null, dpgettext2 (null, "board size", "_Small"));
-        small_button.toggled.connect (small_size_toggled_cb);
-        vbox.pack_start (small_button, false, false, 0);
-
-        var medium_button = new Gtk.RadioButton.with_mnemonic (small_button.get_group (), dpgettext2 (null, "board size", "_Medium"));
-        medium_button.toggled.connect (medium_size_toggled_cb);
-        vbox.pack_start (medium_button, false, false, 0);
-
-        var large_button = new Gtk.RadioButton.with_mnemonic (medium_button.get_group (), dpgettext2 (null, "board size", "_Large"));
-        large_button.toggled.connect (large_size_toggled_cb);
-        vbox.pack_start (large_button, false, false, 0);
-
-        var custom_button = new Gtk.RadioButton.with_mnemonic (large_button.get_group (), dpgettext2 (null, "board size", "_Custom"));
-        custom_button.toggled.connect (custom_size_toggled_cb);
-        vbox.pack_start (custom_button, false, false, 0);
-
-        switch (settings.get_int (KEY_MODE))
-        {
-        case 0:
-            small_button.active = true;
-            break;
-        case 1:
-            medium_button.active = true;
-            break;
-        case 2:
-            large_button.active = true;
-            break;
-        default:
-        case 3:
-            custom_button.active = true;
-            break;
-        }
-
-        frame.add (vbox);
-
-        grid.attach (frame, 0, 0, 1, 1);
+        var vbox = new Gtk.VBox (false, 5);
 
         custom_size_frame = new GnomeGamesSupport.Frame (_("Custom Size"));
-        custom_size_frame.sensitive = settings.get_int (KEY_MODE) == 3;
 
         var custom_field_grid = new Gtk.Grid ();
         custom_field_grid.set_row_spacing (6);
@@ -597,10 +606,10 @@ public class GnoMine : Gtk.Application
         label.set_mnemonic_widget (n_mines_spin);
 
 
-        grid.attach (custom_size_frame, 1, 0, 1, 1);
+        vbox.pack_start (custom_size_frame, false, false, 0);
 
-        frame = new GnomeGamesSupport.Frame (_("Flags"));
-        grid.attach (frame, 0, 1, 2, 1);
+        var frame = new GnomeGamesSupport.Frame (_("Flags"));
+        vbox.pack_start (frame, false, false);
         
         var flag_options_vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 6);
         flag_options_vbox.show ();
@@ -625,48 +634,42 @@ public class GnoMine : Gtk.Application
         dialog.set_resizable (false);
         var box = (Gtk.Box) dialog.get_content_area ();
         box.set_spacing (2);
-        box.pack_start (grid, false, false, 0);
+        box.pack_start (vbox, false, false, 0);
 
         dialog.response.connect (pref_response_cb);
         dialog.delete_event.connect (pref_delete_event_cb);
 
-        grid.show_all ();
+        vbox.show_all ();
 
         return dialog;
     }
     
     private void set_mode (int mode)
     {
-        if (mode == settings.get_int (KEY_MODE))
-            return;
+        if (mode != settings.get_int (KEY_MODE))
+            settings.set_int (KEY_MODE, mode);
 
-        settings.set_int (KEY_MODE, mode);
-        custom_size_frame.sensitive = mode == 3;
         new_game ();
     }
 
-    private void small_size_toggled_cb (Gtk.ToggleButton button)
+    private void small_size_clicked_cb ()
     {
-        if (button.active)
-            set_mode (0);
+        set_mode (0);
     }
 
-    private void medium_size_toggled_cb (Gtk.ToggleButton button)
+    private void medium_size_clicked_cb ()
     {
-        if (button.active)
-            set_mode (1);
+        set_mode (1);
     }
 
-    private void large_size_toggled_cb (Gtk.ToggleButton button)
+    private void large_size_clicked_cb ()
     {
-        if (button.active)
-            set_mode (2);
+        set_mode (2);
     }
 
-    private void custom_size_toggled_cb (Gtk.ToggleButton button)
+    private void custom_size_clicked_cb ()
     {
-        if (button.active)
-            set_mode (3);
+        set_mode (3);
     }
     
     private void pref_response_cb (Gtk.Dialog dialog, int response_id)
@@ -704,7 +707,7 @@ public class GnoMine : Gtk.Application
         {"GameMenu", null, N_("_Game")},
         {"SettingsMenu", null, N_("_Settings")},
         {"HelpMenu", null, N_("_Help")},
-        {"NewGame", GnomeGamesSupport.STOCK_NEW_GAME, null, null, null, new_game_cb},
+        {"NewGame", GnomeGamesSupport.STOCK_NEW_GAME, null, null, null, new_game_screen_cb},
         {"Hint", GnomeGamesSupport.STOCK_HINT, null, null, null, hint_cb},
         {"Scores", GnomeGamesSupport.STOCK_SCORES, null, null, null, scores_cb},
         {"Quit", Gtk.Stock.QUIT, null, null, null, quit_game_cb},
