diff --git a/batch.go b/batch.go
index 05c1adf6f140c3db9dfa92cdd779ffcf7d8bc008..34fc0ea8b1c5fa69719ef2ed2859729d419beb15 100644
--- a/batch.go
+++ b/batch.go
@@ -1,6 +1,7 @@
 package pixel
 
 import (
+	"fmt"
 	"image/color"
 	"math"
 
@@ -75,6 +76,7 @@ func (b *Batch) MakeTriangles(t Triangles) TargetTriangles {
 func (b *Batch) MakePicture(p Picture) TargetPicture {
 	return &batchPicture{
 		Picture: p,
+		b:       b,
 	}
 }
 
@@ -113,6 +115,8 @@ func (bt *batchTriangles) Draw() {
 
 type batchPicture struct {
 	Picture
+
+	b *Batch
 }
 
 func (bp *batchPicture) Slice(r Rect) Picture {
@@ -122,5 +126,9 @@ func (bp *batchPicture) Slice(r Rect) Picture {
 }
 
 func (bp *batchPicture) Draw(t TargetTriangles) {
-	t.(*batchTriangles).draw(bp)
+	bt := t.(*batchTriangles)
+	if bp.b != bt.b {
+		panic(fmt.Sprintf("%T.Draw: TargetTriangles generated by different Batch", bp))
+	}
+	bt.draw(bp)
 }
diff --git a/interface.go b/interface.go
index 18dfe910ba94e10771d32f6470738c779cfc90c4..e41397d7ef6c51841ac175c72528c9ae0e6c5b88 100644
--- a/interface.go
+++ b/interface.go
@@ -19,7 +19,11 @@ type Target interface {
 	// present) when making new TargetTriangles. This varies from Target to Target.
 	MakeTriangles(Triangles) TargetTriangles
 
-	//TODO: doc
+	// MakePicture generates a specialized copy of the provided Picture.
+	//
+	// When calling Draw method on the returned TargetPicture, the TargetPicture will be drawn
+	// onto the Target that generated it together with the TargetTriangles supplied to the Draw
+	// method.
 	MakePicture(Picture) TargetPicture
 }
 
@@ -116,6 +120,9 @@ type Picture interface {
 type TargetPicture interface {
 	Picture
 
+	// Draw draws the supplied TargetTriangles (which must be generated by the same Target as
+	// this TargetPicture) with this TargetPicture. The TargetTriangles should utilize the data
+	// from this TargetPicture in some way.
 	Draw(TargetTriangles)
 }