diff --git a/includes/mollom.class.inc b/includes/mollom.class.inc
index b75020e..9e74725 100644
--- a/includes/mollom.class.inc
+++ b/includes/mollom.class.inc
@@ -43,6 +43,16 @@ abstract class Mollom {
   const AUTH_ERROR = 401;
 
   /**
+   * Maximum allowed time offset from UTC allowed for the client's local time.
+   *
+   * @see Mollom::handleRequest()
+   * @see MollomTimeOffsetException
+   *
+   * @var integer
+   */
+  const TIME_OFFSET_MAX = 600;
+
+  /**
    * The public Mollom API key to use for request authentication.
    *
    * @var string
@@ -464,6 +474,13 @@ abstract class Mollom {
         throw new MollomNetworkException('Network error.', self::NETWORK_ERROR, NULL, $this, $request_info);
       }
       if ($response->code == self::AUTH_ERROR) {
+        // Try to determine a too large time offset.
+        if (isset($response->headers['date'])) {
+          $offset = abs(time() - strtotime($response->headers['date']));
+          if ($offset > self::TIME_OFFSET_MAX) {
+            throw new MollomTimeOffsetException(sprintf('Invalid client time. Too large offset from UTC: %s secs.', $offset), self::AUTH_ERROR, NULL, $this, $request_info);
+          }
+        }
         throw new MollomAuthenticationException('Invalid authentication.', self::AUTH_ERROR, NULL, $this, $request_info);
       }
       if ($response->code == self::RESPONSE_ERROR || $response->code >= 500) {
@@ -1327,6 +1344,20 @@ class MollomAuthenticationException extends MollomException {
 }
 
 /**
+ * Mollom authentication error due to time offset exception.
+ *
+ * Thrown in case the local time diverges too much from UTC.
+ *
+ * This extends MollomAuthenticationException, so any thrown exceptions can be
+ * collectively caught.
+ *
+ * @see Mollom::TIME_OFFSET_MAX
+ * @see Mollom::handleRequest()
+ */
+class MollomTimeOffsetException extends MollomAuthenticationException {
+}
+
+/**
  * Mollom server response exception.
  *
  * Thrown when a request to a Mollom server succeeds, but the response does not
