// writing to w.
 func NewWriter(w io.Writer) *Writer {
        return &Writer{
-               w:        w,
-               boundary: randomBoundary(),
+               w: w,
        }
 }
 
 // Boundary returns the Writer's boundary.
 func (w *Writer) Boundary() string {
+       if w.boundary == "" {
+               w.boundary = randomBoundary()
+       }
        return w.boundary
 }
 
 // FormDataContentType returns the Content-Type for an HTTP
 // multipart/form-data with this Writer's Boundary.
 func (w *Writer) FormDataContentType() string {
-       return "multipart/form-data; boundary=" + w.boundary
+       return "multipart/form-data; boundary=" + w.Boundary()
 }
 
 func randomBoundary() string {
        }
        var b bytes.Buffer
        if w.lastpart != nil {
-               fmt.Fprintf(&b, "\r\n--%s\r\n", w.boundary)
+               fmt.Fprintf(&b, "\r\n--%s\r\n", w.Boundary())
        } else {
-               fmt.Fprintf(&b, "--%s\r\n", w.boundary)
+               fmt.Fprintf(&b, "--%s\r\n", w.Boundary())
        }
        // TODO(bradfitz): move this to textproto.MimeHeader.Write(w), have it sort
        // and clean, like http.Header.Write(w) does.
                }
                w.lastpart = nil
        }
-       _, err := fmt.Fprintf(w.w, "\r\n--%s--\r\n", w.boundary)
+       _, err := fmt.Fprintf(w.w, "\r\n--%s--\r\n", w.Boundary())
        return err
 }