diff --git a/Lib/encodings/__init__.py b/Lib/encodings/__init__.py
index 87e5745..d72eae9 100644
--- a/Lib/encodings/__init__.py
+++ b/Lib/encodings/__init__.py
@@ -52,7 +52,7 @@
         non-ASCII characters, these must be Latin-1 compatible.
 
     """
-    if isinstance(encoding, str8):
+    if isinstance(encoding, bytes):
         encoding = str(encoding, "ascii")
     chars = []
     punct = False
diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py
index b81e5fa..30f507a 100644
--- a/Lib/encodings/idna.py
+++ b/Lib/encodings/idna.py
@@ -151,9 +151,9 @@
             raise UnicodeError("unsupported error handling "+errors)
 
         if not input:
-            return b"", 0
+            return b'', 0
 
-        result = b""
+        result = buffer()
         labels = dots.split(input)
         if labels and not labels[-1]:
             trailing_dot = b'.'
@@ -165,7 +165,7 @@
                 # Join with U+002E
                 result.extend(b'.')
             result.extend(ToASCII(label))
-        return result+trailing_dot, len(input)
+        return bytes(result+trailing_dot), len(input)
 
     def decode(self, input, errors='strict'):
 
@@ -216,7 +216,7 @@
                 if labels:
                     trailing_dot = b'.'
 
-        result = b""
+        result = buffer()
         size = 0
         for label in labels:
             if size:
@@ -228,7 +228,7 @@
 
         result += trailing_dot
         size += len(trailing_dot)
-        return (result, size)
+        return (bytes(result), size)
 
 class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
     def _buffer_decode(self, input, errors, final):
diff --git a/Lib/encodings/punycode.py b/Lib/encodings/punycode.py
index f08c807..56e6958 100644
--- a/Lib/encodings/punycode.py
+++ b/Lib/encodings/punycode.py
@@ -10,7 +10,7 @@
 
 def segregate(str):
     """3.1 Basic code point segregation"""
-    base = b""
+    base = buffer()
     extended = set()
     for c in str:
         if ord(c) < 128:
@@ -18,7 +18,7 @@
         else:
             extended.add(c)
     extended = sorted(extended)
-    return (base, extended)
+    return bytes(base), extended
 
 def selective_len(str, max):
     """Return the length of str, considering only characters below max."""
@@ -78,13 +78,13 @@
 digits = b"abcdefghijklmnopqrstuvwxyz0123456789"
 def generate_generalized_integer(N, bias):
     """3.3 Generalized variable-length integers"""
-    result = b""
+    result = buffer()
     j = 0
     while 1:
         t = T(j, bias)
         if N < t:
             result.append(digits[N])
-            return result
+            return bytes(result)
         result.append(digits[t + ((N - t) % (36 - t))])
         N = (N - t) // (36 - t)
         j += 1
@@ -107,13 +107,13 @@
 def generate_integers(baselen, deltas):
     """3.4 Bias adaptation"""
     # Punycode parameters: initial bias = 72, damp = 700, skew = 38
-    result = b""
+    result = buffer()
     bias = 72
     for points, delta in enumerate(deltas):
         s = generate_generalized_integer(delta, bias)
         result.extend(s)
         bias = adapt(delta, points==0, baselen+points+1)
-    return result
+    return bytes(result)
 
 def punycode_encode(text):
     base, extended = segregate(text)
