diff --git a/most.c b/most.c
index b18e624a77c03db9db982d88234203462df03723..b2771dbcf40067854bcd29cadae1f7f6b98da7c7 100644
--- a/most.c
+++ b/most.c
@@ -343,7 +343,7 @@ int Preprocessed;
 int SAMindex;
 int ScreenHeight;
 int Expert = 1;
-int Cat = 0;
+int Cats = 0;
 int LsgEnabled;
 int ModeRadiusSq;
 int ForceRebuild;
@@ -1048,11 +1048,6 @@ void InitNamelist(void)
 
    // CAT
 
-   NL_t(CAT,"sim","J1"       ,  "JET");
-   NL_i(CAT,"sim","J1W1"     ,  8);
-   NL_i(CAT,"sim","J1W2"     ,  4);
-   NL_i(CAT,"sim","J1SCL"    ,  1);
-   NL_r(CAT,"sim","J1AMP"    ,  1.0);
    NL_r(CAT,"cat","ALPHA"    ,  0.0);
    NL_r(CAT,"cat","BETA"     ,  0.0);
    NL_r(CAT,"cat","AFORC"    ,  0.001);
@@ -1242,10 +1237,15 @@ void InitSelections(void)
 
    // CAT
 
-   if (Cat)
+   Sel = NewSel(Sel);
+   InitNextSelection(Sel,dyn,FullModelName[CAT]);
+
+   // Hide CAT until released
+
+   if (!Cats)
    {
-      Sel = NewSel(Sel);
-      InitNextSelection(Sel,dyn,FullModelName[CAT]);
+      Sel->no = 1;
+      Sel->lt = 0;
    }
 
    // Planet Simulator
@@ -2549,6 +2549,51 @@ int WritePumaNamelist(void)  /* also used for model SAM */
 }
 
 
+/* ================ */
+/* WriteCatNamelist */
+/* ================ */
+
+int WriteCatNamelist(void)
+{
+   int i,j,k,sum,val;
+   FILE *fp;
+   char backup_name[256];
+   char nln[256];
+   struct SelStruct *Sel;
+
+   FinishLine();
+
+   // Write file <cat_namelist>
+
+   strcpy(nln,ShortModelName[Model]);
+   strcat(nln,"/run/");
+   strcat(nln,namelist_name);
+   fp = fopen(nln,"w");
+   if (fp == NULL)
+   {
+      printf("Could not open file <%s> for writing\n",nln);
+      return 0; /* Failure */
+   }
+
+   fprintf(fp," &%s_nl\n",ShortModelName[Model]);
+
+   fprintf(fp," %-8s=%6d\n","NGUI"    ,ngui);
+
+   for (Sel = ComEnd->Next ; Sel ; Sel = Sel->Next)
+   {
+      if (Sel->type == SEL_INT)
+         fprintf(fp," %-8s=%6d\n",Sel->text,Sel->iv);
+      if (Sel->type == SEL_REAL)
+         fprintf(fp," %-8s=%s\n",Sel->text,Sel->teva);
+   }
+
+   fprintf(fp," /END\n");
+   fclose(fp);
+
+   return 1; /* Success */
+}
+
+
 /* ================ */
 /* WritePPPNamelist */
 /* ================ */
@@ -3379,7 +3424,7 @@ void BuildScripts(void)
    {
       if (CheckCATNamelist()) return;
       GenerateNames();
-      // WriteCatNamelist();
+      WriteCatNamelist();
       if (!Build(CAT)) Exit();
       WriteRunScript(CAT);
    }
@@ -4412,10 +4457,10 @@ void InitGUI(void)
       fclose(xpp);
    }
 
-   xpp = fopen("Cat","r"); // Cat enabled
+   xpp = fopen("Cats","r"); // Cat enabled
    if (xpp)
    {
-      Cat = 1;
+      Cats = 1;
       fclose(xpp);
    }
 
@@ -4558,6 +4603,7 @@ void OnMouseClick(void)
    {
       if (HitBox(Sel) && Model != i)
       {
+         if (i == CAT && Cats == 0) return; // Hide CAT
          if (Debug) printf("Change model from %d to %d\n",Model,i);
          ChangeModel(i);
          CalcFrame(Latitudes);