diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c
index 14507ec..eaa2bc4 100644
--- a/firmware/2lib/2ui.c
+++ b/firmware/2lib/2ui.c
@@ -267,7 +267,7 @@
 		}
 
 		/* Delay. */
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	}
 
 	return VB2_SUCCESS;
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c
index 3156fb5..50a6142 100644
--- a/firmware/2lib/2ui_screens.c
+++ b/firmware/2lib/2ui_screens.c
@@ -277,7 +277,7 @@
 		break;
 	}
 
-	ui->start_time = VbExGetTimer();
+	ui->start_time = vb2ex_mtime();
 
 	return VB2_REQUEST_UI_CONTINUE;
 }
@@ -326,24 +326,24 @@
 	if (ui->disable_timer)
 		return VB2_REQUEST_UI_CONTINUE;
 
-	elapsed = VbExGetTimer() - ui->start_time;
+	elapsed = vb2ex_mtime() - ui->start_time;
 
 	/* If we're using short delay, wait 2 seconds and don't beep. */
-	if (use_short && elapsed > 2 * VB_USEC_PER_SEC) {
+	if (use_short && elapsed > 2 * VB2_MSEC_PER_SEC) {
 		VB2_DEBUG("Booting default target after 2s\n");
 		ui->disable_timer = 1;
 		return vb2_ui_menu_select(ui);
 	}
 
 	/* Otherwise, beep at 20 and 20.5 seconds. */
-	if ((ui->beep_count == 0 && elapsed > 20 * VB_USEC_PER_SEC) ||
-	    (ui->beep_count == 1 && elapsed > 20500 * VB_USEC_PER_MSEC)) {
-		VbExBeep(250, 400);
+	if ((ui->beep_count == 0 && elapsed > 20 * VB2_MSEC_PER_SEC) ||
+	    (ui->beep_count == 1 && elapsed > 20 * VB2_MSEC_PER_SEC + 500)) {
+		vb2ex_beep(250, 400);
 		ui->beep_count++;
 	}
 
 	/* Stop after 30 seconds. */
-	if (elapsed > 30 * VB_USEC_PER_SEC) {
+	if (elapsed > 30 * VB2_MSEC_PER_SEC) {
 		VB2_DEBUG("Booting default target after 30s\n");
 		ui->disable_timer = 1;
 		return vb2_ui_menu_select(ui);
diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h
index f8a1b4e..4a6fe0d 100644
--- a/firmware/2lib/include/2api.h
+++ b/firmware/2lib/include/2api.h
@@ -1220,4 +1220,37 @@
  */
 uint32_t vb2ex_get_locale_count(void);
 
+/**
+ * Delay for at least the specified number of milliseconds.
+ *
+ * @param msec			Duration in milliseconds.
+ */
+void vb2ex_msleep(uint32_t msec);
+
+/**
+ * Play a beep tone of the specified frequency in Hz for the duration msec.
+ *
+ * This is effectively a sleep call that makes noise.  The implementation may
+ * beep at a fixed frequency if frequency support is not available.  Regardless
+ * of whether any errors occur, the callback is expected to delay for the
+ * specified duration before returning.
+ *
+ * @param msec			Duration of beep in milliseconds.
+ * @param frequency		Sound frequency in Hz.
+ */
+void vb2ex_beep(uint32_t msec, uint32_t frequency);
+
+/*****************************************************************************/
+/* Timer. */
+
+/**
+ * Read a millisecond timer.
+ *
+ * This should have a sufficient number of bits to avoid wraparound for at
+ * least 10 minutes.
+ *
+ * @return Current timer value in milliseconds.
+ */
+uint32_t vb2ex_mtime(void);
+
 #endif  /* VBOOT_REFERENCE_2API_H_ */
diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h
index 135beb9..e3a7989 100644
--- a/firmware/2lib/include/2common.h
+++ b/firmware/2lib/include/2common.h
@@ -17,6 +17,10 @@
 
 struct vb2_public_key;
 
+/* Time conversion constants. */
+#define VB2_USEC_PER_MSEC 1000ULL
+#define VB2_MSEC_PER_SEC 1000ULL
+
 /*
  * Return the min/max of A and B.  This is used in macros which calculate the
  * required buffer size, so can't be turned into a static inline function.
diff --git a/firmware/2lib/include/2return_codes.h b/firmware/2lib/include/2return_codes.h
index 989420a..f94d0b2 100644
--- a/firmware/2lib/include/2return_codes.h
+++ b/firmware/2lib/include/2return_codes.h
@@ -63,8 +63,6 @@
 	 * vboot1-style errors
 	 * TODO: deprecate these once they have all moved over to vboot2 style
 	 */
-	/* VbExBeep() can't make sound in the background */
-	VBERROR_NO_BACKGROUND_SOUND           = 0x10019,
 	/* Peripheral busy. Cannot upgrade firmware at present. */
 	VBERROR_PERIPHERAL_BUSY               = 0x10030,
 	/* Error writing VPD */
diff --git a/firmware/2lib/include/2ui.h b/firmware/2lib/include/2ui.h
index d4d2ba4..eee1565 100644
--- a/firmware/2lib/include/2ui.h
+++ b/firmware/2lib/include/2ui.h
@@ -65,7 +65,7 @@
 
 	/* For developer mode. */
 	int disable_timer;
-	uint64_t start_time;
+	uint32_t start_time;
 	int beep_count;
 
 	/* For manual recovery. */
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index 4931d59..a4eb23d 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -85,49 +85,6 @@
 				  VbSelectAndLoadKernelParams *kparams);
 
 /*****************************************************************************/
-/* Timer and delay */
-
-#define VB_USEC_PER_MSEC	1000ULL
-#define VB_MSEC_PER_SEC		VB_USEC_PER_MSEC
-#define VB_USEC_PER_SEC		(VB_USEC_PER_MSEC * VB_MSEC_PER_SEC)
-
-/**
- * Read a microsecond timer.
- *
- * This should have a sufficient number of bits to avoid wraparound for at
- * least 10 minutes.  A 32-bit value would be plenty, but for historical
- * reasons this returns uint64_t.
- */
-uint64_t VbExGetTimer(void);
-
-/**
- * Delay for at least the specified number of milliseconds.  Should be accurate
- * to within 10% (a requested delay of 1000 ms should result in an actual delay
- * of between 1000 - 1100 ms).
- */
-void VbExSleepMs(uint32_t msec);
-
-/**
- * Play a beep tone of the specified frequency in Hz and duration in msec.
- * This is effectively a VbSleep() variant that makes noise.
- *
- * If the audio codec can run in the background, then:
- *   zero frequency means OFF, non-zero frequency means ON
- *   zero msec means return immediately, non-zero msec means delay (and
- *     then OFF if needed)
- * otherwise,
- *   non-zero msec and non-zero frequency means ON, delay, OFF, return
- *   zero msec or zero frequency means do nothing and return immediately
- *
- * The return value is used by the caller to determine the capabilities. The
- * implementation should always do the best it can if it cannot fully support
- * all features - for example, beeping at a fixed frequency if frequency
- * support is not available.  At a minimum, it must delay for the specified
- * non-zero duration.
- */
-vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency);
-
-/*****************************************************************************/
 /* TPM (from tlcl_stub.h) */
 
 /**
diff --git a/firmware/lib/vboot_audio.c b/firmware/lib/vboot_audio.c
index 5e44606..7f9b5a5 100644
--- a/firmware/lib/vboot_audio.c
+++ b/firmware/lib/vboot_audio.c
@@ -13,7 +13,7 @@
 
 int audio_open_count = 0;	/* Times audio has been opened */
 static int audio_use_short;	/* Use short delay? */
-static uint64_t open_time;	/* Time of last open */
+static uint32_t open_time;	/* Time of last open */
 static int beep_count;		/* Number of beeps so far */
 
 /**
@@ -23,7 +23,7 @@
 {
 	struct vb2_gbb_header *gbb = vb2_get_gbb(ctx);
 
-	open_time = VbExGetTimer(); /* "zero" starts now */
+	open_time = vb2ex_mtime(); /* "zero" starts now */
 	beep_count = 0;
 
 	/*
@@ -44,19 +44,19 @@
  */
 int vb2_audio_looping(void)
 {
-	uint64_t now = VbExGetTimer() - open_time;
+	uint32_t now = vb2ex_mtime() - open_time;
 
 	/* If we're using short delay, wait 2 seconds and don't beep */
 	if (audio_use_short)
-		return (now < 2 * VB_USEC_PER_SEC);
+		return now < 2 * VB2_MSEC_PER_SEC;
 
 	/* Otherwise, beep at 20 and 20.5 seconds */
-	if ((beep_count == 0 && now > 20000 * VB_MSEC_PER_SEC) ||
-	    (beep_count == 1 && now > 20500 * VB_MSEC_PER_SEC)) {
-		VbExBeep(250, 400);
+	if ((beep_count == 0 && now > 20 * VB2_MSEC_PER_SEC) ||
+	    (beep_count == 1 && now > 20 * VB2_MSEC_PER_SEC + 500)) {
+		vb2ex_beep(250, 400);
 		beep_count++;
 	}
 
 	/* Stop after 30 seconds */
-	return (now < 30 * VB_USEC_PER_SEC);
+	return (now < 30 * VB2_MSEC_PER_SEC);
 }
diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c
index 7f6c880..50a4d06 100644
--- a/firmware/lib/vboot_kernel.c
+++ b/firmware/lib/vboot_kernel.c
@@ -320,7 +320,7 @@
 	LoadKernelParams *params, uint32_t min_version,
 	VbSharedDataKernelPart *shpart, struct vb2_workbuf *wb)
 {
-	uint64_t read_us = 0, start_ts;
+	uint32_t read_ms = 0, start_ts;
 	struct vb2_workbuf wblocal = *wb;
 
 	/* Allocate kernel header buffer in workbuf */
@@ -328,13 +328,13 @@
 	if (!kbuf)
 		return VB2_ERROR_LOAD_PARTITION_WORKBUF;
 
-	start_ts = VbExGetTimer();
+	start_ts = vb2ex_mtime();
 	if (VbExStreamRead(stream, KBUF_SIZE, kbuf)) {
 		VB2_DEBUG("Unable to read start of partition.\n");
 		shpart->check_result = VBSD_LKP_CHECK_READ_START;
 		return VB2_ERROR_LOAD_PARTITION_READ_VBLOCK;
 	}
-	read_us += VbExGetTimer() - start_ts;
+	read_ms += vb2ex_mtime() - start_ts;
 
 	if (VB2_SUCCESS !=
 	    vb2_verify_kernel_vblock(ctx, kbuf, KBUF_SIZE, kernel_subkey,
@@ -389,17 +389,19 @@
 	body_readptr += body_copied;
 
 	/* Read the kernel data */
-	start_ts = VbExGetTimer();
+	start_ts = vb2ex_mtime();
 	if (body_toread && VbExStreamRead(stream, body_toread, body_readptr)) {
 		VB2_DEBUG("Unable to read kernel data.\n");
 		shpart->check_result = VBSD_LKP_CHECK_READ_DATA;
 		return VB2_ERROR_LOAD_PARTITION_READ_BODY;
 	}
-	read_us += VbExGetTimer() - start_ts;
-	VB2_DEBUG("read %" PRIu32 " KB in %" PRIu64 " ms at %" PRIu64 " KB/s.\n",
-		  (body_toread + KBUF_SIZE) / 1024, read_us / 1000,
-		  ((uint64_t)(body_toread + KBUF_SIZE) * 1000 * 1000) /
-			  (read_us * 1024));
+	read_ms += vb2ex_mtime() - start_ts;
+	if (read_ms == 0)  /* Avoid division by 0 in speed calculation */
+		read_ms = 1;
+	VB2_DEBUG("read %u KB in %u ms at %u KB/s.\n",
+		  (body_toread + KBUF_SIZE) / 1024, read_ms,
+		  (uint32_t)(((body_toread + KBUF_SIZE) * VB2_MSEC_PER_SEC) /
+			     (read_ms * 1024)));
 
 	/* Get key for preamble/data verification from the keyblock. */
 	struct vb2_public_key data_key;
diff --git a/firmware/lib/vboot_ui_legacy.c b/firmware/lib/vboot_ui_legacy.c
index f128841..1b6a32e 100644
--- a/firmware/lib/vboot_ui_legacy.c
+++ b/firmware/lib/vboot_ui_legacy.c
@@ -219,13 +219,13 @@
 {
 	switch (beep) {
 	case VB_BEEP_FAILED:
-		VbExBeep(250, 200);
+		vb2ex_beep(250, 200);
 		break;
 	default:
 	case VB_BEEP_NOT_ALLOWED:
-		VbExBeep(120, 400);
-		VbExSleepMs(120);
-		VbExBeep(120, 400);
+		vb2ex_beep(120, 400);
+		vb2ex_msleep(120);
+		vb2ex_beep(120, 400);
 		break;
 	}
 }
diff --git a/firmware/lib/vboot_ui_legacy_clamshell.c b/firmware/lib/vboot_ui_legacy_clamshell.c
index e91e090..8054227 100644
--- a/firmware/lib/vboot_ui_legacy_clamshell.c
+++ b/firmware/lib/vboot_ui_legacy_clamshell.c
@@ -130,7 +130,7 @@
 			}
 			VbCheckDisplayKey(ctx, key, disp_current_screen, NULL);
 		}
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	} while (!shutdown_requested);
 
 	return -1;
@@ -182,7 +182,7 @@
 			VbCheckDisplayKey(ctx, key, disp_current_screen, NULL);
 			break;
 		}
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	} while (active);
 
 	/* Back to developer screen */
