diff -up gwibber-867bzr/gwibber/microblog/dispatcher.py.kitchen gwibber-867bzr/gwibber/microblog/dispatcher.py
--- gwibber-867bzr/gwibber/microblog/dispatcher.py.kitchen	2010-09-24 10:02:19.271184999 -0400
+++ gwibber-867bzr/gwibber/microblog/dispatcher.py	2010-09-24 10:02:19.281184999 -0400
@@ -8,6 +8,7 @@ import qaiku, friendfeed, digg, buzz, pi
 import foursquare, gowalla
 import sqlite3, mx.DateTime, re, uuid
 import urlshorter, storage, network, util, config
+from kitchen.text.converters import to_unicode
 
 from util import log
 from util import resources
@@ -86,9 +87,9 @@ def perform_operation((account, opname, 
     if message_data is not None:
       for m in message_data:
         if "mid" in m:
-          m["id"] = uuid.uuid1().hex
-          m["operation"] = opname
-          m["stream"] = stream
+          m["id"] = to_unicode(uuid.uuid1().hex)
+          m["operation"] = to_unicode(opname)
+          m["stream"] = to_unicode(stream)
           m["transient"] = transient
           m["rtl"] = util.isRTL(re.sub(text_cleaner, "", m["text"].decode('utf-8')))
 
diff -up gwibber-867bzr/gwibber/microblog/gowalla.py.kitchen gwibber-867bzr/gwibber/microblog/gowalla.py
--- gwibber-867bzr/gwibber/microblog/gowalla.py.kitchen	2010-09-24 10:06:11.229185000 -0400
+++ gwibber-867bzr/gwibber/microblog/gowalla.py	2010-09-24 10:11:18.173185001 -0400
@@ -26,6 +26,7 @@ import network, json, util, htmllib, re
 from util import log
 from util import exceptions
 from gettext import lgettext as _
+from kitchen.text.converters import to_unicode
 log.logger.name = "Gowalla"
 
 PROTOCOL_INFO = {
@@ -60,47 +61,47 @@ class Client:
   def _message(self, data):
 
     m = {}; 
-    m["mid"] = str(data["user"]["first_name"]) + str(data["user"]["last_name"])
-    m["service"] = "gowalla"
+    m["mid"] = to_unicode(str(data["user"]["first_name"]) + str(data["user"]["last_name"]))
+    m["service"] = u"gowalla"
     m["account"] = self.account["id"]
     m["time"] = util.parsetime(data["created_at"])
 
-    messagetext = ""
-    text = ""
+    messagetext = u""
+    text = u""
     if data.has_key("spot"):
         if data.has_key("message"):
             messagetext += data["message"] + "<br/><br/>"
             text += data["message"] + "\n"
-	m["url"] = "<a href='http://gowalla.com%s'>" % data["spot"]["url"]
-	m["url"] = "http://gowalla.com%s" % data["spot"]["url"]
-        img = "<table><tr><td><img src='%s'/></td><td>" % data["spot"]["image_url"]
+	m["url"] = to_unicode("<a href='http://gowalla.com%s'>" % data["spot"]["url"])
+	m["url"] = to_unicode("http://gowalla.com%s" % data["spot"]["url"])
+        img = to_unicode("<table><tr><td><img src='%s'/></td><td>" % data["spot"]["image_url"])
         messagetext += img + "Checked in at <a href='" + m["url"] + "'>" + data["spot"]["name"] + "</a>"
 	text += "Checked in at " + data["spot"]["name"]
     else:
         if data.has_key("message"):
-            messagetext += data["message"] + "<br/><br/>"
-            text += data["message"] + "\n"
+            messagetext += to_unicode(data["message"] + "<br/><br/>")
+            text += to_unicode(data["message"] + "\n")
         else:
-            text= "Checked in off the grid"
-            shouttext= "<table><tr><td><img src='http://gowalla.com/favicon.ico'/></td><td>Checked in off the grid"
+            text= u"Checked in off the grid"
+            shouttext= u"<table><tr><td><img src='http://gowalla.com/favicon.ico'/></td><td>Checked in off the grid"
 
     m["text"] = text
-    m["content"] = messagetext + "</td></tr></table>"
-    m["html"] = messagetext + "</td></tr></table>"
+    m["content"] = to_unicode(messagetext + "</td></tr></table>")
+    m["html"] = to_unicode(messagetext + "</td></tr></table>")
 
     m["sender"] = {}
-    m["sender"]["image"] = data["user"]["image_url"]
-    m["sender"]["url"] = "http://gowalla.com%s" % data["user"]["url"]
-    fullname = ""
+    m["sender"]["image"] = to_unicode(data["user"]["image_url"])
+    m["sender"]["url"] = to_unicode("http://gowalla.com%s" % data["user"]["url"])
+    fullname = u""
     if data["user"].has_key("first_name"):
-        fullname += data["user"]["first_name"] + " "
+        fullname += data["user"]["first_name"] + u" "
     if data["user"].has_key("last_name"):
         fullname += data["user"]["last_name"]
 
     m["sender"]["name"] = fullname
     m["sender"]["nick"] = fullname
         
-    m["source"] = "<a href='http://gowalla.com/'>Gowalla</a>"
+    m["source"] = u"<a href='http://gowalla.com/'>Gowalla</a>"
 
     return m
 
diff -up gwibber-867bzr/gwibber/microblog/identica.py.kitchen gwibber-867bzr/gwibber/microblog/identica.py
--- gwibber-867bzr/gwibber/microblog/identica.py.kitchen	2010-09-23 09:42:12.000000000 -0400
+++ gwibber-867bzr/gwibber/microblog/identica.py	2010-09-24 10:02:19.282184999 -0400
@@ -2,6 +2,7 @@ import re, network, util
 from util import log
 from util import exceptions
 from gettext import lgettext as _
+from kitchen.text.converters import to_unicode
 log.logger.name = "Identi.ca"
 
 PROTOCOL_INFO = {
@@ -53,28 +54,28 @@ class Client:
   def _common(self, data):
     m = {}
     try:
-      m["mid"] = str(data["id"])
-      m["service"] = "identica"
+      m["mid"] = to_unicode(str(data["id"]))
+      m["service"] = u"identica"
       m["account"] = self.account["id"]
       m["time"] = util.parsetime(data["created_at"])
-      m["source"] = data.get("source", False)
-      m["text"] = data["text"]
+      m["source"] = to_unicode(data.get("source", False))
+      m["text"] = to_unicode(data["text"])
       m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
   
-      m["html"] = util.linkify(m["text"],
+      m["html"] = to_unicode(util.linkify(m["text"],
         ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % URL_PREFIX),
-        (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)))
+        (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX))))
   
-      m["content"] = util.linkify(m["text"],
+      m["content"] = to_unicode(util.linkify(m["text"],
         ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
-        (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])))
+        (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"]))))
 
       images = []
       if data.get("attachments", 0):
         for a in data["attachments"]:
           mime = a.get("mimetype", "")
           if mime and mime.startswith("image") and a.get("url", 0):
-            images.append({"src": a["url"], "url": a["url"]})
+            images.append({"src": to_unicode(a["url"]), "url": to_unicode(a["url"])})
 
       images.extend(util.imgpreview(m["text"]))
 
@@ -91,33 +92,33 @@ class Client:
     if data.get("in_reply_to_status_id", 0) and data.get("in_reply_to_screen_name", 0):
       m["reply"] = {}
       m["reply"]["id"] = data["in_reply_to_status_id"]
-      m["reply"]["nick"] = data["in_reply_to_screen_name"]
-      m["reply"]["url"] = "/".join((URL_PREFIX, "notice", str(m["reply"]["id"])))
+      m["reply"]["nick"] = to_unicode(data["in_reply_to_screen_name"])
+      m["reply"]["url"] = to_unicode("/".join((URL_PREFIX, "notice", str(m["reply"]["id"]))))
 
     user = data.get("user", data.get("sender", 0))
     
     m["sender"] = {}
-    m["sender"]["name"] = user["name"]
-    m["sender"]["nick"] = user["screen_name"]
+    m["sender"]["name"] = to_unicode(user["name"])
+    m["sender"]["nick"] = to_unicode(user["screen_name"])
     m["sender"]["id"] = user["id"]
-    m["sender"]["location"] = user["location"]
+    m["sender"]["location"] = to_unicode(user["location"])
     m["sender"]["followers"] = user["followers_count"]
-    m["sender"]["image"] = user["profile_image_url"]
-    m["sender"]["url"] = "/".join((URL_PREFIX, m["sender"]["nick"]))
+    m["sender"]["image"] = to_unicode(user["profile_image_url"])
+    m["sender"]["url"] = to_unicode("/".join((URL_PREFIX, m["sender"]["nick"])))
     m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
-    m["url"] = "/".join((URL_PREFIX, "notice", m["mid"]))
+    m["url"] = to_unicode("/".join((URL_PREFIX, "notice", m["mid"])))
     return m
 
   def _private(self, data):
     m = self._message(data)
     m["private"] = True
     m["recipient"] = {}
-    m["recipient"]["name"] = data["recipient"]["name"]
-    m["recipient"]["nick"] = data["recipient"]["screen_name"]
+    m["recipient"]["name"] = to_unicode(data["recipient"]["name"])
+    m["recipient"]["nick"] = to_unicode(data["recipient"]["screen_name"])
     m["recipient"]["id"] = data["recipient"]["id"]
-    m["recipient"]["image"] = data["recipient"]["profile_image_url"]
-    m["recipient"]["location"] = data["recipient"]["location"]
-    m["recipient"]["url"] = "/".join((URL_PREFIX, m["recipient"]["nick"]))
+    m["recipient"]["image"] = to_unicode(data["recipient"]["profile_image_url"])
+    m["recipient"]["location"] = to_unicode(data["recipient"]["location"])
+    m["recipient"]["url"] = to_unicode("/".join((URL_PREFIX, m["recipient"]["nick"])))
     m["recipient"]["is_me"] = m["recipient"]["nick"].lower() == self.account["username"].lower()
     return m
 
@@ -127,14 +128,14 @@ class Client:
     if data["to_user_id"]:
       m["reply"] = {}
       m["reply"]["id"] = data["to_user_id"]
-      m["reply"]["nick"] = data["to_user"]
+      m["reply"]["nick"] = to_unicode(data["to_user"])
 
     m["sender"] = {}
-    m["sender"]["nick"] = data["from_user"]
+    m["sender"]["nick"] = to_unicode(data["from_user"])
     m["sender"]["id"] = data["from_user_id"]
-    m["sender"]["image"] = data["profile_image_url"]
-    m["sender"]["url"] = "/".join((URL_PREFIX, m["sender"]["nick"]))
-    m["url"] = "/".join((URL_PREFIX, "notice", str(m["mid"])))
+    m["sender"]["image"] = to_unicode(data["profile_image_url"])
+    m["sender"]["url"] = to_unicode("/".join((URL_PREFIX, m["sender"]["nick"])))
+    m["url"] = to_unicode("/".join((URL_PREFIX, "notice", str(m["mid"]))))
     return m
 
   def _get(self, path, parse="message", post=False, single=False, **args):
diff -up gwibber-867bzr/gwibber/microblog/twitter.py.kitchen gwibber-867bzr/gwibber/microblog/twitter.py
--- gwibber-867bzr/gwibber/microblog/twitter.py.kitchen	2010-09-23 09:42:12.000000000 -0400
+++ gwibber-867bzr/gwibber/microblog/twitter.py	2010-09-24 10:02:19.284184999 -0400
@@ -3,6 +3,7 @@ import gnomekeyring
 from oauth import oauth
 from util import log, exceptions
 from gettext import lgettext as _
+from kitchen.text.converters import to_unicode
 log.logger.name = "Twitter"
 
 PROTOCOL_INFO = {
@@ -72,19 +73,19 @@ class Client:
     m = {}; 
     try:
       m["mid"] = str(data["id"])
-      m["service"] = "twitter"
+      m["service"] = u"twitter"
       m["account"] = self.account["id"]
       m["time"] = util.parsetime(data["created_at"])
-      m["text"] = unescape(data["text"])
+      m["text"] = to_unicode(unescape(data["text"]))
       m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
 
-      m["html"] = util.linkify(data["text"],
+      m["html"] = to_unicode(util.linkify(data["text"],
         ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % URL_PREFIX),
-        (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)), escape=False)
+        (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)), escape=False))
 
