                 }
 
             case .JoinSelectedNetwork:
-                self.commissionerDevice!.transceiver!.sendStopCommissioner { result in
-                    self.log("commissionerDevice.sendStopCommissioner: \(result.description())")
-                    if (result == .NONE) {
-                        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(5)) {
-                            self.runCurrentStep()
-                        }
-                    } else {
-                        self.handleBluetoothErrorResult(result)
-                    }
-                }
+                self.runCurrentStep()
             default:
                 break;
         }


            case .BluetoothConnectionDropped : return "The Bluetooth connection was dropped unexpectedly. Please restart the setup and try again."

            case .DeviceIsNotAllowedToJoinNetwork : return "Your device was unable to join the network (NOT_ALLOWED). Please press RESET button on both devices and try again."
            case .DeviceIsUnableToFindNetworkToJoin : return "Your device was unable to join the network (NOT_FOUND). Please press RESET button on both devices and try again."
            case .DeviceTimeoutWhileJoiningNetwork : return "Your device was unable to join the network (TIMEOUT). Please press RESET button on both devices and try again."

            case .DeviceConnectToCloudTimeout : return "Your device could not connect to Device Cloud. Please try again."
            case .DeviceGettingClaimedTimeout : return "Your device failed to be claimed. Please try again."

        /// TIMEOUT: The join process timed out
        /// NOT_ALLOWED: Invalid security credentials
        self.targetDevice.transceiver!.sendJoinNetwork { result in
            self.log("targetDevice.sendJoinNetwork: \(result.description())")

            var failureReason: MeshSetupFlowError? = nil

            if (result == .NONE) {
                self.stopCommissioner()
            } else if (result == .NOT_ALLOWED) {
                failureReason = .DeviceIsNotAllowedToJoinNetwork
            } else if (result == .NOT_FOUND) {
                failureReason = .DeviceIsUnableToFindNetworkToJoin
            } else if (result == .TIMEOUT) {
                failureReason = .DeviceTimeoutWhileJoiningNetwork
            } else {
                self.handleBluetoothErrorResult(result)
            }


            if let reason = failureReason {
                let recoveryLeaveNetwork = {
                    self.targetDevice.transceiver!.sendLeaveNetwork() { result in
                        self.log("targetDevice.sendLeaveNetwork: \(result.description())")
                        if (result == .NONE) {
                            self.fail(withReason: reason)
                        } else {
                            self.handleBluetoothErrorResult(result)
                        }
                    }
                }

                self.commissionerDevice!.transceiver!.sendStopCommissioner { result in
                    self.log("commissionerDevice.sendStopCommissioner: \(result.description())")
                    if (result == .NONE) {
                        if (!self.canceled) {
                            recoveryLeaveNetwork()
                        }
                    } else {
                        self.handleBluetoothErrorResult(result)
                    }
