diff --git a/scripts/data_files/error.fmt b/scripts/data_files/error.fmt
index 6360705..c54ab90 100644
--- a/scripts/data_files/error.fmt
+++ b/scripts/data_files/error.fmt
@@ -42,10 +42,66 @@
 
 HEADER_INCLUDED
 
+typedef struct mbedtls_error
+{
+    int code;                   /* Error code. */
+    const char * description;   /* Error description. */
+} mbedtls_error_t;
+
+static mbedtls_error_t high_level_errors[] =
+{
+HIGH_LEVEL_CODE_CHECKS
+};
+
+#define NUM_HIGH_LEVEL_ERRORS ( sizeof(high_level_errors)/sizeof(mbedtls_error_t) )
+
+static mbedtls_error_t low_level_errors[] =
+{
+LOW_LEVEL_CODE_CHECKS
+};
+
+#define NUM_LOW_LEVEL_ERRORS  ( sizeof(low_level_errors)/sizeof(mbedtls_error_t) )
+
+const char * mbedtls_high_level_strerr( int error_code )
+{
+    size_t i;
+    const char *error_description = NULL;
+
+    for(i = 0; i < NUM_HIGH_LEVEL_ERRORS; i++ )
+    {
+        if( high_level_errors[i].code == error_code )
+        {
+            error_description = high_level_errors[i].description;
+            break;
+        }
+    }
+
+    return error_description;
+}
+
+const char * mbedtls_low_level_strerr( int error_code )
+{
+    size_t i;
+    const char *error_description = NULL;
+
+    for(i = 0; i < NUM_LOW_LEVEL_ERRORS; i++ )
+    {
+        if( low_level_errors[i].code == error_code )
+        {
+            error_description = low_level_errors[i].description;
+            break;
+        }
+    }
+
+    return error_description;
+}
+
 void mbedtls_strerror( int ret, char *buf, size_t buflen )
 {
     size_t len;
     int use_ret;
+    const char * high_level_error_description = NULL;
+    const char * low_level_error_description = NULL;
 
     if( buflen == 0 )
         return;
@@ -59,14 +115,18 @@
     {
         use_ret = ret & 0xFF80;
 
-        // High level error codes
-        //
-        // BEGIN generated code
-HIGH_LEVEL_CODE_CHECKS
-        // END generated code
+        // Translate high level error code.
+        high_level_error_description = mbedtls_high_level_strerr(use_ret);
 
-        if( strlen( buf ) == 0 )
+        if( high_level_error_description == NULL )
             mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret );
+        else
+            mbedtls_snprintf( buf, buflen, "%s", high_level_error_description );
+
+        // Early return in case of a fatal error - do not try to translate low
+        // level code.
+        if(use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE))
+            return;
     }
 
     use_ret = ret & ~0xFF80;
@@ -90,16 +150,13 @@
         buflen -= len + 3;
     }
 
-    // Low level error codes
-    //
-    // BEGIN generated code
-LOW_LEVEL_CODE_CHECKS
-    // END generated code
+    // Translate low level error code.
+    low_level_error_description = mbedtls_low_level_strerr( use_ret );
 
-    if( strlen( buf ) != 0 )
-        return;
-
-    mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret );
+    if( low_level_error_description == NULL )
+        mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret );
+    else
+        mbedtls_snprintf( buf, buflen, "%s", low_level_error_description );
 }
 
 #else /* MBEDTLS_ERROR_C */
