diff -ru syslinux-2.11/Makefile syslinux-2.11-mbr/Makefile
--- syslinux-2.11/Makefile	2004-02-01 23:47:24.000000000 -0500
+++ syslinux-2.11-mbr/Makefile	2004-08-18 13:15:12.505649600 -0400
@@ -167,7 +167,7 @@
 	$(CC) $(INCLUDE) $(CFLAGS) $(PIC) -DPATCH_OFFSET=`cat patch.offset` \
 		-c -o $@ $<
 
-syslinux.exe: win32/syslinux-mingw.c libsyslinux.a
+syslinux.exe: win32/syslinux-mingw.c libsyslinux.a mbr.bin
 	$(MAKE) -C win32 all
 
 gethostip.o: gethostip.c
diff -ru syslinux-2.11/syslinux.h syslinux-2.11-mbr/syslinux.h
--- syslinux-2.11/syslinux.h	2004-06-12 23:05:02.000000000 -0400
+++ syslinux-2.11-mbr/syslinux.h	2004-08-18 13:16:26.271720000 -0400
@@ -23,6 +23,9 @@
 extern unsigned int  syslinux_ldlinux_len;
 extern int           syslinux_ldlinux_mtime;
 
+extern unsigned char syslinux_mbr[];
+extern unsigned int  syslinux_mbr_len;
+
 /* This switches the boot sector and ldlinux to "stupid mode" */
 void syslinux_make_stupid(void);
 
diff -ru syslinux-2.11/win32/Makefile syslinux-2.11-mbr/win32/Makefile
--- syslinux-2.11/win32/Makefile	2004-01-24 12:37:22.000000000 -0500
+++ syslinux-2.11-mbr/win32/Makefile	2004-08-18 13:16:49.074508800 -0400
@@ -54,7 +54,10 @@
 
 all: ../syslinux.exe
 
-libsyslinux.a: bootsect_bin.o ldlinux_bin.o syslxmod.o
+mbr_bin.c: ../mbr.bin ../bin2c.pl
+	$(PERL) ../bin2c.pl syslinux_mbr < ../mbr.bin > mbr_bin.c
+
+libsyslinux.a: bootsect_bin.o ldlinux_bin.o syslxmod.o mbr_bin.o
 	rm -f $@
 	$(AR) cq $@ $^
 	$(RANLIB) $@
@@ -73,7 +76,7 @@
 	$(CC) $(INCLUDE) $(CFLAGS) -c -o $@ $<
 
 tidy:
-	rm -f *.o *.a
+	rm -f *.o *.a *_bin.c
 
 clean: tidy
 
diff -ru syslinux-2.11/win32/syslinux-mingw.c syslinux-2.11-mbr/win32/syslinux-mingw.c
--- syslinux-2.11/win32/syslinux-mingw.c	2003-11-20 23:09:14.000000000 -0500
+++ syslinux-2.11-mbr/win32/syslinux-mingw.c	2004-08-18 13:17:02.143300800 -0400
@@ -22,6 +22,133 @@
 
 #include "syslinux.h"
 
