// merge two clusters
    public static void JoinClusters(WireCluster cluster1, WireCluster cluster2)
    {
        // stick inputs & outputs of cluster2 into cluster1
        foreach (CircuitInput ConnectedInput in cluster2.GetConnectedInputs())
        {
            cluster1.ConnectInput(ConnectedInput);
        }

        foreach (CircuitOutput ConnectedOutput in cluster2.GetConnectedOutputs())
        {
            cluster1.ConnectOutput(ConnectedOutput);
        }

        Object.Destroy(cluster2.gameObject);
    }
    // joins an output with an input by sticking the output in the cluster of the input
    public static void LinkInputOutput(InputOutputConnection connection)
    {
        CircuitInput  input  = connection.Input;
        CircuitOutput output = connection.Output;

        if (input == null || output == null)
        {
            Debug.LogError("this wire didn't have its input/output set!"); return;
        }

        if (input.Cluster != null)
        {
            input.Cluster.ConnectOutput(output);
        }

        else
        {
            WireCluster NewCluster = Object.Instantiate(Prefabs.Cluster).GetComponent <WireCluster>();
            NewCluster.ConnectInput(input);
            NewCluster.ConnectOutput(output);
            NewCluster.transform.parent = ProperClusterParent(NewCluster); // this is also done the next frame when the cluster recalculates its mesh. The reason it is being done here is because when a board is cloned, it gets new clusters, and those need to be children of the board during the same frame they start existing so that autocombineonstable can be set to false for them by StuffPlacer.NewThingBeingPlaced. My hope is that it doesn't affect performance, but I'm pretty nervous about it...
        }
    }