@@ -253,7 +253,7 @@
 			vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1);
 			VbDisplayScreen(ctx,
 				VB_SCREEN_TO_NORM_CONFIRMED, 0, NULL);
-			VbExSleepMs(5000);
+			vb2ex_msleep(5 * VB2_MSEC_PER_SEC);
 			return VB2_REQUEST_REBOOT;
 		case -1:
 			VB2_DEBUG("shutdown requested\n");
@@ -324,7 +324,7 @@
 				vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1);
 				VbDisplayScreen(ctx,
 					VB_SCREEN_TO_NORM_CONFIRMED, 0, NULL);
-				VbExSleepMs(5000);
+				vb2ex_msleep(5 * VB2_MSEC_PER_SEC);
 				return VB2_REQUEST_REBOOT;
 			case -1:
 				VB2_DEBUG("shutdown requested\n");
@@ -403,7 +403,7 @@
 			break;
 		}
 
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	} while(vb2_audio_looping());
 
  fallout:
@@ -465,7 +465,7 @@
 				  vb2_check_diagnostic_key(ctx, key)) !=
 				  VB2_SUCCESS)
 				return retval;
-			VbExSleepMs(KEY_DELAY_MS);
+			vb2ex_msleep(KEY_DELAY_MS);
 		}
 	}
 
