 
 	@IBInspectable
 	public var strokeColor: UIColor? {
-		get {
-			guard let layerStrokeColor = shapeLayer.strokeColor else {
-				return nil
+		get { return originalStrokeColor }
+		set {
+			guard newValue != originalStrokeColor else {
+				return
 			}
 
-			return UIColor(CGColor: layerStrokeColor)
-		}
-		set {
-			shapeLayer.strokeColor = newValue?.CGColor
+			originalStrokeColor = newValue
+
+			shapeLayer.strokeColor = newValue?.tintedWithColor(tintColor).CGColor
 		}
 	}
 



	public override func actionForLayer(layer: CALayer, forKey event: String) -> CAAction? {
		if event == "path" {
			if let animation = super.actionForLayer(layer, forKey: "opacity") as? CABasicAnimation {
				animation.fromValue = shapeLayer.path
				animation.keyPath = event

				return animation
			}
		}

		return super.actionForLayer(layer, forKey: event)
	}


	@IBInspectable
	public var fillColor: UIColor? {
		get {
			guard let layerFillColor = shapeLayer.fillColor else {
				return nil
			}

			return UIColor(CGColor: layerFillColor)
		}
		set {
			shapeLayer.fillColor = newValue?.CGColor
		}
	}


@IBDesignable
public /* non-final */ class ShapeView: View {

	private var originalFillColor: UIColor?
	private var originalStrokeColor: UIColor?


	public override init() {
		super.init()

		if let layerFillColor = shapeLayer.fillColor {
			fillColor = UIColor(CGColor: layerFillColor)
		}
		if let layerStrokeColor = shapeLayer.strokeColor {
			strokeColor = UIColor(CGColor: layerStrokeColor)
		}
	}


	public required init?(coder: NSCoder) {
		super.init(coder: coder)

		if let layerFillColor = shapeLayer.fillColor {
			fillColor = UIColor(CGColor: layerFillColor)
		}
		if let layerStrokeColor = shapeLayer.strokeColor {
			strokeColor = UIColor(CGColor: layerStrokeColor)
		}
	}


