Index: apps/recorder/peakmeter.c
===================================================================
--- apps/recorder/peakmeter.c	(revision 29030)
+++ apps/recorder/peakmeter.c	(working copy)
@@ -930,6 +930,21 @@
     peak_meter_draw(display, &scales[display->screen_type], x, y,
                         display->getwidth() - x, height);
 }
+
+/* sets *left and *right to the current *unscaled* values */
+void peak_meter_current_vals(int *left, int *right)
+{
+    static int left_level = 0, right_level = 0;
+    if (level_check){
+        /* only read the volume info from MAS if peek since last read*/
+        left_level  = peak_meter_read_l(); 
+        right_level = peak_meter_read_r();
+        level_check = false;
+    }
+    *left = left_level;
+    *right = right_level;
+}
+
 /**
  * Draws a peak meter in the specified size at the specified position.
  * @param int x - The x coordinate. 
@@ -944,7 +959,7 @@
 static void peak_meter_draw(struct screen *display, struct meter_scales *scales,
                          int x, int y, int width, int height) 
 {
-    static int left_level = 0, right_level = 0;
+    int left_level = 0, right_level = 0;
     int left = 0, right = 0;
     int meterwidth = width - 3;
     int i, delta;
@@ -964,12 +979,7 @@
     if (peak_meter_enabled) {
 
 
-        if (level_check){
-            /* only read the volume info from MAS if peek since last read*/
-            left_level  = peak_meter_read_l(); 
-            right_level = peak_meter_read_r();
-            level_check = false;
-        }
+        peak_meter_current_vals(&left_level, &right_level);
 
         /* scale the samples dBfs */    
         left  = peak_meter_scale_value(left_level, meterwidth);
Index: apps/recorder/peakmeter.h
===================================================================
--- apps/recorder/peakmeter.h	(revision 29030)
+++ apps/recorder/peakmeter.h	(working copy)
@@ -34,6 +34,8 @@
 extern void pm_activate_clipcount(bool active);
 
 extern void peak_meter_enable(bool enable);
