diff --git a/wmsun/wmsun.c b/wmsun/wmsun.c
index ba4a95d..3f38497 100644
--- a/wmsun/wmsun.c
+++ b/wmsun/wmsun.c
@@ -61,7 +61,7 @@
 /*
  *  Delay between refreshes (in microseconds)
  */
-#define DELAY 10000L
+#define DELAY 1000000L
 #define WMSUN_VERSION "1.03"
 
 #define DegPerRad       57.29577951308232087680
@@ -108,6 +108,8 @@ int main(int argc, char *argv[]) {
     long		CurrentLocalTime, CurrentGMTTime, date;
     double		UT, val, LTRise, LTSet, LocalHour, hour24();
     int			H, M;
+    struct timeval	timeout;
+    fd_set		xfdset;
 
 
 
@@ -254,6 +256,11 @@ int main(int argc, char *argv[]) {
 
 
 
+	/*
+	 *  Add X display to file descriptor set for polling.
+	 */
+	FD_ZERO(&xfdset);
+	FD_SET(ConnectionNumber(display), &xfdset);
 
 
 
@@ -285,7 +292,9 @@ int main(int argc, char *argv[]) {
 	 *  Redraw and wait for next update
 	 */
 	RedrawWindow();
-	usleep(DELAY);
+	timeout.tv_sec = DELAY / 1000000L;
+	timeout.tv_usec = DELAY % 1000000L;
+	select(ConnectionNumber(display) + 1, &xfdset, NULL, NULL, &timeout);
 
 
      }