diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
index 7e1054a..381ad37 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -4195,6 +4195,18 @@
 	}
 }
 
+void sendSleepEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Sleep)) {
+    sendEvent(SWT.Sleep, null);
+  }
+}
+
+void sendWakeupEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Wakeup)) {
+    sendEvent(SWT.Wakeup, null);
+  }
+}
+
 static NSString getApplicationName() {
 	NSString name = null;
 	int pid = OS.getpid ();
@@ -4635,6 +4647,7 @@
 public boolean sleep () {
 	checkDevice ();
 	if (getMessageCount () != 0) return true;
+	sendSleepEvent();
 	try {
 		addPool();
 		allowTimers = runAsyncMessages = false;
@@ -4643,6 +4656,7 @@
 	} finally {
 		removePool();
 	}
+	sendWakeupEvent();
 	return true;
 }
 
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
index 38462df..5ce5f25 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
@@ -773,26 +773,48 @@
 	
 	/**
 	 * The PreEvent event type (value is 50).
-	 * 
+	 *
 	 * <p>
 	 * This event is sent before an event is dispatched.
 	 * </p>
-     * 
-     * @since 3.103
+	 *
+	 * @since 3.103
 	 */
 	public static final int PreEvent = 50;
-	
+
 	/**
 	 * The PostEvent event type (value is 51).
-	 * 
+	 *
 	 * <p>
 	 * This event is sent after an event is dispatched.
 	 * </p>
-	 *  
-     * @since 3.103
+	 *
+	 * @since 3.103
 	 */
 	public static final int PostEvent = 51;
 
+	/**
+	 * The Sleep event type (value is 52).
+	 *
+	 * <p>
+	 * This event is sent before Display.sleep goes into an interruptible sleep.
+	 * </p>
+	 *
+	 * @since 3.103
+	 */
+	public static final int Sleep = 52;
+
+	/**
+	 * The Wakeup event type (value is 53).
+	 *
+	 * <p>
+	 * This event is sent after Display.sleep wakes up from an interruptible sleep.
+	 * </p>
+	 *
+	 * @since 3.103
+	 */
+	public static final int Wakeup = 53;
+
 	/* Event Details */
 	
 	/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index d016ca9..33efc3a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -4227,6 +4227,7 @@
 		return false;
 	}
 	if (getMessageCount () != 0) return true;
+	sendSleepEvent();
 	if (fds == 0) {
 		allocated_nfds = 2;
 		fds = OS.g_malloc (OS.GPollFD_sizeof () * allocated_nfds);
@@ -4271,6 +4272,7 @@
 		}
 	} while (!result && getMessageCount () == 0 && !wake);
 	wake = false;
+	sendWakeupEvent();
 	return true;
 }
 
@@ -4440,6 +4442,18 @@
 	}
 }
 
+void sendSleepEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Sleep)) {
+    sendEvent(SWT.Sleep, null);
+  }
+}
+
+void sendWakeupEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Wakeup)) {
+    sendEvent(SWT.Wakeup, null);
+  }
+}
+
 void setCurrentCaret (Caret caret) {
 	if (caretId != 0) OS.g_source_remove(caretId);
 	caretId = 0;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
index c14ca5f..9a6d405 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
@@ -1380,6 +1380,7 @@
 long /*int*/ foregroundIdleProc (long /*int*/ code, long /*int*/ wParam, long /*int*/ lParam) {
 	if (code >= 0) {
 		if (runMessages && getMessageCount () != 0) {
+			sendWakeupEvent();
 			if (runMessagesInIdle) {
 				if (runMessagesInMessageProc) {
 					OS.PostMessage (hwndMessage, SWT_RUNASYNC, 0, 0);
@@ -1403,6 +1404,7 @@
 			MSG msg = new MSG();
 			int flags = OS.PM_NOREMOVE | OS.PM_NOYIELD | OS.PM_QS_INPUT;
 			if (!OS.PeekMessage (msg, 0, 0, 0, flags)) wakeThread ();
+			sendSleepEvent();
 		}
 	}
 	return OS.CallNextHookEx (idleHook, (int)/*64*/code, wParam, lParam);
@@ -4369,6 +4371,19 @@
 		}
 	}
 }
+
+void sendSleepEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Sleep)) {
+    sendEvent(SWT.Sleep, null);
+  }
+}
+
+void sendWakeupEvent() {
+  if (this.eventTable != null && this.eventTable.hooks(SWT.Wakeup)) {
+    sendEvent(SWT.Wakeup, null);
+  }
+}
+
 /**
  * Sets the location of the on-screen pointer relative to the top left corner
  * of the screen.  <b>Note: It is typically considered bad practice for a
@@ -4674,11 +4689,15 @@
 public boolean sleep () {
 	checkDevice ();
 	if (runMessages && getMessageCount () != 0) return true;
+	sendSleepEvent();
 	if (OS.IsWinCE) {
 		OS.MsgWaitForMultipleObjectsEx (0, 0, OS.INFINITE, OS.QS_ALLINPUT, OS.MWMO_INPUTAVAILABLE);
+		sendWakeupEvent();
 		return true;
 	}
-	return OS.WaitMessage ();
+	boolean result = OS.WaitMessage ();
+	sendWakeupEvent();
+	return result;
 }
 
 /**
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
index b9c65d4..54f9d8c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
@@ -742,52 +742,11 @@
 	}
 }
 
-public void test_LongEventWatchdog() {
-	final int DURATION_MILLIS = 10;
-	Display display = new Display();
-	
-	try {
-		final boolean[] beginCalled = {false};
-		final boolean[] endCalled = {false};
-		final boolean[] eventHasRun = {false};
-
-		Listener preListener = new Listener() {
-			public void handleEvent(Event event) {
-				beginCalled[0] = true;
-			}
-		};
-		
-		Listener postListener = new Listener() {
-			public void handleEvent(Event event) {
-				endCalled[0] = true;
-			}
-		};
-		
-		display.addListener(SWT.PreEvent, preListener);
-		display.addListener(SWT.PostEvent, postListener);
-		
-		display.asyncExec(new Runnable() {
-			public void run() {
-				try {
-					Thread.sleep(DURATION_MILLIS);
-				} catch (InterruptedException e) {
-					fail();
-				}
-				eventHasRun[0] = true;
-			}
-		});
-
-		while (display.readAndDispatch()) {
-		}
-		
-		display.removeListener(SWT.PreEvent, preListener);
-		display.removeListener(SWT.PostEvent, preListener);
-		
-		
-		assertTrue(beginCalled[0] && endCalled[0] && eventHasRun[0]);
-	} finally {
-		display.dispose();
-	}
+public void test_readAndDispatch() {
+	// The following tests rely on readAndDispatch in order to succeed,
+	// thus no test is needed here.
+	//    test_getSyncThread()
+	//    test_postLorg_eclipse_swt_widgets_Event()
 }
 
 public void test_removeFilterILorg_eclipse_swt_widgets_Listener() {
@@ -1070,6 +1029,9 @@
 	}
 }
 
+public void test_wake() {
+	// tested in sleep() method
+}
 
 /* custom */
 boolean disposeExecRan;
