diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala
index 81dcc93a1b3ec5c0a7c59581ddc7f14e0f5b5374..06129f2528ec4a2f68d20270d7a84550798ce0e7 100644
--- a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala
+++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala
@@ -80,7 +80,7 @@ object WebServer:
     instanceId
 
   private[web] def shutdownApp(instanceId: InstanceId): Unit =
-    // Remove references of this app
+    webSocketServer.shutdownApp(instanceId)
     val appId = apps.remove(instanceId).map(_.instance.appInfo.id)
     clocks.get(instanceId).map(_._2).foreach(_.set(false))
     clocks.remove(instanceId)
diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala
index ce0d30f96afc7efd2f495513d6fb2452d410d12e..539621fd63f6927f287016bcb8c5b5932c1cd6f1 100644
--- a/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala
+++ b/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala
@@ -35,6 +35,14 @@ private[web] final class WebSocketsCollection():
     require(!sessions.contains(instanceId))
     sessions = sessions.updated(instanceId, Map.empty.withDefaultValue(Set.empty))
 
+  def shutdownApp(instanceId: InstanceId): Unit =
+     for by_client <- sessions.values
+         channels <- by_client.values
+         channel <- channels
+     do
+       channel.send(cask.Ws.Close())
+     sessions = sessions - instanceId
+
   def connect(instanceId: String, userId: String)
              (implicit cc: castor.Context, log: cask.Logger): cask.WebsocketResult =
     if WebServer.apps.contains(instanceId) then