diff --git a/po/de_DE.po b/po/de_DE.po
index 68812a4..5e2d706 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: VDR \n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2014-10-31 12:36+0100\n"
+"POT-Creation-Date: 2015-06-10 21:21+0200\n"
 "PO-Revision-Date: blabla\n"
 "Last-Translator: blabla\n"
 "Language-Team: blabla\n"
@@ -501,6 +501,9 @@ msgstr "Unterbrechen stoppt X11"
 msgid "Video"
 msgstr "Video"
 
+msgid "Enable Screensaver(DPMS) at black screen"
+msgstr "Bildschirmschoner(DPMS) bei schwarzen Bild  aktivieren"
+
 msgid "Video background color (RGB)"
 msgstr "Video Hintergrundfrabe (RGB)"
 
diff --git a/softhddevice.cpp b/softhddevice.cpp
index e933955..9e02df1 100644
--- a/softhddevice.cpp
+++ b/softhddevice.cpp
@@ -165,6 +165,10 @@ static int ConfigPipAltVideoWidth;	///< config pip alt. video width in %
 static int ConfigPipAltVideoHeight = 50;	///< config pip alt. video height in %
 #endif
 
+#ifdef USE_SCREENSAVER
+static char ConfigEnableDPMSatBlackScreen;	///< Enable DPMS(Screensaver) while displaying black screen(radio)
+#endif
+
 static volatile int DoMakePrimary;	///< switch primary device to this
 
 #define SUSPEND_EXTERNAL	-1	///< play external suspend mode
@@ -677,6 +681,9 @@ class cMenuSetupSoft:public cMenuSetupPage
     int PipAltVideoHeight;
 #endif
 
+#ifdef USE_SCREENSAVER
+    int EnableDPMSatBlackScreen;
+#endif
     /// @}
   private:
      inline cOsdItem * CollapsedItem(const char *, int &, const char * = NULL);
@@ -795,6 +802,10 @@ void cMenuSetupSoft::Create(void)
     //
     Add(CollapsedItem(tr("Video"), Video));
     if (Video) {
+#ifdef USE_SCREENSAVER
+	Add(new cMenuEditBoolItem(tr("Enable Screensaver(DPMS) at black screen"),
+		&EnableDPMSatBlackScreen, trVDR("no"), trVDR("yes")));
+#endif
 	Add(new cMenuEditStraItem(trVDR("4:3 video display format"),
 		&Video4to3DisplayFormat, 3, video_display_formats_4_3));
 	Add(new cMenuEditStraItem(trVDR("16:9+other video display format"),
@@ -1111,6 +1122,11 @@ cMenuSetupSoft::cMenuSetupSoft(void)
     PipAltVideoWidth = ConfigPipAltVideoWidth;
     PipAltVideoHeight = ConfigPipAltVideoHeight;
 #endif
+
+#ifdef USE_SCREENSAVER
+	EnableDPMSatBlackScreen = ConfigEnableDPMSatBlackScreen;
+#endif
+
     Create();
 }
 
@@ -1275,6 +1291,11 @@ void cMenuSetupSoft::Store(void)
     SetupStore("pip.Alt.VideoHeight", ConfigPipAltVideoHeight =
 	PipAltVideoHeight);
 #endif
+
+#ifdef USE_SCREENSAVER
+    SetupStore("EnableDPMSatBlackScreen", ConfigEnableDPMSatBlackScreen = EnableDPMSatBlackScreen);
+	SetDPMSatBlackScreen(ConfigEnableDPMSatBlackScreen);
+#endif
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -3154,6 +3175,15 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
 	return true;
     }
 #endif
+
+#ifdef USE_SCREENSAVER
+    if (!strcasecmp(name, "EnableDPMSatBlackScreen")) {
+	ConfigEnableDPMSatBlackScreen = atoi(value);
+	SetDPMSatBlackScreen(ConfigEnableDPMSatBlackScreen);
+	return true;
+	}
+#endif
+
     return false;
 }
 
diff --git a/video.c b/video.c
index 08d0bca..3573fb4 100644
--- a/video.c
+++ b/video.c
@@ -429,6 +429,11 @@ static int OsdDirtyHeight;		///< osd dirty area height
 
 static int64_t VideoDeltaPTS;		///< FIXME: fix pts
 
+#ifdef USE_SCREENSAVER
+static char DPMSDisabled;		///< flag we have disabled dpms
+static char EnableDPMSatBlackScreen=0;		///< flag we should enable dpms at black screen
+#endif
+
 //----------------------------------------------------------------------------
 //	Common Functions
 //----------------------------------------------------------------------------
