diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
index 430d2d72f5ecde0fb924561378c8651ae0c7a24a..a98eb3caf6fba0f730324b947bd5460660167506 100644
--- a/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
+++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServerRoutes.scala
@@ -4,7 +4,7 @@ package web
 
 import java.net.InetAddress
 import scala.jdk.CollectionConverters.*
-import scala.util.Try
+import scala.util.{Try, Success, Failure}
 import cask.endpoints.JsonData
 
 import decorators.checkOriginHeader
@@ -51,8 +51,8 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
     ListAppsResponse.Wire.encode(ListAppsResponse(WebServer.appDirectory.values.map(_.appInfo).toSeq))
 
   @cask.getJson(f"${Endpoints.Api.instanceInfo}")
-  def getAppInfo(instanceId: InstanceId) =
-    val response: cask.Response[JsonData] = WebServer.instances.get(instanceId) match
+  def getAppInfo(instanceId: InstanceId): cask.Response[JsonData] =
+    WebServer.instances.get(instanceId) match
       case Some(inst) =>
         val authority = if Config.PUBLIC_INSTANCE then "{{authority}}" else f"$hostAddress:${Config.HTTP_PORT}"
         val shareUrl = f"{{protocol}}://$authority${Endpoints.App}/${inst.appInfo.id}/$instanceId/"
@@ -60,25 +60,25 @@ private[server] final case class WebServerRoutes()(using cc: castor.Context, log
         val response = InstanceInfoResponse(instanceId, inst.registeredUserIds, wsEndpoint, shareUrl)
         InstanceInfoResponse.Wire.encode(response)
       case None =>
-        cask.Response(f"Unknown instance id $instanceId", 400)
-    response
+        cask.Response(f"Unknown instance '$instanceId'", 400)
 
   @cask.post(f"${Endpoints.Api.createInstance}")
-  def postInitApp(request: cask.Request) =
-    val response: cask.Response[JsonData] =
-      val req = CreateInstanceRequest.Wire.decode(ujson.read(request.text()))
-      if req.isFailure then
+  def postInitApp(request: cask.Request): cask.Response[JsonData] =
+    CreateInstanceRequest.Wire.decode(ujson.read(request.text())) match
+      case Failure(_) =>
         cask.Response(f"Unable to decode data: ${request.text()}", 400)
-      else
-        val appId = WebServer.createInstance(req.get.appName, req.get.userIds)
-        CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
-    response
+      case Success(CreateInstanceRequest(appName, userIds)) =>
+        if WebServer.appDirectory.contains(appName) then
+          val appId = WebServer.createInstance(appName, userIds)
+          CreateInstanceResponse.Wire.encode(CreateInstanceResponse(appId))
+        else
+          cask.Response(f"Unknown app '$appName'", 400)
 
   @checkOriginHeader
   @cask.websocket(f"${Endpoints.WebSocket}/:instanceId/:userId")
   def websocket(instanceId: String, userId: String, request: cask.Request): cask.WebsocketResult =
     WebServer.instances.get(instanceId) match
       case Some(app) => app.connect(userId)
-      case None => cask.Response(f"Unknown instance id $instanceId", 400)
+      case None => cask.Response(f"Unknown instance '$instanceId'", 400)
 
   initialize()