diff --git a/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api b/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
index 7e6646ea..7916a06 100644
--- a/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
+++ b/sdk/fidl/fuchsia.gpu.magma/fuchsia.gpu.magma.api
@@ -1,3 +1,3 @@
 {
-  "fidl/fuchsia.gpu.magma": "3daa900dc08dc5a9944e62ff1fc92b65"
+  "fidl/fuchsia.gpu.magma": "97295598ebe9890fba8d633abf389496"
 }
\ No newline at end of file
diff --git a/sdk/fidl/fuchsia.gpu.magma/magma.fidl b/sdk/fidl/fuchsia.gpu.magma/magma.fidl
index 6834245..25675e1 100644
--- a/sdk/fidl/fuchsia.gpu.magma/magma.fidl
+++ b/sdk/fidl/fuchsia.gpu.magma/magma.fidl
@@ -131,6 +131,11 @@
     BUFFER = 11;
 };
 
+@available(added=13)
+type ImportFlags = flexible bits : uint64 {
+    EVENT_ONE_SHOT = 0x1;
+};
+
 type BufferOp = flexible enum : uint32 {
     /// Populate the hardware page tables with the pages mapped in this range, committing pages
     /// as needed. This is not needed for allocations mapped GROWABLE, since the page tables will
@@ -202,13 +207,22 @@
 /// If a system driver error occurs, or if the client sends a message that the client should have
 /// known is invalid, the connection will be closed and a zx.Status sent via epitaph.
 protocol Primary {
-    /// Imports an object for use in the system driver.
+    /// DEPRECATED: use ImportObject.
     ImportObject2(resource struct {
         object zx.Handle;
         object_type ObjectType;
         object_id ObjectId;
     });
 
+    /// Imports an object for use in the system driver.
+    @available(added=13)
+    ImportObject(resource struct {
+        object zx.Handle;
+        flags ImportFlags;
+        object_type ObjectType;
+        object_id ObjectId;
+    });
+
     /// Destroys the object with `object_id` within this connection.
     ReleaseObject(struct {
         object_id ObjectId;
diff --git a/sdk/lib/magma_client/include/lib/magma/magma.h b/sdk/lib/magma_client/include/lib/magma/magma.h
index 5079852..af11daf 100644
--- a/sdk/lib/magma_client/include/lib/magma/magma.h
+++ b/sdk/lib/magma_client/include/lib/magma/magma.h
@@ -193,6 +193,22 @@
     magma_semaphore_id_t* id_out);
 
 ///
+/// \brief Imports and takes ownership of the semaphore referred to by the given handle. Takes
+///        ownership of |semaphore_handle| on both success and failure.
+/// \param connection An open connection.
+/// \param semaphore_handle A valid semaphore handle.
+/// \param flags Pass MAGMA_IMPORT_SEMAPHORE_ONESHOT to prevent auto-reset after wait.
+/// \param semaphore_out The returned semaphore.
+/// \param id_out The id of the semaphore.
+///
+MAGMA_EXPORT magma_status_t magma_connection_import_semaphore2(
+    magma_connection_t connection,
+    magma_handle_t semaphore_handle,
+    uint64_t flags,
+    magma_semaphore_t* semaphore_out,
+    magma_semaphore_id_t* id_out);
+
+///
 /// \brief Perform an operation on a range of a buffer
 /// \param connection An open connection.
 /// \param buffer A valid buffer.
diff --git a/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h b/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
index 423502a..523af83 100644
--- a/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
+++ b/sdk/lib/magma_client/include/lib/magma/magma_common_defs.h
@@ -16,7 +16,7 @@
 
 // LINT.IfChange(version)
 // This version should be incremented whenever the Magma API changes.
-#define MAGMA_API_VERSION 2
+#define MAGMA_API_VERSION 3
 // LINT.ThenChange()
 
 // LINT.IfChange
@@ -88,6 +88,8 @@
 
 #define MAGMA_PERF_COUNTER_RESULT_DISCONTINUITY ((uint32_t)(1 << 0))
 
+#define MAGMA_IMPORT_SEMAPHORE_ONE_SHOT ((uint64_t)(1 << 0))
+
 typedef uint32_t magma_format_t;
 
 // Values must match fuchsia.sysmem.PixelFormatType
diff --git a/sdk/lib/magma_client/magma_client.api b/sdk/lib/magma_client/magma_client.api
index df4e599..6c08220 100644
--- a/sdk/lib/magma_client/magma_client.api
+++ b/sdk/lib/magma_client/magma_client.api
@@ -1,5 +1,5 @@
 {
-  "pkg/magma_client/include/lib/magma/magma.h": "aaf2e1b98394e4ae247d74d7b1aec67b",
-  "pkg/magma_client/include/lib/magma/magma_common_defs.h": "7153a36e07fcff5e632865fb0b5bb059",
+  "pkg/magma_client/include/lib/magma/magma.h": "6ea9bd882e4b6314213b85a01f85c8b1",
+  "pkg/magma_client/include/lib/magma/magma_common_defs.h": "dcaaaae4a2b8f5f6ba3a6bfb6aac2c71",
   "pkg/magma_client/include/lib/magma/magma_sysmem.h": "0e8f200a0a39629e98e5dab572570c68"
 }
\ No newline at end of file
diff --git a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
index 59b3202..7bbfbaa 100644
--- a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
+++ b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/non_hardware_test_device.cc
@@ -292,6 +292,7 @@
 
       uint64_t id() const override { return real_semaphore_->id(); }
       uint64_t global_id() const override { return real_semaphore_->global_id(); }
+      void SetOneShot() override {}
 
       bool duplicate_handle(uint32_t* handle_out) const override {
         return real_semaphore_->duplicate_handle(handle_out);
diff --git a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
index 760c66d..944c1a5 100644
--- a/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
+++ b/src/graphics/drivers/msd-arm-mali/tests/unit_tests/test_command_buffer.cc
@@ -201,7 +201,8 @@
     auto platform_semaphore = magma::PlatformSemaphore::Create();
     zx::handle handle;
     platform_semaphore->duplicate_handle(&handle);
-    connection_->ImportObject(std::move(handle), fuchsia_gpu_magma::wire::ObjectType::kEvent,
+    connection_->ImportObject(std::move(handle), /*flags=*/0,
+                              fuchsia_gpu_magma::wire::ObjectType::kEvent,
                               platform_semaphore->id());
 
     magma_arm_mali_atom atom;
diff --git a/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc b/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
index bd74429..9eb9493 100644
--- a/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
+++ b/src/graphics/drivers/msd-intel-gen/tests/unit_tests/test_hw_device.cc
@@ -518,6 +518,8 @@
 
     bool WaitAsync(magma::PlatformPort* port, uint64_t key) override { return false; }
 
+    void SetOneShot() override {}
+
     std::unique_ptr<magma::PlatformSemaphore> sem_ = magma::PlatformSemaphore::Create();
     std::unique_ptr<magma::PlatformSemaphore> signal_sem_ = magma::PlatformSemaphore::Create();
     std::unique_ptr<magma::PlatformSemaphore> wait_sem_ = magma::PlatformSemaphore::Create();
diff --git a/src/graphics/lib/magma/include/magma/magma.json b/src/graphics/lib/magma/include/magma/magma.json
index 1ae88f5..f3348c0b 100644
--- a/src/graphics/lib/magma/include/magma/magma.json
+++ b/src/graphics/lib/magma/include/magma/magma.json
@@ -1,6 +1,6 @@
 {
     "magma-interface": {
-        "next-free-ordinal": 91,
+        "next-free-ordinal": 92,
         "exports": [
             {
                 "ordinal": 46,
@@ -295,6 +295,39 @@
                 ]
             },
             {
+                "ordinal": 91,
+                "name": "magma_connection_import_semaphore2",
+                "type": "magma_status_t",
+                "description": "Imports and takes ownership of the semaphore referred to by the given handle. Takes ownership of |semaphore_handle| on both success and failure.",
+                "arguments": [
+                    {
+                        "name": "connection",
+                        "type": "magma_connection_t",
+                        "description": "An open connection."
+                    },
+                    {
+                        "name": "semaphore_handle",
+                        "type": "magma_handle_t",
+                        "description": "A valid semaphore handle."
+                    },
+                    {
+                        "name": "flags",
+                        "type": "uint64_t",
+                        "description": "Pass MAGMA_IMPORT_SEMAPHORE_ONESHOT to prevent auto-reset after wait."
+                    },
+                    {
+                        "name": "semaphore_out",
+                        "type": "magma_semaphore_t*",
+                        "description": "The returned semaphore."
+                    },
+                    {
+                        "name": "id_out",
+                        "type": "magma_semaphore_id_t*",
+                        "description": "The id of the semaphore."
+                    }
+                ]
+            },
+            {
                 "ordinal": 65,
                 "name": "magma_connection_perform_buffer_op",
                 "type": "magma_status_t",
diff --git a/src/graphics/lib/magma/src/libmagma/magma.cc b/src/graphics/lib/magma/src/libmagma/magma.cc
index c8e87cb..7b62b1c 100644
--- a/src/graphics/lib/magma/src/libmagma/magma.cc
+++ b/src/graphics/lib/magma/src/libmagma/magma.cc
@@ -112,7 +112,7 @@
 
   magma_status_t result =
       magma::PlatformConnectionClient::cast(connection)
-          ->ImportObject(handle, magma::PlatformObject::BUFFER, platform_buffer->id());
+          ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER, platform_buffer->id());
   if (result != MAGMA_STATUS_OK)
     return DRET_MSG(result, "ImportObject failed");
 
@@ -181,7 +181,7 @@
 
   magma_status_t result =
       magma::PlatformConnectionClient::cast(connection)
-          ->ImportObject(handle, magma::PlatformObject::BUFFER, platform_buffer->id());
+          ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER, platform_buffer->id());
   if (result != MAGMA_STATUS_OK)
     return DRET_MSG(result, "ImportObject failed");
 
@@ -306,7 +306,7 @@
 
   magma_status_t result =
       magma::PlatformConnectionClient::cast(connection)
-          ->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id());
+          ->ImportObject(handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE, semaphore->id());
   if (result != MAGMA_STATUS_OK)
     return DRET_MSG(result, "failed to ImportObject");
 
@@ -439,21 +439,33 @@
                                                  uint32_t semaphore_handle,
                                                  magma_semaphore_t* semaphore_out,
                                                  magma_semaphore_id_t* id_out) {
+  return magma_connection_import_semaphore2(connection, semaphore_handle, /*flags=*/0,
+                                            semaphore_out, id_out);
+}
+
+magma_status_t magma_connection_import_semaphore2(magma_connection_t connection,
+                                                  uint32_t semaphore_handle, uint64_t flags,
+                                                  magma_semaphore_t* semaphore_out,
+                                                  magma_semaphore_id_t* id_out) {
   auto platform_semaphore = magma::PlatformSemaphore::Import(semaphore_handle);
   if (!platform_semaphore)
     return DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "PlatformSemaphore::Import failed");
 
   platform_semaphore->set_local_id(s_semaphore_id_generator.get());
 
+  if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+    platform_semaphore->SetOneShot();
+  }
+
   uint32_t handle;
   if (!platform_semaphore->duplicate_handle(&handle))
     return DRET_MSG(MAGMA_STATUS_ACCESS_DENIED, "failed to duplicate handle");
 
   magma_status_t result =
       magma::PlatformConnectionClient::cast(connection)
-          ->ImportObject(handle, magma::PlatformObject::SEMAPHORE, platform_semaphore->id());
+          ->ImportObject(handle, flags, magma::PlatformObject::SEMAPHORE, platform_semaphore->id());
   if (result != MAGMA_STATUS_OK)
-    return DRET_MSG(result, "ImportObject failed: %d", result);
+    return DRET_MSG(result, "ImportObject2 failed: %d", result);
 
   *id_out = platform_semaphore->id();
   *semaphore_out = reinterpret_cast<magma_semaphore_t>(platform_semaphore.release());
diff --git a/src/graphics/lib/magma/src/libmagma/magma.ifs b/src/graphics/lib/magma/src/libmagma/magma.ifs
index 4fbc6b6..0eb9fe8 100644
--- a/src/graphics/lib/magma/src/libmagma/magma.ifs
+++ b/src/graphics/lib/magma/src/libmagma/magma.ifs
@@ -41,6 +41,7 @@
   - { Name: magma_connection_get_notification_channel_handle, Type: Func }
   - { Name: magma_connection_import_buffer, Type: Func }
   - { Name: magma_connection_import_semaphore, Type: Func }
+  - { Name: magma_connection_import_semaphore2, Type: Func }
   - { Name: magma_connection_map_buffer, Type: Func }
   - { Name: magma_connection_perform_buffer_op, Type: Func }
   - { Name: magma_connection_read_notification_channel, Type: Func }
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h b/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
index 25c3539..1ebfa3a 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_connection.h
@@ -44,8 +44,8 @@
   class Delegate {
    public:
     virtual ~Delegate() {}
-    virtual magma::Status ImportObject(uint32_t handle, PlatformObject::Type object_type,
-                                       uint64_t client_id) = 0;
+    virtual magma::Status ImportObject(uint32_t handle, uint64_t flags,
+                                       PlatformObject::Type object_type, uint64_t client_id) = 0;
     virtual magma::Status ReleaseObject(uint64_t object_id, PlatformObject::Type object_type) = 0;
 
     virtual magma::Status CreateContext(uint32_t context_id) = 0;
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h b/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
index 29e24d3..340db56 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_connection_client.h
@@ -39,8 +39,8 @@
                                                           uint64_t max_inflight_messages,
                                                           uint64_t max_inflight_bytes);
   // Imports an object for use in the system driver
-  virtual magma_status_t ImportObject(uint32_t handle, PlatformObject::Type object_type,
-                                      uint64_t object_id) = 0;
+  virtual magma_status_t ImportObject(uint32_t handle, uint64_t flags,
+                                      PlatformObject::Type object_type, uint64_t object_id) = 0;
 
   // Releases the connection's reference to the given object.
   virtual magma_status_t ReleaseObject(uint64_t object_id, PlatformObject::Type object_type) = 0;
diff --git a/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h b/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
index af5ce80..24fe834 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/platform_semaphore.h
@@ -66,9 +66,9 @@
   // Returns MAGMA_STATUS_OK if the event is signaled before the timeout expires.
   virtual magma::Status WaitNoReset(uint64_t timeout_ms) = 0;
 
-  // If the event is signaled before the timeout expires resets the state to
-  // unsignalled and returns MAGMA_STATUS_OK.  Only one thread should ever wait on
-  // a given semaphore.
+  // If the event is signaled before the timeout expires, resets the state to
+  // unsignalled (if not one shot) and returns MAGMA_STATUS_OK.  Only one thread
+  // should ever wait on a given semaphore.
   virtual magma::Status Wait(uint64_t timeout_ms) = 0;
 
   magma::Status Wait() { return Wait(UINT64_MAX); }
@@ -77,6 +77,9 @@
   // Note that a port wait completion will not autoreset the semaphore.
   // On success returns true.
   virtual bool WaitAsync(PlatformPort* port, uint64_t key) = 0;
+
+  // Set one shot to prevent reset of the semaphore.
+  virtual void SetOneShot() = 0;
 };
 
 }  // namespace magma
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
index 0a87289..8d249208 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.cc
@@ -286,7 +286,36 @@
   }
   FlowControl(size);
 
