--- dropbear-git/dbutil.c
+++ dropbear-patch/dbutil.c
@@ -79,7 +79,7 @@
 void (*_dropbear_log)(int priority, const char* format, va_list param)
 						= generic_dropbear_log;
 
-#if DEBUG_TRACE
+#if ((DEBUG_TRACE) || (DEBUG_LEVELS))
 int debug_trace = 0;
 #endif
 
@@ -156,7 +156,7 @@
 }
 
 
-#if DEBUG_TRACE
+#if ((DEBUG_TRACE) || (DEBUG_LEVELS))
 
 static double debug_start_time = -1;
 
@@ -185,11 +185,30 @@
 	}
 	return nowf - debug_start_time;
 }
+#endif
 
+#if DEBUG_LEVELS
+void dropbear_tracelevel(int level,const char* format, ...) {
+	va_list param;
+
+	if (level > debug_trace) {
+		return;
+	}
+
+	va_start(param, format);
+	fprintf(stderr, "TRACE  (%d) %f: ", getpid(), time_since_start());
+	vfprintf(stderr, format, param);
+	fprintf(stderr, "\n");
+	va_end(param);
+}
+#endif /* DEBUG_LEVELS */
+
+#if DEBUG_TRACE
 void dropbear_trace(const char* format, ...) {
 	va_list param;
 
-	if (!debug_trace) {
+	/* when DEBUG_LEVELS is not set, debug_trace will be 9 when -v is used */
+	if (debug_trace < 4) {
 		return;
 	}
 
@@ -208,7 +227,7 @@
 		trace_env = getenv("DROPBEAR_TRACE2") ? 1 : 0;
 	}
 
-	if (!(debug_trace && trace_env)) {
+	if (debug_trace < 4 || trace_env == 0) {
 		return;
 	}
 
