         // Write matrix
         let matrixData = NSMutableData(bytes: matrixBytes, length: matrixBytes.count)
         if firmwareVersion >= 0.1 {
-            let matrixAdditionalBytes: [UInt8] = [0xff /* Highest brightness */, 10 /* Display timeout */]
+            let matrixAdditionalBytes: [UInt8] = [UInt8(matrixBrightness), UInt8(matrixDisplayTimeout * 0.1)]
             matrixData.appendBytes(matrixAdditionalBytes, length: matrixAdditionalBytes.count)
         }
         peripheral.writeValue(matrixData, forCharacteristic: ledMatrixCharacteristic, type: .WithResponse)
+        lastWriteMatrixDate = NSDate()
         isWaitingForLedMatrixWriteResponse = true
         
         // When the matrix write response is not retrieved within 100ms we assume the response to have timed out

    
    private func writeMatrixNow(matrix: String?) {
        assert(!isWaitingForLedMatrixWriteResponse, "Cannot write matrix now, response from previous write request not yet received")
        guard let ledMatrixCharacteristic = ledMatrixCharacteristic else {
            return
        }
        
        // Convert matrix string representation into byte representation
        let matrixBytes = NuimoLEDMatrix.matrixBytesForString(matrix ?? "")

    
    //TODO: Allow for writing custom matrices
    public func writeMatrix(matrix: String?) {
        // Do not write same matrix again that is already shown unless the display interval has timed out
        guard matrix != currentMatrix || NSDate().timeIntervalSinceDate(lastWriteMatrixDate ?? NSDate()) >= matrixDisplayTimeout else {return}
        
        currentMatrix = matrix
        
        // Send matrix later when the write response from previous write request is not yet received
