 
     /// Initialize the mixer node with no inputs, to be connected later
     public override init() {
-        super.init()
-        initialize()
+        super.init(avAudioNode: mixerAU, attach: true)
     }
 
     /// Initialize the mixer node with multiple inputs
     ///
     /// - parameter inputs: A variadic list of AKNodes
     ///
-    public init(_ inputs: AKNode?...) {
-        super.init()
-        initialize()
-        for input in inputs {
-            connect(input)
-        }
+    //swiftlint:disable force_unwrapping
+    public convenience init(_ inputs: AKNode?...) {
+        self.init(inputs.filter { $0 != nil }.map { $0! })
     }
+    //swiftlint:enable force_unwrapping
 
     /// Initialize the mixer node with multiple inputs
     ///
     /// - parameter inputs: An array of AKNodes
     ///
-    public init(_ inputs: [AKNode]) {
-        super.init()
-        initialize()
+    public convenience init(_ inputs: [AKNode]) {
+        self.init()
         for input in inputs {
-            connect(input)
+            input.connect(to: self)
         }
     }
 
-    private func initialize() {
-        mixerAU = AVAudioMixerNode()
-        self.avAudioNode = mixerAU!
-        AudioKit.engine.attach(self.avAudioNode)
+    public var nextInput: AKInputConnection {
+        return AKInputConnection(node: self, bus: mixerAU.nextAvailableInputBus)
     }
-
-    /// Connnect another input after initialization
-    ///
-    /// - parameter input: AKNode to connect
-    /// - parameter bus: what channel of the mixer to connect on. 
-    /// If you use this it is up to your application to keep track of what inputs are in use to make sure you
-    /// don't overwrite an existing channel with an active node that is active.
-    open func connect(_ input: AKNode?, bus: Int? = nil) {
-        guard mixerAU != nil else { return }
-
-        var wasRunning = false
-        if AudioKit.engine.isRunning {
-            wasRunning = true
-            AudioKit.stop()
-        }
-
-        let chan = bus ?? mixerAU!.nextAvailableInputBus
-
-        if let existingInput = input {
-            existingInput.connectionPoints.append(AVAudioConnectionPoint(node: mixerAU!, bus: chan))
-            connectionCounter += 1
-
-            AKLog("AKMixer.connect() input: \(existingInput) on bus \(chan), Mixer now has \(mixerAU!.numberOfInputs) total inputs and \(connectionCounter) recent connections.")
-
-        }
-        if wasRunning {
-            AudioKit.start()
-        }
-
-    }
-
     /// Function to start, play, or activate the node, all do the same thing
     open func start() {
         if isStopped {

        }
    }

}

//

/// AudioKit version of Apple's Mixer Node
open class AKMixer: AKNode, AKToggleable, AKInput {
    /// The internal mixer node
    fileprivate var mixerAU = AVAudioMixerNode()

    /// Output Volume (Default 1)
    open dynamic var volume: Double = 1.0 {
        didSet {
            volume = max(volume, 0)
            mixerAU.outputVolume = Float(volume)
        }
    }

