diff -ur spectrum-old/spectrum.c spectrum/spectrum.c
--- spectrum-old/spectrum.c	2010-05-15 02:07:18.000000000 +0200
+++ spectrum/spectrum.c	2010-05-15 02:08:14.000000000 +0200
@@ -31,9 +31,12 @@
 /* WIDTH should be kept 256, this is the hardwired resolution of the
    spectrum given by XMMS */
 #define WIDTH 256
+#define BAR_WIDTH 3
+#define WIN_WIDTH WIDTH*BAR_WIDTH
 
 /* HEIGHT can be modified at your pleasure */
-#define HEIGHT 128
+#define HEIGHT 128*BAR_WIDTH
+#define WIN_HEIGHT HEIGHT
 
 /* Linearity of the amplitude scale (0.5 for linear, keep in [0.1, 0.9]) */
 #define d 0.33
@@ -93,31 +96,31 @@
 	gdk_window_set_back_pixmap(window->window,bg_pixmap,0);
 	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(fsanalyzer_destroy_cb),NULL);
 	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_widget_destroyed), &window);
-	gtk_widget_set_size_request(GTK_WIDGET(window), WIDTH, HEIGHT);
+	gtk_widget_set_size_request(GTK_WIDGET(window), WIN_WIDTH, WIN_HEIGHT);
 	gc = gdk_gc_new(window->window);
-	draw_pixmap = gdk_pixmap_new(window->window,WIDTH,HEIGHT,gdk_rgb_get_visual()->depth);
+	draw_pixmap = gdk_pixmap_new(window->window,WIN_WIDTH,WIN_HEIGHT,gdk_rgb_get_visual()->depth);
 
-	bar = gdk_pixmap_new(window->window,25, HEIGHT, gdk_rgb_get_visual()->depth);
-	for(i = 0; i < HEIGHT / 2; i++) {
+	bar = gdk_pixmap_new(window->window,25, WIN_HEIGHT, gdk_rgb_get_visual()->depth);
+	for(i = 0; i < WIN_HEIGHT / 2; i++) {
 		color.red = 0xFFFF;
-		color.green = ((i * 255) / (HEIGHT / 2)) << 8;
+		color.green = ((i * 255) / (WIN_HEIGHT / 2)) << 8;
 		color.blue = 0;
 
 		gdk_color_alloc(gdk_colormap_get_system(),&color);
 		gdk_gc_set_foreground(gc,&color);
 		gdk_draw_line(bar,gc,0,i,24,i);
 	}
-	for(i = 0; i < HEIGHT / 2; i++) {
-		color.red = (255 - ((i * 255) / (HEIGHT / 2))) <<8;
+	for(i = 0; i < WIN_HEIGHT / 2; i++) {
+		color.red = (255 - ((i * 255) / (WIN_HEIGHT / 2))) <<8;
 		color.green = 0xFFFF;
 		color.blue = 0;
 
 		gdk_color_alloc(gdk_colormap_get_system(),&color);
 		gdk_gc_set_foreground(gc,&color);
-		gdk_draw_line(bar,gc,0,i + (HEIGHT / 2),24,i + (HEIGHT / 2));
+		gdk_draw_line(bar,gc,0,i + (WIN_HEIGHT / 2),24,i + (WIN_HEIGHT / 2));
 	}
 
-	scale = HEIGHT / ( log((1 - d) / d) * 2 );
+	scale = WIN_HEIGHT / ( log((1 - d) / d) * 2 );
 	x00 = d*d*32768.0/(2 * d - 1);
 	y00 = -log(-x00) * scale;
 
@@ -164,7 +167,7 @@
 }
 
 static gint draw_func(gpointer data) {
-	gint i;
+	gint i, j;
 
 	/* FIXME: should allow spare redrawing like the vis. in the main window */
 	if(!window) {
@@ -173,10 +176,11 @@
 	}
 
 	GDK_THREADS_ENTER();
-	gdk_draw_rectangle(draw_pixmap, gc, TRUE, 0, 0, WIDTH, HEIGHT);
+	gdk_draw_rectangle(draw_pixmap, gc, TRUE, 0, 0, WIN_WIDTH, WIN_HEIGHT);
 
 	for(i = 0; i < WIDTH; i++)
-		gdk_draw_pixmap(draw_pixmap, gc, bar, 0, HEIGHT-1-bar_heights[i], i, HEIGHT-1-bar_heights[i], 1, bar_heights[i]);
+    for(j = 0; j < BAR_WIDTH; j++)
+      gdk_draw_pixmap(draw_pixmap, gc, bar, 0, WIN_HEIGHT-1-bar_heights[i], i*BAR_WIDTH+j, WIN_HEIGHT-1-bar_heights[i], 1, bar_heights[i]);
 
 	gdk_window_clear(area->window);
 	GDK_THREADS_LEAVE();
@@ -207,16 +211,27 @@
 		return;
 
 	/* FIXME: can anything taken out of the main thread? */
+
+  y = (gdouble)data[0][0] * 1; /* Compensating the energy */
+  y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */
+  y = ( (dif-2)*y + y + bar_heights[1]) / dif; /* Add some diffusion */
+  y = ((tau-1)*bar_heights[0] + y) / tau; /* Add some dynamics */
+  bar_heights[0] = (gint16)y;
+
 	for (i = 0; i < WIDTH; i++) {
 		y = (gdouble)data[0][i] * (i + 1); /* Compensating the energy */
 		y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */
-
-		y = ( (dif-2)*y + /* FIXME: conditionals should be rolled out of the loop */
-			(i==0       ? y : bar_heights[i-1]) +
-			(i==WIDTH-1 ? y : bar_heights[i+1])) / dif; /* Add some diffusion */
+		y = ( (dif-2)*y + bar_heights[i-1] + bar_heights[i+1]) / dif; /* Add some diffusion */
 		y = ((tau-1)*bar_heights[i] + y) / tau; /* Add some dynamics */
 		bar_heights[i] = (gint16)y;
 	}
+
+  y = (gdouble)data[0][WIDTH-1] * 1; /* Compensating the energy */
+  y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */
+  y = ( (dif-2)*y + bar_heights[WIDTH-2] + y) / dif; /* Add some diffusion */
+  y = ((tau-1)*bar_heights[WIDTH-1] + y) / tau; /* Add some dynamics */
+  bar_heights[WIDTH-1] = (gint16)y;
+
 	draw_func(NULL);
 	return;
 }
