diff --git a/tests/test_translate_format.sh b/tests/test_translate_ciphers_format.sh
similarity index 95%
rename from tests/test_translate_format.sh
rename to tests/test_translate_ciphers_format.sh
index 241db47..9b3b4bb 100755
--- a/tests/test_translate_format.sh
+++ b/tests/test_translate_ciphers_format.sh
@@ -121,13 +121,13 @@
 # Upon fail, print them to view the differences
 if [ "$Mt_CIPHERS" != "$M_CIPHERS" ]
 then
-    echo "MBED Translated:   $M_CIPHERS"
-    echo "MBED Original:     $Mt_CIPHERS"
+    echo "MBEDTLS Translated:   $M_CIPHERS"
+    echo "MBEDTLS Original:     $Mt_CIPHERS"
 fi
 if [ "$Gt_CIPHERS" != "$G_CIPHERS" ]
 then
-    echo "GNU Translated:    $G_CIPHERS"
-    echo "GNU Original:      $Gt_CIPHERS"
+    echo "GNUTLS Translated:    $G_CIPHERS"
+    echo "GNUTLS Original:      $Gt_CIPHERS"
 fi
 if [ "$Ot_CIPHERS" != "$O_CIPHERS" ]
 then
diff --git a/tests/test_translate_names.py b/tests/test_translate_ciphers_names.py
similarity index 97%
rename from tests/test_translate_names.py
rename to tests/test_translate_ciphers_names.py
index d018c10..70b2a8f 100755
--- a/tests/test_translate_names.py
+++ b/tests/test_translate_ciphers_names.py
@@ -21,7 +21,7 @@
 #
 # Test translate_ciphers.py by running every MBedTLS ciphersuite name
 # combination through the translate functions and comparing them to their
-# correct GNU or OpenSSL counterpart.
+# correct GNUTLS or OpenSSL counterpart.
 
 from translate_ciphers import *
 
@@ -170,21 +170,17 @@
         "PSK-3DES-EDE-CBC-SHA",
         "PSK-AES128-CBC-SHA",
         "PSK-AES256-CBC-SHA",
-
-        #"PSK-DES-CBC3-SHA",
-        #"PSK-AES128-SHA",
-        #"PSK-AES256-SHA",
     ]
 
     for i in range(len(m_ciphers)):
 
-        g = translate_gnu(m_ciphers[i])
+        g = translate_gnutls(m_ciphers[i])
         assert_equal(g, g_ciphers[i])
 
         o = translate_ossl(m_ciphers[i])
         assert_equal(o, o_ciphers[i])
 
-def test_mbed_ossl_common():
+def test_mbedtls_ossl_common():
     m_ciphers = [
         "TLS-ECDH-ECDSA-WITH-NULL-SHA",
         "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA",
@@ -235,7 +231,6 @@
 
         "DES-CBC-SHA",
         "EDH-RSA-DES-CBC-SHA",
-        #"DHE-RSA-DES-CBC-SHA",
 
         "ECDHE-ARIA256-GCM-SHA384",
         "DHE-RSA-ARIA256-GCM-SHA384",
@@ -260,7 +255,7 @@
         o = translate_ossl(m_ciphers[i])
         assert_equal(o, o_ciphers[i])
 
-def test_mbed_gnu_common():
+def test_mbedtls_gnutls_common():
     m_ciphers = [
         "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256",
         "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384",
@@ -442,9 +437,9 @@
 
     for i in range(len(m_ciphers)):
 
-        g = translate_gnu(m_ciphers[i])
+        g = translate_gnutls(m_ciphers[i])
         assert_equal(g, g_ciphers[i])
 
 test_all_common()
-test_mbed_ossl_common()
-test_mbed_gnu_common()
+test_mbedtls_ossl_common()
+test_mbedtls_gnutls_common()
diff --git a/tests/translate_ciphers.py b/tests/translate_ciphers.py
index d6b604d..0f76cf5 100755
--- a/tests/translate_ciphers.py
+++ b/tests/translate_ciphers.py
@@ -19,20 +19,20 @@
 #
 # Purpose
 #
-# Translate ciphersuite names in MBedTLS format to OpenSSL and GNU
+# Translate ciphersuite names in MBedTLS format to OpenSSL and GNUTLS
 # standards.
 #
 # Format and analyse strings past in via input arguments to match
 # the expected strings utilised in compat.sh.
 #
-# sys.argv[1] should be "g" or "o" for GNU or OpenSSL.
+# sys.argv[1] should be "g" or "o" for GNUTLS or OpenSSL.
 # sys.argv[2] should be a string containing one or more
 # ciphersuite names.
 
 import re
 import sys
 
-def translate_gnu(m_cipher):
+def translate_gnutls(m_cipher):
     # Remove "TLS-"
     # Replace "-WITH-" with ":+"
     # Remove "EDE"
@@ -97,23 +97,35 @@
 
     return m_cipher
 
-def format(mode, ciphers):
-    ciphers = ciphers.split()
-    t_ciphers = []
-    if mode == "g":
-        for i in ciphers:
-            t_ciphers.append(translate_gnu(i))
-    if mode == "o":
-        for i in ciphers:
-            t_ciphers.append(translate_ossl(i))
-    return " ".join(t_ciphers)
+def format_ciphersuite_names(mode, ciphers):
+    #ciphers = ciphers.split()
+    #t_ciphers = []
+    #if mode == "g":
+    #    for i in ciphers:
+    #        t_ciphers.append(translate_gnutls(i))
+    #elif mode == "o":
+    #    for i in ciphers:
+    #        t_ciphers.append(translate_ossl(i))
+    #else:
+    #    print("Incorrect use of argument 1, should be either \"g\" or \"o\"")
+    #    exit(1)
+    #return " ".join(t_ciphers)
+    try:
+        t = {"g": translate_gnutls, "o": translate_ossl}[mode]
+        return " ".join(t(c) for c in ciphers.split())
+    except Exception as E:
+        if E != mode: print(E)
+        else: print("Incorrect use of argument 1, should be either \"g\" or \"o\"")
+        sys.exit(1)
 
 def main():
-    # print command line arguments
-    if len(sys.argv) <= 2:
-        exit(1)
-    else:
-        print(format(sys.argv[1], sys.argv[2]))
+    if len(sys.argv) != 3:
+        print("""Incorrect number of arguments. 
+The first argument with either an \"o\" for OpenSSL or \"g\" for GNUTLS.
+The second argument should a single space seperated string of MBedTLS ciphersuite names""")
+        sys.exit(1)
+    print(format_ciphersuite_names(sys.argv[1], sys.argv[2]))
+    sys.exit(0)
 
 if __name__ == "__main__":
     main()
