diff --git a/src/dehacked.c b/src/dehacked.c
index a04c0bc5eb681f45b7be5f577bac52c435ea4b0c..1ba9da30cfed330d4adcb1571b3b42053ada3b94 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -1653,6 +1653,8 @@ static void readtextpromptpage(MYFILE *f, INT32 num, INT32 pagenum)
 			}
 			else if (fastcmp(word, "PICTOLOOP"))
 				textprompts[num]->page[pagenum].pictoloop = (UINT8)i;
+			else if (fastcmp(word, "PICTOSTART"))
+				textprompts[num]->page[pagenum].pictostart = (UINT8)i;
 			else if (fastcmp(word, "PICSMETAPAGE"))
 			{
 				if (usi && usi <= textprompts[num]->numpages)
@@ -1663,6 +1665,7 @@ static void readtextpromptpage(MYFILE *f, INT32 num, INT32 pagenum)
 					textprompts[num]->page[pagenum].numpics = textprompts[num]->page[metapagenum].numpics;
 					textprompts[num]->page[pagenum].picmode = textprompts[num]->page[metapagenum].picmode;
 					textprompts[num]->page[pagenum].pictoloop = textprompts[num]->page[metapagenum].pictoloop;
+					textprompts[num]->page[pagenum].pictostart = textprompts[num]->page[metapagenum].pictostart;
 
 					for (picid = 0; picid < MAX_PROMPT_PICS; picid++)
 					{
@@ -3601,11 +3604,11 @@ static void DEH_LoadDehackedFile(MYFILE *f)
 				}
 				else if (fastcmp(word, "PROMPT"))
 				{
-					if (i > 0 && i < 257)
+					if (i > 0 && i < MAX_PROMPTS)
 						readtextprompt(f, i - 1);
 					else
 					{
-						deh_warning("Prompt number %d out of range (1 - 256)", i);
+						deh_warning("Prompt number %d out of range (1 - %d)", i, MAX_PROMPTS);
 						ignorelines(f);
 					}
 				}
@@ -8281,7 +8284,7 @@ struct {
 
 	{"V_CHARCOLORSHIFT",V_CHARCOLORSHIFT},
 	{"V_ALPHASHIFT",V_ALPHASHIFT},
-	
+
 	//Kick Reasons
 	{"KR_KICK",KR_KICK},
 	{"KR_PINGLIMIT",KR_PINGLIMIT},
diff --git a/src/doomstat.h b/src/doomstat.h
index d2facda3c39dd3094446fbe730ad519745b2d641..5066e2c3b288ea6cec37a20a258022a57c0892f8 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -186,6 +186,7 @@ typedef struct
 	UINT8 numpics;
 	UINT8 picmode; // sequence mode after displaying last pic, 0 = persist, 1 = loop, 2 = destroy
 	UINT8 pictoloop; // if picmode == loop, which pic to loop to?
+	UINT8 pictostart; // initial pic number to show
 	char picname[MAX_PROMPT_PICS][8];
 	UINT8 pichires[MAX_PROMPT_PICS];
 	UINT16 xcoord[MAX_PROMPT_PICS]; // gfx
diff --git a/src/f_finale.c b/src/f_finale.c
index 426b2498c561bd1b8445084375943c9894fc7f7d..8aa9f1e84a4bc1cc2533e7cf0f3ca713164ff334 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -2137,7 +2137,7 @@ static void F_PreparePageText(char *pagetext)
 
 static void F_AdvanceToNextPage(void)
 {
-	UINT8 nextprompt = textprompts[cutnum]->page[scenenum].nextprompt,
+	INT32 nextprompt = textprompts[cutnum]->page[scenenum].nextprompt,
 		nextpage = textprompts[cutnum]->page[scenenum].nextpage,
 		oldcutnum = cutnum;
 
@@ -2178,7 +2178,7 @@ static void F_AdvanceToNextPage(void)
 		F_PreparePageText(textprompts[cutnum]->page[scenenum].text);
 
 		// gfx
-		picnum = 0;
+		picnum = textprompts[cutnum]->page[scenenum].pictostart;
 		numpics = textprompts[cutnum]->page[scenenum].numpics;
 		picmode = textprompts[cutnum]->page[scenenum].picmode;
 		pictoloop = textprompts[cutnum]->page[scenenum].pictoloop > 0 ? textprompts[cutnum]->page[scenenum].pictoloop - 1 : 0;
@@ -2266,7 +2266,7 @@ void F_StartTextPrompt(INT32 promptnum, INT32 pagenum, mobj_t *mo, UINT16 postex
 		F_PreparePageText(textprompts[cutnum]->page[scenenum].text);
 
 		// gfx
-		picnum = 0;
+		picnum = textprompts[cutnum]->page[scenenum].pictostart;
 		numpics = textprompts[cutnum]->page[scenenum].numpics;
 		picmode = textprompts[cutnum]->page[scenenum].picmode;
 		pictoloop = textprompts[cutnum]->page[scenenum].pictoloop > 0 ? textprompts[cutnum]->page[scenenum].pictoloop - 1 : 0;