diff --git a/asterixdb-jdbc/asterix-jdbc-core/pom.xml b/asterixdb-jdbc/asterix-jdbc-core/pom.xml
index 1fc08fe..b4a7163 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/pom.xml
+++ b/asterixdb-jdbc/asterix-jdbc-core/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>apache-asterixdb-jdbc</artifactId>
     <groupId>org.apache.asterix</groupId>
-    <version>0.9.7-SNAPSHOT</version>
+    <version>0.9.8-SNAPSHOT</version>
   </parent>
   <artifactId>asterix-jdbc-core</artifactId>
 
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
index 7a6d5af..f87eede 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
@@ -54,8 +54,7 @@
         ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
         stmtOptions.compileOnly = true;
         stmtOptions.timeoutSeconds = 0; /* TODO:timeout */
-        ADBProtocolBase.QueryServiceResponse response =
-                connection.protocol.submitStatement(sql, null, null, stmtOptions);
+        ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, null, stmtOptions);
         int parameterCount = connection.protocol.getStatementParameterCount(response);
         boolean isQuery = connection.protocol.isStatementCategory(response,
                 ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
index 6bf6c1f..3186aa0 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
@@ -85,10 +85,11 @@
 
     public abstract boolean ping(int timeoutSeconds);
 
-    public abstract QueryServiceResponse submitStatement(String sql, List<?> args, UUID executionId,
-            SubmitStatementOptions options) throws SQLException;
+    public abstract QueryServiceResponse submitStatement(String sql, List<?> args, SubmitStatementOptions options)
+            throws SQLException;
 
-    public abstract JsonParser fetchResult(QueryServiceResponse response) throws SQLException;
+    public abstract JsonParser fetchResult(QueryServiceResponse response, SubmitStatementOptions options)
+            throws SQLException;
 
     public abstract void cancelRunningStatement(UUID executionId) throws SQLException;
 
@@ -264,6 +265,7 @@
         public boolean forceReadOnly;
         public boolean compileOnly;
         public boolean sqlCompatMode;
+        public UUID executionId;
     }
 
     public static class QueryServiceResponse {
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
index 6eea813..cdbece6 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
@@ -90,6 +90,7 @@
     protected final ConcurrentLinkedQueue<WeakReference<ADBResultSet>> resultSetsWithoutResources;
 
     // execute() result field
+    protected ADBProtocolBase.SubmitStatementOptions executeStmtOptions;
     protected ADBProtocolBase.QueryServiceResponse executeResponse;
     protected ADBResultSet executeResultSet;
 
@@ -158,9 +159,9 @@
         // note: we're not assigning executeResponse field at this method
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
+            stmtOptions.executionId = executionId;
             stmtOptions.forceReadOnly = true;
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             if (!isQuery) {
@@ -168,7 +169,7 @@
             }
             warnings = connection.protocol.getWarningIfExists(response);
             updateCount = -1;
-            return fetchResultSet(response);
+            return fetchResultSet(response, stmtOptions);
         } finally {
             resetExecutionId();
         }
