diff --git a/procps/nmeter.c b/procps/nmeter.c
index d6c46c6..33de379 100644
--- a/procps/nmeter.c
+++ b/procps/nmeter.c
@@ -21,7 +21,7 @@
 //usage:#define nmeter_full_usage "\n\n"
 //usage:       "Monitor system in real time"
 //usage:     "\n"
-//usage:     "\n -d MSEC	Milliseconds between updates (default:1000)"
+//usage:     "\n -d MSEC	Milliseconds between updates, default:1000, none:-1"
 //usage:     "\n"
 //usage:     "\nFormat specifiers:"
 //usage:     "\n %Nc or %[cN]	CPU. N - bar size (default:10)"
@@ -86,7 +86,7 @@
 	char final_char;
 	char *cur_outbuf;
 	int delta;
-	int deltanz;
+	unsigned deltanz;
 	struct timeval tv;
 #define first_proc_file proc_stat
 	proc_file proc_stat;	// Must match the order of proc_name's!
@@ -101,8 +101,6 @@
 #define is26               (G.is26              )
 #define need_seconds       (G.need_seconds      )
 #define cur_outbuf         (G.cur_outbuf        )
-#define delta              (G.delta             )
-#define deltanz            (G.deltanz           )
 #define tv                 (G.tv                )
 #define proc_stat          (G.proc_stat         )
 #define proc_loadavg       (G.proc_loadavg      )
@@ -114,7 +112,7 @@
 	SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
 	cur_outbuf = outbuf; \
 	G.final_char = '\n'; \
-	deltanz = delta = 1000000; \
+	G.deltanz = G.delta = 1000000; \
 } while (0)
 
 // We depend on this being a char[], not char* - we take sizeof() of it
@@ -844,9 +842,9 @@
 	}
 
 	if (getopt32(argv, "d:", &opt_d)) {
-		delta = xatou(opt_d) * 1000;
-		deltanz = delta > 0 ? delta : 1;
-		need_seconds = (1000000 % deltanz) != 0;
+		G.delta = xatoi(opt_d) * 1000;
+		G.deltanz = G.delta > 0 ? G.delta : 1;
+		need_seconds = (1000000 % G.deltanz) != 0;
 	}
 	argv += optind;
 
@@ -902,8 +900,8 @@
 				last->next = s;
 			last = s;
 		} else {
-			// %NNNNd or %r option. remove it from string
-			strcpy(prev + strlen(prev), cur);
+			// %r option. remove it from string
+			overlapping_strcpy(prev + strlen(prev), cur);
 			cur = prev;
 		}
 	}
@@ -921,9 +919,9 @@
 	// Generate first samples but do not print them, they're bogus
 	collect_info(first);
 	reset_outbuf();
-	if (delta >= 0) {
+	if (G.delta >= 0) {
 		gettimeofday(&tv, NULL);
-		usleep(delta > 1000000 ? 1000000 : delta - tv.tv_usec%deltanz);
+		usleep(G.delta > 1000000 ? 1000000 : G.delta - tv.tv_usec % G.deltanz);
 	}
 
 	while (1) {
@@ -937,18 +935,18 @@
 		// time resolution ;)
 		// TODO: detect and avoid useless updates
 		// (like: nothing happens except time)
-		if (delta >= 0) {
+		if (G.delta >= 0) {
 			int rem;
 			// can be commented out, will sacrifice sleep time precision a bit
 			gettimeofday(&tv, NULL);
 			if (need_seconds)
-				rem = delta - ((ullong)tv.tv_sec*1000000 + tv.tv_usec) % deltanz;
+				rem = G.delta - ((ullong)tv.tv_sec*1000000 + tv.tv_usec) % G.deltanz;
 			else
-				rem = delta - tv.tv_usec%deltanz;
+				rem = G.delta - (unsigned)tv.tv_usec % G.deltanz;
 			// Sometimes kernel wakes us up just a tiny bit earlier than asked
 			// Do not go to very short sleep in this case
-			if (rem < delta/128) {
-				rem += delta;
+			if (rem < (unsigned)G.delta / 128) {
+				rem += G.delta;
 			}
 			usleep(rem);
 		}