-  if (!delegate_->ImportObject(request->object.release(), *object_type, request->object_id))
+  if (!delegate_->ImportObject(request->object.release(), /*flags=*/0, *object_type,
+                               request->object_id))
+    SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+}
+
+void ZirconPlatformConnection::ImportObject(ImportObjectRequestView request,
+                                            ImportObjectCompleter::Sync& completer) {
+  DLOG("ZirconPlatformConnection: ImportObject");
+
+  auto object_type = GetObjectType(request->object_type);
+  if (!object_type) {
+    SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+    return;
+  }
+
+  auto flags = static_cast<uint64_t>(request->flags);
+
+  uint64_t size = 0;
+
+  if (object_type == magma::PlatformObject::BUFFER) {
+    zx::unowned_vmo vmo(request->object.get());
+    zx_status_t status = vmo->get_size(&size);
+    if (status != ZX_OK) {
+      SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+      return;
+    }
+  }
+  FlowControl(size);
+
+  if (!delegate_->ImportObject(request->object.release(), flags, *object_type, request->object_id))
     SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
 }
 
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
index 0ec4e78..6bec440 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection.h
@@ -142,6 +142,8 @@
 
   void ImportObject2(ImportObject2RequestView request,
                      ImportObject2Completer::Sync& _completer) override;
