diff --git a/CHANGELOG.md b/CHANGELOG.md
index ebcaf1646e5ac1a682322f8400cade83234d7eae..1fc8b09bd80ff99f4c9e2a4e5ad3954f72d84ba7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# v0.103:
+
+* bugfix in handling exchange in publish
+
 # v0.102:
 
 * due to noticed behaviour on some Linuxes that changing epoll from another thread
diff --git a/coolamqp/__init__.py b/coolamqp/__init__.py
index db0cbd068e0504976dc1bd7e7a498acd5aa65d72..514f1bedf93ac7619f3500a359167b8fc6fadb0e 100644
--- a/coolamqp/__init__.py
+++ b/coolamqp/__init__.py
@@ -1,2 +1,2 @@
 # coding=UTF-8
-__version__ = '0.102'
+__version__ = '0.103'
diff --git a/coolamqp/clustering/cluster.py b/coolamqp/clustering/cluster.py
index c9d5d592242c456f0951d798adb72dd3d757c091..be6fae14912d06ee582648531cff3eb560ec037d 100644
--- a/coolamqp/clustering/cluster.py
+++ b/coolamqp/clustering/cluster.py
@@ -159,7 +159,7 @@ class Cluster(object):
             exchange = exchange.name.encode('utf8')
         elif exchange is None:
             exchange = b''
-        else:
+        elif isinstance(exchange, six.text_type):
             exchange = exchange.encode('utf8')
 
         if isinstance(routing_key, six.text_type):