diff -r c11f78a5b028 src/menu/menudef.cpp
--- a/src/menu/menudef.cpp	Sun Jan 07 09:46:00 2018 +0100
+++ b/src/menu/menudef.cpp	Thu Jan 18 22:16:59 2018 +0300
@@ -966,6 +966,30 @@
 //
 //=============================================================================
 
+static void ParseAddOptionMenu(FScanner &sc)
+{
+	sc.MustGetString();
+
+	FMenuDescriptor **pOld = MenuDescriptors.CheckKey(sc.String);
+	if (
+		pOld == NULL || *pOld == NULL
+		|| dynamic_cast<FOptionMenuDescriptor*>(*pOld) == NULL
+		/* FMenuDescriptor has a virtual destructor;
+		FOptionMenuDescriptor inherits from it, so the cast is safe */
+		// !(*pOld)->IsKindOf(RUNTIME_CLASS(FOptionMenuDescriptor)) // FMenuDescriptor is not a DObject
+	) {
+		sc.ScriptError("%s is not an option menu that can be extended", sc.String);
+	}
+	ParseOptionMenuBody(sc, (FOptionMenuDescriptor*)(*pOld));
+}
+
+
+//=============================================================================
+//
+//
+//
+//=============================================================================
+
 void M_ParseMenuDefs()
 {
 	int lump, lastlump = 0;
@@ -1017,6 +1041,10 @@
 			{
 				ParseOptionMenu(sc);
 			}
+			else if (sc.Compare("ADDOPTIONMENU"))
+			{
+				ParseAddOptionMenu(sc);
+			}
 			else if (sc.Compare("DEFAULTOPTIONMENU"))
 			{
 				ParseOptionMenuBody(sc, &DefaultOptionMenuSettings);