+  void ImportObject(ImportObjectRequestView request,
+                    ImportObjectCompleter::Sync& _completer) override;
   void ReleaseObject(ReleaseObjectRequestView request,
                      ReleaseObjectCompleter::Sync& _completer) override;
   void CreateContext(CreateContextRequestView request,
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
index 3bbb32d..228e172 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.cc
@@ -25,6 +25,8 @@
 static_assert(static_cast<uint64_t>(MapFlags::kExecute) == MAGMA_MAP_FLAG_EXECUTE, "mismatch");
 static_assert(static_cast<uint64_t>(MapFlags::kGrowable) == MAGMA_MAP_FLAG_GROWABLE, "mismatch");
 static_assert(static_cast<uint64_t>(MapFlags::kVendorFlag0) == MAGMA_MAP_FLAG_VENDOR_0, "mismatch");
+using fuchsia_gpu_magma::wire::ImportFlags;
+static_assert(static_cast<uint64_t>(ImportFlags::kEventOneShot) == MAGMA_IMPORT_SEMAPHORE_ONE_SHOT, "mismatch");
 
 // clang-format on
 
@@ -156,7 +158,7 @@
 static_assert(static_cast<uint32_t>(magma::PlatformObject::BUFFER) ==
               static_cast<uint32_t>(fuchsia_gpu_magma::wire::ObjectType::kBuffer));
 
-magma_status_t PrimaryWrapper::ImportObject(zx::handle handle,
+magma_status_t PrimaryWrapper::ImportObject(zx::handle handle, uint64_t flags,
                                             magma::PlatformObject::Type object_type,
                                             uint64_t object_id) {
   uint64_t size = 0;
@@ -173,8 +175,10 @@
 
   auto wire_object_type = static_cast<fuchsia_gpu_magma::wire::ObjectType>(object_type);
 
+  auto import_flags = static_cast<fuchsia_gpu_magma::wire::ImportFlags>(flags);
+
   zx_status_t status =
-      client_->ImportObject2(std::move(handle), wire_object_type, object_id).status();
+      client_->ImportObject(std::move(handle), import_flags, wire_object_type, object_id).status();
   if (status == ZX_OK) {
     UpdateFlowControl(size);
   }
@@ -498,10 +502,10 @@
       : client_(std::move(channel), max_inflight_messages, max_inflight_bytes),
         notification_channel_(std::move(notification_channel)) {}
 
-  magma_status_t ImportObject(uint32_t handle, PlatformObject::Type object_type,
+  magma_status_t ImportObject(uint32_t handle, uint64_t flags, PlatformObject::Type object_type,
                               uint64_t object_id) override {
     DLOG("ZirconPlatformConnectionClient: ImportObject");
-    magma_status_t result = client_.ImportObject(zx::handle(handle), object_type, object_id);
+    magma_status_t result = client_.ImportObject(zx::handle(handle), flags, object_type, object_id);
 
     if (result != MAGMA_STATUS_OK)
       return DRET_MSG(result, "failed to write to channel");
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
index 67512d6..c002181 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_connection_client.h
@@ -22,8 +22,8 @@
  public:
   PrimaryWrapper(zx::channel channel, uint64_t max_inflight_messages, uint64_t max_inflight_bytes);
 
-  magma_status_t ImportObject(zx::handle handle, magma::PlatformObject::Type object_type,
-                              uint64_t object_id);
+  magma_status_t ImportObject(zx::handle handle, uint64_t flags,
+                              magma::PlatformObject::Type object_type, uint64_t object_id);
   magma_status_t ReleaseObject(uint64_t object_id, magma::PlatformObject::Type object_type);
   magma_status_t CreateContext(uint32_t context_id);
   magma_status_t DestroyContext(uint32_t context_id);
diff --git a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
index 9421fc4..61072a1 100644
--- a/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
+++ b/src/graphics/lib/magma/src/magma_util/platform/zircon/zircon_platform_semaphore.h
@@ -32,10 +32,12 @@
   bool duplicate_handle(zx::handle* handle_out) const override;
 
   void Reset() override {
-    event_.signal(zx_signal(), 0);
-    TRACE_DURATION("magma:sync", "semaphore reset", "id", koid_);
+    TRACE_DURATION("magma:sync", "semaphore reset", "id", koid_, "oneshot", is_one_shot_);
     TRACE_FLOW_END("magma:sync", "semaphore signal", koid_);
     TRACE_FLOW_END("magma:sync", "semaphore wait async", koid_);
+    if (!is_one_shot_) {
+      event_.signal(zx_signal(), 0);
+    }
   }
 
   void Signal() override {
@@ -51,6 +53,8 @@
 
   bool WaitAsync(PlatformPort* port, uint64_t key) override;
 
+  void SetOneShot() override { is_one_shot_ = true; }
+
   zx_handle_t zx_handle() const { return event_.get(); }
 
   zx_signals_t zx_signal() const { return ZX_EVENT_SIGNALED; }
@@ -59,6 +63,7 @@
   zx::event event_;
   uint64_t koid_;
   uint64_t local_id_ = 0;
+  bool is_one_shot_ = false;
 };
 
 }  // namespace magma
diff --git a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
index 88d7e45..0ba9d71 100644
--- a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.cc
@@ -253,7 +253,7 @@
   }
 }
 
-magma::Status MagmaSystemConnection::ImportObject(uint32_t handle,
+magma::Status MagmaSystemConnection::ImportObject(uint32_t handle, uint64_t flags,
                                                   magma::PlatformObject::Type object_type,
                                                   uint64_t client_id) {
   if (!client_id)
@@ -274,6 +274,9 @@
         return MAGMA_DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "failed to import platform semaphore");
 
       platform_sem->set_local_id(client_id);
+      if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+        platform_sem->SetOneShot();
+      }
 
       auto iter = semaphore_map_.find(client_id);
       if (iter != semaphore_map_.end())
diff --git a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
index f943565d4..49c5050 100644
--- a/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver/magma_system_connection.h
@@ -33,8 +33,8 @@
 
   ~MagmaSystemConnection() override;
 
-  magma::Status ImportObject(uint32_t handle, magma::PlatformObject::Type object_type,
-                             uint64_t client_id) override;
+  magma::Status ImportObject(uint32_t handle, uint64_t flags,
+                             magma::PlatformObject::Type object_type, uint64_t client_id) override;
   magma::Status ReleaseObject(uint64_t object_id, magma::PlatformObject::Type object_type) override;
   magma::Status CreateContext(uint32_t context_id) override;
   magma::Status DestroyContext(uint32_t context_id) override;
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
index 3c158bf..699242c 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.cc
@@ -264,7 +264,7 @@
   return notification_handler_->GetAsyncDispatcher();
 }
 
-magma::Status MagmaSystemConnection::ImportObject(zx::handle handle,
+magma::Status MagmaSystemConnection::ImportObject(zx::handle handle, uint64_t flags,
                                                   fuchsia_gpu_magma::wire::ObjectType object_type,
                                                   uint64_t client_id) {
   if (!client_id)
@@ -284,6 +284,9 @@
         return MAGMA_DRET_MSG(MAGMA_STATUS_INVALID_ARGS, "failed to import platform semaphore");
 
       platform_sem->set_local_id(client_id);
+      if (flags & MAGMA_IMPORT_SEMAPHORE_ONE_SHOT) {
+        platform_sem->SetOneShot();
+      }
 
       auto iter = semaphore_map_.find(client_id);
       if (iter != semaphore_map_.end())
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
index 78d0dbb..2bca144 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/magma_system_connection.h
@@ -28,7 +28,8 @@
 
   ~MagmaSystemConnection() override;
 
-  magma::Status ImportObject(zx::handle handle, fuchsia_gpu_magma::wire::ObjectType object_type,
+  magma::Status ImportObject(zx::handle handle, uint64_t flags,
+                             fuchsia_gpu_magma::wire::ObjectType object_type,
                              uint64_t client_id) override;
   magma::Status ReleaseObject(uint64_t object_id,
                               fuchsia_gpu_magma::wire::ObjectType object_type) override;
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
index e067de5..c5180ca 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_magma_system_connection.cc
@@ -148,8 +148,9 @@
   zx::handle duplicate_handle1;
   ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle1));
 
-  EXPECT_TRUE(connection.ImportObject(
-      std::move(duplicate_handle1), fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id()));
+  EXPECT_TRUE(connection.ImportObject(std::move(duplicate_handle1), /*flags=*/0,
+                                      fuchsia_gpu_magma::wire::ObjectType::kEvent,
+                                      semaphore->id()));
 
   auto system_semaphore = connection.LookupSemaphore(semaphore->id());
   EXPECT_TRUE(system_semaphore);
@@ -160,8 +161,9 @@
   ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle2));
 
   // Can't import the same id twice
