             }
         }
     }
-    
-    /**
-    The UIImage representation of the signature. Read only.
-    */
-    fileprivate(set) open var signature:UIImage?
+
+    /**
+    The true backing variable used with core graphics. Private.
+    */
+    fileprivate var _signature:UIImage?
+    /**
+    The UIImage representation of the signature. Read/write.
+    */
+    open var signature:UIImage? {
+        get {
+            return _signature
+        }
+        set {
+            _signature = newValue
+            self.setNeedsDisplay()
+        }
+    }
     
     // MARK: Public Methods
     open func clear() {
         signature = nil
-        self.setNeedsDisplay()
     }
     
     // MARK: Private Methods

                
                drawQuadCurve(previousEndPoint, control: previousPoint, end: midPoint, startWidth:previousWidth, endWidth: currentWidth)
                
                signature = UIGraphicsGetImageFromCurrentImageContext()
                UIGraphicsEndImageContext()
                previousPoint = currentPoint
                previousEndPoint = midPoint

            if(strokeLength >= 1.0) {
                let rect = self.bounds
                UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.main.scale)
                if(_signature == nil) {
                    _signature = UIGraphicsGetImageFromCurrentImageContext()
                }
                // Draw the prior signature
                _signature?.draw(in: rect)
                
                let delta:CGFloat = 0.5
                let strokeScale:CGFloat = 50 // fudge factor based on empirical tests
