diff --git a/lib/gen_print.py b/lib/gen_print.py
index ee39fec..227c942 100755
--- a/lib/gen_print.py
+++ b/lib/gen_print.py
@@ -1040,6 +1040,11 @@
     if linefeed:
         buffer = "\n"
 
+    if robot_env:
+        suite_name = BuiltIn().get_variable_value("${suite_name}")
+        buffer += sindent(sprint_time("Running test suite \"" + suite_name +
+                          "\".\n"), indent)
+
     buffer += sindent(sprint_time() + "Running " + pgm_name + ".\n", indent)
     buffer += sindent(sprint_time() + "Program parameter values, etc.:\n\n",
                       indent)
@@ -1082,6 +1087,17 @@
     except AttributeError:
         pass
 
+    if robot_env:
+        # Get value of global parm_list.
+        parm_list = BuiltIn().get_variable_value("${parm_list}")
+
+        for parm in parm_list:
+            parm_value = BuiltIn().get_variable_value("${" + parm + "}")
+            buffer += sprint_varx(parm, parm_value, 0, indent, loc_col1_width)
+
+        # Setting global program_pid.
+        BuiltIn().set_global_variable("${program_pid}", os.getpid())
+
     if linefeed:
         buffer += "\n"
 
@@ -1092,7 +1108,8 @@
 
 ###############################################################################
 def sprint_error_report(error_text="\n",
-                        indent=2):
+                        indent=2,
+                        format=None):
 
     r"""
     Return a string with a standardized report which includes the caller's
@@ -1104,8 +1121,23 @@
                                     needed linefeeds.
     indent                          The number of characters to indent each
                                     line of output.
+    format                          Long or short format.  Long includes
+                                    extras like lines of dashes, call stack,
+                                    etc.
     """
 
+    # Process input.
+    indent = int(indent)
+    if format is None:
+        if robot_env:
+            format = 'short'
+        else:
+            format = 'long'
+    error_text = error_text.rstrip('\n') + '\n'
+
+    if format == 'short':
+        return sprint_error(error_text)
+
     buffer = ""
     buffer += sprint_dashes(width=120, char="=")
     buffer += sprint_error(error_text)
@@ -1118,7 +1150,8 @@
     caller_func_name = sprint_func_name(2)
     if caller_func_name.endswith("print_error_report"):
         stack_frame_ix += 1
-    buffer += sprint_call_stack(indent, stack_frame_ix)
+    if not robot_env:
+        buffer += sprint_call_stack(indent, stack_frame_ix)
     buffer += sprint_pgm_header(indent)
     buffer += sprint_dashes(width=120, char="=")
 
diff --git a/lib/gen_robot_print.py b/lib/gen_robot_print.py
index ded293b..20120ff 100755
--- a/lib/gen_robot_print.py
+++ b/lib/gen_robot_print.py
@@ -241,28 +241,9 @@
     parameters.
     """
 
-    loc_col1_width = gp.col1_width + indent
-
-    linefeed = 0
-    rprintn()
-    suite_name = BuiltIn().get_variable_value("${suite_name}")
-
-    buffer = "\n"
-    buffer += gp.sindent(gp.sprint_time("Running test suite \"" +
-                                        suite_name + "\".\n"),
-                         indent)
-    buffer += gp.sprint_pgm_header(indent, linefeed)
-
-    # Get value of global parm_list.
-    parm_list = BuiltIn().get_variable_value("${parm_list}")
-
-    buffer += sprint_vars(0, str(indent), str(loc_col1_width), *parm_list)
-    buffer += "\n"
-
-    # Setting global program_pid.
-    BuiltIn().set_global_variable("${program_pid}", os.getpid())
-
-    return buffer
+    # This function is deprecated since the caller may now call the gen_print
+    # version directly.
+    return gp.sprint_pgm_header(indent, linefeed=1)
 
 ###############################################################################
 
@@ -277,33 +258,10 @@
     @{parm_list} variable which contains the names of all program parameters.
     """
 
-    try:
-        error_report_format = int(BuiltIn().get_variable_value(
-            "${error_report_format}"))
-    except TypeError:
-        error_report_format = 0
+    # This function is deprecated.  The caller is advised to call the
+    # gen_print version of this function directly.
 
-    # Currently, supported values for error_report_format are:
-    # 0 - Short form
-    # 1 - Long form
-
-    error_text = error_text.rstrip('\n') + '\n'
-
-    if error_report_format == 0:
-        return gp.sprint_error(error_text)
-
-    buffer = ""
-    buffer += gp.sprint_dashes(width=120, char="=")
-    buffer += gp.sprint_error(error_text)
-
-    indent = 2
-    linefeed = 0
-
-    buffer += sprint_pgm_header(indent)
-
-    buffer += gp.sprint_dashes(width=120, char="=")
-
-    return buffer
+    return gp.sprint_error_report(error_text)
 
 ###############################################################################
 
