Index: src/stash.c
==================================================================
--- src/stash.c
+++ src/stash.c
@@ -405,10 +405,19 @@
       fossil_fatal("no such stash: %d\n", stashid);
     }
   }
   return stashid;
 }
+
+/*
+** Set the stash-next to max(stashid)+1 or to 1 if the stash empty.
+*/
+void stash_set_next_id(void){
+  int stashid = 0;
+  stashid = db_int(0, "SELECT max(stashid) FROM stash");
+  db_lset_int("stash-next", stashid+1);
+}
 
 /*
 ** COMMAND: stash
 **
 ** Usage: %fossil stash SUBCOMMAND ARGS...
@@ -604,19 +613,21 @@
       undo_begin();
       undo_save_stash(0);
       stash_drop(stashid);
       undo_finish();
     }
+    stash_set_next_id();
   }else
   if( memcmp(zCmd, "pop", nCmd)==0 ){
     if( g.argc>3 ) usage("pop");
     stashid = stash_get_id(0);
     undo_begin();
     stash_apply(stashid, 0);
     undo_save_stash(stashid);
     undo_finish();
     stash_drop(stashid);
+    stash_set_next_id();
   }else
   if( memcmp(zCmd, "apply", nCmd)==0 ){
     if( g.argc>4 ) usage("apply STASHID");
     stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0);
     undo_begin();

