diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java
index 58feb76..71ae61d 100644
--- a/src/main/java/com/dostalgia/UploadResource.java
+++ b/src/main/java/com/dostalgia/UploadResource.java
@@ -447,10 +447,13 @@ public class UploadResource {
/**
* Detect whether an executable targets DOS or Windows by reading its PE/NE header.
*
- * - Pure MZ (no NE/PE/LE) → "dos"
- * - NE (Windows 3.x), PE (Win32), LE (VxD) → "windows"
+ * - Pure MZ, LE (DOS/4GW extender), LX (OS/2) → "dos"
+ * - NE (Windows 3.x), PE (Win32) → "windows"
* - Cannot read → null
*
+ * Note: LE (Linear Executable) is used by DOS/4GW, DOS/32A, PMODE/W
+ * — all 32-bit DOS extenders for games like DOOM, Blood, Duke Nukem 3D.
+ * Only PE (Portable Executable) and NE (New Executable) are Windows.
*/
static String detectPlatform(Path exePath) {
String name = exePath.getFileName().toString().toLowerCase();
@@ -487,12 +490,10 @@ public class UploadResource {
// PE = Portable Executable (Win32)
// NE = New Executable (Windows 3.x)
- // LE = Linear Executable (VxD, OS/2)
+ // LE = Linear Executable (DOS/4GW, DOS/32A — 32-bit DOS extenders)
// LX = Extended Linear Executable (OS/2 2.x)
if ((sig1 == 0x50 && sig2 == 0x45) // PE
- || (sig1 == 0x4E && sig2 == 0x45) // NE
- || (sig1 == 0x4C && sig2 == 0x45) // LE
- || (sig1 == 0x4C && sig2 == 0x58)) // LX
+ || (sig1 == 0x4E && sig2 == 0x45)) // NE
return "windows";
return "dos"; // Plain MZ without known Windows signature