-  EXPECT_FALSE(connection.ImportObject(
-      std::move(duplicate_handle2), fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id()));
+  EXPECT_FALSE(connection.ImportObject(std::move(duplicate_handle2), /*flags=*/0,
+                                       fuchsia_gpu_magma::wire::ObjectType::kEvent,
+                                       semaphore->id()));
 
   EXPECT_TRUE(
       connection.ReleaseObject(semaphore->id(), fuchsia_gpu_magma::wire::ObjectType::kEvent));
@@ -184,7 +186,7 @@
   MagmaSystemConnection connection(dev, std::move(msd_connection));
 
   constexpr uint32_t kBogusHandle = 0xabcd1234;
-  EXPECT_FALSE(connection.ImportObject(zx::handle(kBogusHandle),
+  EXPECT_FALSE(connection.ImportObject(zx::handle(kBogusHandle), /*flags=*/0,
                                        fuchsia_gpu_magma::wire::ObjectType::kEvent, 0));
 
   auto buffer = magma::PlatformBuffer::Create(4096, "test");
@@ -193,7 +195,7 @@
   zx::handle buffer_handle;
   ASSERT_TRUE(buffer->duplicate_handle(&buffer_handle));
 
-  EXPECT_FALSE(connection.ImportObject(std::move(buffer_handle),
+  EXPECT_FALSE(connection.ImportObject(std::move(buffer_handle), /*flags=*/0,
                                        fuchsia_gpu_magma::wire::ObjectType::kEvent, buffer->id()));
 }
 
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
index c7f70ca..092b4d9 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/tests/test_zircon_connection.cc
@@ -166,7 +166,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheck(1, buf->size());
@@ -179,7 +180,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheck(1, buf->size());
@@ -192,7 +194,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_buffer_id,
                                                 magma::PlatformObject::BUFFER),
@@ -209,9 +212,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheckOneMessage();
   }
@@ -224,9 +227,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheckOneMessage();
   }
