--- draw.c.orig	2013-09-23 11:57:39.000000000 +0200
+++ draw.c	2014-12-06 20:30:50.785932524 +0100
@@ -395,21 +395,20 @@
 	XpmColorSymbol xpms;
 #endif
 
+	/* icon cache */
+	int ip;
+
 #ifdef DZEN_XFT
 	XftDraw *xftd=NULL;
 	XftColor xftc;
 	char *xftcs;
-	int xftcs_f=0;
 	char *xftcs_bg;
-	int xftcs_bgf=0;
 
-	xftcs    = (char *)dzen.fg;
-    xftcs_bg = (char *)dzen.bg;
+	/* set default fg/bg for XFT */
+	xftcs = estrdup(dzen.fg);
+	xftcs_bg = estrdup(dzen.bg);
 #endif
 
-	/* icon cache */
-	int ip;
-
 	/* parse line and return the text without control commands */
 	if(nodraw) {
 		rbuf = emalloc(MAX_LINE_LEN);
@@ -446,8 +445,7 @@
 			xpms.pixel = dzen.norm[ColBG];
 #endif
 #ifdef DZEN_XFT
-			xftcs_bg = (char *)dzen.bg;
-			xftcs_bgf = 0;
+			xftcs_bg = estrdup(dzen.bg);
 #endif
 		}
 		else {
@@ -679,15 +677,9 @@
 						case bg:
 							lastbg = tval[0] ? (unsigned)getcolor(tval) : dzen.norm[ColBG];
 #ifdef DZEN_XFT
-							if(xftcs_bgf) free(xftcs_bg);				
-							if(tval[0]) {
-								xftcs_bg = estrdup(tval);
-								xftcs_bgf = 1;
-							} else {
-								xftcs_bg = (char *)dzen.bg;
-								xftcs_bgf = 0;
-							}
-#endif							
+							if(xftcs_bg) free(xftcs_bg);
+							xftcs_bg = estrdup(tval[0] ? tval : dzen.bg);
+#endif
 
 							break;
 
@@ -695,19 +687,14 @@
 							lastfg = tval[0] ? (unsigned)getcolor(tval) : dzen.norm[ColFG];
 							XSetForeground(dzen.dpy, dzen.tgc, lastfg);
 #ifdef DZEN_XFT
-							if(tval[0]) {
-								xftcs = estrdup(tval);
-								xftcs_f = 1;
-							} else {
-								xftcs = (char *)dzen.fg;
-								xftcs_f = 0;
-							}
-#endif							
+							if (xftcs) free(xftcs);
+							xftcs = estrdup(tval[0] ? tval : dzen.fg);
+#endif
 							break;
 
 						case fn:
 							if(tval[0]) {
-#ifndef DZEN_XFT		
+#ifndef DZEN_XFT
 								if(!strncmp(tval, "dfnt", 4)) {
 									cur_fnt = &(dzen.fnpl[atoi(tval+4)]);
 
@@ -816,18 +803,8 @@
 						DefaultColormap(dzen.dpy, dzen.screen),  xftcs,  &xftc);
 				}
 
-				XftDrawStringUtf8(xftd, &xftc, 
+				XftDrawStringUtf8(xftd, &xftc,
 						cur_fnt->xftfont, px, py + dzen.font.xftfont->ascent, (const FcChar8 *)lbuf, strlen(lbuf));
-
-				if(xftcs_f) {
-					free(xftcs);
-					xftcs_f = 0;
-				}
-				if(xftcs_bgf) {
-					free(xftcs_bg);
-					xftcs_bgf = 0;
-				}
-
 #endif
 
 				max_y = MAX(max_y, py+dzen.font.height);
@@ -920,6 +897,11 @@
 #endif
 	}
 
+#ifdef DZEN_XFT
+	if(xftcs) free(xftcs);
+	if(xftcs_bg) free(xftcs_bg);
+#endif
+
 	return nodraw ? rbuf : NULL;
 }
 
