diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 66dbb3d5ef289d6f24b1e43dbeda833459ba8052..b9da996efe76fc78d821c2e69105774fda7bef2b 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -319,6 +319,7 @@ void yuv_fillrect(SDL_Overlay *overlay, SDL_Rect *r, int dac_entry)
 	return;
 
 planar:
+	sdl.LockYUVOverlay(overlay);
 	{
 		int y;
 		Uint8 *Y,*U,*V;
@@ -347,8 +348,10 @@ planar:
 			odd_line = !odd_line;
 		}
 	}
+	sdl.UnlockYUVOverlay(overlay);
 	return;
 packed:
+	sdl.LockYUVOverlay(overlay);
 	{
 		int x,y;
 		Uint32 colour;
@@ -368,6 +371,7 @@ packed:
 			offset+=overlay->pitches[0]>>2;
 		}
 	}
+	sdl.UnlockYUVOverlay(overlay);
 	return;
 }
 
@@ -854,7 +858,6 @@ void setup_surfaces(void)
 		}
 		if(yuv.enabled) {
 			if(yuv.overlay) {
-				sdl.UnlockYUVOverlay(yuv.overlay);
 				sdl.mutexV(yuv.mutex);
 				sdl.FreeYUVOverlay(yuv.overlay);
 			}
@@ -863,22 +866,26 @@ void setup_surfaces(void)
 				if(yuv.overlay)
 					yuv.best_format=yuv.overlay->format;
 				if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
-					sdl.FreeYUVOverlay(yuv.overlay);
+					if (yuv.overlay)
+						sdl.FreeYUVOverlay(yuv.overlay);
 					yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YUY2_OVERLAY, win);
 					if(yuv.overlay)
 						yuv.best_format=yuv.overlay->format;
 					if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
-						sdl.FreeYUVOverlay(yuv.overlay);
+						if (yuv.overlay)
+							sdl.FreeYUVOverlay(yuv.overlay);
 						yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_YVYU_OVERLAY, win);
 						if(yuv.overlay)
 							yuv.best_format=yuv.overlay->format;
 						if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
-							sdl.FreeYUVOverlay(yuv.overlay);
+							if (yuv.overlay)
+								sdl.FreeYUVOverlay(yuv.overlay);
 							yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_UYVY_OVERLAY, win);
 							if(yuv.overlay)
 								yuv.best_format=yuv.overlay->format;
 							if(yuv.overlay==NULL || !yuv.overlay->hw_overlay) {
-								sdl.FreeYUVOverlay(yuv.overlay);
+								if (yuv.overlay)
+									sdl.FreeYUVOverlay(yuv.overlay);
 								yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, SDL_IYUV_OVERLAY, win);
 								if(yuv.overlay)
 									yuv.best_format=yuv.overlay->format;
@@ -891,7 +898,6 @@ void setup_surfaces(void)
 			}
 			yuv.overlay=sdl.CreateYUVOverlay(char_width,char_height, yuv.best_format, win);
 			sdl.mutexP(yuv.mutex);
-			sdl.LockYUVOverlay(yuv.overlay);
 			sdl_setup_yuv_colours();
 		}
 		sdl_setup_colours(new_rect);
@@ -1562,11 +1568,9 @@ int sdl_video_event_thread(void *data)
 											dstrect.h=win->h;
 											dstrect.x=0;
 											dstrect.y=0;
-											sdl.UnlockYUVOverlay(yuv.overlay);
 											sdl.mutexV(yuv.mutex);
 											sdl.DisplayYUVOverlay(yuv.overlay, &dstrect);
 											sdl.mutexP(yuv.mutex);
-											sdl.LockYUVOverlay(yuv.overlay);
 										}
 									}
 									else {