diff --git a/coolamqp/framing/definitions.py b/coolamqp/framing/definitions.py
index 8a9e7d8cb9f56227ac7d587864c5361ac5819f6c..d76defe6a2cfd9af7e3423604482d05e7e4e56f4 100644
--- a/coolamqp/framing/definitions.py
+++ b/coolamqp/framing/definitions.py
@@ -10,13 +10,15 @@ AMQP is copyright (c) 2016 OASIS
 CoolAMQP is copyright (c) 2016 DMS Serwis s.c.
 
 
-###########################################
+###########################################################
 # IMPORTANT NOTE
 # Type of field may depend on the origin of packet.
 # strings will be memoryviews if we received the packet
 # while they may be bytes if we created it
 #
 # this has some use - speed :D
+# Remember to call .tobytes() if you need so!
+###########################################################
 """
 
 import struct, collections, warnings, logging, six
diff --git a/coolamqp/framing/field_table.py b/coolamqp/framing/field_table.py
index ffc588831756368b94358967fe27fcb9d4d7425f..f25aae3b954a4813a7d0ae1db5411aa50d491ed9 100644
--- a/coolamqp/framing/field_table.py
+++ b/coolamqp/framing/field_table.py
@@ -33,7 +33,7 @@ def deframe_decimal(buf, offset):
 
 def deframe_shortstr(buf, offset):      # -> value, bytes_eaten
     ln, = struct.unpack_from('!B', buf, offset)
-    return buf[offset+1:offset+1+ln].tobytes(), 1+ln
+    return buf[offset+1:offset+1+ln], 1+ln
 
 
 def enframe_shortstr(buf, value):
@@ -43,7 +43,7 @@ def enframe_shortstr(buf, value):
 
 def deframe_longstr(buf, offset):  # -> value, bytes_eaten
     ln, = struct.unpack_from('!I', buf, offset)
-    return buf[offset+4:offset+4+ln].tobytes(), 4 + ln
+    return buf[offset+4:offset+4+ln], 4 + ln
 
 
 def enframe_longstr(buf, value):
@@ -90,7 +90,7 @@ def deframe_field_value(buf, offset):  # -> (value, type), bytes_consumed
     start_offset = offset
     field_type = buf[offset]
     if six.PY3:
-        field_type = bytes([field_type])    #todo slow
+        field_type = chr(field_type)
     offset += 1
 
     if field_type not in FIELD_TYPES.keys():
@@ -161,7 +161,7 @@ def deframe_table(buf, start_offset): # -> (table, bytes_consumed)
         offset += ln
         fv, delta = deframe_field_value(buf, offset)
         offset += delta
-        fields.append((field_name, fv))
+        fields.append((field_name.tobytes(), fv))
 
     if offset > (start_offset+table_length+4):
         raise ValueError('Table turned out longer than expected! Found %s bytes expected %s',
diff --git a/coolamqp/objects.py b/coolamqp/objects.py
index e9cd9c6c27226a023d9e9c962e21aa904cbfe1a8..b476f5f11b483c09e715af01a7da43e4bdeed880 100644
--- a/coolamqp/objects.py
+++ b/coolamqp/objects.py
@@ -36,6 +36,7 @@ class Message(object):
         :param body: stream of octets
         :type body: str (py2) or bytes (py3) or ...
                     a list of memoryviews, if you find the right option. It's disabled by default.
+                    check coolamqp.attaches.consumer.Consumer() for details
         :param properties: AMQP properties to be sent along.
                            default is 'no properties at all'
                            You can pass a dict - it will be passed to MessageProperties,