diff --git a/src/server/main.c b/src/server/main.c
index 200e937..aec96c5 100644
--- a/src/server/main.c
+++ b/src/server/main.c
@@ -58,9 +58,6 @@
 static char *spAppFiberTV = "miniclient";
 static char *spAppFiberTVMatch = NULL;
 
-static char *spAppOregano = "browser_shell";
-static char *spAppOreganoMatch = "file:///app/oregano/";
-
 // Adding 20 bytes for prepended source_type for Netflix
 static char sQueryParam[DIAL_MAX_PAYLOAD+20];
 
@@ -371,27 +368,20 @@
     }
 }
 
-static DIALStatus oregano_start(DIALServer *ds, const char *appname,
+static DIALStatus basil_start(DIALServer *ds, const char *appname,
                                 const char *args, size_t arglen,
                                 DIAL_run_t *run_id, void *callback_data) {
     fprintf(stderr, "** LAUNCH GoogleFiberTV **\n");
-    // TODO(pbaldwin): Add ability to start Oregano when not already running
-    pid_t pid;
-    if ((pid = isAppRunning( spAppOregano, spAppOreganoMatch ))) {
-        *run_id = (void *)(long)pid;
-        return kDIALStatusRunning;
-    } else {
-        return kDIALStatusStopped;
-    }
+    return kDIALStatusRunning; // Basil is always running
 }
 
-static DIALStatus oregano_status(DIALServer *ds, const char *appname,
+static DIALStatus basil_status(DIALServer *ds, const char *appname,
                                  DIAL_run_t run_id, int *pCanStop, void *callback_data) {
-    *pCanStop = 1;
-    return isAppRunning( spAppOregano, spAppOreganoMatch ) ? kDIALStatusRunning : kDIALStatusStopped;
+    *pCanStop = 0;
+    return kDIALStatusRunning; // Basil is always running
 }
 
-static struct CastServiceData oregano_service_data(DIALServer *ds, const char *appname,
+static struct CastServiceData basil_service_data(DIALServer *ds, const char *appname,
                                  DIAL_run_t run_id, void *callback_data) {
     struct CastServiceData serviceData;
     serviceData.connection_svc_host = spIpAddress;
@@ -401,13 +391,10 @@
     return serviceData;
 }
 
-static void oregano_stop(DIALServer *ds, const char *appname, DIAL_run_t run_id,
+static void basil_stop(DIALServer *ds, const char *appname, DIAL_run_t run_id,
                          void *callback_data) {
-    fprintf(stderr, "** KILL GoogleFiberTV **\n");
-    pid_t pid;
-    if ((pid = isAppRunning( spAppOregano, spAppOreganoMatch ))) {
-        kill(pid, SIGTERM);
-    }
+    fprintf(stderr, "** KILL GoogleFiberTV (ignored) **\n");
+    // Basil cannot be killed, but log the attempt
 }
 
 void run_ssdp(int port, const char *pFriendlyName, const char * pModelName, const char *pUuid, const char **ppIpAddress);
@@ -440,12 +427,12 @@
     struct DIALAppCallbacks cb_nf = {netflix_start, netflix_stop, netflix_status, NULL, NULL};
     struct DIALAppCallbacks cb_yt = {youtube_start, youtube_stop, youtube_status, NULL, NULL};
     struct DIALAppCallbacks cb_ft = {fibertv_start, fibertv_stop, fibertv_status, NULL, NULL};
-    struct DIALAppCallbacks cb_or = {oregano_start, oregano_stop, oregano_status, oregano_service_data, NULL};
+    struct DIALAppCallbacks cb_gf = {basil_start, basil_stop, basil_status, basil_service_data, NULL};
 
     DIAL_register_app(ds, "Netflix", &cb_nf, NULL);
     DIAL_register_app(ds, "YouTube", &cb_yt, NULL);
     if (strcmp(spUiType, "oregano") == 0) {
-      DIAL_register_app(ds, "GoogleFiberTV", &cb_or, NULL);
+      DIAL_register_app(ds, "GoogleFiberTV", &cb_gf, NULL);
     } else {
       DIAL_register_app(ds, "FiberTV", &cb_ft, NULL);
     }
