Index: apps/gui/skin_engine/skin_parser.c
===================================================================
--- apps/gui/skin_engine/skin_parser.c	(revision 26709)
+++ apps/gui/skin_engine/skin_parser.c	(working copy)
@@ -733,7 +733,11 @@
         if (img->num_subimages <= 0)
             return WPS_ERROR_INVALID_PARAM;
     }
-    struct skin_token_list *item = new_skin_token_list_item(NULL, img);
+    /* %xl is a WPS_NO_TOKEN so add it to the list and alloc a new token 
+     * %x doesnt need that */
+    
+    struct wps_token *out = (token->type != WPS_TOKEN_IMAGE_DISPLAY) ? NULL : token;
+    struct skin_token_list *item = new_skin_token_list_item(out, img);
     if (!item)
         return WPS_ERROR_INVALID_PARAM;
     add_to_ll_chain(&wps_data->images, item);
@@ -1273,7 +1277,6 @@
     pb->have_bitmap_pb = false;
     pb->bm.data = NULL; /* no bitmap specified */
     pb->follow_lang_direction = follow_lang_direction > 0;
-    pb->draw = false;
 
     if (*wps_bufptr != '(') /* regular old style */
     {
Index: apps/gui/skin_engine/skin_tokens.c
===================================================================
--- apps/gui/skin_engine/skin_tokens.c	(revision 26709)
+++ apps/gui/skin_engine/skin_tokens.c	(working copy)
@@ -611,10 +611,19 @@
             return NULL;
             
         case WPS_TOKEN_ALBUMART_DISPLAY:
-            if (!data->albumart)
-                return NULL;
-            if (!data->albumart->draw)
-                data->albumart->draw = true;
+            if (data->albumart)
+            {
+                int handle = playback_current_aa_hid(data->playback_aa_slot);
+#if CONFIG_TUNER
+                if (in_radio_screen())
+                {
+                    struct dim dim = {data->albumart->width, data->albumart->height};
+                    handle = radio_get_art_hid(&dim);
+                }
+#endif
+                draw_album_art(gwps, handle, false);
+                data->albumart->draw = false;
+            }
             return NULL;
 #endif
 
Index: apps/gui/skin_engine/skin_display.c
===================================================================
--- apps/gui/skin_engine/skin_display.c	(revision 26709)
+++ apps/gui/skin_engine/skin_display.c	(working copy)
@@ -125,10 +125,9 @@
 }
 
 static void draw_progressbar(struct gui_wps *gwps,
-                             struct progressbar *pb)
+                             struct progressbar *pb, struct viewport *vp)
 {
     struct screen *display = gwps->display;
-    struct viewport *vp = pb->vp;
     struct wps_state *state = gwps->state;
     struct mp3entry *id3 = state->id3;
     int y = pb->y, height = pb->height;
@@ -423,52 +422,6 @@
 #endif
 }
 
-static void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
-{
-    if(!gwps || !gwps->data || !gwps->display)
-        return;
-
-    struct wps_data *data = gwps->data;
-    struct screen *display = gwps->display;
-    struct skin_token_list *list = data->images;
-
-    while (list)
-    {
-        struct gui_img *img = (struct gui_img*)list->token->value.data;
-        if (img->loaded)
-        {
-            if (img->display >= 0)
-            {
-                wps_draw_image(gwps, img, img->display);
-            }
-            else if (img->always_display && img->vp == vp)
-            {
-                wps_draw_image(gwps, img, 0);
-            }
-        }
-        list = list->next;
-    }
-#ifdef HAVE_ALBUMART
-    /* now draw the AA */
-    if (data->albumart && data->albumart->vp == vp
-        && data->albumart->draw)
-    {
-        int handle = playback_current_aa_hid(data->playback_aa_slot);
-#if CONFIG_TUNER
-        if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
-        {
-            struct dim dim = {data->albumart->width, data->albumart->height};
-            handle = radio_get_art_hid(&dim);
-        }
-#endif
-        draw_album_art(gwps, handle, false);
-        data->albumart->draw = false;
-    }
-#endif
-
-    display->set_drawmode(DRMODE_SOLID);
-}
-
 #else /* HAVE_LCD_CHARCELL */
 
 static bool draw_player_progress(struct gui_wps *gwps)
@@ -684,13 +637,6 @@
         /* clear all pictures in the conditional and nested ones */
         if (data->tokens[i].type == WPS_TOKEN_IMAGE_PRELOAD_DISPLAY)
             clear_image_pos(gwps, find_image(data->tokens[i].value.i&0xFF, data));