+/* sets *left and *right to the current *unscaled* values */
+extern void peak_meter_current_vals(int *left, int *right);
 
 extern void peak_meter_playback(bool playback);
 extern int  peak_meter_draw_get_btn(int action_context, int x[], int y[],
Index: apps/gui/skin_engine/skin_parser.c
===================================================================
--- apps/gui/skin_engine/skin_parser.c	(revision 29030)
+++ apps/gui/skin_engine/skin_parser.c	(working copy)
@@ -744,6 +744,10 @@
         token->type = SKIN_TOKEN_BATTERY_PERCENTBAR;
     else if (token->type == SKIN_TOKEN_TUNER_RSSI)
         token->type = SKIN_TOKEN_TUNER_RSSI_BAR;
+    else if (token->type == SKIN_TOKEN_PEAKMETER_LEFT)
+        token->type = SKIN_TOKEN_PEAKMETER_LEFTBAR;
+    else if (token->type == SKIN_TOKEN_PEAKMETER_RIGHT)
+        token->type = SKIN_TOKEN_PEAKMETER_RIGHTBAR;
     pb->type = token->type;
         
     return 0;
@@ -1410,6 +1414,8 @@
                 case SKIN_TOKEN_VOLUME:
                 case SKIN_TOKEN_BATTERY_PERCENT:
                 case SKIN_TOKEN_PLAYER_PROGRESSBAR:
+                case SKIN_TOKEN_PEAKMETER_LEFT:
+                case SKIN_TOKEN_PEAKMETER_RIGHT:
 #ifdef HAVE_RADIO_RSSI
                 case SKIN_TOKEN_TUNER_RSSI:
 #endif
Index: apps/gui/skin_engine/skin_render.c
===================================================================
--- apps/gui/skin_engine/skin_render.c	(revision 29030)
+++ apps/gui/skin_engine/skin_render.c	(working copy)
@@ -142,6 +142,8 @@
         case SKIN_TOKEN_VOLUMEBAR:
         case SKIN_TOKEN_BATTERY_PERCENTBAR:
 #ifdef HAVE_LCD_BITMAP
+        case SKIN_TOKEN_PEAKMETER_LEFTBAR:
+        case SKIN_TOKEN_PEAKMETER_RIGHTBAR:
         case SKIN_TOKEN_PROGRESSBAR:
         case SKIN_TOKEN_TUNER_RSSI_BAR:
         {
Index: apps/gui/skin_engine/skin_tokens.c
===================================================================
--- apps/gui/skin_engine/skin_tokens.c	(revision 29030)
+++ apps/gui/skin_engine/skin_tokens.c	(working copy)
@@ -59,6 +59,7 @@
 #include "skin_engine.h"
 #include "statusbar-skinned.h"
 #include "root_menu.h"
+#include "peakmeter.h"
 #ifdef HAVE_RECORDING
 #include "recording.h"
 #include "pcm_record.h"
@@ -1267,6 +1268,23 @@
 #endif
 
 
+#ifdef HAVE_LCD_BITMAP
+        /* peakmeter */
+        case SKIN_TOKEN_PEAKMETER_LEFT:
+        case SKIN_TOKEN_PEAKMETER_RIGHT:
+        {
+            int left, right, val;
+            peak_meter_current_vals(&left, &right);
+            val = token->type == SKIN_TOKEN_PEAKMETER_LEFT ?
+                    left : right;
+            val = peak_meter_scale_value(val, limit==1 ? MAX_PEAK : limit);
+            if (intval)
+                *intval = val;
+            snprintf(buf, buf_size, "%d", val);
+            data->peak_meter_enabled = true;
+            return buf;
+        }
+#endif
 
 #if (CONFIG_CODEC == SWCODEC)
         case SKIN_TOKEN_CROSSFADE:
Index: apps/gui/skin_engine/skin_display.c
===================================================================
--- apps/gui/skin_engine/skin_display.c	(revision 29030)
+++ apps/gui/skin_engine/skin_display.c	(working copy)
@@ -42,6 +42,7 @@
 #include "playlist.h"
 #include "audio.h"
 #include "tagcache.h"
+#include "peakmeter.h"
 
 #ifdef HAVE_LCD_BITMAP
 #include "peakmeter.h"
@@ -159,6 +160,15 @@
         length = 100;
         end = battery_level();
     }
+    else if (pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ||
+             pb->type == SKIN_TOKEN_PEAKMETER_RIGHTBAR)
+    {
+        int left, right, val;
+        peak_meter_current_vals(&left, &right);
+        val = pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ? left : right;
+        length = MAX_PEAK;
+        end = peak_meter_scale_value(val, length);
+    }
 #if CONFIG_TUNER
     else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
     {
Index: lib/skin_parser/tag_table.c
===================================================================
--- lib/skin_parser/tag_table.c	(revision 29030)
+++ lib/skin_parser/tag_table.c	(working copy)
@@ -125,6 +125,9 @@
     { SKIN_TOKEN_BUTTON_VOLUME,         "mv", "|D", SKIN_REFRESH_DYNAMIC },
     
     { SKIN_TOKEN_PEAKMETER,             "pm", "", SKIN_REFRESH_PEAK_METER },
+    { SKIN_TOKEN_PEAKMETER_LEFT,        "pL", BAR_PARAMS, SKIN_REFRESH_PEAK_METER },
+    { SKIN_TOKEN_PEAKMETER_RIGHT,       "pR", BAR_PARAMS, SKIN_REFRESH_PEAK_METER },
+    
     { SKIN_TOKEN_PLAYER_PROGRESSBAR,    "pf", "", SKIN_REFRESH_DYNAMIC|SKIN_REFRESH_PLAYER_PROGRESS },
     { SKIN_TOKEN_PROGRESSBAR,           "pb" , BAR_PARAMS, SKIN_REFRESH_PLAYER_PROGRESS },
     { SKIN_TOKEN_VOLUME,                "pv" , BAR_PARAMS, SKIN_REFRESH_DYNAMIC },
Index: lib/skin_parser/tag_table.h
===================================================================
--- lib/skin_parser/tag_table.h	(revision 29030)
+++ lib/skin_parser/tag_table.h	(working copy)
@@ -185,6 +185,10 @@
     SKIN_TOKEN_PLAYER_PROGRESSBAR,
     /* Peakmeter */
     SKIN_TOKEN_PEAKMETER,
+    SKIN_TOKEN_PEAKMETER_LEFT,
+    SKIN_TOKEN_PEAKMETER_LEFTBAR,
+    SKIN_TOKEN_PEAKMETER_RIGHT,
+    SKIN_TOKEN_PEAKMETER_RIGHTBAR,
 
     /* Current track */
     SKIN_TOKEN_TRACK_ELAPSED_PERCENT,
