diff --git a/CHANGELOG b/CHANGELOG
index 83714984beb0ed14dde93d10a2660930de22a5bb..dc89742c2ebd9eff0134047dd110e818c4b30c33 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+0.3.5 Nov 1:
+  o Return unicode decrypted text to avoid encoding issues. Related to
+    #4000.
+
 0.3.4 Oct 18:
   o Add option to choose cipher and digest algorithms when signing and
     encrypting. Closes #4030.
diff --git a/setup.py b/setup.py
index 1e48931ad88bc9ca3481f915c72b0fec23d565e6..778909d0a8d5bae261b8e9e358ef9236ad2fbcb4 100644
--- a/setup.py
+++ b/setup.py
@@ -17,6 +17,7 @@
 """
 setup file for leap.keymanager
 """
+import re
 from setuptools import setup
 from setuptools import find_packages
 
@@ -42,17 +43,82 @@ trove_classifiers = [
     'Topic :: Software Development :: Libraries',
 ]
 
+DOWNLOAD_BASE = ('https://github.com/leapcode/keymanager/'
+                 'archive/%s.tar.gz')
+_versions = versioneer.get_versions()
+VERSION = _versions['version']
+VERSION_FULL = _versions['full']
+DOWNLOAD_URL = ""
+
+# get the short version for the download url
+_version_short = re.findall('\d+\.\d+\.\d+', VERSION)
+if len(_version_short) > 0:
+    VERSION_SHORT = _version_short[0]
+    DOWNLOAD_URL = DOWNLOAD_BASE % VERSION_SHORT
+
+cmdclass = versioneer.get_cmdclass()
+
+
+from setuptools import Command
+
+
+class freeze_debianver(Command):
+    """
+    Freezes the version in a debian branch.
+    To be used after merging the development branch onto the debian one.
+    """
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        proceed = str(raw_input(
+            "This will overwrite the file _version.py. Continue? [y/N] "))
+        if proceed != "y":
+            print("He. You scared. Aborting.")
+            return
+        template = r"""
+# This file was generated by the `freeze_debianver` command in setup.py
+# Using 'versioneer.py' (0.7+) from
+# revision-control system data, or from the parent directory name of an
+# unpacked source archive. Distribution tarballs contain a pre-generated copy
+# of this file.
+
+version_version = '{version}'
+version_full = '{version_full}'
+"""
+        templatefun = r"""
+
+def get_versions(default={}, verbose=False):
+        return {'version': version_version, 'full': version_full}
+"""
+        subst_template = template.format(
+            version=VERSION_SHORT,
+            version_full=VERSION_FULL) + templatefun
+        with open(versioneer.versionfile_source, 'w') as f:
+            f.write(subst_template)
+
+
+cmdclass["freeze_debianver"] = freeze_debianver
+
 # XXX add ref to docs
 
 setup(
     name='leap.keymanager',
-    version=versioneer.get_version(),
-    cmdclass=versioneer.get_cmdclass(),
+    version=VERSION,
+    cmdclass=cmdclass,
     url='https://leap.se/',
+    download_url=DOWNLOAD_URL,
     license='GPLv3+',
     description='LEAP\'s Key Manager',
     author='The LEAP Encryption Access Project',
     author_email='info@leap.se',
+    maintainer='Kali Kaneko',
+    maintainer_email='kali@leap.se',
     long_description=(
         "The Key Manager handles all types of keys to allow for "
         "point-to-point encryption between parties communicating through "
diff --git a/src/leap/keymanager/openpgp.py b/src/leap/keymanager/openpgp.py
index 64123318ae072efe3a93897c88f4cc48c6307076..8ec8639196ecfa8f4dbfe2a106c2875c485e8ede 100644
--- a/src/leap/keymanager/openpgp.py
+++ b/src/leap/keymanager/openpgp.py
@@ -26,6 +26,7 @@ import os
 import re
 import shutil
 import tempfile
+import locale
 
 from gnupg import GPG
 from gnupg.gnupg import GPGUtilities
@@ -482,7 +483,7 @@ class OpenPGPScheme(EncryptionScheme):
         :type verify: OpenPGPKey
 
         :return: The decrypted data.
-        :rtype: str
+        :rtype: unicode
 
         @raise InvalidSignature: Raised if unable to verify the signature with
             C{verify} key.
@@ -504,7 +505,12 @@ class OpenPGPScheme(EncryptionScheme):
                     raise errors.InvalidSignature(
                         'Failed to verify signature with key %s: %s' %
                         (verify.key_id, stderr))
-            return result.data
+
+            # XXX: this is the encoding used by gpg module
+            # https://github.com/isislovecruft/python-gnupg/\
+            #   blob/master/gnupg/_meta.py#L121
+            encoding = locale.getpreferredencoding()
+            return result.data.decode(encoding, 'replace')
 
     def is_encrypted(self, data):
         """