         
         let data = try HCISendRequest(internalSocket,
                                       opcode: opcode,
-                                      eventParameterLength: commandReturnType.length,
+                                      eventParameterLength: commandReturnType.length + 1, // status code + parameters
                                       timeout: timeout)
         
-        guard let response = Return.init(byteValue: data)
+        guard let statusByte = data.first
+            else { fatalError("Missing status byte!") }
+        
+        guard statusByte == 0x00
+            else { throw HCIError(rawValue: statusByte)! }
+        
+        guard let response = Return(byteValue: Array(data.suffix(from: 1)))
             else { throw AdapterError.garbageResponse(Data(data)) }
         
         return response

// MARK: - Internal HCI Functions

/// Returns event parameter data.
internal func HCISendRequest(_ deviceDescriptor: CInt, opcode: (commandField: UInt16, groupField: UInt16), commandParameterData: [UInt8] = [], event: UInt8 = 0, eventParameterLength: Int = 0, timeout: Int = 1000) throws -> [UInt8] {

    // assertions
    assert(timeout >= 0, "Negative timeout value")


        let opcode = (CP.command.rawValue, type(of: CP.command).opcodeGroupField.rawValue)

        let data = try HCISendRequest(internalSocket,
                                      opcode: opcode,
                                      commandParameterData: commandParameter.byteValue,
                                      eventParameterLength: 1,
                                      timeout: timeout)

        guard let statusByte = data.first
            else { fatalError("Missing status byte!") }
