 	func undo() {
 		if let drawing = self.drawing {
 			if let dirtyRect = drawing.popStroke() {
-				view?.setNeedsDisplayInRect(dirtyRect)
+				self.view?.setNeedsDisplayInRect( drawingToScreen(dirtyRect) )
 			} else {
 				view?.setNeedsDisplay()
 			}

					(image:UIImage, dirtyRect:CGRect ) in
					if !dirtyRect.isNull {

						// transform dirtyRect from drawing coordinate space to screen
						let screenDirtyRect = dirtyRect.rectByOffsetting(dx: self.viewport.origin.x, dy: self.viewport.origin.y)
						self.view?.setNeedsDisplayInRect( screenDirtyRect )

					} else {
						self.view?.setNeedsDisplay()


	private func screenToDrawing( location:CGPoint ) -> CGPoint {
		return location.subtract( viewport.origin )
	}

	private func drawingToScreen( rect:CGRect ) -> CGRect {
		return rect.rectByOffsetting(dx: self.viewport.origin.x, dy: self.viewport.origin.y)
	}

	private var _activeStroke:Stroke?
