diff --git a/time.c b/time.c
index 9864118..fe51669 100644
--- a/time.c
+++ b/time.c
@@ -233,11 +233,8 @@
 		switch (tcp->u_error) {
 		default:
 			/* Not interrupted (slept entire interval) */
-			if (tcp->u_arg[1]) {
-				tprintf("%#lx", tcp->u_arg[1]);
-				break;
-			}
-			/* Fall through: print_timespec(NULL) prints "NULL" */
+			printaddr(tcp->u_arg[1]);
+			break;
 		case ERESTARTSYS:
 		case ERESTARTNOINTR:
 		case ERESTARTNOHAND:
@@ -254,40 +251,28 @@
 static void
 printitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness)
 {
-	if (addr == 0)
-		tprints("NULL");
-	else if (!verbose(tcp))
-		tprintf("%#lx", addr);
-	else {
-		int rc;
+	if (bitness == BITNESS_32 || current_time_t_is_compat) {
+		struct {
+			struct timeval32 it_interval, it_value;
+		} itv;
 
-		if (bitness == BITNESS_32 || current_time_t_is_compat) {
-			struct {
-				struct timeval32 it_interval, it_value;
-			} itv;
-
-			rc = umove(tcp, addr, &itv);
-			if (rc >= 0) {
-				tprints("{it_interval=");
-				tprint_timeval32(tcp, &itv.it_interval);
-				tprints(", it_value=");
-				tprint_timeval32(tcp, &itv.it_value);
-				tprints("}");
-			}
-		} else {
-			struct itimerval itv;
-
-			rc = umove(tcp, addr, &itv);
-			if (rc >= 0) {
-				tprints("{it_interval=");
-				tprint_timeval(tcp, &itv.it_interval);
-				tprints(", it_value=");
-				tprint_timeval(tcp, &itv.it_value);
-				tprints("}");
-			}
+		if (!umove_or_printaddr(tcp, addr, &itv)) {
+			tprints("{it_interval=");
+			tprint_timeval32(tcp, &itv.it_interval);
+			tprints(", it_value=");
+			tprint_timeval32(tcp, &itv.it_value);
+			tprints("}");
 		}
-		if (rc < 0)
-			tprints("{...}");
+	} else {
+		struct itimerval itv;
+
+		if (!umove_or_printaddr(tcp, addr, &itv)) {
+			tprints("{it_interval=");
+			tprint_timeval(tcp, &itv.it_interval);
+			tprints(", it_value=");
+			tprint_timeval(tcp, &itv.it_value);
+			tprints("}");
+		}
 	}
 }
 
@@ -300,10 +285,7 @@
 		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[1]);
-		else
-			printitv(tcp, tcp->u_arg[1]);
+		printitv(tcp, tcp->u_arg[1]);
 	}
 	return 0;
 }
@@ -315,10 +297,7 @@
 		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[1]);
-		else
-			printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
+		printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
 	}
 	return 0;
 }
@@ -332,10 +311,7 @@
 		printitv(tcp, tcp->u_arg[1]);
 		tprints(", ");
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[2]);
-		else
-			printitv(tcp, tcp->u_arg[2]);
+		printitv(tcp, tcp->u_arg[2]);
 	}
 	return 0;
 }
@@ -349,10 +325,7 @@
 		printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
 		tprints(", ");
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[2]);
-		else
-			printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32);
+		printitv_bitness(tcp, tcp->u_arg[2], BITNESS_32);
 	}
 	return 0;
 }
@@ -388,7 +361,7 @@
 		int     stbcnt;
 	} tx;
 
-	if (umove(tcp, addr, &tx) < 0)
+	if (umove_or_printaddr(tcp, addr, &tx))
 		return -1;
 
 	tprints("{modes=");
@@ -421,7 +394,7 @@
 	if (current_time_t_is_compat)
 		return tprint_timex32(tcp, addr);
 #endif
-	if (umove(tcp, addr, &tx) < 0)
+	if (umove_or_printaddr(tcp, addr, &tx))
 		return -1;
 
 #if LINUX_VERSION_CODE < 66332
@@ -458,13 +431,7 @@
 static int
 do_adjtimex(struct tcb *tcp, long addr)
 {
-	if (addr == 0)
-		tprints("NULL");
-	else if (syserror(tcp) || !verbose(tcp))
-		tprintf("%#lx", addr);
-	else if (tprint_timex(tcp, addr) < 0)
-		tprints("{...}");
-	if (syserror(tcp))
+	if (tprint_timex(tcp, addr))
 		return 0;
 	tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
 	if (tcp->auxstr)
@@ -572,9 +539,7 @@
 		} un;
 	} sev;
 
-	if (umove(tcp, arg, &sev) < 0)
-		tprints("{...}");
-	else {
+	if (!umove_or_printaddr(tcp, arg, &sev)) {
 		tprintf("{%#x, ", sev.sigev_value);
 		if (sev.sigev_notify == SIGEV_SIGNAL)
 			tprintf("%s, ", signame(sev.sigev_signo));
@@ -606,9 +571,7 @@
 		return;
 	}
 #endif
-	if (umove(tcp, arg, &sev) < 0)
-		tprints("{...}");
-	else {
+	if (!umove_or_printaddr(tcp, arg, &sev)) {
 		tprintf("{%p, ", sev.sigev_value.sival_ptr);
 		if (sev.sigev_notify == SIGEV_SIGNAL)
 			tprintf("%s, ", signame(sev.sigev_signo));
@@ -645,12 +608,7 @@
 		printsigevent(tcp, tcp->u_arg[1]);
 		tprints(", ");
 	} else {
-		int timer_id;
-
-		if (syserror(tcp) || umove(tcp, tcp->u_arg[2], &timer_id) < 0)
-			tprintf("%#lx", tcp->u_arg[2]);
-		else
-			tprintf("{%d}", timer_id);
+		printnum_int(tcp, tcp->u_arg[2], "%d");
 	}
 	return 0;
 }
@@ -658,16 +616,13 @@
 SYS_FUNC(timer_settime)
 {
 	if (entering(tcp)) {
-		tprintf("%#lx, ", tcp->u_arg[0]);
+		tprintf("%d, ", (int) tcp->u_arg[0]);
 		printflags(clockflags, tcp->u_arg[1], "TIMER_???");
 		tprints(", ");
 		printitv(tcp, tcp->u_arg[2]);
 		tprints(", ");
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[3]);
-		else
-			printitv(tcp, tcp->u_arg[3]);
+		printitv(tcp, tcp->u_arg[3]);
 	}
 	return 0;
 }
@@ -675,12 +630,9 @@
 SYS_FUNC(timer_gettime)
 {
 	if (entering(tcp)) {
-		tprintf("%#lx, ", tcp->u_arg[0]);
+		tprintf("%d, ", (int) tcp->u_arg[0]);
 	} else {
-		if (syserror(tcp))
-			tprintf("%#lx", tcp->u_arg[1]);
-		else
-			printitv(tcp, tcp->u_arg[1]);
+		printitv(tcp, tcp->u_arg[1]);
 	}
 	return 0;
 }
