diff --git a/src/Makefile b/src/Makefile
index 0c034143d956c7547ded9e7657a53fcbd91fc936..b6930ffd9f817b4b9ba3cae65287b1afaf33bf97 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -372,7 +372,7 @@ else
 
 	# build a normal optimised version
 	WINDRESFLAGS = -DNDEBUG
-	CFLAGS+=-O2
+	#CFLAGS+=-O2
 endif
 	CFLAGS+=-g $(OPTS) $(M5) $(WINDRESFLAGS)
 
diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c
index 8d345d2a8b83698af157082f6517925ce96b7447..0a0aaf312bb81e4f6225b860e758072ea0f68f44 100644
--- a/src/sdl/i_video.c
+++ b/src/sdl/i_video.c
@@ -251,6 +251,11 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen)
 		{
 			SDL_FreeSurface(vidSurface);
 		}
+		if (vid.buffer)
+		{
+			free(vid.buffer);
+			vid.buffer = NULL;
+		}
 		SDL_PixelFormatEnumToMasks(sw_texture_format, &bpp, &rmask, &gmask, &bmask, &amask);
 		vidSurface = SDL_CreateRGBSurface(0, width, height, bpp, rmask, gmask, bmask, amask);
 	}
@@ -1654,12 +1659,10 @@ static void Impl_VideoSetupBuffer(void)
 	{
 		vid.rowbytes = vid.width * vid.bpp;
 		vid.direct = NULL;
-		vid.buffer = malloc(vid.rowbytes*vid.height*NUMSCREENS);
 		if (vid.buffer)
-		{
-			memset(vid.buffer,0x00,vid.rowbytes*vid.height*NUMSCREENS);
-		}
-		else
+			free(vid.buffer);
+		vid.buffer = calloc(vid.rowbytes*vid.height, NUMSCREENS);
+		if (!vid.buffer)
 		{
 			I_Error("%s", M_GetText("Not enough memory for video buffer\n"));
 		}
@@ -1766,7 +1769,6 @@ void I_StartupGraphics(void)
 	//Impl_SetWindowName("SRB2 "VERSIONSTRING);
 	VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT));
 
-	vid.buffer = NULL;  // For software mode
 	vid.width = BASEVIDWIDTH; // Default size for startup
 	vid.height = BASEVIDHEIGHT; // BitsPerPixel is the SDL interface's
 	vid.recalc = true; // Set up the console stufff
@@ -1816,7 +1818,8 @@ void I_ShutdownGraphics(void)
 	icoSurface = NULL;
 	if (render_soft == oldrendermode)
 	{
-		vidSurface = NULL; //Alam: SDL_Video system free vidSurface for me
+		if (vidSurface) SDL_FreeSurface(vidSurface);
+		vidSurface = NULL;
 		if (vid.buffer) free(vid.buffer);
 		vid.buffer = NULL;
 		if (bufSurface) SDL_FreeSurface(bufSurface);