diff -r -N -u xscreensaver-4.24/driver/XScreenSaver.ad.in xscreensaver-4.24-with-sdlsaver2/driver/XScreenSaver.ad.in
--- xscreensaver-4.24/driver/XScreenSaver.ad.in	2008-02-17 13:19:39.000000000 +0200
+++ xscreensaver-4.24-with-sdlsaver2/driver/XScreenSaver.ad.in	2008-02-17 13:16:15.000000000 +0200
@@ -430,8 +430,8 @@
 -				electricsheep                               \n\
 -				cosmos -root                                \n\
 -	   GL:                  sphereEversion --root                       \n\
--	   GL:                  fireflies -root                             \n
-
+-	   GL:                  fireflies -root                             \n\
+				sdlsaver -root                              \n
 
 
 !=============================================================================
diff -r -N -u xscreensaver-4.24/driver/XScreenSaver_ad.h xscreensaver-4.24-with-sdlsaver2/driver/XScreenSaver_ad.h
--- xscreensaver-4.24/driver/XScreenSaver_ad.h	2006-02-09 05:16:48.000000000 +0200
+++ xscreensaver-4.24-with-sdlsaver2/driver/XScreenSaver_ad.h	2008-02-17 13:17:16.000000000 +0200
@@ -324,7 +324,8 @@
 -				electricsheep                               \\n\
 -				cosmos -root                                \\n\
 -	   GL:                  sphereEversion --root                       \\n\
--	   GL:                  fireflies -root                             \\n",
+-	   GL:                  fireflies -root                             \\n\
+-				sdlsaver -root                              \\n",
 "XScreenSaver.pointerPollTime:		0:00:05",
 "XScreenSaver.pointerHysteresis:		10",
 "XScreenSaver.initialDelay:		0:00:00",
diff -r -N -u xscreensaver-4.24/hacks/Makefile.in xscreensaver-4.24-with-sdlsaver2/hacks/Makefile.in
--- xscreensaver-4.24/hacks/Makefile.in	2008-02-17 13:19:39.000000000 +0200
+++ xscreensaver-4.24-with-sdlsaver2/hacks/Makefile.in	2008-02-16 10:39:27.000000000 +0200
@@ -108,7 +108,7 @@
 		  mismunch.c pacman.c pacman_ai.c pacman_level.c \
 		  fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \
 		  intermomentary.c fireworkx.c fireworkx_mmx.S fiberlamp.c \
-		  boxfit.c interaggregate.c celtic.c
+		  boxfit.c interaggregate.c celtic.c sdlsaver.c
 SCRIPTS		= vidwhacker webcollage ljlatest
 
 OBJS		= attraction.o blitspin.o bouboule.o braid.o bubbles.o \
@@ -138,7 +138,7 @@
 		  mismunch.o pacman.o pacman_ai.o pacman_level.o \
 		  fuzzyflakes.o anemotaxis.o memscroller.o substrate.o \
 		  intermomentary.o fireworkx.o fiberlamp.o boxfit.o \
-		  interaggregate.o celtic.o
+		  interaggregate.o celtic.o sdlsaver.o
 
 NEXES		= attraction ant blitspin bouboule braid bubbles decayscreen deco \
 		  drift flag flame forest vines galaxy grav greynetic halo \
@@ -159,7 +159,7 @@
 		  fontglide apple2 xanalogtv pong  wormhole mismunch \
 		  pacman fuzzyflakes anemotaxis memscroller substrate \
 		  intermomentary fireworkx fiberlamp boxfit interaggregate \
-		  celtic \
+		  celtic sdlsaver \
 		  @JPEG_EXES@
 SEXES		= sonar
 JPEG_EXES	= webcollage-helper
@@ -637,6 +637,9 @@
 rorschach:	rorschach.o	$(HACK_OBJS) $(HSV) $(ERASE)
 	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(HSV) $(ERASE) $(HACK_LIBS)
 
+sdlsaver:	sdlsaver.o	$(HACK_OBJS) $(HSV) $(ERASE)
+	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(HSV) $(ERASE) $(HACK_LIBS)
+
 slidescreen:	slidescreen.o	$(HACK_OBJS) $(GRAB)
 	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(GRAB) $(HACK_LIBS)
 
@@ -1401,6 +1404,8 @@
 rocks.o: $(srcdir)/screenhack.h
 rorschach.o: ../config.h
 rorschach.o: $(srcdir)/screenhack.h
+sdlsaver.o: ../config.h
+sdlsaver.o: $(srcdir)/screenhack.h
 rotor.o: ../config.h
 rotor.o: $(srcdir)/screenhack.h
 rotor.o: $(srcdir)/xlockmoreI.h
diff -r -N -u xscreensaver-4.24/hacks/config/sdlsaver.xml xscreensaver-4.24-with-sdlsaver2/hacks/config/sdlsaver.xml
--- xscreensaver-4.24/hacks/config/sdlsaver.xml	1970-01-01 02:00:00.000000000 +0200
+++ xscreensaver-4.24-with-sdlsaver2/hacks/config/sdlsaver.xml	2008-02-16 10:39:27.000000000 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sdlsaver" _label="SDL Saver">
+
+  <command arg="-root"/>
+
+  <string id="program" _label="SDL program" arg="-program %"/>
+
+  <_description>
+This runs a program that uses the SDL library with its SDL_WINDOWID
+set appropriately. In effect, it allows to use any (?) SDL program
+as a screen saver. Written by Erkki Seppälä.
+  </_description>
+</screensaver>
diff -r -N -u xscreensaver-4.24/hacks/sdlsaver.c xscreensaver-4.24-with-sdlsaver2/hacks/sdlsaver.c
--- xscreensaver-4.24/hacks/sdlsaver.c	1970-01-01 02:00:00.000000000 +0200
+++ xscreensaver-4.24-with-sdlsaver2/hacks/sdlsaver.c	2008-02-16 10:41:58.000000000 +0200
@@ -0,0 +1,71 @@
+/* xscreensaver, Copyright (c) 1992, 1996, 1998, 2001
+ *  Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * 20080215: SDL screen saver for executing external programs as a screen saver
+ *           (ie. mplayer -vo sdl) (Erkki Seppälä <flux@modeemi.fi>)
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include "screenhack.h"
+
+char *progclass = "Sdlsaver";
+
+char *defaults [] = {
+  "*program:	/bin/false",
+  0
+};
+
+XrmOptionDescRec options [] = {
+  { "-program",		".program",	XrmoptionSepArg, 0 },
+  { 0, 0, 0, 0 }
+};
+
+static volatile quit = 0;
+static pid_t child;
+
+void
+exit_signal_handler(int a_signal)
+{
+  quit = 1;
+}
+
+void
+kill_child_at_exit()
+{
+  kill(child, SIGTERM);
+}
+
+void
+screenhack (Display *dpy, Window window)
+{
+  char windowid[1024];
+  char* program = get_string_resource("program", "String");
+  signal(SIGTERM, exit_signal_handler);
+  signal(SIGINT, exit_signal_handler);
+  signal(SIGPIPE, exit_signal_handler);
+  
+  if ((child = fork()) == 0) {
+    snprintf(windowid, sizeof(windowid), "%ld\n", (long) window);
+    setenv("SDL_WINDOWID", windowid, 1);
+    execlp(program, program, 0);
+    _exit(1);
+  }
+
+  atexit(kill_child_at_exit);
+  while (!quit) {
+    screenhack_handle_events(dpy);
+    sleep(1);
+  }
+}
