diff --git a/src/jim.c b/src/jim.c
index 712ce74f570144ae4072aa2db87c34a5f93f8b2b..be53233c16524a10ec9af069e4fc3027d8fbcbcb 100644
--- a/src/jim.c
+++ b/src/jim.c
@@ -8245,10 +8245,10 @@ int Jim_EvalObjVector(Jim_Interp *interp, int objc, Jim_Obj *const *objv)
             retcode = cmdPtr->cmdProc(interp, objc, objv);
         } else {
             retcode = JimCallProcedure(interp, cmdPtr, objc, objv);
-            if (retcode == JIM_ERR) {
-                JimAppendStackTrace(interp,
-                    Jim_GetString(objv[0], NULL), "?", 1);
-            }
+    if (retcode == JIM_ERR) {
+        JimAppendStackTrace(interp,
+            Jim_GetString(objv[0], NULL), "?", 1);
+    }
         }
     }
     /* Decr refcount of arguments and return the retcode */
@@ -8540,6 +8540,11 @@ int Jim_EvalObj(Jim_Interp *interp, Jim_Obj *scriptObjPtr)
         } else {
             /* Call [unknown] */
             retcode = JimUnknown(interp, argc, argv);
+            if (retcode == JIM_ERR) {
+                JimAppendStackTrace(interp,
+                    Jim_GetString(argv[0], NULL), script->fileName,
+                    token[i-argc*2].linenr);
+            }
         }
         if (retcode != JIM_OK) {
             i -= argc*2; /* point to the command name. */
diff --git a/src/openocd.c b/src/openocd.c
index b2a8ade561065d5c97b1e5c79dcb83dd5b1b5fc5..50eb99e0b1a3c518437dc0a8206e9be98c219d90 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -357,35 +357,20 @@ int jim_command(command_context_t *context, char *line)
 	int retval=ERROR_OK;
 	int retcode=Jim_Eval(interp, line);
 	
-	const char *result;
-	int reslen;
-	result = Jim_GetString(Jim_GetResult(interp), &reslen);
 	if (retcode == JIM_ERR) {
-		int len, i;
-		
-		LOG_USER_N("Runtime error, file \"%s\", line %d:" JIM_NL, interp->errorFileName, interp->errorLine);
-		LOG_USER_N("    %s" JIM_NL,
-		Jim_GetString(interp->result, NULL));
-		Jim_ListLength(interp, interp->stackTrace, &len);
-		for (i = 0; i < len; i += 3) {
-			Jim_Obj *objPtr;
-			const char *proc, *file, *line;
-			
-			Jim_ListIndex(interp, interp->stackTrace, i, &objPtr, JIM_NONE);
-			proc = Jim_GetString(objPtr, NULL);
-			Jim_ListIndex(interp, interp->stackTrace, i+1, &objPtr, JIM_NONE);
-			file = Jim_GetString(objPtr, NULL);
-			Jim_ListIndex(interp, interp->stackTrace, i+2, &objPtr, JIM_NONE);
-			line = Jim_GetString(objPtr, NULL);
-			LOG_USER_N("In procedure '%s' called at file \"%s\", line %s" JIM_NL, proc, file, line);
-	    }
+		Jim_PrintErrorMessage(interp);
 	    long t;
 	    if (Jim_GetLong(interp, Jim_GetVariableStr(interp, "openocd_result", JIM_ERRMSG), &t)==JIM_OK)
 	    {
 	    	return t;
 	    }
 	    return ERROR_FAIL;
-	} else if (retcode == JIM_EXIT) {
+	} 
+	const char *result;
+	int reslen;
+	result = Jim_GetString(Jim_GetResult(interp), &reslen);
+		
+	if (retcode == JIM_EXIT) {
 		/* ignore. */
 	/* exit(Jim_GetExitCode(interp)); */
 	} else {