diff --git a/Lib/email/encoders.py b/Lib/email/encoders.py
index 06016cd..2e77e61 100644
--- a/Lib/email/encoders.py
+++ b/Lib/email/encoders.py
@@ -11,8 +11,8 @@
     'encode_quopri',
     ]
 
-import base64
 
+from base64 import b64encode as _bencode
 from quopri import encodestring as _encodestring
 
 
@@ -23,19 +23,6 @@
     return enc.replace(' ', '=20')
 
 
-def _bencode(s):
-    # We can't quite use base64.encodestring() since it tacks on a "courtesy
-    # newline".  Blech!
-    if not s:
-        return s
-    hasnewline = (s[-1] == '\n')
-    value = base64.encodestring(s)
-    if not hasnewline and value[-1] == '\n':
-        return value[:-1]
-    return value
-
-
-
 def encode_base64(msg):
     """Encode the message's payload in Base64.
 
diff --git a/Lib/email/message.py b/Lib/email/message.py
index e368737..ff262c7 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -8,6 +8,7 @@
 
 import re
 import uu
+import base64
 import binascii
 import warnings
 from io import BytesIO, StringIO
@@ -196,12 +197,14 @@
             return utils._qdecode(payload)
         elif cte == 'base64':
             try:
-                return utils._bdecode(payload)
+                if isinstance(payload, str):
+                    payload = payload.encode('raw-unicode-escape')
+                return base64.b64decode(payload)
+                #return utils._bdecode(payload)
             except binascii.Error:
                 # Incorrect padding
                 pass
         elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
-            payload += '\n'
             in_file = BytesIO(payload.encode('raw-unicode-escape'))
             out_file = BytesIO()
             try:
@@ -212,7 +215,9 @@
                 pass
         # Is there a better way to do this?  We can't use the bytes
         # constructor.
-        return bytes(payload, 'raw-unicode-escape')
+        if isinstance(payload, str):
+            return payload.encode('raw-unicode-escape')
+        return payload
 
     def set_payload(self, payload, charset=None):
         """Set the payload to the given value.
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index ef11e17..15c8325 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -1012,7 +1012,7 @@
 class TestMIMEApplication(unittest.TestCase):
     def test_headers(self):
         eq = self.assertEqual
-        msg = MIMEApplication('\xfa\xfb\xfc\xfd\xfe\xff')
+        msg = MIMEApplication(b'\xfa\xfb\xfc\xfd\xfe\xff')
         eq(msg.get_content_type(), 'application/octet-stream')
         eq(msg['content-transfer-encoding'], 'base64')
 
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index 5771209..8747110 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -55,22 +55,6 @@
 
 # Helpers
 
-def _identity(s):
-    return s
-
-
-def _bdecode(s):
-    # We can't quite use base64.encodestring() since it tacks on a "courtesy
-    # newline".  Blech!
-    if not s:
-        return s
-    value = base64.decodestring(s)
-    if not s.endswith('\n') and value.endswith('\n'):
-        return value[:-1]
-    return value
-
-
-
 def formataddr(pair):
     """The inverse of parseaddr(), this takes a 2-tuple of the form
     (realname, email_address) and returns the string value suitable
