         // This is called when a constraint makes a connector on it's own. For example, if you set two inputs on a multiplier then it will resolve the output automatically. We need to add a view for it and display it
         // This is called during runSolver, so we need to be careful about what we mutate
         if let newConnector = connectorPort.connector {
+            if let connector = connectorToLabel[newConnector] {
+                // This was a ? connector that is alredy a view. Great
+                return
+            }
+            
             let newLabel = ConnectorLabel(connector: newConnector)
             newLabel.sizeToFit()
             

    
    func numberSlideView(NumberSlideView, didSelectNewValue newValue: NSDecimalNumber) {
        if let selectedConnectorLabel = self.selectedConnectorLabel {
            moveConnectorToTopPriority(selectedConnectorLabel)
            
            runSolver([selectedConnectorLabel.connector : newValue.doubleValue])
        }
    }

                }
                connector.forgetValue()
            }
        }
        
        // These are the first priority
        for (connector, value) in values {
            connector.setValue(value, informant: nil)
        }
        
        // We loop through connectorLabels like this, because it can mutate during the simulation, if a constraint "resolves a port"