@@ -531,7 +531,7 @@
 		}
 		if (vb2_want_shutdown(ctx, key))
 			return VB2_REQUEST_SHUTDOWN;
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	}
 
 	return VB2_SUCCESS;
diff --git a/firmware/lib/vboot_ui_legacy_menu.c b/firmware/lib/vboot_ui_legacy_menu.c
index bcdd41c..e9e9b4e 100644
--- a/firmware/lib/vboot_ui_legacy_menu.c
+++ b/firmware/lib/vboot_ui_legacy_menu.c
@@ -106,7 +106,7 @@
 static void vb2_flash_screen(struct vb2_context *ctx)
 {
 	VbDisplayMenu(ctx, VB_SCREEN_BLANK, 0, 0, 0);
-	VbExSleepMs(50);
+	vb2ex_msleep(50);
 	vb2_draw_current_screen(ctx);
 }
 
@@ -414,7 +414,7 @@
 	vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1);
 	vb2_change_menu(VB_MENU_TO_NORM_CONFIRMED, 0);
 	vb2_draw_current_screen(ctx);
-	VbExSleepMs(5000);
+	vb2ex_msleep(5 * VB2_MSEC_PER_SEC);
 	return VB2_REQUEST_REBOOT;
 }
 
@@ -837,7 +837,7 @@
 		if (key != 0)
 			vb2_audio_start(ctx);
 
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 
 		/* If dev mode was disabled, loop forever (never timeout) */
 	} while (disable_dev_boot ? 1 : vb2_audio_looping());
