diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
index fa2aae4b466332416c62abfbe2e958b0978718dc..fb7722287148d28e00e3a48731584be42f0faedf 100644
--- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
+++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
@@ -466,8 +466,11 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 			}
 		} else if (msg.startsWith("CLOCK_SKEW")) {
 			Long skew = parseLongArgument(msg, "SKEW");
-			if (skew != null && LOG.isLoggable(WARNING)) {
-				LOG.warning("Clock is skewed by " + skew + " seconds");
+			if (skew != null) {
+				if (LOG.isLoggable(WARNING)) {
+					LOG.warning("Clock is skewed by " + skew + " seconds");
+				}
+				state.onClockSkewDetected(skew);
 			}
 		}
 	}
@@ -596,8 +599,7 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 			bootstrapPercentage = percentage;
 			if (observer != null) {
 				// Notify the observer on the event executor
-				eventExecutor.execute(() ->
-						observer.onBootstrapPercentage(percentage));
+				eventExecutor.execute(() -> observer.onBootstrapPercentage(percentage));
 			}
 			updateState();
 		}
@@ -699,8 +701,14 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 		private synchronized void onHsDescriptorUploaded(String onion) {
 			if (observer != null) {
 				// Notify the observer on the event executor
-				eventExecutor.execute(() ->
-						observer.onHsDescriptorUpload(onion));
+				eventExecutor.execute(() -> observer.onHsDescriptorUpload(onion));
+			}
+		}
+
+		private synchronized void onClockSkewDetected(long skewSeconds) {
+			if (observer != null) {
+				// Notify the observer on the event executor
+				eventExecutor.execute(() -> observer.onClockSkewDetected(skewSeconds));
 			}
 		}
 	}
diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
index d5825b417fede8dc4572ce412ad657f3ace98998..d3c2efd9e13e65e553ab67cb44440248f37bbf18 100644
--- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
+++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
@@ -148,6 +148,11 @@ public interface TorWrapper {
 		 * Called whenever a hidden service descriptor is uploaded.
 		 */
 		void onHsDescriptorUpload(String onion);
+
+		/**
+		 * Called whenever Tor detects that the system clock is skewed.
+		 */
+		void onClockSkewDetected(long skewSeconds);
 	}
 
 	class HiddenServiceProperties {