--- motion.c	2005-10-18 11:57:20.000000000 -0500
+++ motion.c	2005-10-26 17:59:00.000000000 -0500
@@ -100,6 +100,9 @@
 	cnt->pipe=-1;
 	cnt->mpipe=-1;
 
+	cnt->total_diffs=0;
+	cnt->total_frames=0;
+
 // /* Here are the pointers required to be set */
 // #ifdef HAVE_MYSQL
 // 	cnt->database=NULL;
@@ -1139,6 +1142,15 @@
 			motion_log(-1, 0, "%s", msg);
 		}
 
+	
+	/***** MOTION LOOP - STATISTICS SECTION *****/
+
+		/* Tally diffs for statistics. */
+		cnt->total_diffs+=cnt->diffs;
+
+		/* Tally update count of total frames viewed. */
+		cnt->total_frames++;
+
 		
 	/***** MOTION LOOP - SNAPSHOT FEATURE SECTION *****/
 
--- motion.h	2005-10-08 09:11:00.000000000 -0500
+++ motion.h	2005-10-26 17:54:45.000000000 -0500
@@ -289,6 +289,9 @@
 	int pause;
 	int missing_frame_counter;   /* counts failed attempts to fetch picture frame from camera */
 
+	unsigned long total_diffs;   /* for statistics, how many pixels different so far? */
+	unsigned long total_frames;  /* for statistics, how many frames seen so far? */
+
 #ifdef __freebsd__
 	int tuner_dev;
 #endif
--- webhttpd.c	2005-10-08 09:11:00.000000000 -0500
+++ webhttpd.c	2005-10-26 17:56:02.000000000 -0500
@@ -1584,6 +1584,8 @@
 					sprintf(res,"<a href='/%d/'>Thread %d</a><br>\n", y, y);
 					send_template(client_socket, res);
 				}
+				sprintf(res,"<a href=/statistics/>Statistics</a>\n");
+				send_template(client_socket, res);
 				send_template_end_client(client_socket);
 			} else {
 				send_template_ini_client_raw(client_socket);
@@ -1593,6 +1595,27 @@
 					sprintf(res, "%d\n", y);
 					send_template_raw(client_socket, res);
 				}
+				sprintf(res,"Statistics\n");
+				send_template_raw(client_socket, res);
+			}
+		}
+		else if (! (strcmp (url, "/statistics/")) ) {
+			int y=0;
+			if (cnt[0]->conf.control_html_output) {
+				send_template_ini_client(client_socket,ini_template);
+					for (y=1; y<i; y++) {
+					sprintf(res,"<a href='/%d/'>Thread %d</a>  Frames=%ul  Diff=%d  Threshold=%d  Total=%lu  Events=%d<br>\n", y, y, cnt[y]->total_frames, cnt[y]->diffs, cnt[y]->threshold, cnt[y]->total_diffs, cnt[y]->event_nr-1);
+					send_template(client_socket, res);
+				}
+				sprintf(res,"<a href=/><- back</a>\n");
+				send_template(client_socket, res);
+				send_template_end_client(client_socket);
+			} else {
+				send_template_ini_client_raw(client_socket);
+				for (y=1; y<i; y++) {
+					sprintf(res, "%d  Frames=%ul  Diff=%d  Threshold=%d Total=%lu  Events=%d\n", y, cnt[y]->total_frames, cnt[y]->diffs, cnt[y]->threshold, cnt[y]->total_diffs, cnt[y]->event_nr-1);
+					send_template_raw(client_socket, res);
+				}
 			}
 		}
 		else {
