diff --git a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
index 4efde30..afdaa3b 100644
--- a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
@@ -21,6 +21,7 @@
 #include <mesos/scheduler.hpp>
 
 #include <stout/foreach.hpp>
+#include <stout/option.hpp>
 #include <stout/result.hpp>
 #include <stout/try.hpp>
 
@@ -1066,17 +1067,12 @@
   return convert<Status>(env, status);
 }
 
-/* Class:     org_apache_mesos_MesosSchedulerDriver
- * Method:    updateFramework
- * Signature: (Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;Lorg/apache/mesos/scheduler/Protos/OfferConstraints;)Lorg/apache/mesos/Protos/Status;
- */
-JNIEXPORT jobject JNICALL
-Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
+static jobject updateFramework(
     JNIEnv* env,
     jobject thiz,
     jobject jframeworkInfo,
     jobject jsuppressedRoles,
-    jobject jofferConstraints)
+    Option<jobject> jofferConstraints)
 {
   using ::mesos::scheduler::OfferConstraints;
 
@@ -1086,8 +1082,9 @@
   const vector<string> suppressedRoles =
     constructFromIterable<string>(env, jsuppressedRoles);
 
-  ::mesos::scheduler::OfferConstraints offerConstraints =
-    construct<OfferConstraints>(env, jofferConstraints);
+  OfferConstraints offerConstraints = jofferConstraints.isSome()
+      ? construct<OfferConstraints>(env, *jofferConstraints)
+      : OfferConstraints();
 
   jclass clazz = env->GetObjectClass(thiz);
 
@@ -1101,4 +1098,31 @@
   return convert<Status>(env, status);
 }
 
+/* Class:     org_apache_mesos_MesosSchedulerDriver
+ * Method:    updateFramework
+ * Signature: (Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;)Lorg/apache/mesos/Protos/Status;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
+    JNIEnv* env, jobject thiz, jobject jframeworkInfo, jobject jsuppressedRoles)
+{
+  return updateFramework(env, thiz, jframeworkInfo, jsuppressedRoles, None());
+}
+
+/* Class:     org_apache_mesos_MesosSchedulerDriver
+ * Method:    updateFrameworkWithConstraints
+ * Signature: (Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;Lorg/apache/mesos/scheduler/Protos/OfferConstraints;)Lorg/apache/mesos/Protos/Status;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_apache_mesos_MesosSchedulerDriver_updateFrameworkWithConstraints(
+    JNIEnv* env,
+    jobject thiz,
+    jobject jframeworkInfo,
+    jobject jsuppressedRoles,
+    jobject jofferConstraints)
+{
+  return updateFramework(
+      env, thiz, jframeworkInfo, jsuppressedRoles, jofferConstraints);
+}
+
 } // extern "C" {
diff --git a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
index 4fdae33..9be0ec1 100644
--- a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
@@ -408,16 +408,34 @@
 
   public native Status reconcileTasks(Collection<TaskStatus> statuses);
 
+  /**
+   * @deprecated Replaced by
+   * {@link #updateFramework(FrameworkInfo, Collection<String>, OfferConstraints)}
+   *
+   * NOTE: The underlying JNI method exists only to maintain compatibility
+   * of newer versions of libmesos-java.so with older versions of mesos.jar
+   */
+  @Deprecated
   public native Status updateFramework(FrameworkInfo frameworkInfo,
-                                       Collection<String> suppressedRoles,
-                                       OfferConstraints offerConstraints);
+                                       Collection<String> suppressedRoles);
 
   public Status updateFramework(FrameworkInfo frameworkInfo,
-                                Collection<String> suppressedRoles) {
-    return updateFramework(
-        frameworkInfo, suppressedRoles, OfferConstraints.getDefaultInstance());
+                                Collection<String> suppressedRoles,
+                                OfferConstraints offerConstraints) {
+    return updateFrameworkWithConstraints(
+        frameworkInfo, suppressedRoles, offerConstraints);
   }
 
+  /*
+   * NOTE: This method exists only because an `updateFramework()` signature
+   * with added offer constraints needs to have a different name, due to the
+   * `extern "C"` linkage of JNI method implementations.
+   */
+  private native Status updateFrameworkWithConstraints(
+      FrameworkInfo frameworkInfo,
+      Collection<String> suppressedRoles,
+      OfferConstraints offerConstraints);
+
   protected native void initialize();
   protected native void finalize();
 