+/* Begin stuff for MBR code */
+
+#include <winioctl.h>
+
+#define SECTOR_SIZE 512
+#define PART_TABLE  0x1be
+#define PART_SIZE   0x10
+#define PART_COUNT  4
+#define PART_ACTIVE 0x80
+
+// The following struct should be in the ntddstor.h file, but I didn't have it.
+// TODO: Make this a conditional compilation
+typedef struct _STORAGE_DEVICE_NUMBER {
+   DEVICE_TYPE  DeviceType;
+   ULONG  DeviceNumber;
+   ULONG  PartitionNumber;
+} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
+
+BOOL GetStorageDeviceNumberByHandle( HANDLE handle, const STORAGE_DEVICE_NUMBER *sdn ) {
+   BOOL result = FALSE;
+   DWORD count;
+
+   if( DeviceIoControl( handle, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, (LPVOID)sdn, sizeof( *sdn ), &count, NULL ) ) {
+      result = TRUE;
+   }
+   else {
+      printf( "Error: GetDriveNumber: DeviceIoControl failed. GetLastError==%d\n", (int)GetLastError() );
+   }
+
+   return( result );
+}
+
+int GetBytesPerSector( HANDLE drive ) {
+   int result = 0;
+   DISK_GEOMETRY g;
+   DWORD count;
+
+   if( DeviceIoControl( drive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &g, sizeof( g ), &count, NULL ) ) {
+      result = g.BytesPerSector;
+   }
+
+   return( result );
+}
+
+BOOL FixMBR( int driveNum, int partitionNum ) {
+   BOOL result = TRUE;
+   HANDLE drive;
+
+   char driveName[128];
+
+   sprintf( driveName, "\\\\.\\PHYSICALDRIVE%d", driveNum );
+
+   drive = CreateFile( driveName,
+         GENERIC_READ | GENERIC_WRITE,
+         FILE_SHARE_WRITE | FILE_SHARE_READ,
+         NULL,
+         OPEN_EXISTING,
+         0,
+         NULL );
+
+   if( drive == INVALID_HANDLE_VALUE ) {
+      printf( "Error: CreateFile for drive failed; GetLastError=%d\n", (int)GetLastError() );
+      result = FALSE;
+   }
+
+   if( result ) {
+      unsigned char sector[SECTOR_SIZE];
+      DWORD howMany;
+
+      if( GetBytesPerSector( drive ) != SECTOR_SIZE ) {
+         printf( "Error: Sector size of this drive is %d; must be %d\n", GetBytesPerSector( drive ), SECTOR_SIZE );
+         result = FALSE;
+      }
+
+      if( result ) {
+         if( ReadFile( drive, sector, sizeof( sector ), &howMany, NULL ) == 0 ) {
+            printf( "Error: ReadFile on drive failed; GetLastError=%d\n", (int)GetLastError() );
+            result = FALSE;
+         }
+         else if( howMany != sizeof( sector ) ) {
+            printf( "Error: ReadFile on drive only got %d of %d bytes\n", (int)howMany, sizeof( sector ) );
+            result = FALSE;
+         }
+      }
+
+      if( result ) {
+         if( syslinux_mbr_len >= PART_TABLE ) {
+            printf( "Error: MBR will not fit; now writing\n" );
+            result = FALSE;
+         }
+         else {
+            memcpy( sector, syslinux_mbr, syslinux_mbr_len );
+         }
+      }
+
+      // Check that our partition is active
+      if( sector[ PART_TABLE + ( PART_SIZE * ( partitionNum - 1 ) ) ] != 0x80 ) {
+         int p;
+         printf( "Partition %d not active; fixing.\n", partitionNum );
+         for( p = 0; p < PART_COUNT; p++ )
+            sector[ PART_TABLE + ( PART_SIZE * p ) ] = ( p == partitionNum - 1 ? 0x80 : 0 );
+      }
+
+      if( result ) {
+         SetFilePointer( drive, 0, NULL, FILE_BEGIN );
+
+         if( WriteFile( drive, sector, sizeof( sector ), &howMany, NULL ) == 0 ) {
+            printf( "Error: WriteFile on drive failed; GetLastError=%d\n", (int)GetLastError() );
+            result = FALSE;
+         }
+         else if( howMany != sizeof( sector ) ) {
+            printf( "Error: WriteFile on drive only wrote %d of %d bytes\n", (int)howMany, sizeof( sector ) );
+            result = FALSE;
+         }
+      }
+
+      if( !CloseHandle( drive ) ) {
+         printf( "Error: CloseFile( drive ) failed; GetLastError=%d\n", (int)GetLastError() );
+         result = FALSE;
+      }
+   }
+
+   return( result );
+}
+
+/* End stuff for MBR code */
+
 char *program;			/* Name of program */
 char *drive;			/* Drive to install to */
 
@@ -68,7 +195,7 @@
 
 void usage(void)
 {
-  fprintf(stderr, "Usage: syslinux.exe [-sf] <drive>:\n");
+  fprintf(stderr, "Usage: syslinux.exe [-sfm] <drive>:\n");
   exit(1);
 }
 
@@ -86,6 +213,7 @@
   char ldlinux_name[128];
 
   int force = 0;		/* -f (force) option */
+  int mbr = 0;       /* -m (MBR) option */
 
   if (!checkver()) {
     fprintf(stderr, "You need to be running at least Windows NT\n");
@@ -104,8 +232,10 @@
       while ( *opt ) {
 	if ( *opt == 's' ) {
 	  syslinux_make_stupid();	/* Use "safe, slow and stupid" code */
-        } else if ( *opt == 'f' ) {
-          force = 1;                    /* Force install */
+  } else if ( *opt == 'f' ) {
+    force = 1;                    /* Force install */
+  } else if ( *opt == 'm' ) {
+    mbr = 1;                      /* Install MBR */
 	} else {
 	  usage();
 	}
@@ -183,6 +313,19 @@
     exit(1);
   }
 
+  /* If desired, fix the MBR */
+  if( mbr ) {
+    STORAGE_DEVICE_NUMBER sdn;
+    if( GetStorageDeviceNumberByHandle( f_handle, &sdn ) ) {
+      if( FixMBR( sdn.DeviceNumber, sdn.PartitionNumber ) == FALSE ) {
+        fprintf(stderr, "Did not successfully update the MBR; continuing...\n");
+      }
+    }
+    else {
+      fprintf(stderr, "Could not find device number for updating MBR; continuing...\n");
+    }
+  }
+
   /* Close file */ 
   CloseHandle(f_handle);
 
