diff --git a/jOOQ/src/main/java/org/jooq/Configuration.java b/jOOQ/src/main/java/org/jooq/Configuration.java
index 11fe87858b..6207304871 100644
--- a/jOOQ/src/main/java/org/jooq/Configuration.java
+++ b/jOOQ/src/main/java/org/jooq/Configuration.java
@@ -37,6 +37,7 @@ package org.jooq;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.Savepoint;
+import java.time.Clock;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.ForkJoinPool;
@@ -236,6 +237,14 @@ public interface Configuration extends Serializable {
// Getters
// -------------------------------------------------------------------------
+
+ /**
+ * Get this configuration's {@link Clock}, which is used for optimistic
+ * locking, transaction time, and other time-depending features.
+ */
+ Clock clock();
+
+
/**
* Get this configuration's underlying connection provider.
*/
@@ -386,6 +395,20 @@ public interface Configuration extends Serializable {
// Setters
// -------------------------------------------------------------------------
+
+ /**
+ * Change this configuration to hold a new {@link Clock}.
+ *
+ * This method is not thread-safe and should not be used in globally
+ * available Configuration objects.
+ *
+ * @param newClock The new clock to be contained in the changed
+ * configuration.
+ * @return The changed configuration.
+ */
+ Configuration set(Clock newClock);
+
+
/**
* Change this configuration to hold a new connection provider.
*
@@ -675,6 +698,17 @@ public interface Configuration extends Serializable {
*/
Configuration derive();
+
+ /**
+ * Create a derived configuration from this one, with a new {@link Clock}.
+ *
+ * @param newClock The new clock to be contained in the derived
+ * configuration.
+ * @return The derived configuration.
+ */
+ Configuration derive(Clock newClock);
+
+
/**
* Create a derived configuration from this one, with a new connection
* wrapped in a {@link DefaultConnectionProvider}.
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
index 8a98ed5815..fd3b943638 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
@@ -300,6 +300,7 @@ abstract class AbstractDMLQuery extends AbstractQuery {
+
abstract void accept0(Context> ctx);
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java b/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java
index ac83585372..0ac9775c85 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java
@@ -43,6 +43,7 @@ import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StringWriter;
import java.sql.Connection;
+import java.time.Clock;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
@@ -97,6 +98,9 @@ public class DefaultConfiguration implements Configuration {
private Settings settings;
private ConcurrentHashMap