-      m["content"] = util.linkify(data["text"],
+      m["content"] = to_unicode(util.linkify(data["text"],
         ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
-        (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])), escape=False)
+        (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])), escape=False))
 
       images = util.imgpreview(m["text"])
       if images:
@@ -96,13 +97,13 @@ class Client:
 
   def _user(self, user):
     return {
-        "name": user["name"],
-        "nick": user["screen_name"],
+        "name": to_unicode(user["name"]),
+        "nick": to_unicode(user["screen_name"]),
         "id": user["id"],
-        "location": user["location"],
+        "location": to_unicode(user["location"]),
         "followers": user.get("followers", None),
-        "image": user["profile_image_url"],
-        "url": "/".join((URL_PREFIX, user["screen_name"])),
+        "image": to_unicode(user["profile_image_url"]),
+        "url": to_unicode("/".join((URL_PREFIX, user["screen_name"]))),
         "is_me": user["screen_name"] == self.account["username"],
     }
     
@@ -116,11 +117,11 @@ class Client:
     if "in_reply_to_status_id" in data and data["in_reply_to_status_id"]:
       m["reply"] = {}
       m["reply"]["id"] = data["in_reply_to_status_id"]
-      m["reply"]["nick"] = data["in_reply_to_screen_name"]
-      m["reply"]["url"] = "/".join((URL_PREFIX, m["reply"]["nick"], "statuses", str(m["reply"]["id"])))
+      m["reply"]["nick"] = to_unicode(data["in_reply_to_screen_name"])
+      m["reply"]["url"] = to_unicode("/".join((URL_PREFIX, m["reply"]["nick"], "statuses", str(m["reply"]["id"]))))
 
     m["sender"] = self._user(data["user"] if "user" in data else data["sender"])