@@ -437,6 +442,13 @@ static void VideoThreadLock(void);	///< lock video thread
 static void VideoThreadUnlock(void);	///< unlock video thread
 static void VideoThreadExit(void);	///< exit/kill video thread
 
+#ifdef USE_SCREENSAVER
+static void X11SuspendScreenSaver(xcb_connection_t *, int);
+static int X11HaveDPMS(xcb_connection_t *);
+static void X11DPMSReenable(xcb_connection_t *);
+static void X11DPMSDisable(xcb_connection_t *);
+#endif
+
 ///
 ///	Update video pts.
 ///
@@ -4891,8 +4903,23 @@ static void VaapiDisplayFrame(void)
 	    decoder->LastSurface = decoder->BlackSurface;
 #endif
 	    VaapiMessage(3, "video/vaapi: black surface displayed\n");
-	    continue;
-	}
+#ifdef USE_SCREENSAVER
+	    if (EnableDPMSatBlackScreen && DPMSDisabled) {
+				Debug(3,"Black surface, DPMS enabled");
+				X11DPMSReenable(Connection);
+				X11SuspendScreenSaver(Connection, 1);
+			}
+#endif
+ 	    continue;
+#ifdef USE_SCREENSAVER
+	}else{
+		if (!DPMSDisabled) {//always disable
+				Debug(3,"DPMS disabled");
+				X11DPMSDisable(Connection);
+				X11SuspendScreenSaver(Connection, 0);
+			}
+#endif
+ 	}
 
 	surface = decoder->SurfacesRb[decoder->SurfaceRead];
 #ifdef VA_EXP
@@ -8584,8 +8611,24 @@ static void VdpauDisplayFrame(void)
 		|| decoder->Closing < -300) {
 		VdpauBlackSurface(decoder);
 		VdpauMessage(3, "video/vdpau: black surface displayed\n");
-	    }
+//if(EnableDPMSatBlackScreen)VdpauMessage(3, "venable black screen dpms enabled\n");
+#ifdef USE_SCREENSAVER
+		if (EnableDPMSatBlackScreen && DPMSDisabled) {
+				VdpauMessage(3,"Black surface, DPMS enabled\n");
+				X11DPMSReenable(Connection);
+				X11SuspendScreenSaver(Connection, 1);
+        }
+#endif
+ 		}
 	    continue;
+#ifdef USE_SCREENSAVER
+	}else{
+		if (!DPMSDisabled) {//always disable
+				VdpauMessage(3,"DPMS disabled\n");
+				X11DPMSDisable(Connection);
+				X11SuspendScreenSaver(Connection, 0);
+			}
+#endif
 	}
 
 	VdpauMixVideo(decoder, i);
@@ -10539,7 +10582,6 @@ void VideoGetVideoSize(VideoHwDecoder * hw_decoder, int *width, int *height,
 //	DPMS / Screensaver
 //----------------------------------------------------------------------------
 
-static char DPMSDisabled;		///< flag we have disabled dpms
 
 ///
 ///	Suspend X11 screen saver.
@@ -10631,11 +10673,11 @@ static void X11DPMSDisable(xcb_connection_t * connection)
 	if (reply) {
 	    if (reply->state) {
 		Debug(3, "video: dpms was enabled\n");
-		DPMSDisabled = 1;
 		xcb_dpms_disable(connection);	// monitor powersave off
 	    }
 	    free(reply);
 	}
+		DPMSDisabled = 1;
     }
 }
 
@@ -11271,6 +11313,16 @@ void VideoSetAutoCrop(int interval, int delay, int tolerance)
 }
 
 ///
+///	Set EnableDPMSatBlackScreen
+///
+///	Currently this only choose the driver.
+///
+extern void SetDPMSatBlackScreen(char Enable)
+{
+    EnableDPMSatBlackScreen = Enable;
+}
+
+///
 ///	Raise video window.
 ///
 int VideoRaiseWindow(void)
diff --git a/video.h b/video.h
index 0587393..5b4d99f 100644
--- a/video.h
+++ b/video.h
@@ -221,6 +221,9 @@ extern int VideoDecodeInput(VideoStream *);
     /// Get number of input buffers.
 extern int VideoGetBuffers(const VideoStream *);
 
+   ///Set DPMS at Blackscreen switch
+extern void SetDPMSatBlackScreen(char);
+
        /// Raise the frontend window
 extern int VideoRaiseWindow();
 
