diff --git a/dvr.c b/dvr.c
index 797a8d8..bdb5ef6 100644
--- a/dvr.c
+++ b/dvr.c
@@ -19,6 +19,9 @@
 #include <event.h>
 
 #include "getstream.h"
+#define REBOUNCE_COUNT 1
+
+int rebounce_count = 0;
 
 const char       *pidtnames[]={ "None", "PAT", "PMT", "PCR", "Video", "Audio", "Privat", "User", "Static", "Reassemble", "Other" };
 
@@ -226,11 +229,18 @@ static void dvr_stat_timer(int fd, short event, void *arg) {
 		}
 	}
 
-	logwrite(LOG_INFO, "dvr: inputstats: %d pids %u pkt/s %u byte/s",
+	logwrite(LOG_INFO, "dvr: inputstats: %d pids %u pkt/s %u byte/s total pkt %d total size %d",
 				pids,
 				total/a->dvr.stat.interval,
-				total*TS_PACKET_SIZE/a->dvr.stat.interval);
-
+				total*TS_PACKET_SIZE/a->dvr.stat.interval,
+				total,total*TS_PACKET_SIZE);
+	if(total == 0) { ++rebounce_count; }
+	if(rebounce_count == REBOUNCE_COUNT) {
+		rebounce_count = 0;
+		logwrite(LOG_ERROR, "dvr: no stream detected - trying to reanimate via bouncing filter");
+		fe_retune(a);
+		dmx_bounce_filter(a);
+	}
 	for(i=0;i<PID_MAX;i++) {
 		a->dvr.pidtable[i].packets=0;
 	}
diff --git a/getstream.c b/getstream.c
index 45c5502..3365dc0 100644
--- a/getstream.c
+++ b/getstream.c
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 
 #include <event.h>
-
+//#include <syslog.h>
 #include "getstream.h"
 #include "config.h"
 #include "libhttp.h"
@@ -98,7 +98,7 @@ static void terminate_init(int timeout) {
 
 
 static void usage(void ) {
-	fprintf(stderr, "-c <config file> -d -t <timeout> -f <logfile>\n");
+	fprintf(stderr, "-c <config file> -d -t <timeout> -l <logbase>\n");
 	exit(-1);
 }
 
@@ -110,7 +110,7 @@ int main(int argc, char **argv) {
 	int			timeout=0;
 	GList			*al;
 	struct config_s		*config=NULL;
-	while((ch=getopt(argc, argv, "c:dt:f:")) != -1) {
+	while((ch=getopt(argc, argv, "c:dt:l:")) != -1) {
 		switch(ch) {
 			case 'c':
 				config=readconfig(optarg);
@@ -123,8 +123,8 @@ int main(int argc, char **argv) {
 			case 't':
 				timeout=strtol(optarg, NULL, 10);
 				break;
-			case 'f':
-				preparelogfile(optarg);
+			case 'l':
+				preparelog(optarg);
 				break;
 			default:
 				usage();
@@ -177,6 +177,6 @@ int main(int argc, char **argv) {
 
 	/* Pigs can fly */
 	event_dispatch();
-
+	if(uselog) int_closelog();
 	return 0;
 }
diff --git a/getstream.h b/getstream.h
index 723e5ed..d30f520 100644
--- a/getstream.h
+++ b/getstream.h
@@ -61,7 +61,7 @@ enum {
  */
 
 extern int loglevel;
-//extern int uselogfile;
+extern int uselog;
 
 #define MAX_MCAST_PAYLOAD	(1500-40)
 #define TS_PACKET_SIZE		188
@@ -300,6 +300,8 @@ void input_init(struct input_s *input);
  *
  *
  */
+void preparelog(char *log);
+void int_closelog();
 void logwrite_inc_level(void );
 void logwrite(int level, const char *format, ...);
 
diff --git a/logging.c b/logging.c
index 91d3582..5821610 100644
--- a/logging.c
+++ b/logging.c
@@ -5,20 +5,26 @@
 #include <time.h>
 #include <fcntl.h>
 #include "getstream.h"
+#include <syslog.h>
 
 int loglevel=LOG_ERROR;
-int uselogfile=0;
-FILE * lfd;
-void preparelogfile(char *file) {
-	lfd=fopen(file,"a");
-	if(lfd==NULL)
-	{
-		logwrite(LOG_ERROR,"error opening log file '%s' for write",file);
-		uselogfile=0;
-		return;
-	}
-	uselogfile=1;
+int uselog=0;
+
+void preparelog(char *log) {
+	setlogmask (LOG_UPTO (LOG_NOTICE));
+	openlog(log,LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
+//	if(lfd==NULL)
+//	{
+//		logwrite(LOG_ERROR,"error opening syslog");
+//		uselog=0;
+//		return;
+//	}
+	uselog=1;
 }
+void int_closelog() {
+	closelog();
+}
+
 void logwrite_inc_level() {
 	loglevel++;
 }
@@ -47,11 +53,7 @@ void logwrite(int level, const char *format, ...) {
 			timedate,
 			(int) tv.tv_usec/1000,
 			logbuffer);
-	if(uselogfile==1) {
-		fprintf(lfd,"%s.%03d %s\n",
-				timedate,
-				(int) tv.tv_usec/1000,
-				logbuffer);
-		fflush(lfd);
+	if(uselog==1) {
+		syslog(LOG_NOTICE,"%s.%03d %s\n",timedate,(int) tv.tv_usec/1000,logbuffer);
 	}
 }
