diff -ur ../ardour/libs/ardour/session_click.cc libs/ardour/session_click.cc
--- ../ardour/libs/ardour/session_click.cc	2005-09-09 11:57:57.000000000 +1000
+++ libs/ardour/session_click.cc	2005-12-05 01:45:37.000000000 +1100
@@ -95,15 +95,26 @@
 		clk = *i;
 		next = i;
 		++next;
-
+	
 		if (clk->start < start) {
 			internal_offset = 0;
 		} else {
 			internal_offset = clk->start - start;
 		}
-
-		copy = min (clk->duration - clk->offset, nframes - internal_offset);
-		
+		/*
+		cerr << "XXX internal offset is " << internal_offset << endl;
+		cerr << "XXX nframes is " << nframes << endl;
+		cerr << "XXX clk->duration is " << clk->duration << endl;
+		cerr << "XXX clk->offset is " << clk->offset << endl << endl;
+		*/
+		if (nframes < internal_offset) {
+		         /* we've just located or something.. 
+			    effectively going backwards.
+			    lets get the flock out of here */
+		        break;
+		} else {
+		        copy = min (clk->duration - clk->offset, nframes - internal_offset);
+		}
 		memcpy (buf + internal_offset, &clk->data[clk->offset], copy * sizeof (Sample));
 
 		clk->offset += copy;
