     }
     
     func update(values: [Connector : SimulationContext.ResolvedValue]) {
-        if let diameter = values[self.diameterConnector]?.DoubleValue {
+        if let diameter = values[self.diameterConnector]?.DoubleValue where diameter.isFinite {
             self.mainCircle.diameter = diameter
         }
-        if let circumference = values[self.circumferenceConnector]?.DoubleValue {
+        if let circumference = values[self.circumferenceConnector]?.DoubleValue where circumference.isFinite {
             self.mainCircle.circumference = circumference
         }
     }

            
            let ghostValues = resolver(inputValues: [self.driverConnector: offsetDriverValue])
            
            if let xPosition = ghostValues[self.xConnector]?.DoubleValue,
                let yPosition = ghostValues[self.yConnector]?.DoubleValue {

                    let percent = Double(offset) / Double(range)
                    let ghost = self.createNewGhost(percent: percent)
                    self.superview?.insertSubview(ghost, belowSubview: self)
                    ghost.center.x = CGFloat(xPosition)
                    let toyYZero = self.superview?.frame.size.height ?? 0
                    ghost.center.y = toyYZero - CGFloat(yPosition)
            }
        }
    }
    

    func update(values: [Connector : SimulationContext.ResolvedValue]) {
        removeAllGhosts()
        
        if let xPosition = values[self.xConnector]?.DoubleValue where xPosition.isFinite {
            self.center.x = CGFloat(xPosition)
        }
        if let yPosition = values[self.yConnector]?.DoubleValue where yPosition.isFinite {
            let toyYZero = self.superview?.frame.size.height ?? 0
            self.center.y = toyYZero - CGFloat(yPosition)
        }