-    m["url"] = "/".join((m["sender"]["url"], "statuses", str(m["mid"])))
+    m["url"] = to_unicode("/".join((m["sender"]["url"], "statuses", str(m["mid"]))))
 
     return m
 
@@ -129,12 +130,12 @@ class Client:
     m["private"] = True
     
     m["recipient"] = {}
-    m["recipient"]["name"] = data["recipient"]["name"]
-    m["recipient"]["nick"] = data["recipient"]["screen_name"]
+    m["recipient"]["name"] = to_unicode(data["recipient"]["name"])
+    m["recipient"]["nick"] = to_unicode(data["recipient"]["screen_name"])
     m["recipient"]["id"] = data["recipient"]["id"]
-    m["recipient"]["image"] = data["recipient"]["profile_image_url"]
-    m["recipient"]["location"] = data["recipient"]["location"]
-    m["recipient"]["url"] = "/".join((URL_PREFIX, m["recipient"]["nick"]))
+    m["recipient"]["image"] = to_unicode(data["recipient"]["profile_image_url"])
+    m["recipient"]["location"] = to_unicode(data["recipient"]["location"])
+    m["recipient"]["url"] = to_unicode("/".join((URL_PREFIX, m["recipient"]["nick"])))
     m["recipient"]["is_me"] = m["recipient"]["nick"] == self.account["username"]
 
     return m
