diff --git a/include/mesos/allocator/allocator.hpp b/include/mesos/allocator/allocator.hpp
index b0a5d6a..c378f78 100644
--- a/include/mesos/allocator/allocator.hpp
+++ b/include/mesos/allocator/allocator.hpp
@@ -110,7 +110,12 @@
       const Options& options,
       scheduler::OfferConstraints&& constraints);
 
-  OfferConstraintsFilter() = delete;
+  /*
+   * Constructs a no-op filter that does not exclude any agents/resources from
+   * being offered. This is equivalent to passing default-constructed
+   * `OfferConstraints` to the factory method `create()`.
+   */
+  OfferConstraintsFilter();
 
   // Definitions of these need `OfferConstraintsFilterImpl` to be a complete
   // type.
@@ -149,7 +154,7 @@
   /**
    * The internal representation of framework's offer constraints.
    */
-  Option<OfferConstraintsFilter> offerConstraintsFilter;
+  OfferConstraintsFilter offerConstraintsFilter;
 };
 
 
diff --git a/src/master/allocator/mesos/offer_constraints_filter.cpp b/src/master/allocator/mesos/offer_constraints_filter.cpp
index 441ebc1..45199ca 100644
--- a/src/master/allocator/mesos/offer_constraints_filter.cpp
+++ b/src/master/allocator/mesos/offer_constraints_filter.cpp
@@ -472,6 +472,12 @@
 {}
 
 
+OfferConstraintsFilter::OfferConstraintsFilter()
+  : OfferConstraintsFilter(
+        CHECK_NOTERROR(OfferConstraintsFilterImpl::create({Bytes(0), 0}, {})))
+{}
+
+
 OfferConstraintsFilter::OfferConstraintsFilter(OfferConstraintsFilter&&) =
   default;
 
diff --git a/src/master/framework.cpp b/src/master/framework.cpp
index 980828e..a93172a 100644
--- a/src/master/framework.cpp
+++ b/src/master/framework.cpp
@@ -35,7 +35,7 @@
     Master* const master,
     const Flags& masterFlags,
     const FrameworkInfo& info,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     const process::UPID& pid,
     const Owned<ObjectApprovers>& approvers,
     const process::Time& time)
@@ -57,7 +57,7 @@
     Master* const master,
     const Flags& masterFlags,
     const FrameworkInfo& info,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     const StreamingHttpConnection<v1::scheduler::Event>& http,
     const Owned<ObjectApprovers>& approvers,
     const process::Time& time)
@@ -83,7 +83,7 @@
         master,
         masterFlags,
         info,
-        None(),
+        OfferConstraints{},
         RECOVERED,
         false,
         nullptr,
@@ -95,7 +95,7 @@
     Master* const _master,
     const Flags& masterFlags,
     const FrameworkInfo& _info,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     State state,
     bool active_,
     const Owned<ObjectApprovers>& approvers,
@@ -538,7 +538,7 @@
 
 void Framework::update(
     const FrameworkInfo& newInfo,
-    Option<OfferConstraints>&& offerConstraints)
+    OfferConstraints&& offerConstraints)
 {
   // We only merge 'info' from the same framework 'id'.
   CHECK_EQ(info.id(), newInfo.id());
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 3d8e709..c4595cc 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -1301,9 +1301,7 @@
     _framework.mutable_offered_resources()->Add()->CopyFrom(resource);
   }
 
-  if (framework.offerConstraints().isSome()) {
-    *_framework.mutable_offer_constraints() = *framework.offerConstraints();
-  }
+  *_framework.mutable_offer_constraints() = framework.offerConstraints();
 
   return _framework;
 }
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 576ae10..d6d3ea7 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -2675,17 +2675,13 @@
   Option<Error> validationError =
     validateFramework(frameworkInfo, subscribe.suppressed_roles());
 
-  Option<OfferConstraints> offerConstraints;
-  if (subscribe.has_offer_constraints()) {
-    offerConstraints = std::move(*subscribe.mutable_offer_constraints());
-  }
-
   allocator::FrameworkOptions allocatorOptions;
 
   // TODO(asekretenko): Validate roles in offer constraints (see MESOS-10176).
