     var _buffer: Buffer
     
     /// Creates a new packet
-    init(payload: ByteBuffer) {
+    init(payload: ByteBuffer, containsPacketSize: Bool = false) {
         self._buffer = .immutable(payload)
+        self.containsPacketSize = containsPacketSize
     }
     
     /// Creates a new packet
-    init(payload: MutableByteBuffer) {
+    init(payload: MutableByteBuffer, containsPacketSize: Bool = false) {
         self._buffer = .mutable(payload)
+        self.containsPacketSize = containsPacketSize
     }
     
     deinit {

    /// The sequence ID is incremented per message
    /// This client doesn't use this
    var sequenceId: UInt8 {
        return buffer[3]
    }
    
    /// The payload contains the packet's data
    var payload: ByteBuffer {
        let buffer = self.buffer
        
        return ByteBuffer(start: buffer.baseAddress?.advanced(by: 4), count: buffer.count &- 4)
    }
    
    /// The payload contains the packet's data
    var buffer: ByteBuffer {
        switch _buffer {
        case .immutable(let buffer):
            // UInt24 + sequenceId
            return buffer
        case .mutable(let buffer):
            // UInt24 + sequenceId
            return ByteBuffer(start: buffer.baseAddress, count: buffer.count)
        }
    }

            _ = memcpy(pointer.advanced(by: 4), buffer.baseAddress!, data.count)
        }
        
        self.init(payload: ByteBuffer(start: pointer, count: 4 &+ data.count), containsPacketSize: true)
    }
}