@@ -916,7 +916,7 @@
 			if (ret != VB2_REQUEST_UI_CONTINUE)
 				return ret;
 		}
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	}
 }
 
diff --git a/firmware/lib/vboot_ui_legacy_wilco.c b/firmware/lib/vboot_ui_legacy_wilco.c
index fc379ee..59a4968 100644
--- a/firmware/lib/vboot_ui_legacy_wilco.c
+++ b/firmware/lib/vboot_ui_legacy_wilco.c
@@ -109,7 +109,7 @@
 					  &data);
 			break;
 		}
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 
 		if (++blink_count == blinks) {
 			blink_count = 0;
@@ -182,7 +182,7 @@
 						"set.\n"
 						"System will now shutdown\n",
 						NULL, VB_BEEP_FAILED);
-					VbExSleepMs(5000);
+					vb2ex_msleep(5 * VB2_MSEC_PER_SEC);
 					return VB2_REQUEST_SHUTDOWN;
 				}
 			} else {
@@ -198,7 +198,7 @@
 					  VB_SCREEN_CONFIRM_VENDOR_DATA, data);
 			break;
 		}
-		VbExSleepMs(KEY_DELAY_MS);
+		vb2ex_msleep(KEY_DELAY_MS);
 	} while (1);
 	return VB2_SUCCESS;
 }
@@ -285,11 +285,11 @@
 	int button_pressed = 0;
 	vb2_error_t result = VB2_REQUEST_REBOOT;
 	int action_confirmed = 0;
-	uint64_t start_time_us;
+	uint32_t start_time_ms;
 
 	VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_DIAG, 0, NULL);
 
-	start_time_us = VbExGetTimer();
+	start_time_ms = vb2ex_mtime();
 
 	/* We'll loop until the user decides what to do */
 	do {
@@ -334,12 +334,12 @@
 					  NULL);
 			break;
 		}
-		if (VbExGetTimer() - start_time_us >= 30 * VB_USEC_PER_SEC) {
+		if (vb2ex_mtime() - start_time_ms >= 30 * VB2_MSEC_PER_SEC) {
 			VB2_DEBUG("vb2_diagnostics_ui() - timeout\n");
 			break;
 		}
 		if (active) {
-			VbExSleepMs(KEY_DELAY_MS);
+			vb2ex_msleep(KEY_DELAY_MS);
 		}
 	} while (active);
 
