Index: mythtv/programs/mythfrontend/globalsettings.cpp
===================================================================
--- mythtv/programs/mythfrontend/globalsettings.cpp	(revision 14147)
+++ mythtv/programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -1446,6 +1446,23 @@
     return gc;
 }
 
+static HostComboBox *OverrideExitMenu()
+{
+    HostComboBox *gc = new HostComboBox("OverrideExitMenu");
+    gc->setLabel(QObject::tr("Customise exit menu options"));
+    gc->addSelection(QObject::tr("Autodetect"), "0");
+    gc->addSelection(QObject::tr("Show quit"), "1");
+    gc->addSelection(QObject::tr("Show quit and shutdown"), "2");
+    gc->addSelection(QObject::tr("Show quit, reboot and shutdown"), "3");
+    gc->addSelection(QObject::tr("Show shutdown"), "4");
+    gc->addSelection(QObject::tr("Show reboot"), "5");
+    gc->addSelection(QObject::tr("Show reboot and shutdown"), "6");
+    gc->setHelpText(QObject::tr("By default, only remote frontends are shown "
+                    "the shutdown option on the exit menu. Here you can force "
+                    "specific shutdown and reboot options to be displayed."));
+    return gc;
+}
+
 static HostCheckBox *NoPromptOnExit()
 {
     HostCheckBox *gc = new HostCheckBox("NoPromptOnExit");
@@ -1457,15 +1474,27 @@
     return gc;
 }
 
+static HostLineEdit *RebootCommand()
+{
+    HostLineEdit *ge = new HostLineEdit("RebootCommand");
+    ge->setLabel(QObject::tr("Reboot command"));
+    ge->setValue("reboot");
+    ge->setHelpText(QObject::tr("Command or script to run if you select "
+                    "the reboot option from the exit menu, if the option "
+                    "is displayed. You must configure an exit key to "
+                    "display the exit menu."));
+    return ge;
+}
+
 static HostLineEdit *HaltCommand()
 {
     HostLineEdit *ge = new HostLineEdit("HaltCommand");
     ge->setLabel(QObject::tr("Halt command"));
     ge->setValue("halt");
-    ge->setHelpText(QObject::tr("If you have configured an exit key using the "
-                    "System Shutdown option, you will be given the opportunity "
-                    "to exit MythTV or halt the system completely. "
-                    "Another possibility for this field is \"poweroff\""));
+    ge->setHelpText(QObject::tr("Command or script to run if you select "
+                    "the shutdown option from the exit menu, if the option "
+                    "is displayed. You must configure an exit key to "
+                    "display the exit menu."));
     return ge;
 }
 
@@ -3569,8 +3598,10 @@
     pin->addChild(SetupPinCode());
     misc->addChild(pin);
     VerticalConfigurationGroup* shutdownSettings = new VerticalConfigurationGroup(true);
-    shutdownSettings->setLabel(QObject::tr("Shutdown Settings"));
+    shutdownSettings->setLabel(QObject::tr("Shutdown/Reboot Settings"));
+    shutdownSettings->addChild(OverrideExitMenu());
     shutdownSettings->addChild(HaltCommand());
+    shutdownSettings->addChild(RebootCommand());
     misc->addChild(shutdownSettings);
     addChild(misc);
 
Index: mythtv/programs/mythfrontend/main.cpp
===================================================================
--- mythtv/programs/mythfrontend/main.cpp	(revision 14147)
+++ mythtv/programs/mythfrontend/main.cpp	(working copy)
@@ -54,6 +54,7 @@
 #define NO_EXIT  0
 #define QUIT     1
 #define HALT     2
+#define REBOOT   3
 
 static MythThemedMenu *menu;
 static MythThemeBase *themeBase;
@@ -437,21 +438,93 @@
     // first of all find out, if this is a frontend only host...
     bool frontendOnly = gContext->IsFrontendOnly();
 
+    // how do you want to quit today?
+    int  exitMenuStyle = gContext->GetNumSetting("OverrideExitMenu", 0);
+
     QString title = QObject::tr("Do you really want to exit MythTV?");
 
+    // 'simplify' exit menu construction
     DialogBox diag(gContext->GetMainWindow(), title);
-    diag.AddButton(QObject::tr("No"));
-    diag.AddButton(QObject::tr("Yes, Exit now"));
-    if (frontendOnly)
-        diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
 
-    int result = diag.exec();
-    switch (result)
+            diag.AddButton(QObject::tr("No"));
+            int result;
+
+    switch (exitMenuStyle)
     {
-        case 1: return NO_EXIT;
-        case 2: return QUIT;
-        case 3: return HALT;
-        default: return NO_EXIT;
+        case 0:
+            diag.AddButton(QObject::tr("Yes, Exit now"));
+            if (frontendOnly)
+                diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return QUIT;
+                case 3: return HALT;
+                default: return NO_EXIT;
+            }
+        case 1:
+            diag.AddButton(QObject::tr("Yes, Exit now"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return QUIT;
+                default: return NO_EXIT;
+            }
+        case 2:
+            diag.AddButton(QObject::tr("Yes, Exit now"));
+            diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return QUIT;
+                case 3: return HALT;
+                default: return NO_EXIT;
+            }
+        case 3:
+            diag.AddButton(QObject::tr("Yes, Exit now"));
+            diag.AddButton(QObject::tr("Yes, Exit and Reboot"));
+            diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return QUIT;
+                case 3: return REBOOT;
+                case 4: return HALT;
+                default: return NO_EXIT;
+            }
+        case 4:
+            diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return HALT;
+                default: return NO_EXIT;
+            }
+        case 5:
+            diag.AddButton(QObject::tr("Yes, Exit and Reboot"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return REBOOT;
+                default: return NO_EXIT;
+            }
+        case 6:
+            diag.AddButton(QObject::tr("Yes, Exit and Reboot"));
+            diag.AddButton(QObject::tr("Yes, Exit and Shutdown"));
+            result = diag.exec();
+            switch (result)
+            {
+                case 1: return NO_EXIT;
+                case 2: return REBOOT;
+                case 3: return HALT;
+                default: return NO_EXIT;
+            }
     }
 }
 
@@ -463,6 +536,14 @@
         system(halt_cmd.ascii());
 }
 
+void rebootnow() 
+{ 
+    QString reboot_cmd = gContext->GetSetting("RebootCommand", 
+                                            "sudo /sbin/reboot"); 
+    if (!reboot_cmd.isEmpty()) 
+        system(reboot_cmd.ascii()); 
+}
+
 bool RunMenu(QString themedir)
 {
     menu = new MythThemedMenu(themedir.ascii(), "mainmenu.xml", 
@@ -1250,6 +1331,9 @@
     if (exitstatus == HALT)
         haltnow();
 
+    if (exitstatus == REBOOT)
+        rebootnow();
+
     pmanager->DestroyAllPlugins();
 
 #ifndef _WIN32
