diff --git a/sdk/fidl/fuchsia.overnet/overnet.fidl b/sdk/fidl/fuchsia.overnet/overnet.fidl
index a8c28aa..a2decdc 100644
--- a/sdk/fidl/fuchsia.overnet/overnet.fidl
+++ b/sdk/fidl/fuchsia.overnet/overnet.fidl
@@ -10,7 +10,7 @@
 using fuchsia.overnet.protocol;
 
 /// Interfaces applicable to consuming services from other devices
-[FragileBase, Discoverable]
+[Discoverable]
 protocol ServiceConsumer {
     /// Returns a list of all peers that are connected to this Overnet.
     /// If this list has not been updated since the last call to this method, it waits until
@@ -24,7 +24,7 @@
 };
 
 /// Interfaces applicable to sharing services with ServiceConsumer's
-[FragileBase, Discoverable]
+[Discoverable]
 protocol ServicePublisher {
     /// Register a new service to be exported by Overnet.
     /// If an existing service has the same `service_name`, it's replaced by this service.
@@ -39,14 +39,6 @@
     AttachSocketLink(handle<socket> socket, SocketLinkOptions options);
 };
 
-/// Legacy Overnet interface for applications that did not distinguish between ServiceConsumer and
-/// ServicePublisher
-[Discoverable, Deprecated]
-protocol Overnet {
-    compose ServiceConsumer;
-    compose ServicePublisher;
-};
-
 /// A ServiceProvider is a factory for one service.
 protocol ServiceProvider {
     /// Connect `chan` to the service (called in response to Overnet.ConnectToService).
diff --git a/src/connectivity/overnet/overnetstack/src/main.rs b/src/connectivity/overnet/overnetstack/src/main.rs
index b8246688..8617cf5 100644
--- a/src/connectivity/overnet/overnetstack/src/main.rs
+++ b/src/connectivity/overnet/overnetstack/src/main.rs
@@ -10,9 +10,9 @@
 
 use anyhow::{Context as _, Error};
 use fidl_fuchsia_overnet::{
-    MeshControllerRequest, MeshControllerRequestStream, OvernetListPeersResponder, OvernetRequest,
-    OvernetRequestStream, ServiceConsumerListPeersResponder, ServiceConsumerRequest,
-    ServiceConsumerRequestStream, ServicePublisherRequest, ServicePublisherRequestStream,
+    MeshControllerRequest, MeshControllerRequestStream, ServiceConsumerListPeersResponder,
+    ServiceConsumerRequest, ServiceConsumerRequestStream, ServicePublisherRequest,
+    ServicePublisherRequestStream,
 };
 use fuchsia_async as fasync;
 use fuchsia_component::server::ServiceFs;
@@ -240,38 +240,13 @@
     })
 }
 
-trait ListPeersResponder {
-    fn respond(
-        self,
-        peers: &mut dyn ExactSizeIterator<Item = &mut fidl_fuchsia_overnet::Peer>,
-    ) -> Result<(), fidl::Error>;
-}
-
-impl ListPeersResponder for ServiceConsumerListPeersResponder {
-    fn respond(
-        self,
-        peers: &mut dyn ExactSizeIterator<Item = &mut fidl_fuchsia_overnet::Peer>,
-    ) -> Result<(), fidl::Error> {
-        self.send(peers)
-    }
-}
-
-impl ListPeersResponder for OvernetListPeersResponder {
-    fn respond(
-        self,
-        peers: &mut dyn ExactSizeIterator<Item = &mut fidl_fuchsia_overnet::Peer>,
-    ) -> Result<(), fidl::Error> {
-        self.send(peers)
-    }
-}
-
-async fn run_list_peers_inner(responder: impl ListPeersResponder) -> Result<(), Error> {
+async fn run_list_peers_inner(responder: ServiceConsumerListPeersResponder) -> Result<(), Error> {
     let mut peers = with_app_mut(|app| app.node.clone().list_peers()).await?;
-    responder.respond(&mut peers.iter_mut())?;
+    responder.send(&mut peers.iter_mut())?;
     Ok(())
 }
 
-async fn run_list_peers(responder: impl ListPeersResponder) {
+async fn run_list_peers(responder: ServiceConsumerListPeersResponder) {
     if let Err(e) = run_list_peers_inner(responder).await {
         log::warn!("List peers gets error: {:?}", e);
     }
@@ -327,32 +302,10 @@
     Ok(())
 }
 
-async fn run_legacy_overnet_server(mut stream: OvernetRequestStream) -> Result<(), Error> {
-    while let Some(request) = stream.try_next().await.context("error running overnet server")? {
-        let result = with_app_mut(|app| match request {
-            OvernetRequest::PublishService { service_name, provider, .. } => {
-                app.node.register_service(service_name, provider)
-            }
-            OvernetRequest::ListPeers { responder, .. } => {
-                fasync::spawn_local(run_list_peers(responder));
-                Ok(())
-            }
-            OvernetRequest::ConnectToService { node, service_name, chan, .. } => {
-                app.node.connect_to_service(node.id.into(), &service_name, chan)
-            }
-        });
-        if let Err(e) = result {
-            log::warn!("Error servicing request: {:?}", e);
-        }
-    }
-    Ok(())
-}
-
 enum IncomingService {
     ServiceConsumer(ServiceConsumerRequestStream),
     ServicePublisher(ServicePublisherRequestStream),
     MeshController(MeshControllerRequestStream),
-    LegacyOvernet(OvernetRequestStream),
     // ... more services here
 }
 
@@ -365,7 +318,6 @@
     svc_dir.add_fidl_service(IncomingService::ServiceConsumer);
     svc_dir.add_fidl_service(IncomingService::ServicePublisher);
     svc_dir.add_fidl_service(IncomingService::MeshController);
-    svc_dir.add_fidl_service(IncomingService::LegacyOvernet);
 
     fs.take_and_serve_directory_handle()?;
 
@@ -388,9 +340,6 @@
         IncomingService::ServiceConsumer(stream) => {
             run_service_consumer_server(stream).unwrap_or_else(|e| log::trace!("{:?}", e)).boxed()
         }
-        IncomingService::LegacyOvernet(stream) => {
-            run_legacy_overnet_server(stream).unwrap_or_else(|e| log::trace!("{:?}", e)).boxed()
-        }
     })
     .await;
     Ok(())
