a lot of changes
diff --git a/wally/sensors/protocol.py b/wally/sensors/protocol.py
index fad7e00..67aef2a 100644
--- a/wally/sensors/protocol.py
+++ b/wally/sensors/protocol.py
@@ -62,6 +62,8 @@
 
             result = (self.HEADERS + source_id +
                       self.END_OF_SOURCE_ID +
+                      socket.gethostname() +
+                      self.END_OF_SOURCE_ID +
                       flen + forder + self.END_OF_HEADERS)
 
             if self.headers_send_cycles_left > 0:
@@ -85,13 +87,14 @@
     def __init__(self):
         self.fields = {}
         self.formats = {}
+        self.hostnames = {}
 
     def unpack(self, data):
         code = data[0]
-        source_id, _, packed_data = data[1:].partition(
-            StructSerializerSend.END_OF_SOURCE_ID)
 
         if code == StructSerializerSend.HEADERS:
+            source_id, hostname, packed_data = data[1:].split(
+                StructSerializerSend.END_OF_SOURCE_ID, 2)
             # fields order provided
             flen_sz = struct.calcsize("!H")
             flen = struct.unpack("!H", packed_data[:flen_sz])[0]
@@ -111,11 +114,14 @@
             else:
                 self.fields[source_id] = ['time'] + forder
                 self.formats[source_id] = "!I" + "I" * flen
+                self.hostnames[source_id] = hostname
 
             if len(rest) != 0:
                 return self.unpack(rest)
             return None
         else:
+            source_id, packed_data = data[1:].split(
+                StructSerializerSend.END_OF_SOURCE_ID, 1)
             assert code == StructSerializerSend.DATA,\
                 "Unknown code {0!r}".format(code)
 
@@ -133,6 +139,7 @@
             vals = struct.unpack(s_format, packed_data)
             res = dict(zip(fields, vals))
             res['source_id'] = source_id
+            res['hostname'] = self.hostnames[source_id]
             return res