diff -ur bin.orig/varnishd/cache_center.c bin/varnishd/cache_center.c
--- bin.orig/varnishd/cache_center.c	2010-02-04 01:16:07.000000000 +0000
+++ bin/varnishd/cache_center.c	2009-09-06 01:16:51.000000000 +0100
@@ -872,7 +872,8 @@
 cnt_start(struct sess *sp)
 {
 	int done;
-	char *p;
+	char *p, *c, *d;
+  const char *target = "start", *t;
 	const char *r = "HTTP/1.1 100 Continue\r\n\r\n";
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
@@ -929,6 +930,38 @@
 		http_Unset(sp->http, H_Expect);
 	}
 
+
+  /* Grab the value of the start QS param, if it is present */
+  c = sp->http->hd[HTTP_HDR_URL].b;
+  for (;!(*c == '?' || *c == '\0');c++);
+  while (1)
+  {
+    if (*c == '\0')
+      break;
+    c++;
+    for (t = target; *t == *c && *t != '\0'; t++, c++);
+    if (*c == '=')
+    {
+      d = c - 5;
+      c++;
+      for (;(*c != '&' && *c != '\0' && *c >= '0' && *c <= '9');c++)
+        sp->http->flash_offset = sp->http->flash_offset * 10 + (*c - '0');
+      for (;!(*c == '&' || *c == '\0');c++);
+      if (*c == '&')
+        for (c++;*c != '\0';*(d++) = *(c++));
+      *d = '\0';
+      sp->http->hd[HTTP_HDR_URL].e = d;
+      if ((*(d-1) == '?') || (*(d-1) == '&')) {
+        *(d-1) = '\0';
+        sp->http->hd[HTTP_HDR_URL].e = d-1;
+      }
+      break;
+    }
+    for (;!(*c == '&' || *c == '\0');c++);
+  }
+
+  /* End QS check */
+
 	sp->step = STP_RECV;
 	return (0);
 }
diff -ur bin.orig/varnishd/cache.h bin/varnishd/cache.h
--- bin.orig/varnishd/cache.h	2010-02-04 01:16:07.000000000 +0000
+++ bin/varnishd/cache.h	2009-09-03 22:59:50.000000000 +0100
@@ -151,6 +151,7 @@
 	unsigned char		hdf[HTTP_HDR_MAX];
 #define HDF_FILTER		(1 << 0)	/* Filtered by Connection */
 	unsigned		nhd;
+  unsigned long flash_offset;
 };
 
 /*--------------------------------------------------------------------
diff -ur bin.orig/varnishd/cache_response.c bin/varnishd/cache_response.c
--- bin.orig/varnishd/cache_response.c	2010-02-04 01:16:07.000000000 +0000
+++ bin/varnishd/cache_response.c	2009-09-06 22:26:04.000000000 +0100
@@ -40,6 +40,8 @@
 #include "shmlog.h"
 #include "cache.h"
 
+#define __FLASH_HEADER_LEN__ 13
+
 /*--------------------------------------------------------------------*/
 
 static void
@@ -97,7 +99,7 @@
 	if (sp->obj->response == 200 && sp->http->conds && res_do_conds(sp))
 		return;
 
-	WSP(sp, SLT_Length, "%u", sp->obj->len);
+	WSP(sp, SLT_Length, "%u", sp->obj->len - sp->http->flash_offset + (sp->http->flash_offset > 0 ? __FLASH_HEADER_LEN__ : 0));
 
 	http_ClrHeader(sp->http);
 	sp->http->logtag = HTTP_Tx;
@@ -132,6 +134,7 @@
 {
 	struct storage *st;
 	unsigned u = 0;
+  unsigned off = 0;
 	char lenbuf[20];
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
@@ -139,6 +142,9 @@
 
 	WRW_Reserve(sp->wrk, &sp->fd);
 
+  http_Unset(sp->http, H_Content_Length);
+  http_PrintfHeader(sp->wrk, &sp->fd, sp->http, "Content-Length: %d", sp->obj->len - sp->http->flash_offset + (sp->http->flash_offset > 0 ? __FLASH_HEADER_LEN__ : 0));
+
 	if (sp->disable_esi || sp->esis == 0)
 		sp->acct_req.hdrbytes += http_Write(sp->wrk, sp->http, 1);
 
@@ -155,15 +161,32 @@
 		if (sp->esis > 0 &&
 		    sp->http->protover >= 1.1 &&
 		    sp->obj->len > 0) {
-			sprintf(lenbuf, "%x\r\n", sp->obj->len);
+			sprintf(lenbuf, "%x\r\n", (sp->obj->len - sp->http->flash_offset));
 			(void)WRW_Write(sp->wrk, lenbuf, -1);
 		}
 
+    if (sp->http->flash_offset > 0)
+    {
+       (void)WRW_Write(sp->wrk, "FLV\1\1\0\0\0\x9\0\0\0\x9", __FLASH_HEADER_LEN__);
+    }
+
 		VTAILQ_FOREACH(st, &sp->obj->store, list) {
 			CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 			CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
+
+      off = 0;
+      if (u + st->len > sp->http->flash_offset)
+      {
+        off = sp->http->flash_offset - u;
+      }
+      else
+      {
+        u += st->len;
+        continue;
+      }
+
 			u += st->len;
-			sp->acct_req.bodybytes += st->len;
+			sp->acct_req.bodybytes += st->len - off;
 #ifdef SENDFILE_WORKS
 			/*
 			 * XXX: the overhead of setting up sendfile is not
@@ -172,15 +195,15 @@
 			 * XXX: Should use getpagesize() ?
 			 */
 			if (st->fd >= 0 &&
-			    st->len >= params->sendfile_threshold) {
+			    (st->len - off) >= params->sendfile_threshold) {
 				VSL_stats->n_objsendfile++;
 				WRW_Sendfile(sp->wrk, st->fd,
-				    st->where, st->len);
+				    st->where + off, st->len - off);
 				continue;
 			}
 #endif /* SENDFILE_WORKS */
 			VSL_stats->n_objwrite++;
-			(void)WRW_Write(sp->wrk, st->ptr, st->len);
+			(void)WRW_Write(sp->wrk, st->ptr + off, st->len - off);
 		}
 		assert(u == sp->obj->len);
 		if (sp->esis > 0 &&
