         guard pdu.startHandle <= pdu.endHandle
             else { errorResponse(opcode, .InvalidHandle, pdu.startHandle); return }
         
-        let attributes = database.readByType(pdu.startHandle ... pdu.endHandle, type: pdu.attributeType)
+        let attributes = database.readByType(handle: (pdu.startHandle, pdu.endHandle), type: pdu.attributeType)
         
         guard attributes.isEmpty == false
             else { errorResponse(opcode, .AttributeNotFound, pdu.startHandle); return }

        return data
    }
    
    func readByType(handle: Range<UInt16>, type: Bluetooth.UUID) -> [Attribute] {
        
        return attributes.filter { handle.contains($0.handle) && $0.UUID == type }
    }
    
    func findInformation(handle: Range<UInt16>) -> [Attribute] {
        
        return attributes.filter { handle.contains($0.handle) }
    }
    
    func findByTypeValue(handle: Range<UInt16>, type: UInt16, value: [UInt8]) -> [(UInt16, UInt16)] {
        
        var results = [(UInt16, UInt16)]()
        

        guard pdu.startHandle <= pdu.endHandle
            else { errorResponse(opcode, .InvalidHandle, pdu.startHandle); return }
        
        let attributes = database.findInformation(handle: (pdu.startHandle, pdu.endHandle))
        
        guard attributes.isEmpty == false
            else { errorResponse(opcode, .AttributeNotFound, pdu.startHandle); return }
