diff --git a/src/debug/ptyc_dbg_oven.c b/src/debug/ptyc_dbg_oven.c
index 7357f57..4adc5f8 100644
--- a/src/debug/ptyc_dbg_oven.c
+++ b/src/debug/ptyc_dbg_oven.c
@@ -14,6 +14,58 @@
 
 int __stdcall ptyc_dbg_oven(struct ptyc_driver_ctx_impl * ictx)
 {
-	(void)ictx;
-	return ntapi->tt_wait_for_dummy_event();
+	int32_t		status;
+	void *		hwait;
+	char *		ch;
+	nt_iosb		iosb;
+	size_t		nread;
+	uintptr_t	buffer[4196/sizeof(uintptr_t)];
+
+	if ((status = ntapi->tt_create_private_event(
+			&hwait,
+			NT_NOTIFICATION_EVENT,
+			NT_EVENT_NOT_SIGNALED)))
+		return status;
+
+	do {
+		status = ntapi->pty_read(
+			ictx->cctx.hpts,
+			hwait,0,0,
+			&iosb,
+			buffer,sizeof(buffer),
+			0,0);
+
+		if (status == NT_STATUS_PENDING)
+			status = ntapi->zw_wait_for_single_object(
+				hwait,NT_SYNC_ALERTABLE,0);
+
+		if (status || iosb.status) {
+			ntapi->zw_close(hwait);
+			return status ? status : iosb.status;
+		}
+
+		ch    = (char *)buffer;
+		nread = iosb.info;
+
+		for ( ; nread; ) {
+			status = ntapi->pty_write(
+				ictx->cctx.hpts,
+				hwait,0,0,
+				&iosb,
+				ch,nread,
+				0,0);
+
+			if (status == NT_STATUS_PENDING)
+				status = ntapi->zw_wait_for_single_object(
+					hwait,NT_SYNC_ALERTABLE,0);
+
+			if (status || iosb.status) {
+				ntapi->zw_close(hwait);
+				return status ? status : iosb.status;
+			}
+
+			ch    += iosb.info;
+			nread -= iosb.info;
+		}
+	} while (1);
 }