         case Pressed(startPoint: SnapPoint, creating: Form, instruction: InstructionNode, target: Target)
     }
     
-    var state : State = .Idle
+    var state : State = .Idle {
+        didSet {
+            update(state)
+        }
+    }
     let stage : Stage
     let snapUI : SnapUI
     

                let offset = start.position - targetPosition
                let delta = targetPosition - start.position
                destination = FixSizeDestination(from: start.runtimePoint, delta: delta)
            case .Snap(_, let snapPoint, _):
                destination = RelativeDestination(from: start.runtimePoint, to: snapPoint.runtimePoint)
            }
            
            node.replaceWith(CreateFormInstruction(form: form, destination: destination))

            break
            
        }
    }
    
    func update(state: State) {
        switch state {
        case .Idle, .Delegating:
            snapUI.state = .Show(stage.getSnapPoints())
            break
        case .Snapped(_, let start,_):
            snapUI.state = .Active(start, stage.getSnapPoints())
            break
        case .Pressed(let start, let form, let node, let target):
            let destination : protocol<RuntimeInitialDestination, Labeled>
