diff --git a/src/sbbs3/con_out.cpp b/src/sbbs3/con_out.cpp
index 576004e908963ffff326b421ac933d00123e0020..c44df8a428ca7c5e0836bdcab7c1d15dee57ad86 100644
--- a/src/sbbs3/con_out.cpp
+++ b/src/sbbs3/con_out.cpp
@@ -1400,11 +1400,15 @@ void sbbs_t::progress(const char* text, int count, int total, int interval)
 		return;	// Don't output this for events
 	if((count%interval) != 0)
 		return;
+	clock_t now = msclock();
+	if(now - last_progress < 500)
+		return;
 	if(text == NULL) text = "";
 	float pct = total ? ((float)count/total)*100.0F : 100.0F;
 	SAFEPRINTF2(str, "[ %-8s  %4.1f%% ]", text, pct);
 	cond_newline();
 	cursor_left(backfill(str, pct, cfg.color[clr_progress_full], cfg.color[clr_progress_empty]));
+	last_progress = now;
 }
 
 struct savedline {
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index b8298d725eef4b1584f190b725e83b141cf8fb2b..7930ab8fd5074eb3f6d757c2b531c89bfb49c611 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -848,6 +848,7 @@ public:
 	bool	update_nodeterm(void);
 	int		backfill(const char* str, float pct, int full_attr, int empty_attr);
 	void	progress(const char* str, int count, int total, int interval=1);
+	clock_t	last_progress = 0;
 	bool	saveline(void);
 	bool	restoreline(void);
 	int		petscii_to_ansibbs(unsigned char);