-        else if (data->tokens[i].type == WPS_TOKEN_VOLUMEBAR   ||
-                 data->tokens[i].type == WPS_TOKEN_PROGRESSBAR ||
-                 data->tokens[i].type == WPS_TOKEN_BATTERY_PERCENTBAR )
-        {
-            struct progressbar *bar = (struct progressbar*)data->tokens[i].value.data;
-            bar->draw = false;
-        }
         else if (data->tokens[i].type == WPS_TOKEN_PEAKMETER)
         {
             data->peak_meter_enabled = false;
@@ -720,7 +666,8 @@
                      struct align_pos *align,
                      char *linebuf,
                      int linebuf_size,
-                     unsigned refresh_mode)
+                     unsigned refresh_mode,
+                     struct skin_viewport *viewport)
 {
     struct wps_data *data = gwps->data;
 
@@ -778,7 +725,7 @@
             case WPS_TOKEN_PROGRESSBAR:
             {
                 struct progressbar *bar = (struct progressbar*)data->tokens[i].value.data;
-                bar->draw = true;
+                draw_progressbar(gwps, bar, &viewport->vp);
             }
             break;
             case WPS_TOKEN_IMAGE_PRELOAD_DISPLAY:
@@ -788,16 +735,18 @@
                 struct gui_img *img = find_image(n, data);
 
                 if (img && img->loaded)
-                    img->display = subimage;
+                {
+                    wps_draw_image(gwps, img, img->always_display ? 0 : subimage);
+                }
                 break;
             }
+                
             case WPS_TOKEN_DRAW_INBUILTBAR:
                 gui_statusbar_draw(&(statusbars.statusbars[gwps->display->screen_type]),
                                    refresh_mode == WPS_REFRESH_ALL,
                                    data->tokens[i].value.data);
                 break;
 #endif
-
             case WPS_TOKEN_ALIGN_LEFT:
             case WPS_TOKEN_ALIGN_LEFT_RTL:
             case WPS_TOKEN_ALIGN_CENTER:
@@ -1235,16 +1184,6 @@
 
         int hidden_vp = 0;
 
-#ifdef HAVE_LCD_BITMAP
-        /* Set images to not to be displayed */
-        struct skin_token_list *imglist = data->images;
-        while (imglist)
-        {
-            struct gui_img *img = (struct gui_img *)imglist->token->value.data;
-            img->display = -1;
-            imglist = imglist->next;
-        }
-#endif
         /* dont redraw the viewport if its disabled */
         if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE)
         {   /* don't draw anything into this one */
@@ -1293,7 +1232,7 @@
             {
                 /* get_line tells us if we need to update the line */
                 update_line = get_line(gwps, subline, &align,
-                                       linebuf, sizeof(linebuf), vp_refresh_mode);
+                                       linebuf, sizeof(linebuf), vp_refresh_mode, skin_viewport);
             }
 #ifdef HAVE_LCD_BITMAP
             /* peakmeter */
@@ -1354,25 +1293,6 @@
                     write_line(display, &align, line_count, false);
             }
         }
-#ifdef HAVE_LCD_BITMAP
-        /* progressbar */
-        if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS)
-        {
-            struct skin_token_list *bar = gwps->data->progressbars;
-            while (bar)
-            {
-                struct progressbar *thisbar = (struct progressbar*)bar->token->value.data;
-                if (thisbar->vp == &skin_viewport->vp && thisbar->draw)
-                {
-                    draw_progressbar(gwps, thisbar);
-                }
-                bar = bar->next;
-            }
-        }
-        /* Now display any images in this viewport */
-        if (!hidden_vp)
-            wps_display_images(gwps, &skin_viewport->vp);
-#endif
     }
 
     /* Restore the default viewport */
Index: apps/gui/skin_engine/wps_internals.h
===================================================================
--- apps/gui/skin_engine/wps_internals.h	(revision 26709)
+++ apps/gui/skin_engine/wps_internals.h	(working copy)
@@ -82,7 +82,6 @@
     short int y;                  /* y-pos */
     short int num_subimages;      /* number of sub-images */
     short int subimage_height;    /* height of each sub-image */
-    short int display;            /* -1 for no display, 0..n to display a subimage */
     struct bitmap bm;
     char label;
     bool loaded;            /* load state */
@@ -105,8 +104,6 @@
     /*progressbar image*/
     struct bitmap bm;
     bool have_bitmap_pb;
-    
-    bool draw;
 };
 #endif
 
