diff --git a/windows/clipboard.c b/windows/clipboard.c
index d51e063..06fe236 100644
--- a/windows/clipboard.c
+++ b/windows/clipboard.c
@@ -796,7 +796,7 @@
 
     if (hClipLock != GetCurrentTask())
     {
-        WARN("Clipboard not opened by calling task!");
+        WARN("Clipboard not opened by calling task!\n");
         return FALSE;
     }
     
@@ -1046,7 +1046,7 @@
 
     if (CLIPBOARD_IsLocked())
     {
-        WARN("Clipboard not opened by calling task!");
+        WARN("Clipboard not opened by calling task!\n");
         return 0;
     }
 
@@ -1168,7 +1168,7 @@
 
     if (CLIPBOARD_IsLocked())
     {
-        WARN("Clipboard not opened by calling task!");
+        WARN("Clipboard not opened by calling task!\n");
         return 0;
     }
 
@@ -1207,7 +1207,7 @@
 
     lpNewFormat = (LPWINE_CLIPFORMAT)HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_CLIPFORMAT));
     if(lpNewFormat == NULL) {
-        WARN("No more memory for a new format!");
+        WARN("No more memory for a new format!\n");
         return 0;
     }
     lpFormat->NextFormat = lpNewFormat;
@@ -1216,7 +1216,7 @@
 
     lpNewFormat->Name = (LPSTR)HEAP_strdupA(GetProcessHeap(), 0, FormatName);
     if(lpNewFormat->Name == NULL) {
-        WARN("No more memory for the new format name!");
+        WARN("No more memory for the new format name!\n");
         HeapFree(GetProcessHeap(), 0, lpNewFormat);
         return 0;
     }
diff --git a/windows/defwnd.c b/windows/defwnd.c
index 855bde3..d5459ab 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -70,7 +70,7 @@
     if ((wndPtr->text = HeapAlloc(GetProcessHeap(), 0, count * sizeof(WCHAR))))
         MultiByteToWideChar( CP_ACP, 0, text, -1, wndPtr->text, count );
     else
-        ERR("Not enough memory for window text");
+        ERR("Not enough memory for window text\n");
 
     if (USER_Driver.pSetWindowText)
         USER_Driver.pSetWindowText(wndPtr->hwndSelf, wndPtr->text);
@@ -93,7 +93,7 @@
     if ((wndPtr->text = HeapAlloc(GetProcessHeap(), 0, count * sizeof(WCHAR))))
 	strcpyW( wndPtr->text, text );
     else
-        ERR("Not enough memory for window text");
+        ERR("Not enough memory for window text\n");
 
     if (USER_Driver.pSetWindowText)
         USER_Driver.pSetWindowText(wndPtr->hwndSelf, wndPtr->text);
diff --git a/windows/scroll.c b/windows/scroll.c
index 71dc90a..9afd2f0 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -268,11 +268,11 @@
         HRGN  hrgnTemp = CreateRectRgnIndirect(&rc);
         RECT  caretrc;
 
-TRACE("%04x, %d,%d hrgnUpdate=%04x rcUpdate = %p \
-cliprc = (%d,%d-%d,%d), rc=(%d,%d-%d,%d) %04x\n",             
-(HWND16)hwnd, dx, dy, hrgnUpdate, rcUpdate,
-clipRect?clipRect->left:0, clipRect?clipRect->top:0, clipRect?clipRect->right:0, clipRect?clipRect->bottom:0,
-rc.left, rc.top, rc.right, rc.bottom, (UINT16)flags );
+        TRACE("%04x, %d,%d hrgnUpdate=%04x rcUpdate = %p cliprc = (%d,%d-%d,%d), rc=(%d,%d-%d,%d) %04x\n",
+              (HWND16)hwnd, dx, dy, hrgnUpdate, rcUpdate,
+              clipRect?clipRect->left:0, clipRect?clipRect->top:0,
+              clipRect?clipRect->right:0, clipRect?clipRect->bottom:0,
+              rc.left, rc.top, rc.right, rc.bottom, (UINT16)flags );
 
         caretrc = rc; 
 	bCaret = SCROLL_FixCaret(hwnd, &caretrc, flags);
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c
index ceb6994..a62d601 100644
--- a/windows/x11drv/event.c
+++ b/windows/x11drv/event.c
@@ -1061,7 +1061,7 @@
     }
     
     /* Update the X property */
-    TRACE("\tUpdating property %s...", TSXGetAtomName(display, rprop));
+    TRACE("\tUpdating property %s...\n", TSXGetAtomName(display, rprop));
 
     /* We may want to consider setting the type to xaTargets instead,
      * in case some apps expect this instead of XA_ATOM */
@@ -1363,7 +1363,7 @@
               /* We must have a non "None" property to service a MULTIPLE target atom */
               if ( !targetPropList[i+1] )
               {
-                  TRACE("\tMULTIPLE(%d): Skipping target with empty property!", i);
+                  TRACE("\tMULTIPLE(%d): Skipping target with empty property!\n", i);
                   continue;
               }
               
@@ -1502,7 +1502,7 @@
 static void EVENT_PropertyNotify( XPropertyEvent *event )
 {
   /* Check if we have any resources to free */
-  TRACE("Received PropertyNotify event: ");
+  TRACE("Received PropertyNotify event: \n");
 
   switch(event->state)
   {
diff --git a/windows/x11drv/keyboard.c b/windows/x11drv/keyboard.c
index f9a18bb..9bc5242 100644
--- a/windows/x11drv/keyboard.c
+++ b/windows/x11drv/keyboard.c
@@ -692,7 +692,7 @@
 
     TRACE("called\n");
     if (!TSXQueryKeymap(display, keys_return)) {
-        ERR("Error getting keymap !");
+        ERR("Error getting keymap !\n");
         return;
     }
 
@@ -850,7 +850,7 @@
 
   syms = keysyms_per_keycode;
   if (syms > 4) {
-    WARN("%d keysyms per keycode not supported, set to 4", syms);
+    WARN("%d keysyms per keycode not supported, set to 4\n", syms);
     syms = 4;
   }
   for (current = 0; main_key_tab[current].comment; current++) {
diff --git a/windows/x11drv/wineclipsrv.c b/windows/x11drv/wineclipsrv.c
index c54d2f5..5e0b938 100644
--- a/windows/x11drv/wineclipsrv.c
+++ b/windows/x11drv/wineclipsrv.c
@@ -842,7 +842,7 @@
               /* We must have a non "None" property to service a MULTIPLE target atom */
               if ( !targetPropList[i+1] )
               {
-                  TRACE("\tMULTIPLE(%d): Skipping target with empty property!", i);
+                  TRACE("\tMULTIPLE(%d): Skipping target with empty property!\n", i);
                   continue;
               }
               