-  if (validationError.isNone() && offerConstraints.isSome()) {
+  if (validationError.isNone()) {
     Try<OfferConstraintsFilter> filter = OfferConstraintsFilter::create(
-        offerConstraintsFilterOptions, OfferConstraints(*offerConstraints));
+        offerConstraintsFilterOptions,
+        OfferConstraints(subscribe.offer_constraints()));
 
     if (filter.isError()) {
       validationError = Error(std::move(filter.error()));
@@ -2715,7 +2711,7 @@
   void (Master::*_subscribe)(
       StreamingHttpConnection<v1::scheduler::Event>,
       FrameworkInfo&&,
-      Option<OfferConstraints>&&,
+      OfferConstraints&&,
       bool,
       FrameworkOptions&&,
       const Future<Owned<ObjectApprovers>>&) = &Self::_subscribe;
@@ -2728,7 +2724,7 @@
       _subscribe,
       http,
       std::move(frameworkInfo),
-      std::move(offerConstraints),
+      std::move(*subscribe.mutable_offer_constraints()),
       subscribe.force(),
       std::move(allocatorOptions),
       lambda::_1));
@@ -2738,7 +2734,7 @@
 void Master::_subscribe(
     StreamingHttpConnection<v1::scheduler::Event> http,
     FrameworkInfo&& frameworkInfo,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     bool force,
     ::mesos::allocator::FrameworkOptions&& options,
     const Future<Owned<ObjectApprovers>>& objectApprovers)
@@ -2937,17 +2933,13 @@
     validationError = validateFrameworkAuthentication(frameworkInfo, from);
   }
 
-  Option<OfferConstraints> offerConstraints;
-  if (subscribe.has_offer_constraints()) {
-    offerConstraints = std::move(*subscribe.mutable_offer_constraints());
-  }
-
   allocator::FrameworkOptions allocatorOptions;
 
   // TODO(asekretenko): Validate roles in offer constraints (see MESOS-10176).
-  if (validationError.isNone() && offerConstraints.isSome()) {
+  if (validationError.isNone()) {
     Try<OfferConstraintsFilter> filter = OfferConstraintsFilter::create(
-        offerConstraintsFilterOptions, OfferConstraints(*offerConstraints));
+        offerConstraintsFilterOptions,
+        OfferConstraints(subscribe.offer_constraints()));
 
     if (filter.isError()) {
       validationError = Error(std::move(filter.error()));
@@ -2991,7 +2983,7 @@
   void (Master::*_subscribe)(
       const UPID&,
       FrameworkInfo&&,
-      Option<OfferConstraints>&&,
+      OfferConstraints&&,
       bool,
       ::mesos::allocator::FrameworkOptions&&,
       const Future<Owned<ObjectApprovers>>&) = &Self::_subscribe;
@@ -3004,7 +2996,7 @@
       _subscribe,
       from,
       std::move(frameworkInfo),
-      std::move(offerConstraints),
+      std::move(*subscribe.mutable_offer_constraints()),
       subscribe.force(),
       std::move(allocatorOptions),
       lambda::_1));
@@ -3014,7 +3006,7 @@
 void Master::_subscribe(
     const UPID& from,
     FrameworkInfo&& frameworkInfo,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     bool force,
     ::mesos::allocator::FrameworkOptions&& options,
     const Future<Owned<ObjectApprovers>>& objectApprovers)
@@ -3296,13 +3288,11 @@
   const bool frameworkInfoChanged =
     !typeutils::equivalent(framework->info, call.framework_info());
 
-  Option<OfferConstraints> offerConstraints;
   allocator::FrameworkOptions allocatorOptions;
-  if (call.has_offer_constraints()) {
-    // TODO(asekretenko): Validate roles in offer constraints (see MESOS-10176).
-    Try<OfferConstraintsFilter> filter = OfferConstraintsFilter::create(
-        offerConstraintsFilterOptions,
-        OfferConstraints(call.offer_constraints()));
+  // TODO(asekretenko): Validate roles in offer constraints (see MESOS-10176).
+  Try<OfferConstraintsFilter> filter = OfferConstraintsFilter::create(
+      offerConstraintsFilterOptions,
+      OfferConstraints(call.offer_constraints()));
 
     if (filter.isError()) {
       return process::http::BadRequest(
@@ -3310,9 +3300,7 @@
           filter.error());
     }
 
-    allocatorOptions.offerConstraintsFilter = std::move(*filter);
-    offerConstraints = std::move(*call.mutable_offer_constraints());
-  }
+  allocatorOptions.offerConstraintsFilter = std::move(*filter);
 
   ActionObject actionObject =
     ActionObject::frameworkRegistration(call.framework_info());