@@ -219,8 +220,8 @@
     protected int executeUpdateImpl(String sql, List<Object> args) throws SQLException {
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            stmtOptions.executionId = executionId;
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             // TODO: remove result set on the server (both query and update returning cases)
@@ -259,9 +260,10 @@
     protected boolean executeImpl(String sql, List<Object> args) throws SQLException {
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            stmtOptions.executionId = executionId;
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             warnings = connection.protocol.getWarningIfExists(response);
+            executeStmtOptions = stmtOptions;
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             if (isQuery) {
@@ -347,9 +349,10 @@
         if (response == null) {
             return null;
         }
-        ADBResultSet rs = fetchResultSet(response);
+        ADBResultSet rs = fetchResultSet(response, executeStmtOptions);
         executeResultSet = rs;
         executeResponse = null;
+        executeStmtOptions = null;
         return rs;
     }
 
@@ -406,7 +409,8 @@
 
     // ResultSet lifecycle
 
-    protected ADBResultSet fetchResultSet(ADBProtocolBase.QueryServiceResponse execResponse) throws SQLException {
+    protected ADBResultSet fetchResultSet(ADBProtocolBase.QueryServiceResponse execResponse,
+            ADBProtocolBase.SubmitStatementOptions stmtOptions) throws SQLException {
         List<ADBColumn> columns = connection.protocol.getColumns(execResponse);
         if (getLogger().isLoggable(Level.FINER)) {
             getLogger().log(Level.FINE, "result schema " + columns);
@@ -417,7 +421,7 @@
                     connection.protocol.fetchExplainOnlyResult(execResponse, stringSer::serializeToString);
             return createSystemResultSet(columns, explainResult);
         } else {
-            JsonParser rowParser = connection.protocol.fetchResult(execResponse);
+            JsonParser rowParser = connection.protocol.fetchResult(execResponse, stmtOptions);
             return createResultSetImpl(columns, rowParser, true, maxRows);
         }
     }
diff --git a/asterixdb-jdbc/asterix-jdbc-driver/pom.xml b/asterixdb-jdbc/asterix-jdbc-driver/pom.xml
index 8c03da0..3ef116a 100644
--- a/asterixdb-jdbc/asterix-jdbc-driver/pom.xml
+++ b/asterixdb-jdbc/asterix-jdbc-driver/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>apache-asterixdb-jdbc</artifactId>
     <groupId>org.apache.asterix</groupId>
-    <version>0.9.7-SNAPSHOT</version>
+    <version>0.9.8-SNAPSHOT</version>
   </parent>
   <artifactId>asterix-jdbc-driver</artifactId>
 
diff --git a/asterixdb-jdbc/asterix-jdbc-driver/src/main/java/org/apache/asterix/jdbc/ADBProtocol.java b/asterixdb-jdbc/asterix-jdbc-driver/src/main/java/org/apache/asterix/jdbc/ADBProtocol.java
index 2f95b57..bb477b0 100644
--- a/asterixdb-jdbc/asterix-jdbc-driver/src/main/java/org/apache/asterix/jdbc/ADBProtocol.java
+++ b/asterixdb-jdbc/asterix-jdbc-driver/src/main/java/org/apache/asterix/jdbc/ADBProtocol.java
@@ -207,8 +207,8 @@
     }
 
     @Override
-    public QueryServiceResponse submitStatement(String sql, List<?> args, UUID executionId,
-            SubmitStatementOptions options) throws SQLException {
+    public QueryServiceResponse submitStatement(String sql, List<?> args, SubmitStatementOptions options)
+            throws SQLException {
         HttpPost httpPost = new HttpPost(queryEndpoint);
         httpPost.setHeader(HttpHeaders.ACCEPT, ContentType.APPLICATION_JSON
                 .withParameters(new BasicNameValuePair(FORMAT_LOSSLESS_ADM, Boolean.TRUE.toString())).toString());
@@ -239,8 +239,8 @@
             if (options.dataverseName != null) {
                 jsonGen.writeStringField(DATAVERSE, options.dataverseName);
             }
-            if (executionId != null) {
-                jsonGen.writeStringField(CLIENT_CONTEXT_ID, executionId.toString());
+            if (options.executionId != null) {
+                jsonGen.writeStringField(CLIENT_CONTEXT_ID, options.executionId.toString());
             }
             if (args != null && !args.isEmpty()) {
                 jsonGen.writeFieldName(ARGS);
@@ -305,7 +305,7 @@
     }
 
     @Override
-    public JsonParser fetchResult(QueryServiceResponse response) throws SQLException {
+    public JsonParser fetchResult(QueryServiceResponse response, SubmitStatementOptions options) throws SQLException {
         if (response.handle == null) {
             throw getErrorReporter().errorInProtocol();
         }
diff --git a/asterixdb-jdbc/asterix-jdbc-taco/pom.xml b/asterixdb-jdbc/asterix-jdbc-taco/pom.xml
index 71eef77..ff13772 100644
--- a/asterixdb-jdbc/asterix-jdbc-taco/pom.xml
+++ b/asterixdb-jdbc/asterix-jdbc-taco/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>apache-asterixdb-jdbc</artifactId>
     <groupId>org.apache.asterix</groupId>
-    <version>0.9.7-SNAPSHOT</version>
+    <version>0.9.8-SNAPSHOT</version>
   </parent>
   <artifactId>asterix-jdbc-taco</artifactId>
   <packaging>jar</packaging>
diff --git a/asterixdb-jdbc/pom.xml b/asterixdb-jdbc/pom.xml
index 9e318bb..2996e7f 100644
--- a/asterixdb-jdbc/pom.xml
+++ b/asterixdb-jdbc/pom.xml
@@ -21,7 +21,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.asterix</groupId>
   <artifactId>apache-asterixdb-jdbc</artifactId>
-  <version>0.9.7-SNAPSHOT</version>
+  <version>0.9.8-SNAPSHOT</version>
   <packaging>pom</packaging>
   <parent>
     <groupId>org.apache</groupId>