@@ -145,37 +146,37 @@ class Client:
     if data["to_user_id"]:
       m["reply"] = {}
       m["reply"]["id"] = data["to_user_id"]
-      m["reply"]["nick"] = data["to_user"]
+      m["reply"]["nick"] = to_unicode(data["to_user"])
 
     m["sender"] = {}
-    m["sender"]["nick"] = data["from_user"]
+    m["sender"]["nick"] = to_unicode(data["from_user"])
     m["sender"]["id"] = data["from_user_id"]
-    m["sender"]["image"] = data["profile_image_url"]
-    m["sender"]["url"] = "/".join((URL_PREFIX, m["sender"]["nick"]))
+    m["sender"]["image"] = to_unicode(data["profile_image_url"])
+    m["sender"]["url"] = to_unicode("/".join((URL_PREFIX, m["sender"]["nick"])))
     m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
-    m["url"] = "/".join((m["sender"]["url"], "statuses", str(m["mid"])))
+    m["url"] = to_unicode("/".join((m["sender"]["url"], "statuses", str(m["mid"]))))
     return m
 
   def _list(self, data):
     return {
         "mid": data["id"],
-        "service": "twitter",
+        "service": u"twitter",
         "account": self.account["id"],
         "time": 0,
-        "text": data["description"],
-        "html": data["description"],
-        "content": data["description"],
-        "url": "/".join((URL_PREFIX, data["uri"])),
-        "sender": self._user(data["user"]),
-        "name": data["name"],
-        "nick": data["slug"],
+        "text": to_unicode(data["description"]),
+        "html": to_unicode(data["description"]),
+        "content": to_unicode(data["description"]),
+        "url": to_unicode("/".join((URL_PREFIX, data["uri"]))),
+        "sender": to_unicode(self._user(data["user"])),
+        "name": to_unicode(data["name"]),
+        "nick": to_unicode(data["slug"]),
         "key": data["slug"],
-        "full": data["full_name"],
-        "uri": data["uri"],
+        "full": to_unicode(data["full_name"]),
+        "uri": to_unicode(data["uri"]),
         "mode": data["mode"],
         "members": data["member_count"],
         "followers": data["subscriber_count"],
-        "kind": "list",
+        "kind": u"list",
     }
 
   def _get(self, path, parse="message", post=False, single=False, **args):
