diff --git a/lib/type_id/base32.ex b/lib/type_id/base32.ex
index 5196482..16d4191 100644
--- a/lib/type_id/base32.ex
+++ b/lib/type_id/base32.ex
@@ -1,9 +1,22 @@
 defmodule TypeID.Base32 do
   import Bitwise
 
-  crockford_alphabet = ~c"0123456789abcdefghjkmnpqrstvwxyz"
+  crockford_alphabet = ~c"0123456789ABCDEFGHJKMNPQRSTVWXYZ"
 
-  encoded = for e1 <- crockford_alphabet, e2 <- crockford_alphabet, do: bsl(e1, 8) + e2
+  to_lower_enc = &Enum.map(&1, fn c -> if c in ?A..?Z, do: c - ?A + ?a, else: c end)
+  to_lower_dec =
+    &Enum.map(&1, fn {encoding, value} = pair ->
+      if encoding in ?A..?Z do
+        {encoding - ?A + ?a, value}
+      else
+        pair
+      end
+    end)
+
+  lower = to_lower_enc.(crockford_alphabet)
+
+
+  encoded = for e1 <- lower, e2 <- lower, do: bsl(e1, 8) + e2
 
   to_decode_list = fn alphabet ->
     alphabet = Enum.sort(alphabet)
@@ -14,8 +27,9 @@ defmodule TypeID.Base32 do
   end
 
   {min, decoded} =
-    crockford_alphabet
+    lower
     |> Enum.with_index()
+    |> to_lower_dec.()
     |> to_decode_list.()
 
   @spec encode(binary()) :: binary()
diff --git a/test/type_id_test.exs b/test/type_id_test.exs
index 4b6a67d..3b76643 100644
--- a/test/type_id_test.exs
+++ b/test/type_id_test.exs
@@ -5,14 +5,32 @@ defmodule TypeIDTest do
     test "returns a new TypeID struct" do
       tid = TypeID.new("test")
       assert is_struct(tid, TypeID)
+      assert "test" == TypeID.type(tid)
     end
   end
 
-  describe "from_string!/1" do
-    test "parses TypeIDs as defined by the spec" do
+  describe "type/1" do
+    test "returns the type (prefix) of the given TypeID" do
       tid = TypeID.from_string!("test_01h44had5rfswbvpc383ktj0aa")
       assert "test" == TypeID.type(tid)
-      assert "01890915-34b8-7e78-bdd9-8340e7a9014a" == TypeID.uuid(tid)
+    end
+  end
+
+  describe "suffix/1" do
+    test "returns the base 32 suffix of the given TypeID" do
+      tid = TypeID.from_string!("test_01h44had5rfswbvpc383ktj0aa")
+      assert "01h44had5rfswbvpc383ktj0aa" == TypeID.suffix(tid)
+    end
+  end
+
+  describe "serialization" do
+    test "to_string/1 and from_string!/1 are idempotent" do
+      tid1 = TypeID.from_string!("test_01h44had5rfswbvpc383ktj0aa")
+      tid2 =
+        tid1
+        |> TypeID.to_string()
+        |> TypeID.from_string!()
+      assert tid1 == tid2
     end
   end