@@ -3338,7 +3326,7 @@
   updateFramework(
       framework,
       call.framework_info(),
-      std::move(offerConstraints),
+      std::move(*call.mutable_offer_constraints()),
       std::move(allocatorOptions));
 
   if (frameworkInfoChanged) {
@@ -7504,7 +7492,7 @@
 void Master::updateFramework(
     Framework* framework,
     const FrameworkInfo& frameworkInfo,
-    Option<OfferConstraints>&& offerConstraints,
+    OfferConstraints&& offerConstraints,
     ::mesos::allocator::FrameworkOptions&& allocatorOptions)
 {
   LOG(INFO) << "Updating framework " << *framework << " with roles "
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 95aca58..83d8190 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -670,7 +670,7 @@
   void updateFramework(
       Framework* framework,
       const FrameworkInfo& frameworkInfo,
-      Option<::mesos::scheduler::OfferConstraints>&& offerConstraints,
+      ::mesos::scheduler::OfferConstraints&& offerConstraints,
       ::mesos::allocator::FrameworkOptions&& allocatorOptions);
 
   void sendFrameworkUpdates(const Framework& framework);
@@ -904,7 +904,7 @@
   void _subscribe(
       StreamingHttpConnection<v1::scheduler::Event> http,
       FrameworkInfo&& frameworkInfo,
-      Option<scheduler::OfferConstraints>&& offerConstraints,
+      scheduler::OfferConstraints&& offerConstraints,
       bool force,
       ::mesos::allocator::FrameworkOptions&& allocatorOptions,
       const process::Future<process::Owned<ObjectApprovers>>& objectApprovers);
@@ -916,7 +916,7 @@
   void _subscribe(
       const process::UPID& from,
       FrameworkInfo&& frameworkInfo,
-      Option<scheduler::OfferConstraints>&& offerConstraints,
+      scheduler::OfferConstraints&& offerConstraints,
       bool force,
       ::mesos::allocator::FrameworkOptions&& allocatorOptions,
       const process::Future<process::Owned<ObjectApprovers>>& objectApprovers);
@@ -2416,7 +2416,7 @@
       Master* const master,
       const Flags& masterFlags,
       const FrameworkInfo& info,
-      Option<::mesos::scheduler::OfferConstraints>&& offerConstraints,
+      ::mesos::scheduler::OfferConstraints&& offerConstraints,
       const process::UPID& _pid,
       const process::Owned<ObjectApprovers>& objectApprovers,
       const process::Time& time = process::Clock::now());
@@ -2424,7 +2424,7 @@
   Framework(Master* const master,
             const Flags& masterFlags,
             const FrameworkInfo& info,
-            Option<::mesos::scheduler::OfferConstraints>&& offerConstraints,
+            ::mesos::scheduler::OfferConstraints&& offerConstraints,
             const StreamingHttpConnection<v1::scheduler::Event>& _http,
             const process::Owned<ObjectApprovers>& objectApprovers,
             const process::Time& time = process::Clock::now());
@@ -2493,7 +2493,7 @@
   // 'webui_url', 'capabilities', and 'labels'.
   void update(
       const FrameworkInfo& newInfo,
-      Option<::mesos::scheduler::OfferConstraints>&& offerConstraints);
+      ::mesos::scheduler::OfferConstraints&& offerConstraints);
 
   // Reactivate framework with new connection: update connection-related state
   // and mark the framework as CONNECTED, regardless of the previous state.
@@ -2544,7 +2544,7 @@
   // action on object.
   Try<bool> approved(const authorization::ActionObject& actionObject) const;
 
-  const Option<::mesos::scheduler::OfferConstraints>& offerConstraints() const
+  const ::mesos::scheduler::OfferConstraints& offerConstraints() const
   {
     return offerConstraints_;
   }
@@ -2635,7 +2635,7 @@
   Framework(Master* const _master,
             const Flags& masterFlags,
             const FrameworkInfo& _info,
-            Option<::mesos::scheduler::OfferConstraints>&& offerConstraints,
+            ::mesos::scheduler::OfferConstraints&& offerConstraints,
             State state,
             bool active,
             const process::Owned<ObjectApprovers>& objectApprovers,
@@ -2671,7 +2671,7 @@
   process::Owned<ObjectApprovers> objectApprovers;
 
   // The last offer constraints with which the framework has been subscribed.
-  Option<::mesos::scheduler::OfferConstraints> offerConstraints_;
+  ::mesos::scheduler::OfferConstraints offerConstraints_;
 };
 
 
diff --git a/src/master/readonly_handler.cpp b/src/master/readonly_handler.cpp
index df499d1..034419b 100644
--- a/src/master/readonly_handler.cpp
+++ b/src/master/readonly_handler.cpp
@@ -258,10 +258,8 @@
     writer->field("labels", framework_->info.labels());
   }
 
-  if (framework_->offerConstraints().isSome()) {
-    writer->field(
-        "offer_constraints", JSON::Protobuf(*framework_->offerConstraints()));
-  };
+  writer->field(
+      "offer_constraints", JSON::Protobuf(framework_->offerConstraints()));
 }
 
 
