return std::make_unique<D4NFilterObject>(std::move(o), this, filter);
 }
 
+std::unique_ptr<Bucket> D4NFilterDriver::get_bucket(const RGWBucketInfo& i)
+{
+  return std::make_unique<D4NFilterBucket>(next->get_bucket(i), this);
+}
+
+int D4NFilterDriver::load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
+                                std::unique_ptr<Bucket>* bucket, optional_yield y)
+{
+  std::unique_ptr<Bucket> nb;
+  const int ret = next->load_bucket(dpp, b, &nb, y);
+  *bucket = std::make_unique<D4NFilterBucket>(std::move(nb), this);
+  return ret;
+}
+
 int D4NFilterBucket::create(const DoutPrefixProvider* dpp,
                             const CreateParams& params,
                             optional_yield y)
 
     virtual std::unique_ptr<User> get_user(const rgw_user& u) override;
 
     virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
+    virtual std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) override;
+    int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
+                  std::unique_ptr<Bucket>* bucket, optional_yield y) override;
 
     virtual std::unique_ptr<Writer> get_atomic_writer(const DoutPrefixProvider *dpp,
                                  optional_yield y,