diff --git a/src/lib/device.ts b/src/lib/device.ts
index 93dc44cee32fd48fdca5c61ff43be341cf5decd7..bd9b6a7b0ac784a6c07b938df5ca5bea1548b443 100644
--- a/src/lib/device.ts
+++ b/src/lib/device.ts
@@ -319,28 +319,23 @@ export default abstract class Device extends js.global.EventEmitter {
 		}
 	}
 
-	private enqueue(buffer: Uint8Array): void {
-	
-		if (Date.now() - this.lastWrite >= 1000 && this.queue.length < 1) {
-			this.sendToDevice(buffer);
-			this.lastWrite = Date.now();
-			return;
-		}
+	// Hot eats, cool treats
+	private dequeue(): void {
+		const buf = this.queue.shift();
+		if (buf === undefined) return;
+		this.sendToDevice(buf);
+		this.lastWrite = Date.now();
+		if (this.queue.length > 0) js.setTimeout(this.dequeue, 1000, this);
+	}
 
+	private enqueue(buffer: Uint8Array): void {
+		const now = Date.now();
 		this.queue.push(buffer);
-		if (this.queue.length > 1) return;
-		
-		function send(): void {
-			// @ts-expect-error shut up
-			this.sendToDevice(this.queue.shift());
-			// @ts-expect-error shut up
-			this.lastWrite = Date.now();
-			// @ts-expect-error shut up
-			if (this.queue.length > 0) js.setTimeout(send, 1000, this);
+		if (now - this.lastWrite >= 1000 && this.queue.length < 1) {
+			this.dequeue();
+		} else {
+			js.setTimeout(this.dequeue, Math.max(1, 1000 - (now - this.lastWrite)), this);
 		}
-
-		js.setTimeout(send, 1000, this);
-
 	}
 
 	/** Write a [ToRadio](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.ToRadio) message to the device */