             }
         }
         
-        func findToyGhostValues(driverConnector: Connector) -> [Double: [Connector: SimulationContext.ResolvedValue]] {
+        func findToyGhostValues(toy: Toy) -> [Double: [Connector: SimulationContext.ResolvedValue]] {
+            let driverConnector = toy.driverConnector
             guard let driverConnectorLabel = self.connectorToLabel[driverConnector] else {
                 return [:]
             }
             guard let initialDriverValue = self.lastSimulationValues?[driverConnector] else {
                 return [:]
             }
-            if initialDriverValue.WasDependent && self.selectedConnectorLabel?.connector != driverConnector {
+            if initialDriverValue.WasDependent || self.selectedConnectorLabel?.connector == driverConnector {
                 // We don't run the simulation if the driver value was dependent on another selected connector
+                // or if we are selected on the driver
                 return [:]
             }
+            let dependentConnectors = [toy.xConnector, toy.yConnector, toy.angleConnector]
+            
+            // Construct a list of all connectors in order of priority. It is okay to have duplicates
+            // First the selected connector
+            var allConnectors = [self.selectedConnectorLabel?.connector].flatMap({$0})
+            // Then the ones from the values map
+            allConnectors += values.map{ (connector, value) in
+                return connector
+            }
+            // Then the ones from the last context
+            allConnectors += self.connectorLabels.map{ connectorLabel in
+                return connectorLabel.connector
+            }
+            // Filter out any of the dependent connectors, to make sure they are last priority
+            allConnectors = allConnectors.filter({ connector -> Bool in
+                return !dependentConnectors.contains(connector)
+            })
+            allConnectors = allConnectors + dependentConnectors
+            
             
             var ghostContexts: [Double : [Connector: SimulationContext.ResolvedValue]] = [:]
             let range = 5

        self.scrollView.addSubview(newToy)
        toys.append(newToy)
        
        self.addConnectorLabel(timeLabel, topPriority: false, automaticallyConnect: false)
        self.selectConnectorLabelAndSetToValue(timeLabel, value: 1)
    }
    


        if let lastSimulationValues = self.lastSimulationValues where ranSolver {
            for toy in self.toys {
                let ghostSimulations = findToyGhostValues(toy)
                self.updateToy(toy, lastSimulationValues: lastSimulationValues, ghostSimulations: ghostSimulations, toyYZero: self.view.bounds.height)
            }
            
