offset uint64
 }
 
+// WriterOptions contains configuration options for a zip.Writer.
+type WriterOptions struct {
+       // Offset modifies the initial zip offset.
+       // This is useful when the zip is appended to other data such as a binary executable.
+       Offset int64
+}
+
 // NewWriter returns a new Writer writing a zip file to w.
 func NewWriter(w io.Writer) *Writer {
-       return &Writer{cw: &countWriter{w: bufio.NewWriter(w)}}
+       return NewWriterWithOptions(w, nil)
+}
+
+// NewWriterWithOptions returns a new Writer writing a zip file to w and uses the given options.
+func NewWriterWithOptions(w io.Writer, options *WriterOptions) *Writer {
+       writer := &Writer{
+               cw: &countWriter{
+                       w: bufio.NewWriter(w),
+               },
+       }
+       if options != nil {
+               writer.cw.count = options.Offset
+       }
+       return writer
 }
 
 // Flush flushes any buffered data to the underlying writer.
 
        }
 }
 
+func TestWriterOffsetOption(t *testing.T) {
+       largeData := make([]byte, 1<<17)
+       for i := range largeData {
+               largeData[i] = byte(rand.Int())
+       }
+       writeTests[1].Data = largeData
+       defer func() {
+               writeTests[1].Data = nil
+       }()
+
+       // write a zip file
+       buf := new(bytes.Buffer)
+       existingData := []byte{1, 2, 3, 1, 2, 3, 1, 2, 3}
+       n, _ := buf.Write(existingData)
+       w := NewWriterWithOptions(buf, &WriterOptions{Offset: int64(n)})
+
+       for _, wt := range writeTests {
+               testCreate(t, w, &wt)
+       }
+
+       if err := w.Close(); err != nil {
+               t.Fatal(err)
+       }
+
+       // read it back
+       r, err := NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len()))
+       if err != nil {
+               t.Fatal(err)
+       }
+       for i, wt := range writeTests {
+               testReadFile(t, r.File[i], &wt)
+       }
+}
+
 func TestWriterFlush(t *testing.T) {
        var buf bytes.Buffer
        w := NewWriter(struct{ io.Writer }{&buf})