diff --git a/src/gui_mac.c b/src/gui_mac.c
index bfecf81..c177ee6 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -360,9 +360,7 @@
 	for (c = Cstring, p = PascalString+1, len = 0; (*c != 0) && (len < 255); c++)
 	{
 	    if ((*c == '\\') && (c[1] != 0))
-	    {
 		c++;
-	    }
 	    *p = *c;
 	    p++;
 	    len++;
@@ -1259,25 +1257,19 @@
     error = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
 		    NewAEEventHandlerUPP(Handle_aevt_oapp_AE), 0, false);
     if (error)
-    {
 	return error;
-    }
 
     /* install quit application handler */
     error = AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
 		    NewAEEventHandlerUPP(Handle_aevt_quit_AE), 0, false);
     if (error)
-    {
 	return error;
-    }
 
     /* install open document handler */
     error = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
 		    NewAEEventHandlerUPP(HandleODocAE), 0, false);
     if (error)
-    {
 	return error;
-    }
 
     /* install print document handler */
     error = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments,
@@ -1331,15 +1323,11 @@
     error = AEInstallEventHandler('KAHL', 'GTTX',
 		    NewAEEventHandlerUPP(Handle_KAHL_GTTX_AE), 0, false);
     if (error)
-    {
 	return error;
-    }
     error = AEInstallEventHandler('KAHL', 'SRCH',
 		    NewAEEventHandlerUPP(Handle_KAHL_SRCH_AE), 0, false);
     if (error)
-    {
 	return error;
-    }
     error = AEInstallEventHandler('KAHL', 'MOD ',
 		    NewAEEventHandlerUPP(Handle_KAHL_MOD_AE), 0, false);
 #endif
@@ -3857,9 +3845,7 @@
     /*  SelectFont(hdc, gui.currFont); */
 
 	if (flags & DRAW_TRANSP)
-	{
 	    TextMode(srcOr);
-	}
 
 	MoveTo(TEXT_X(col), TEXT_Y(row));
 	DrawText((char *)s, 0, len);
@@ -3939,9 +3925,7 @@
 
 	/*  SelectFont(hdc, gui.currFont); */
 	if (flags & DRAW_TRANSP)
-	{
 	    TextMode(srcOr);
-	}
 
 	MoveTo(TEXT_X(col), TEXT_Y(row));
 
@@ -4620,13 +4604,9 @@
     GetWindowBounds(gui.VimWindow, kWindowGlobalPortRgn, &VimBound);
 
     if (gui.which_scrollbars[SBAR_LEFT])
-    {
 	VimBound.left = -gui.scrollbar_width + 1;
-    }
     else
-    {
 	VimBound.left = 0;
-    }
 
     SetWindowBounds(gui.VimWindow, kWindowGlobalPortRgn, &VimBound);
 
@@ -5675,9 +5655,8 @@
 
     /* Hang until one of the button is hit */
     do
-    {
 	ModalDialog(dialogUPP, &itemHit);
-    } while ((itemHit < 1) || (itemHit > lastButton));
+    while ((itemHit < 1) || (itemHit > lastButton));
 
 #ifdef USE_CARBONKEYHANDLER
     dialog_busy = FALSE;
