diff --git a/wpa_supplicant/aidl/mainline/mainline_supplicant.cpp b/wpa_supplicant/aidl/mainline/mainline_supplicant.cpp
index b1a873d..dd2babe 100644
--- a/wpa_supplicant/aidl/mainline/mainline_supplicant.cpp
+++ b/wpa_supplicant/aidl/mainline/mainline_supplicant.cpp
@@ -18,17 +18,14 @@
     wpa_global_ = global;
 }
 
-ndk::ScopedAStatus MainlineSupplicant::addStaInterface(const std::string& ifaceName,
-        std::shared_ptr<IStaInterface>* _aidl_return) {
+ndk::ScopedAStatus MainlineSupplicant::addUsdInterface(const std::string& ifaceName) {
     if (ifaceName.empty()) {
         wpa_printf(MSG_ERROR, "Empty iface name provided");
         return createStatus(SupplicantStatusCode::FAILURE_ARGS_INVALID);
     }
 
-    if (active_sta_ifaces_.find(ifaceName) != active_sta_ifaces_.end()) {
+    if (active_usd_ifaces_.find(ifaceName) != active_usd_ifaces_.end()) {
         wpa_printf(MSG_INFO, "Interface %s already exists", ifaceName.c_str());
-        std::shared_ptr<IStaInterface> staIface = active_sta_ifaces_[ifaceName];
-        _aidl_return = &staIface;
         return ndk::ScopedAStatus::ok();
     }
 
@@ -49,22 +46,18 @@
         return createStatus(SupplicantStatusCode::FAILURE_UNKNOWN);
     }
 
-    std::shared_ptr<IStaInterface> staIface =
-        ndk::SharedRefBase::make<StaIface>(wpa_global_, ifaceName);
-    active_sta_ifaces_[ifaceName] = staIface;
-    _aidl_return = &staIface;
-
     wpa_printf(MSG_INFO, "Interface %s was added successfully", ifaceName.c_str());
+    active_usd_ifaces_.insert(ifaceName);
     return ndk::ScopedAStatus::ok();
 }
 
-ndk::ScopedAStatus MainlineSupplicant::removeStaInterface(const std::string& ifaceName) {
+ndk::ScopedAStatus MainlineSupplicant::removeUsdInterface(const std::string& ifaceName) {
     if (ifaceName.empty()) {
         wpa_printf(MSG_ERROR, "Empty iface name provided");
         return createStatus(SupplicantStatusCode::FAILURE_ARGS_INVALID);
     }
 
-    if (active_sta_ifaces_.find(ifaceName) == active_sta_ifaces_.end()) {
+    if (active_usd_ifaces_.find(ifaceName) == active_usd_ifaces_.end()) {
         wpa_printf(MSG_ERROR, "Interface %s does not exist", ifaceName.c_str());
         return createStatus(SupplicantStatusCode::FAILURE_IFACE_UNKNOWN);
     }
@@ -81,7 +74,7 @@
     }
 
     wpa_printf(MSG_INFO, "Interface %s was removed successfully", ifaceName.c_str());
-    active_sta_ifaces_.erase(ifaceName);
+    active_usd_ifaces_.erase(ifaceName);
     return ndk::ScopedAStatus::ok();
 }
 
diff --git a/wpa_supplicant/aidl/mainline/mainline_supplicant.h b/wpa_supplicant/aidl/mainline/mainline_supplicant.h
index 1f05a9c..38a355f 100644
--- a/wpa_supplicant/aidl/mainline/mainline_supplicant.h
+++ b/wpa_supplicant/aidl/mainline/mainline_supplicant.h
@@ -9,12 +9,9 @@
 #ifndef MAINLINE_SUPPLICANT_IMPL_H
 #define MAINLINE_SUPPLICANT_IMPL_H
 
-#include <map>
-
-#include "sta_iface.h"
+#include <set>
 
 #include <aidl/android/system/wifi/mainline_supplicant/BnMainlineSupplicant.h>
-#include <aidl/android/system/wifi/mainline_supplicant/IUsdInterface.h>
 #include <aidl/android/system/wifi/mainline_supplicant/SupplicantStatusCode.h>
 
 extern "C"
@@ -27,22 +24,20 @@
 }
 
 using ::aidl::android::system::wifi::mainline_supplicant::BnMainlineSupplicant;
-using ::aidl::android::system::wifi::mainline_supplicant::IStaInterface;
 using ::aidl::android::system::wifi::mainline_supplicant::SupplicantStatusCode;
 
 class MainlineSupplicant : public BnMainlineSupplicant {
     public:
         MainlineSupplicant(struct wpa_global* global);
-        ndk::ScopedAStatus addStaInterface(const std::string& ifaceName,
-            std::shared_ptr<IStaInterface>* _aidl_return);
-        ndk::ScopedAStatus removeStaInterface(const std::string& ifaceName);
+        ndk::ScopedAStatus addUsdInterface(const std::string& ifaceName);
+        ndk::ScopedAStatus removeUsdInterface(const std::string& ifaceName);
         ndk::ScopedAStatus terminate();
 
     private:
         // Raw pointer to the global structure maintained by the core
         struct wpa_global* wpa_global_;
-        // Map containing all active STA interfaces, mapped by iface name -> object
-        std::map<std::string, std::shared_ptr<IStaInterface>> active_sta_ifaces_;
+        // Names of all active USD interfaces
+        std::set<std::string> active_usd_ifaces_;
 };
 
 #endif  // MAINLINE_SUPPLICANT_IMPL_H
diff --git a/wpa_supplicant/aidl/mainline/sta_iface.cpp b/wpa_supplicant/aidl/mainline/sta_iface.cpp
deleted file mode 100644
index bfa9c9e..0000000
--- a/wpa_supplicant/aidl/mainline/sta_iface.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * WPA Supplicant - Station mode interface
- * Copyright (c) 2024, Google Inc. All rights reserved.
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
-
-#include "sta_iface.h"
-
-StaIface::StaIface(struct wpa_global* wpa_global, std::string iface_name)
-    : wpa_global_(wpa_global), iface_name_(iface_name) {}
-
-::ndk::ScopedAStatus StaIface::registerCallback(
-        const std::shared_ptr<IStaInterfaceCallback>& in_callback) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::getUsdCapabilities(UsdCapabilities* _aidl_return) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::startUsdPublish(int32_t in_cmdId,
-        const PublishConfig& in_usdPublishConfig) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::startUsdSubscribe(int32_t in_cmdId,
-        const SubscribeConfig& in_usdSubscribeConfig) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::updateUsdPublish(int32_t in_publishId,
-        const std::vector<uint8_t>& in_serviceSpecificInfo) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::cancelUsdPublish(int32_t in_publishId) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::cancelUsdSubscribe(int32_t in_subscribeId) {
-    return ndk::ScopedAStatus::ok();
-}
-
-::ndk::ScopedAStatus StaIface::sendUsdMessage(const UsdMessageInfo& in_messageInfo) {
-    return ndk::ScopedAStatus::ok();
-}
diff --git a/wpa_supplicant/aidl/mainline/usd_iface.cpp b/wpa_supplicant/aidl/mainline/usd_iface.cpp
new file mode 100644
index 0000000..b514f77
--- /dev/null
+++ b/wpa_supplicant/aidl/mainline/usd_iface.cpp
@@ -0,0 +1,43 @@
+/*
+ * WPA Supplicant - Interface for USD operations
+ * Copyright (c) 2024, Google Inc. All rights reserved.
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#include "usd_iface.h"
+
+UsdIface::UsdIface(struct wpa_global* wpa_global, std::string iface_name)
+    : wpa_global_(wpa_global), iface_name_(iface_name) {}
+
+::ndk::ScopedAStatus UsdIface::getUsdCapabilities(UsdCapabilities* _aidl_return) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::startUsdPublish(int32_t in_cmdId,
+        const PublishConfig& in_usdPublishConfig) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::startUsdSubscribe(int32_t in_cmdId,
+        const SubscribeConfig& in_usdSubscribeConfig) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::updateUsdPublish(int32_t in_publishId,
+        const std::vector<uint8_t>& in_serviceSpecificInfo) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::cancelUsdPublish(int32_t in_publishId) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::cancelUsdSubscribe(int32_t in_subscribeId) {
+    return ndk::ScopedAStatus::ok();
+}
+
+::ndk::ScopedAStatus UsdIface::sendUsdMessage(const UsdMessageInfo& in_messageInfo) {
+    return ndk::ScopedAStatus::ok();
+}
diff --git a/wpa_supplicant/aidl/mainline/sta_iface.h b/wpa_supplicant/aidl/mainline/usd_iface.h
similarity index 62%
rename from wpa_supplicant/aidl/mainline/sta_iface.h
rename to wpa_supplicant/aidl/mainline/usd_iface.h
index 84ad201..32b86cc 100644
--- a/wpa_supplicant/aidl/mainline/sta_iface.h
+++ b/wpa_supplicant/aidl/mainline/usd_iface.h
@@ -1,26 +1,22 @@
 /*
- * WPA Supplicant - Station mode interface
+ * WPA Supplicant - Interface for USD operations
  * Copyright (c) 2024, Google Inc. All rights reserved.
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
  */
 
-#ifndef MAINLINE_SUPPLICANT_STA_IFACE_H
-#define MAINLINE_SUPPLICANT_STA_IFACE_H
+#ifndef MAINLINE_SUPPLICANT_USD_IFACE_H
+#define MAINLINE_SUPPLICANT_USD_IFACE_H
 
-#include <aidl/android/system/wifi/mainline_supplicant/BnStaInterface.h>
-#include <aidl/android/system/wifi/mainline_supplicant/IStaInterfaceCallback.h>
+#include <aidl/android/system/wifi/mainline_supplicant/BnUsdInterface.h>
 
-using ::aidl::android::system::wifi::mainline_supplicant::BnStaInterface;
-using ::aidl::android::system::wifi::mainline_supplicant::IStaInterfaceCallback;
+using ::aidl::android::system::wifi::mainline_supplicant::BnUsdInterface;
 using ::aidl::android::system::wifi::mainline_supplicant::UsdMessageInfo;
 
-class StaIface : public BnStaInterface {
+class UsdIface : public BnUsdInterface {
     public:
-        StaIface(struct wpa_global* wpa_global, std::string iface_name);
-        ::ndk::ScopedAStatus registerCallback(
-            const std::shared_ptr<IStaInterfaceCallback>& in_callback) override;
+        UsdIface(struct wpa_global* wpa_global, std::string iface_name);
         ::ndk::ScopedAStatus getUsdCapabilities(UsdCapabilities* _aidl_return) override;
         ::ndk::ScopedAStatus startUsdPublish(int32_t in_cmdId,
             const PublishConfig& in_usdPublishConfig) override;
@@ -37,4 +33,4 @@
         std::string iface_name_;
 };
 
-#endif // MAINLINE_SUPPLICANT_STA_IFACE_H
+#endif // MAINLINE_SUPPLICANT_USD_IFACE_H
