         var bytes = Data(bytes[2..<2+size]) // copy? :(
         precondition(bytes.count == Int(size))
 
-        self.init(unpack: bytes)
-    }
-
-    public init(unpack bytes: Data) {
+        try self.init(unpack: bytes)
+    }
+
+    public init(unpack bytes: Data) throws {
         let flags = UInt16(bytes: bytes[2..<4])
 
         header = Header(id: UInt16(bytes: bytes[0..<2]),

        return bytes
    }

    public init(unpackTCP bytes: Data) {
        precondition(bytes.count >= 2)
        let size = Int(UInt16(bytes: bytes[0..<2]))



        // questions
        for question in questions {
            try packName(question.name, onto: &bytes, labels: &labels)
            bytes += question.type.rawValue.bytes
            bytes += question.internetClass.bytes
        }