diff --git a/firmware/stub/tpm_lite_stub.c b/firmware/stub/tpm_lite_stub.c
index 54accb5..7d3e5d2 100644
--- a/firmware/stub/tpm_lite_stub.c
+++ b/firmware/stub/tpm_lite_stub.c
@@ -268,8 +268,8 @@
 	VB2_DEBUG("response (%d bytes):\n", *response_length);
 	DbgPrintBytes(response, *response_length);
 	VB2_DEBUG("execution time: %dms\n",
-		  (int) ((after.tv_sec - before.tv_sec) * VB_MSEC_PER_SEC +
-			 (after.tv_usec - before.tv_usec) / VB_USEC_PER_MSEC));
+		  (int) ((after.tv_sec - before.tv_sec) * VB2_MSEC_PER_SEC +
+			 (after.tv_usec - before.tv_usec) / VB2_USEC_PER_MSEC));
 #endif
 
 #ifndef NDEBUG
diff --git a/firmware/stub/vboot_api_stub.c b/firmware/stub/vboot_api_stub.c
index f59c400..17f4207 100644
--- a/firmware/stub/vboot_api_stub.c
+++ b/firmware/stub/vboot_api_stub.c
@@ -17,13 +17,12 @@
 #include "vboot_api.h"
 #include "vboot_test.h"
 
-void VbExSleepMs(uint32_t msec)
+void vb2ex_msleep(uint32_t msec)
 {
 }
 
-vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency)
+void vb2ex_beep(uint32_t msec, uint32_t frequency)
 {
-	return VB2_SUCCESS;
 }
 
 vb2_error_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale,
diff --git a/firmware/stub/vboot_api_stub_init.c b/firmware/stub/vboot_api_stub_init.c
index 4688a7e..bd5c0c2 100644
--- a/firmware/stub/vboot_api_stub_init.c
+++ b/firmware/stub/vboot_api_stub_init.c
@@ -13,11 +13,11 @@
 #include "2common.h"
 #include "vboot_api.h"
 
-uint64_t VbExGetTimer(void)
+uint32_t vb2ex_mtime(void)
 {
 	struct timeval tv;
 	gettimeofday(&tv, NULL);
-	return (uint64_t)tv.tv_sec * VB_USEC_PER_SEC + (uint64_t)tv.tv_usec;
+	return tv.tv_sec * VB2_MSEC_PER_SEC + tv.tv_usec / VB2_USEC_PER_MSEC;
 }
 
 vb2_error_t vb2ex_commit_data(struct vb2_context *ctx)
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c
index 13c037c..6f5ca68 100644
--- a/tests/vb2_ui_tests.c
+++ b/tests/vb2_ui_tests.c
@@ -46,9 +46,9 @@
 static int mock_key_count;
 static int mock_key_total;
 
-static uint64_t mock_get_timer_last;
-static uint64_t mock_time;
-static const uint64_t mock_time_start = 31ULL * VB_USEC_PER_SEC;
+static uint32_t mock_get_timer_last;
+static uint32_t mock_time;
+static const uint32_t mock_time_start = 31ULL * VB2_MSEC_PER_SEC;
 static int mock_vbexbeep_called;
 
 static enum vb2_dev_default_boot mock_default_boot;
@@ -273,21 +273,20 @@
 	return 0;
 }
 
-uint64_t VbExGetTimer(void)
+uint32_t vb2ex_mtime(void)
 {
 	mock_get_timer_last = mock_time;
 	return mock_time;
 }
 
-void VbExSleepMs(uint32_t msec)
+void vb2ex_msleep(uint32_t msec)
 {
-	mock_time += msec * VB_USEC_PER_MSEC;
+	mock_time += msec;
 }
 
-vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency)
+void vb2ex_beep(uint32_t msec, uint32_t frequency)
 {
 	mock_vbexbeep_called++;
-	return VB2_SUCCESS;
 }
 
 enum vb2_dev_default_boot vb2_get_dev_boot_target(struct vb2_context *c)
@@ -349,7 +348,7 @@
 		     MOCK_IGNORE, MOCK_IGNORE);
 	displayed_no_extra();
 	TEST_TRUE(mock_get_timer_last - mock_time_start >=
-		  30 * VB_USEC_PER_SEC, "  finished delay");
+		  30 * VB2_MSEC_PER_SEC, "  finished delay");
 	TEST_EQ(mock_vbexbeep_called, 2, "  beeped twice");
 	TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, "  used up mock_vbtlk");
 
@@ -364,7 +363,7 @@
 		     MOCK_IGNORE, MOCK_IGNORE);
 	displayed_no_extra();
 	TEST_TRUE(mock_get_timer_last - mock_time_start >=
-		  30 * VB_USEC_PER_SEC, "  finished delay");
+		  30 * VB2_MSEC_PER_SEC, "  finished delay");
 	TEST_EQ(mock_vbexbeep_called, 2, "  beeped twice");
 	TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, "  used up mock_vbtlk");
 
@@ -377,7 +376,7 @@
 		     MOCK_IGNORE, MOCK_IGNORE);
 	displayed_no_extra();
 	TEST_TRUE(mock_get_timer_last - mock_time_start >=
-		  30 * VB_USEC_PER_SEC, "  finished delay");
+		  30 * VB2_MSEC_PER_SEC, "  finished delay");
 	TEST_EQ(mock_vbexbeep_called, 2, "  beeped twice");
 	TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, "  used up mock_vbtlk");
 