@@ -239,9 +242,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_semaphore_id,
                                                 magma::PlatformObject::SEMAPHORE),
               MAGMA_STATUS_OK);
@@ -289,7 +292,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->MapBuffer(buf->id(), /*address=*/page_size() * 1000,
                                             /*offset=*/1u * page_size(),
@@ -487,7 +491,8 @@
  public:
   TestDelegate(std::shared_ptr<SharedData> shared_data) : shared_data_(shared_data) {}
 
-  magma::Status ImportObject(zx::handle handle, fuchsia_gpu_magma::wire::ObjectType object_type,
+  magma::Status ImportObject(zx::handle handle, uint64_t flags,
+                             fuchsia_gpu_magma::wire::ObjectType object_type,
                              uint64_t object_id) override {
     std::unique_lock<std::mutex> lock(shared_data_->mutex);
     switch (object_type) {
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
index 92f0405..1be5d01 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.cc
@@ -200,7 +200,38 @@
   }
   FlowControl(size);
 
-  if (!delegate_->ImportObject(std::move(request->object), *object_type, request->object_id))
+  if (!delegate_->ImportObject(std::move(request->object), /*flags=*/0, *object_type,
+                               request->object_id))
+    SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+}
+
+void ZirconConnection::ImportObject(ImportObjectRequestView request,
+                                    ImportObjectCompleter::Sync& completer) {
+  TRACE_DURATION("magma", "ZirconConnection::ImportObject", "type",
+                 static_cast<uint32_t>(request->object_type));
+  MAGMA_DLOG("ZirconConnection: ImportObject");
+
+  auto object_type = ValidateObjectType(request->object_type);
+  if (!object_type) {
+    SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+    return;
+  }
+
+  auto flags = static_cast<uint64_t>(request->flags);
+
+  uint64_t size = 0;
+
+  if (object_type == fuchsia_gpu_magma::wire::ObjectType::kBuffer) {
+    zx::unowned_vmo vmo(request->object.get());
+    zx_status_t status = vmo->get_size(&size);
+    if (status != ZX_OK) {
+      SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
+      return;
+    }
+  }
+  FlowControl(size);
+
+  if (!delegate_->ImportObject(std::move(request->object), flags, *object_type, request->object_id))
     SetError(&completer, MAGMA_STATUS_INVALID_ARGS);
 }
 
diff --git a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
index 0446ac3..dc43316 100644
--- a/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
+++ b/src/graphics/lib/magma/src/sys_driver_cpp/zircon_connection.h
@@ -42,7 +42,7 @@
   class Delegate {
    public:
     virtual ~Delegate() {}
-    virtual magma::Status ImportObject(zx::handle handle,
+    virtual magma::Status ImportObject(zx::handle handle, uint64_t flags,
                                        fuchsia_gpu_magma::wire::ObjectType object_type,
                                        uint64_t client_id) = 0;
     virtual magma::Status ReleaseObject(uint64_t object_id,
@@ -136,6 +136,8 @@
  private:
   void ImportObject2(ImportObject2RequestView request,
                      ImportObject2Completer::Sync& _completer) override;
+  void ImportObject(ImportObjectRequestView request,
+                    ImportObjectCompleter::Sync& _completer) override;
   void ReleaseObject(ReleaseObjectRequestView request,
                      ReleaseObjectCompleter::Sync& _completer) override;
   void CreateContext(CreateContextRequestView request,
diff --git a/src/graphics/lib/magma/tests/helper/command_buffer_helper.h b/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
index a4376df..0d0f457 100644
--- a/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
+++ b/src/graphics/lib/magma/tests/helper/command_buffer_helper.h
@@ -228,10 +228,10 @@
       success = semaphore->duplicate_handle(&duplicate_handle);
       MAGMA_DASSERT(success);
       wait_semaphores_.push_back(semaphore);
-      success =
-          connection_
-              ->ImportObject(duplicate_handle, magma::PlatformObject::SEMAPHORE, semaphore->id())
-              .ok();
+      success = connection_
+                    ->ImportObject(duplicate_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+                                   semaphore->id())
+                    .ok();
       MAGMA_DASSERT(success);
       abi_wait_semaphore_ids()[i] = semaphore->id();
       msd_wait_semaphores_.push_back(
@@ -247,10 +247,10 @@
       success = semaphore->duplicate_handle(&duplicate_handle);
       MAGMA_DASSERT(success);
       signal_semaphores_.push_back(semaphore);
-      success =
-          connection_
-              ->ImportObject(duplicate_handle, magma::PlatformObject::SEMAPHORE, semaphore->id())
-              .ok();
+      success = connection_
+                    ->ImportObject(duplicate_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+                                   semaphore->id())
+                    .ok();
       MAGMA_DASSERT(success);
       abi_signal_semaphore_ids()[i] = semaphore->id();
       msd_signal_semaphores_.push_back(
diff --git a/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h b/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
index b4caf9a..10fe5fa 100644
--- a/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
+++ b/src/graphics/lib/magma/tests/helper/command_buffer_helper_cpp.h
@@ -202,7 +202,7 @@
       MAGMA_DASSERT(success);
       wait_semaphores_.push_back(semaphore);
       success = connection_
-                    ->ImportObject(zx::event(std::move(duplicate_handle)),
+                    ->ImportObject(zx::event(std::move(duplicate_handle)), /*flags=*/0,
                                    fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id())
                     .ok();
       MAGMA_DASSERT(success);
@@ -221,7 +221,7 @@
       MAGMA_DASSERT(success);
       signal_semaphores_.push_back(semaphore);
       success = connection_
-                    ->ImportObject(zx::event(std::move(duplicate_handle)),
+                    ->ImportObject(zx::event(std::move(duplicate_handle)), /*flags=*/0,
                                    fuchsia_gpu_magma::wire::ObjectType::kEvent, semaphore->id())
                     .ok();
       MAGMA_DASSERT(success);
diff --git a/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc b/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
index 420fde8..4ccc4d5 100644
--- a/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
+++ b/src/graphics/lib/magma/tests/unit_tests/test_magma_system_connection.cc
@@ -144,8 +144,8 @@
   uint32_t duplicate_handle1;
   ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle1));
 
-  EXPECT_TRUE(connection.ImportObject(duplicate_handle1, magma::PlatformObject::SEMAPHORE,
-                                      semaphore->id()));
+  EXPECT_TRUE(connection.ImportObject(duplicate_handle1, /*flags=*/0,
+                                      magma::PlatformObject::SEMAPHORE, semaphore->id()));
 
   auto system_semaphore = connection.LookupSemaphore(semaphore->id());
   EXPECT_TRUE(system_semaphore);
@@ -155,8 +155,8 @@
   ASSERT_TRUE(semaphore->duplicate_handle(&duplicate_handle2));
 
   // Can't import the same id twice
-  EXPECT_FALSE(connection.ImportObject(duplicate_handle2, magma::PlatformObject::SEMAPHORE,
-                                       semaphore->id()));
+  EXPECT_FALSE(connection.ImportObject(duplicate_handle2, /*flags=*/0,
+                                       magma::PlatformObject::SEMAPHORE, semaphore->id()));
 
   EXPECT_TRUE(connection.ReleaseObject(semaphore->id(), magma::PlatformObject::SEMAPHORE));
 
@@ -178,7 +178,8 @@
   MagmaSystemConnection connection(dev, MsdConnectionUniquePtr(msd_connection));
 
   constexpr uint32_t kBogusHandle = 0xabcd1234;
-  EXPECT_FALSE(connection.ImportObject(kBogusHandle, magma::PlatformObject::SEMAPHORE, 0));
+  EXPECT_FALSE(
+      connection.ImportObject(kBogusHandle, /*flags=*/0, magma::PlatformObject::SEMAPHORE, 0));
 
   auto buffer = magma::PlatformBuffer::Create(4096, "test");
   ASSERT_TRUE(buffer);
@@ -186,8 +187,8 @@
   uint32_t buffer_handle;
   ASSERT_TRUE(buffer->duplicate_handle(&buffer_handle));
 
-  EXPECT_FALSE(
-      connection.ImportObject(buffer_handle, magma::PlatformObject::SEMAPHORE, buffer->id()));
+  EXPECT_FALSE(connection.ImportObject(buffer_handle, /*flags=*/0, magma::PlatformObject::SEMAPHORE,
+                                       buffer->id()));
 }
 
 TEST(MagmaSystemConnection, BufferSharing) {
diff --git a/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc b/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
index 602031b..c49e15e 100644
--- a/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
+++ b/src/graphics/lib/magma/tests/unit_tests/test_platform_connection.cc
@@ -165,7 +165,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheck(1, buf->size());
@@ -178,7 +179,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheck(1, buf->size());
@@ -191,7 +193,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_buffer_id,
                                                 magma::PlatformObject::BUFFER),
@@ -208,9 +211,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheckOneMessage();
   }
@@ -223,9 +226,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->Flush(), MAGMA_STATUS_OK);
     FlowControlCheckOneMessage();
   }
@@ -238,9 +241,9 @@
 
     uint32_t handle;
     EXPECT_TRUE(semaphore->duplicate_handle(&handle));
-    EXPECT_EQ(
-        client_connection_->ImportObject(handle, magma::PlatformObject::SEMAPHORE, semaphore->id()),
-        MAGMA_STATUS_OK);
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0,
+                                               magma::PlatformObject::SEMAPHORE, semaphore->id()),
+              MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->ReleaseObject(shared_data_->test_semaphore_id,
                                                 magma::PlatformObject::SEMAPHORE),
               MAGMA_STATUS_OK);
@@ -288,7 +291,8 @@
 
     uint32_t handle;
     EXPECT_TRUE(buf->duplicate_handle(&handle));
-    EXPECT_EQ(client_connection_->ImportObject(handle, magma::PlatformObject::BUFFER, buf->id()),
+    EXPECT_EQ(client_connection_->ImportObject(handle, /*flags=*/0, magma::PlatformObject::BUFFER,
+                                               buf->id()),
               MAGMA_STATUS_OK);
     EXPECT_EQ(client_connection_->MapBuffer(buf->id(), /*address=*/page_size() * 1000,
                                             /*offset=*/1u * page_size(),
@@ -483,8 +487,8 @@
  public:
   TestDelegate(std::shared_ptr<SharedData> shared_data) : shared_data_(shared_data) {}
 
-  magma::Status ImportObject(uint32_t handle, magma::PlatformObject::Type object_type,
-                             uint64_t object_id) override {
+  magma::Status ImportObject(uint32_t handle, uint64_t flags,
+                             magma::PlatformObject::Type object_type, uint64_t object_id) override {
     std::unique_lock<std::mutex> lock(shared_data_->mutex);
     switch (object_type) {
       case magma::PlatformObject::SEMAPHORE: {
