diff --git a/src/H5E.c b/src/H5E.c
index dabd3675d6..b8e17a4738 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -85,6 +85,7 @@ static H5E_t *    H5E__get_current_stack(void);
 static herr_t     H5E__set_current_stack(H5E_t *estack);
 static herr_t     H5E__close_stack(H5E_t *err_stack, void **request);
 static ssize_t    H5E__get_num(const H5E_t *err_stack);
+static herr_t     H5E__print2(hid_t err_stack, FILE *stream);
 static herr_t     H5E__append_stack(H5E_t *dst_estack, const H5E_t *src_stack);
 
 /*********************/
@@ -326,10 +327,10 @@ H5E__set_default_auto(H5E_t *stk)
 #endif /* H5_USE_16_API_DEFAULT */
 
     stk->auto_op.func1 = stk->auto_op.func1_default = (H5E_auto1_t)H5Eprint1;
-    stk->auto_op.func2 = stk->auto_op.func2_default = (H5E_auto2_t)H5Eprint2;
+    stk->auto_op.func2 = stk->auto_op.func2_default = (H5E_auto2_t)H5E__print2;
     stk->auto_op.is_default                         = TRUE;
 #else  /* H5_NO_DEPRECATED_SYMBOLS */
-    stk->auto_op.func2 = (H5E_auto2_t)H5Eprint2;
+    stk->auto_op.func2 = (H5E_auto2_t)H5E__print2;
 #endif /* H5_NO_DEPRECATED_SYMBOLS */
 
     stk->auto_data = NULL;
@@ -1447,13 +1448,37 @@ done:
 herr_t
 H5Eprint2(hid_t err_stack, FILE *stream)
 {
-    H5E_t *estack;              /* Error stack to operate on */
     herr_t ret_value = SUCCEED; /* Return value */
 
     /* Don't clear the error stack! :-) */
     FUNC_ENTER_API_NOCLEAR(FAIL)
     /*NO TRACE*/
 
+    /* Print error stack */
+    if ((ret_value = H5E__print2(err_stack, stream)) < 0)
+        HGOTO_ERROR(H5E_ERROR, H5E_CANTLIST, FAIL, "can't display error stack")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Eprint2() */
+
+/*-------------------------------------------------------------------------
+ * Function:    H5E__print2
+ *
+ * Purpose:     Internal helper routine for H5Eprint2.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5E__print2(hid_t err_stack, FILE *stream)
+{
+    H5E_t *estack;              /* Error stack to operate on */
+    herr_t ret_value = SUCCEED; /* Return value */
+
+    FUNC_ENTER_STATIC
+
     /* Need to check for errors */
     if (err_stack == H5E_DEFAULT) {
         if (NULL == (estack = H5E__get_my_stack())) /*lint !e506 !e774 Make lint 'constant value Boolean' in
@@ -1473,8 +1498,8 @@ H5Eprint2(hid_t err_stack, FILE *stream)
         HGOTO_ERROR(H5E_ERROR, H5E_CANTLIST, FAIL, "can't display error stack")
 
 done:
-    FUNC_LEAVE_API(ret_value)
-} /* end H5Eprint2() */
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5E__print2() */
 
 /*-------------------------------------------------------------------------
  * Function:    H5Ewalk2
diff --git a/test/err_compat.c b/test/err_compat.c
index 6f3cfb3fcd..6ad69d8161 100644
--- a/test/err_compat.c
+++ b/test/err_compat.c
@@ -228,16 +228,14 @@ test_error_compat(void)
     if ((sid = H5Screate_simple(2, dims, NULL)) < 0)
         TEST_ERROR;
 
-    /* Use H5Eget_auto2 to query the default printing function.  The library
-     *should indicate H5Eprint2 as the default. */
+    /* Use H5Eget_auto2 to query the default printing function. */
     if (H5Eget_auto2(H5E_DEFAULT, &old_func2, &old_data) < 0)
         TEST_ERROR;
     if (old_data != NULL)
         TEST_ERROR;
-    if (!old_func2 || (H5E_auto2_t)H5Eprint2 != old_func2)
+    if (old_func2 == NULL)
         TEST_ERROR;
 
-    /* This function sets the default printing function to be H5Eprint2. */
     if (H5Eset_auto2(H5E_DEFAULT, old_func2, old_data) < 0)
         TEST_ERROR;
 
@@ -282,12 +280,12 @@ test_error_compat(void)
     if (did >= 0)
         TEST_ERROR;
 
-    /* This function changes the new-style printing function back to the default H5Eprint2. */
-    if (H5Eset_auto2(H5E_DEFAULT, (H5E_auto2_t)H5Eprint2, NULL) < 0)
+    /* This function changes the new-style printing function to the original. */
+    if (H5Eset_auto2(H5E_DEFAULT, old_func2, NULL) < 0)
         TEST_ERROR;
 
-    /* This call should work because the H5Eset_auto2 above restored the default printing
-     * function H5Eprint2.  It simply returns user_print1. */
+    /* This call should work because the H5Eset_auto2 above set the default printing
+     * function to H5Eprint2.  It simply returns user_print1. */
     if ((ret = H5Eget_auto1(&old_func1, &old_data)) < 0)
         TEST_ERROR;
     if (old_data != NULL)
@@ -305,7 +303,7 @@ test_error_compat(void)
         TEST_ERROR;
     if (old_data != NULL)
         TEST_ERROR;
-    if (!old_func2 || (H5E_auto2_t)H5Eprint2 != old_func2)
+    if (old_func2 == NULL)
         TEST_ERROR;
 
     /* Try the printing function. Dataset creation should fail because the file
diff --git a/test/error_test.c b/test/error_test.c
index d1ce00b978..cf1e82c5c7 100644
--- a/test/error_test.c
+++ b/test/error_test.c
@@ -129,7 +129,7 @@ test_error(hid_t file)
         TEST_ERROR;
     if (old_data != NULL)
         TEST_ERROR;
-    if (old_func != (H5E_auto2_t)H5Eprint2)
+    if (old_func == NULL)
         TEST_ERROR;
 
     if (H5Eset_auto2(H5E_DEFAULT, NULL, NULL) < 0)