diff --git a/dlls/ddraw/ddraw/main.c b/dlls/ddraw/ddraw/main.c
index 6d9d693f9ce779fb69c1ff5aef85784d99bf4139..4a707f0792678c5a62c169c1880850bed0fb4db1 100644
--- a/dlls/ddraw/ddraw/main.c
+++ b/dlls/ddraw/ddraw/main.c
@@ -451,7 +451,7 @@ create_primary(IDirectDrawImpl* This, LPDDSURFACEDESC2 pDDSD,
 
 	ddsd.dwFlags &= ~DDSD_BACKBUFFERCOUNT;
 	ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VISIBLE | DDSCAPS_PRIMARYSURFACE
-				 | DDSCAPS_BACKBUFFER);
+				 | DDSCAPS_BACKBUFFER | DDSCAPS_FRONTBUFFER);
 
 	primary = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirectDrawSurface7,
 			      *ppSurf);
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 1b2b3db62a1dcc249dfabd94e7bb55480f033239..b8ce3d7ba6d8d3c5d62e8266f77813466a6293d4 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -354,6 +354,7 @@ extern void DDRAW_dump_pixelformat(const DDPIXELFORMAT *in);
 extern void DDRAW_dump_colorkeyflag(DWORD ck);
 extern void DDRAW_dump_surface_desc(const DDSURFACEDESC2 *lpddsd);
 extern void DDRAW_dump_cooperativelevel(DWORD cooplevel);
+extern void DDRAW_dump_lockflag(DWORD lockflag);
 extern void DDRAW_dump_DDCOLORKEY(const DDCOLORKEY *in);
 extern void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps);
 #endif /* __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H */
diff --git a/dlls/ddraw/dsurface/main.c b/dlls/ddraw/dsurface/main.c
index d3a26260bfc23c409df7b6aca8e9cac0b13326f7..0efb4302ce07c144d4ff76740337b881755d42a0 100644
--- a/dlls/ddraw/dsurface/main.c
+++ b/dlls/ddraw/dsurface/main.c
@@ -977,7 +977,10 @@ Main_DirectDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
 {
     ICOM_THIS(IDirectDrawSurfaceImpl, iface);
 
-    TRACE("(%p)->Lock(%p,%p,%08lx,%08lx)\n",This,prect,pDDSD,flags,(DWORD)h);
+    if (TRACE_ON(ddraw)) {
+        TRACE("(%p)->Lock(%p,%p,%08lx,%08lx)\n",This,prect,pDDSD,flags,(DWORD)h);
+	TRACE(" - locking flags : "); DDRAW_dump_lockflag(flags);
+    }
 
     if (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY))
 	WARN("(%p)->Lock(%p,%p,%08lx,%08lx)\n",
diff --git a/dlls/ddraw/helper.c b/dlls/ddraw/helper.c
index b2899d0aedc69941feb1faaff443b1c6700ccee3..4b64f4b44c32031c0f56a270f15b6b5542f8a8e8 100644
--- a/dlls/ddraw/helper.c
+++ b/dlls/ddraw/helper.c
@@ -66,7 +66,8 @@ static void DDRAW_dump_flags_(DWORD flags, const flag_info* names,
     unsigned int	i;
 
     for (i=0; i < num_names; i++)
-	if (names[i].val & flags)
+        if ((flags & names[i].val) ||      /* standard flag value */
+	    ((!flags) && (!names[i].val))) /* zero value only */
 	    DPRINTF("%s ", names[i].name);
 
     if (newline)
@@ -326,6 +327,21 @@ void DDRAW_dump_colorkeyflag(DWORD ck)
     DDRAW_dump_flags(ck, flags, sizeof(flags)/sizeof(flags[0]));
 }
 
+void DDRAW_dump_lockflag(DWORD lockflag)
+{
+    static const flag_info flags[] =
+	{
+	    FE(DDLOCK_SURFACEMEMORYPTR),
+	    FE(DDLOCK_WAIT),
+	    FE(DDLOCK_EVENT),
+	    FE(DDLOCK_READONLY),
+	    FE(DDLOCK_WRITEONLY),
+	    FE(DDLOCK_NOSYSLOCK)
+	};
+
+    DDRAW_dump_flags(lockflag, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
 static void DDRAW_dump_DWORD(const void *in) {
     DPRINTF("%ld", *((const DWORD *) in));
 }