diff --git a/tests/vboot_ui_legacy_clamshell_beep_tests.c b/tests/vboot_ui_legacy_clamshell_beep_tests.c
index 9d0d12e..cb0b476 100644
--- a/tests/vboot_ui_legacy_clamshell_beep_tests.c
+++ b/tests/vboot_ui_legacy_clamshell_beep_tests.c
@@ -37,7 +37,6 @@
 typedef struct {
 	const char *name;
 	uint32_t gbb_flags;
-	vb2_error_t beep_return;
 	uint32_t keypress_key;
 	int keypress_at_count;
 	int num_events;
@@ -47,16 +46,14 @@
 test_case_t test[] = {
 
 	{ "VbBootDeveloperSoundTest( fast )",
-	  VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY, VBERROR_NO_BACKGROUND_SOUND,
-	  0, 0,
+	  VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY, 0, 0,
 	  1,
 	  {
 		{0, 0, 2000},		// off and return at 2 seconds
 	  }},
 
 	{ "VbBootDeveloperSoundTest( normal )",
-	  0, VBERROR_NO_BACKGROUND_SOUND,
-	  0, 0,
+	  0, 0, 0,
 	  3,
 	  {
 		{250, 400, 20000},	// first beep at 20 seconds
@@ -67,8 +64,7 @@
 	// Now with some keypresses
 
 	{ "VbBootDeveloperSoundTest( normal, Ctrl-D )",
-	  0, VBERROR_NO_BACKGROUND_SOUND,
-	  4, 20400,			// Ctrl-D between beeps
+	  0, 4, 20400,			// Ctrl-D between beeps
 	  2,
 	  {
 		{250, 400, 20000},	// first beep at 20 seconds
@@ -76,8 +72,7 @@
 	  }},
 
 	{ "VbBootDeveloperSoundTest( normal, Ctrl-U not allowed )",
-	  0, VBERROR_NO_BACKGROUND_SOUND,
-	  21, 10000,                          // Ctrl-U at 10 seconds
+	  0, 21, 10000,                          // Ctrl-U at 10 seconds
 	  5,
 	  {
 		{120, 400, 10000},	// complains about Ctrl-U (one beep)
@@ -94,14 +89,13 @@
 static struct vb2_context *ctx;
 static struct vb2_shared_data *sd;
 static struct vb2_gbb_header gbb;
-static int current_time;
-static uint64_t current_ticks;
+static uint32_t current_time;
+static uint32_t current_ticks;
 static int current_event;
 static int max_events;
 static int matched_events;
 static int kbd_fire_at;
 static uint32_t kbd_fire_key;
-static vb2_error_t beep_return;
 static note_event_t *expected_event;
 
 /* Audio open count, so we can reset it */
@@ -127,8 +121,6 @@
 	current_event = 0;
 	kbd_fire_at = 0;
 	kbd_fire_key = 0;
-
-	beep_return = VB2_SUCCESS;
 	audio_open_count = 0;
 
 	matched_events = 0;
@@ -181,76 +173,72 @@
 	uint32_t tmp;
 	uint32_t now;
 
-	VbExSleepMs(KBD_READ_TIME);
+	vb2ex_msleep(KBD_READ_TIME);
 	now = current_time;
 
 	if (kbd_fire_key && now >= kbd_fire_at) {
-		VB2_DEBUG("  VbExKeyboardRead() - returning %d at %d msec\n",
+		VB2_DEBUG("returning %d at %d msec\n",
 			  kbd_fire_key, now);
 		tmp = kbd_fire_key;
 		kbd_fire_key = 0;
 		return tmp;
 	}
-	VB2_DEBUG("  VbExKeyboardRead() - returning %d at %d msec\n",
-		  0, now);
+	VB2_DEBUG("returning %d at %d msec\n", 0, now);
 	return 0;
 }
 
-void VbExSleepMs(uint32_t msec)
+void vb2ex_msleep(uint32_t msec)
 {
-	current_ticks += (uint64_t)msec * VB_USEC_PER_MSEC;
-	current_time = current_ticks / VB_USEC_PER_MSEC;
-	VB2_DEBUG("VbExSleepMs(%d) -> %d\n", msec, current_time);
+	current_ticks += msec;
+	current_time = current_ticks;
+	VB2_DEBUG("msec=%d at %d msec\n", msec, current_time);
 }
 
-uint64_t VbExGetTimer(void)
+uint32_t vb2ex_mtime(void)
 {
 	return current_ticks;
 }
 
-vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency)
+void vb2ex_beep(uint32_t msec, uint32_t frequency)
 {
-	VB2_DEBUG("VbExBeep(%d, %d) at %d msec\n",
+	VB2_DEBUG("msec=%d, frequency=%d at %d msec\n",
 		  msec, frequency, current_time);
 
 	if (current_event < max_events &&
 	    msec == expected_event[current_event].msec &&
 	    frequency == expected_event[current_event].freq &&
-	    abs(current_time - expected_event[current_event].time)
-	    < TIME_FUZZ ) {
+	    (current_time - expected_event[current_event].time) < TIME_FUZZ)
 		matched_events++;
-	}
 
 	if (msec)
-		VbExSleepMs(msec);
+		vb2ex_msleep(msec);
 	current_event++;
-	return beep_return;
 }
 
 vb2_error_t VbExDisplayScreen(uint32_t screen_type, uint32_t locale,
 			      const VbScreenData *data)
 {
-	switch(screen_type) {
+	switch (screen_type) {
 		case VB_SCREEN_BLANK:
-			VB2_DEBUG("VbExDisplayScreen(BLANK)\n");
+			VB2_DEBUG("screen_type=BLANK\n");
 			break;
 		case VB_SCREEN_DEVELOPER_WARNING:
-			VB2_DEBUG("VbExDisplayScreen(DEV)\n");
+			VB2_DEBUG("screen_type=DEV\n");
 			break;
 		case VB_SCREEN_RECOVERY_INSERT:
-			VB2_DEBUG("VbExDisplayScreen(INSERT)\n");
+			VB2_DEBUG("screen_type=INSERT\n");
 			break;
 		case VB_SCREEN_RECOVERY_NO_GOOD:
-			VB2_DEBUG("VbExDisplayScreen(NO_GOOD)\n");
+			VB2_DEBUG("screen_type=NO_GOOD\n");
 			break;
 		case VB_SCREEN_OS_BROKEN:
-			VB2_DEBUG("VbExDisplayScreen(BROKEN)\n");
+			VB2_DEBUG("screen_type=BROKEN\n");
 			break;
 		default:
-			VB2_DEBUG("VbExDisplayScreen(%d)\n", screen_type);
+			VB2_DEBUG("screen_type=%#x\n", screen_type);
 	}
 
-	VB2_DEBUG("  current_time is %d msec\n", current_time);
+	VB2_DEBUG("current_time is %d msec\n", current_time);
 
 	return VB2_SUCCESS;
 }
@@ -262,17 +250,16 @@
 	int i;
 	int num_tests =  sizeof(test) / sizeof(test_case_t);
 
-	for (i=0; i<num_tests; i++) {
+	for (i = 0; i < num_tests; i++) {
 		VB2_DEBUG("STARTING %s ...\n", test[i].name);
 		ResetMocks();
 		gbb.flags = test[i].gbb_flags;
-		beep_return = test[i].beep_return;
 		kbd_fire_key = test[i].keypress_key;
 		kbd_fire_at = test[i].keypress_at_count;
 		max_events = test[i].num_events;
 		expected_event = test[i].notes;
-		(void) VbBootDeveloperLegacyClamshell(ctx);
-		VbExBeep(0, 0); /* Dummy call to determine end time */
+		VbBootDeveloperLegacyClamshell(ctx);
+		vb2ex_beep(0, 0);  /* Dummy call to determine end time */
 		VB2_DEBUG("INFO: matched %d total %d expected %d\n",
 			  matched_events, current_event, test[i].num_events);
 		TEST_TRUE(matched_events == test[i].num_events &&
diff --git a/tests/vboot_ui_legacy_clamshell_tests.c b/tests/vboot_ui_legacy_clamshell_tests.c
index 5d973e6..84f7ea7 100644
--- a/tests/vboot_ui_legacy_clamshell_tests.c
+++ b/tests/vboot_ui_legacy_clamshell_tests.c
@@ -35,7 +35,7 @@
 static int vbtlk_expect_removable;
 static int vbexlegacy_called;
 static enum VbAltFwIndex_t altfw_num;
-static uint64_t current_ticks;
+static uint32_t current_ticks;
 static int trust_ec;
 static int virtdev_set;
 static uint32_t virtdev_fail;
@@ -192,12 +192,12 @@
 	return VB2_ERROR_UNKNOWN;
 }
 
-void VbExSleepMs(uint32_t msec)
+void vb2ex_msleep(uint32_t msec)
 {
-	current_ticks += (uint64_t)msec * VB_USEC_PER_MSEC;
+	current_ticks += msec;
 }
 
-uint64_t VbExGetTimer(void)
+uint32_t vb2ex_mtime(void)
 {
 	return current_ticks;
 }
@@ -1541,7 +1541,7 @@
 		"  blank screen");
 	TEST_EQ(tpm_set_mode_called, 0, "  no tpm call");
 	TEST_EQ(vbexlegacy_called, 0, "  not legacy");
-	TEST_EQ(current_ticks, 30 * VB_USEC_PER_SEC,
+	TEST_EQ(current_ticks, 30 * VB2_MSEC_PER_SEC,
 		"  waited for 30 seconds");
 
 	/* Esc key pressed. */
@@ -1568,7 +1568,7 @@
 		"  blank screen");
 	TEST_EQ(tpm_set_mode_called, 0, "  no tpm call");
 	TEST_EQ(vbexlegacy_called, 0, "  not legacy");
-	TEST_TRUE(current_ticks < VB_USEC_PER_SEC, "  didn't wait long");
+	TEST_TRUE(current_ticks < VB2_MSEC_PER_SEC, "  didn't wait long");
 
 	/* Power button pressed but not released. */
 	ResetMocks();
diff --git a/tests/vboot_ui_legacy_menu_tests.c b/tests/vboot_ui_legacy_menu_tests.c
index 6fa2d40..324c6b4 100644
--- a/tests/vboot_ui_legacy_menu_tests.c
+++ b/tests/vboot_ui_legacy_menu_tests.c
@@ -190,8 +190,8 @@
 {
 	if (screens_count < ARRAY_SIZE(screens_displayed))
 		screens_displayed[screens_count++] = screen;
-	printf("VbDisplayScreen: screens_displayed[%d] = %#x\n",
-	       screens_count - 1, screen);
+	VB2_DEBUG("screens_displayed[%d] = %#x\n",
+		  screens_count - 1, screen);
 	return VB2_SUCCESS;
 }
 
@@ -201,11 +201,11 @@
 	if (screens_count < ARRAY_SIZE(screens_displayed))
 		screens_displayed[screens_count++] = screen;
 	else
-		printf("Ran out of screens_displayed entries!\n");
-	printf("VbDisplayMenu: screens_displayed[%d] = %#x,"
-	       " selected_index = %u, disabled_idx_mask = %#x\n",
-	       screens_count - 1, screen,
-	       selected_index, disabled_idx_mask);
+		VB2_DEBUG("Ran out of screens_displayed entries!\n");
+	VB2_DEBUG("screens_displayed[%d] = %#x,"
+		  " selected_index = %u, disabled_idx_mask = %#x\n",
+		  screens_count - 1, screen,
+		  selected_index, disabled_idx_mask);
 
 	return VB2_SUCCESS;
 }
@@ -216,13 +216,12 @@
 	return VB2_SUCCESS;
 }
 
-vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency)
+void vb2ex_beep(uint32_t msec, uint32_t frequency)
 {
 	if (beeps_count < ARRAY_SIZE(beeps_played))
 		beeps_played[beeps_count++] = frequency;
-	printf("VbExBeep: beeps_played[%d] = %dHz for %dms\n",
-	       beeps_count - 1, frequency, msec);
-	return VB2_SUCCESS;
+	VB2_DEBUG("beeps_played[%d] = %dHz for %dms\n",
+		  beeps_count - 1, frequency, msec);
 }
 
 void vb2_enable_developer_mode(struct vb2_context *c)
@@ -237,7 +236,7 @@
 {
 	int i;
 
-	printf("Testing VbBootDeveloperLegacyMenu()...\n");
+	VB2_DEBUG("Testing VbBootDeveloperLegacyMenu()...\n");
 
 	/* Proceed after timeout */
 	ResetMocksForDeveloper();
@@ -1252,14 +1251,14 @@
 	TEST_EQ(beeps_count, 0, "  no beeps for debug info");
 
 
-	printf("...done.\n");
+	VB2_DEBUG("...done.\n");
 }
 
 static void VbBootRecTest(void)
 {
 	int i;
 
-	printf("Testing VbBootRecoveryLegacyMenu()...\n");
+	VB2_DEBUG("Testing VbBootRecoveryLegacyMenu()...\n");
 
 	/* Shutdown requested in BROKEN */
 	ResetMocks();
@@ -1842,14 +1841,14 @@
 	TEST_EQ(screens_count, 3, "  no extra screens");
 	TEST_EQ(beeps_count, 0, "  no beeps");
 
-	printf("...done.\n");
+	VB2_DEBUG("...done.\n");
 }
 
 static void VbTestLanguageMenu(void)
 {
 	int i;
 
-	printf("Testing VbTestLanguageMenu()...\n");
+	VB2_DEBUG("Testing VbTestLanguageMenu()...\n");
 
 	/* Navigate to language menu from BROKEN */
 	ResetMocks();
@@ -2030,14 +2029,14 @@
 	TEST_EQ(screens_count, i, "  no extra screens");
 	TEST_EQ(beeps_count, 0, "  no beeps");
 
-	printf("...done.\n");
+	VB2_DEBUG("...done.\n");
 }
 
 static void VbNavigationTest(void)
 {
 	int i;
 
-	printf("Testing long navigation sequences...");
+	VB2_DEBUG("Testing long navigation sequences...");
 
 	/*
 	 * NOGOOD, OPTIONS, LANGUAGE, TODEV, LANGUAGE, TODEV,
