diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
index 546c1ec..fdd3a97 100644
--- a/mythtv/libs/libmythtv/mythplayer.cpp
+++ b/mythtv/libs/libmythtv/mythplayer.cpp
@@ -4879,6 +4879,48 @@ void MythPlayer::ToggleStudioLevels(void)
     SetOSDMessage(msg, kOSDTimeout_Med);
 }
 
+void MythPlayer::ToggleNightMode(void)
+{
+    if (!videoOutput)
+        return;
+
+    if (!(videoOutput->GetSupportedPictureAttributes() &
+          kPictureAttributeSupported_Brightness))
+        return;
+
+    bool has_contrast = (videoOutput->GetSupportedPictureAttributes() &
+                         kPictureAttributeSupported_Contrast);
+
+    int nm = gCoreContext->GetNumSetting("NightModeEnabled", 0);
+    int nb = gCoreContext->GetNumSetting("NightModeBrightness", 15);
+    int nc = gCoreContext->GetNumSetting("NightModeContrast", 10);
+    int b = videoOutput->GetPictureAttribute(kPictureAttribute_Brightness);
+    int c = 0;
+    if (has_contrast)
+        c = videoOutput->GetPictureAttribute(kPictureAttribute_Contrast);
+    QString val = "1";
+    QString msg;
+    if (!nm)
+    {
+        msg = QObject::tr("Enabled Night Mode");
+        b -= nb;
+        c -= nc;
+    }
+    else
+    {
+        msg = QObject::tr("Disabled Night Mode");
+        b += nb;
+        c += nc;
+    }
+
+    gCoreContext->SaveSetting("NightModeEnabled", nm ? "0" : "1");
+    videoOutput->SetPictureAttribute(kPictureAttribute_Brightness, b);
+    if (has_contrast)
+        videoOutput->SetPictureAttribute(kPictureAttribute_Contrast, c);
+
+    SetOSDMessage(msg, kOSDTimeout_Med);
+}
+
 bool MythPlayer::CanVisualise(void)
 {
     if (videoOutput)
diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
index e30c3a7..971a050 100644
--- a/mythtv/libs/libmythtv/mythplayer.h
+++ b/mythtv/libs/libmythtv/mythplayer.h
@@ -324,6 +324,7 @@ class MTV_PUBLIC MythPlayer
 
     // Public picture controls
     void ToggleStudioLevels(void);
+    void ToggleNightMode(void);
 
     // Visualisations
     bool CanVisualise(void);
diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
index 2c3f127..b87f0ca 100644
--- a/mythtv/libs/libmythtv/tv_play.cpp
+++ b/mythtv/libs/libmythtv/tv_play.cpp
@@ -723,6 +723,8 @@ void TV::InitKeys(void)
     REG_KEY("TV Playback", "TOGGLEPICCONTROLS",
             QT_TRANSLATE_NOOP("MythControls", "Playback picture adjustments"),
              "F");
+    REG_KEY("TV Playback", "TOGGLENIGHTMODE",
+            QT_TRANSLATE_NOOP("MythControls", "Toggle night mode"), "Ctrl+F");
     REG_KEY("TV Playback", ACTION_SETBRIGHTNESS,
             QT_TRANSLATE_NOOP("MythControls", "Set the picture brightness"), "");
     REG_KEY("TV Playback", ACTION_SETCONTRAST,
@@ -4401,6 +4403,8 @@ bool TV::ToggleHandleAction(PlayerContext *ctx,
         EnableVisualisation(ctx, false);
     else if (has_action("TOGGLEPICCONTROLS", actions))
         DoTogglePictureAttribute(ctx, kAdjustingPicture_Playback);
+    else if (has_action("TOGGLENIGHTMODE", actions))
+        DoToggleNightMode(ctx);
     else if (has_action(ACTION_TOGGLESTUDIOLEVELS, actions))
         DoToggleStudioLevels(ctx);
     else if (has_action("TOGGLESTRETCH", actions))
@@ -9116,6 +9120,13 @@ void TV::DoToggleStudioLevels(const PlayerContext *ctx)
     ctx->UnlockDeletePlayer(__FILE__, __LINE__);
 }
 
+void TV::DoToggleNightMode(const PlayerContext *ctx)
+{
+    ctx->LockDeletePlayer(__FILE__, __LINE__);
+    ctx->player->ToggleNightMode();
+    ctx->UnlockDeletePlayer(__FILE__, __LINE__);
+}
+
 void TV::DoTogglePictureAttribute(const PlayerContext *ctx,
                                   PictureAdjustType type)
 {
diff --git a/mythtv/libs/libmythtv/tv_play.h b/mythtv/libs/libmythtv/tv_play.h
index d17ba29..adce496 100644
--- a/mythtv/libs/libmythtv/tv_play.h
+++ b/mythtv/libs/libmythtv/tv_play.h
@@ -491,6 +491,7 @@ class MTV_PUBLIC TV : public QObject
     void ToggleAdjustFill(PlayerContext*,
                           AdjustFillMode adjustfillMode = kAdjustFill_Toggle);
     void DoToggleStudioLevels(const PlayerContext *ctx);
+    void DoToggleNightMode(const PlayerContext*);
     void DoTogglePictureAttribute(const PlayerContext*,
                                   PictureAdjustType type);
     void DoChangePictureAttribute(
