Index: tag_table.c
===================================================================
--- tag_table.c	(revision 26402)
+++ tag_table.c	(working copy)
@@ -26,187 +26,187 @@
 /* The tag definition table */
 struct tag_info legal_tags[] = 
 {
-    { "ac", "" },
-    { "al", "" },
-    { "aL", "" },
-    { "ar", "" },
-    { "aR", "" },
-    { "ax", "" },
+    { SKIN_TOKEN_ALIGN_CENTER,          "ac", "" },
+    { SKIN_TOKEN_ALIGN_LEFT,            "al", "" },
+    { SKIN_TOKEN_ALIGN_LEFT_RTL,        "aL", "" },
+    { SKIN_TOKEN_ALIGN_RIGHT,           "ar", "" },
+    { SKIN_TOKEN_ALIGN_RIGHT_RTL,       "aR", "" },
+    { SKIN_TOKEN_ALIGN_LANGDIRECTION,   "ax", "" },
     
-    { "bl" , "*fIIII" },
-    { "bv", "" },
-    { "bt", "" },
-    { "bs", "" },
-    { "bc", "" },
-    { "bp", "" },
-    { "bu", "" },
+    { SKIN_TOKEN_BATTERY_PERCENT,       "bl" , "*fIIII" },
+    { SKIN_TOKEN_BATTERY_VOLTS,         "bv", "" },
+    { SKIN_TOKEN_BATTERY_TIME,          "bt", "" },
+    { SKIN_TOKEN_BATTERY_SLEEPTIME,     "bs", "" },
+    { SKIN_TOKEN_BATTERY_CHARGING,      "bc", "" },
+    { SKIN_TOKEN_BATTERY_CHARGER_CONNECTED, "bp", "" },
+    { SKIN_TOKEN_USB_POWERED,           "bu", "" },
     
     
-    { "cc", "" },
-    { "cd", "" },
-    { "ce", "" },
-    { "cf", "" },
-    { "cH", "" },
-    { "ck", "" },
-    { "cI", "" },
-    { "cl", "" },
-    { "cm", "" },
-    { "cM", "" },
-    { "cS", "" },
-    { "cy", "" },
-    { "cY", "" },
-    { "cP", "" },
-    { "cp", "" },
-    { "ca", "" },
-    { "cb", "" },
-    { "cu", "" },
-    { "cw", "" },
+    { SKIN_TOKEN_RTC_PRESENT,           "cc", "" },
+    { SKIN_TOKEN_RTC_DAY_OF_MONTH,      "cd", "" },
+    { SKIN_TOKEN_RTC_DAY_OF_MONTH_BLANK_PADDED, "ce", "" },
+    { SKIN_TOKEN_RTC_12HOUR_CFG,        "cf", "" },
+    { SKIN_TOKEN_RTC_HOUR_24_ZERO_PADDED, "cH", "" },
+    { SKIN_TOKEN_RTC_HOUR_24,           "ck", "" },
+    { SKIN_TOKEN_RTC_HOUR_12_ZERO_PADDED, "cI", "" },
+    { SKIN_TOKEN_RTC_HOUR_12,           "cl", "" },
+    { SKIN_TOKEN_RTC_MONTH,             "cm", "" },
+    { SKIN_TOKEN_RTC_MINUTE,            "cM", "" },
+    { SKIN_TOKEN_RTC_SECOND,            "cS", "" },
+    { SKIN_TOKEN_RTC_YEAR_2_DIGITS,     "cy", "" },
+    { SKIN_TOKEN_RTC_YEAR_4_DIGITS,     "cY", "" },
+    { SKIN_TOKEN_RTC_AM_PM_UPPER,       "cP", "" },
+    { SKIN_TOKEN_RTC_AM_PM_LOWER,       "cp", "" },
+    { SKIN_TOKEN_RTC_WEEKDAY_NAME,      "ca", "" },
+    { SKIN_TOKEN_RTC_MONTH_NAME,        "cb", "" },
+    { SKIN_TOKEN_RTC_DAY_OF_WEEK_START_MON, "cu", "" },
+    { SKIN_TOKEN_RTC_DAY_OF_WEEK_START_SUN, "cw", "" },
         
-    { "fb", "" },
-    { "fc", "" },
-    { "ff", "" },
-    { "fk", "" },
-    { "fm", "" },
-    { "fn", "" },
-    { "fp", "" },
-    { "fs", "" },
-    { "fv", "" },
-    { "d"  , "I" },
+    { SKIN_TOKEN_FILE_BITRATE,          "fb", "" },
+    { SKIN_TOKEN_FILE_CODEC,            "fc", "" },
+    { SKIN_TOKEN_FILE_FREQUENCY,        "ff", "" },
+    { SKIN_TOKEN_FILE_FREQUENCY_KHZ,    "fk", "" },
+    { SKIN_TOKEN_FILE_NAME_WITH_EXTENSION,  "fm", "" },
+    { SKIN_TOKEN_FILE_NAME,             "fn", "" },
+    { SKIN_TOKEN_FILE_PATH,             "fp", "" },
+    { SKIN_TOKEN_FILE_SIZE,             "fs", "" },
+    { SKIN_TOKEN_FILE_VBR,              "fv", "" },
+    { SKIN_TOKEN_FILE_DIRECTORY,        "d"  , "I" },
     
-    { "Fb", "" },
-    { "Fc", "" },
-    { "Ff", "" },
-    { "Fk", "" },
-    { "Fm", "" },
-    { "Fn", "" },
-    { "Fp", "" },
-    { "Fs", "" },
-    { "Fv", "" },
-    { "D"  , "I" },
+    { SKIN_TOKEN_FILE_BITRATE,          "Fb", "" },
+    { SKIN_TOKEN_FILE_CODEC,            "Fc", "" },
+    { SKIN_TOKEN_FILE_FREQUENCY,        "Ff", "" },
+    { SKIN_TOKEN_FILE_FREQUENCY_KHZ,    "Fk", "" },
+    { SKIN_TOKEN_FILE_NAME_WITH_EXTENSION,  "Fm", "" },
+    { SKIN_TOKEN_FILE_NAME,             "Fn", "" },
+    { SKIN_TOKEN_FILE_PATH,             "Fp", "" },
+    { SKIN_TOKEN_FILE_SIZE,             "Fs", "" },
+    { SKIN_TOKEN_FILE_VBR,              "Fv", "" },
+    { SKIN_TOKEN_FILE_DIRECTORY,        "D"  , "I" },
     
     
-    { "ia", "" },
-    { "ic", "" },
-    { "id", "" },
-    { "iA", "" },
-    { "iG", "" },
-    { "ig", "" },
-    { "ik", "" },
-    { "in", "" },
-    { "it", "" },
-    { "iv", "" },
-    { "iy", "" },
-    { "iC", "" },
+    { SKIN_TOKEN_METADATA_ARTIST,       "ia", "" },
+    { SKIN_TOKEN_METADATA_COMPOSER,     "ic", "" },
+    { SKIN_TOKEN_METADATA_ALBUM,        "id", "" },
+    { SKIN_TOKEN_METADATA_ALBUM_ARTIST, "iA", "" },
+    { SKIN_TOKEN_METADATA_GROUPING,     "iG", "" },
+    { SKIN_TOKEN_METADATA_GENRE,        "ig", "" },
+    { SKIN_TOKEN_METADATA_DISC_NUMBER,  "ik", "" },
+    { SKIN_TOKEN_METADATA_TRACK_NUMBER, "in", "" },
+    { SKIN_TOKEN_METADATA_TRACK_TITLE,  "it", "" },
+    { SKIN_TOKEN_METADATA_VERSION,      "iv", "" },
+    { SKIN_TOKEN_METADATA_YEAR,         "iy", "" },
+    { SKIN_TOKEN_METADATA_COMMENT,      "iC", "" },
     
-    { "Ia", "" },
-    { "Ic", "" },
-    { "Id", "" },
-    { "IA", "" },
-    { "IG", "" },
-    { "Ig", "" },
-    { "Ik", "" },
-    { "In", "" },
-    { "It", "" },
-    { "Iv", "" },
-    { "Iy", "" },
-    { "IC", "" },
+    { SKIN_TOKEN_METADATA_ARTIST,       "Ia", "" },
+    { SKIN_TOKEN_METADATA_COMPOSER,     "Ic", "" },
+    { SKIN_TOKEN_METADATA_ALBUM,        "Id", "" },
+    { SKIN_TOKEN_METADATA_ALBUM_ARTIST, "IA", "" },
+    { SKIN_TOKEN_METADATA_GROUPING,     "IG", "" },
+    { SKIN_TOKEN_METADATA_GENRE,        "Ig", "" },
+    { SKIN_TOKEN_METADATA_DISC_NUMBER,  "Ik", "" },
+    { SKIN_TOKEN_METADATA_TRACK_NUMBER, "In", "" },
+    { SKIN_TOKEN_METADATA_TRACK_TITLE,  "It", "" },
+    { SKIN_TOKEN_METADATA_VERSION,      "Iv", "" },
+    { SKIN_TOKEN_METADATA_YEAR,         "Iy", "" },
+    { SKIN_TOKEN_METADATA_COMMENT,      "IC", "" },
     
-    { "Sp", "" },
-    { "Ss", "" },
+    { SKIN_TOKEN_SOUND_PITCH,           "Sp", "" },
+    { SKIN_TOKEN_SOUND_SPEED,           "Ss", "" },
     
-    { "lh", "" },
+    { SKIN_TOKEN_VLED_HDD,              "lh", "" },
     
-    { "mh", "" },
-    { "mr", "" },
-    { "mm", "" },
-    { "mp", "" },
-    { "mv", "|I" },
+    { SKIN_TOKEN_MAIN_HOLD,             "mh", "" },
+    { SKIN_TOKEN_REMOTE_HOLD,           "mr", "" },
+    { SKIN_TOKEN_REPEAT_MODE,           "mm", "" },
+    { SKIN_TOKEN_PLAYBACK_STATUS,       "mp", "" },
+    { SKIN_TOKEN_BUTTON_VOLUME,         "mv", "|I" },
     
-    { "pm", "" },
-    { "pf", "" },
-    { "pb" , "*fIIII" },
-    { "pv" , "*fIIII" },
+    { SKIN_TOKEN_PEAKMETER,             "pm", "" },
+    { SKIN_TOKEN_PLAYER_PROGRESSBAR,    "pf", "" },
+    { SKIN_TOKEN_PROGRESSBAR,           "pb" , "*fIIII" },
+    { SKIN_TOKEN_VOLUME,                "pv" , "*fIIII" },
     
-    { "px", "" },
-    { "pc", "" },
-    { "pr", "" },
-    { "pt", "" },
-    { "pS" , "|I"},
-    { "pE" , "|I"},
-    { "pp", "" },
-    { "pe", "" },
-    { "pn", "" },
-    { "ps", "" },
+    { SKIN_TOKEN_TRACK_ELAPSED_PERCENT, "px", "" },
+    { SKIN_TOKEN_TRACK_TIME_ELAPSED,    "pc", "" },
+    { SKIN_TOKEN_TRACK_TIME_REMAINING,  "pr", "" },
+    { SKIN_TOKEN_TRACK_LENGTH,          "pt", "" },
+    { SKIN_TOKEN_TRACK_STARTING,        "pS" , "|I"},
+    { SKIN_TOKEN_TRACK_ENDING,          "pE" , "|I"},
+    { SKIN_TOKEN_PLAYLIST_POSITION,     "pp", "" },
+    { SKIN_TOKEN_PLAYLIST_ENTRIES,      "pe", "" },
+    { SKIN_TOKEN_PLAYLIST_NAME,         "pn", "" },
+    { SKIN_TOKEN_PLAYLIST_SHUFFLE,      "ps", "" },
     
-    { "rp", "" },
-    { "rr", "" },
-    { "ra", "" },
+    { SKIN_TOKEN_DATABASE_PLAYCOUNT,    "rp", "" },
+    { SKIN_TOKEN_DATABASE_RATING,       "rr", "" },
+    { SKIN_TOKEN_DATABASE_AUTOSCORE,    "ra", "" },
     
-    { "rg", "" },
-    { "xf", "" },
+    { SKIN_TOKEN_REPLAYGAIN,            "rg", "" },
+    { SKIN_TOKEN_CROSSFADE,             "xf", "" },
     
-    { "tp", "" },
-    { "tt", "" },
-    { "tm", "" },
-    { "ts", "" },
-    { "ta", "" },
-    { "tb", "" },
-    { "tf", "" },
-    { "Ti", "" },
-    { "Tn", "" },
-    { "Tf", "" },
-    { "Tc", "" },
-    { "tx", "" },
-    { "ty", "" },
-    { "tz", "" },
+    { SKIN_TOKEN_HAVE_TUNER,            "tp", "" },
+    { SKIN_TOKEN_TUNER_TUNED,           "tt", "" },
+    { SKIN_TOKEN_TUNER_SCANMODE,        "tm", "" },
+    { SKIN_TOKEN_TUNER_STEREO,          "ts", "" },
+    { SKIN_TOKEN_TUNER_MINFREQ,         "ta", "" },
+    { SKIN_TOKEN_TUNER_MAXFREQ,         "tb", "" },
+    { SKIN_TOKEN_TUNER_CURFREQ,         "tf", "" },
+    { SKIN_TOKEN_PRESET_ID,             "Ti", "" },
+    { SKIN_TOKEN_PRESET_NAME,           "Tn", "" },
+    { SKIN_TOKEN_PRESET_FREQ,           "Tf", "" },
+    { SKIN_TOKEN_PRESET_COUNT,          "Tc", "" },
+    { SKIN_TOKEN_HAVE_RDS,              "tx", "" },
+    { SKIN_TOKEN_RDS_NAME,              "ty", "" },
+    { SKIN_TOKEN_RDS_TEXT,              "tz", "" },
     
-    { "s", "" },
-    { "t"  , "I" },
+    { SKIN_TOKEN_SUBLINE_SCROLL,        "s", "" },
+    { SKIN_TOKEN_SUBLINE_TIMEOUT,       "t"  , "I" },
     
-    { "we", "" },
-    { "wd", "" },
-    { "wi", "" },
+    { SKIN_TOKEN_ENABLE_THEME,          "we", "" },
+    { SKIN_TOKEN_DISABLE_THEME,         "wd", "" },
+    { SKIN_TOKEN_DRAW_INBUILTBAR,       "wi", "" },
     
-    { "xl", "SFIIi" },
-    { "xd", "S" },
-    { "x", "SFII" },
+    { SKIN_TOKEN_IMAGE_PRELOAD,         "xl", "SFIIi" },
+    { SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY, "xd", "S" },
+    { SKIN_TOKEN_IMAGE_PRELOAD,         "x", "SFII" },
     
-    { "Fl" , "IF"},
-    { "Cl" , "IISS"},
-    { "C" , ""},
+    { SKIN_TOKEN_LOAD_FONT,             "Fl" , "IF"},
+    { SKIN_TOKEN_ALBUMART_LOAD,         "Cl" , "IISS"},
+    { SKIN_TOKEN_ALBUMART_DISPLAY,      "C" , ""},
     
-    { "Vd" , "S"},
-    { "VI" , "S"},
+    { SKIN_TOKEN_VIEWPORT_ENABLE,       "Vd" , "S"},
+    { SKIN_TOKEN_UIVIEWPORT_ENABLE,     "VI" , "S"},
     
-    { "Vp" , "ICC"},
-    { "Lt" , ""},
-    { "Li" , ""},
+    { SKIN_TOKEN_VIEWPORT_CUSTOMLIST,   "Vp" , "ICC"},
+    { SKIN_TOKEN_LIST_TITLE_TEXT,       "Lt" , ""},
+    { SKIN_TOKEN_LIST_TITLE_ICON,       "Li" , ""},
     
-    { "V"  , "IIiii|ii"},
-    { "Vl" , "SIIiii|ii"},
-    { "Vi" , "sIIiii|ii"},
+    { SKIN_TOKEN_VIEWPORT_LOAD,         "V"  , "IIiii|ii"},
+    { SKIN_TOKEN_VIEWPORT_CONDITIONAL,  "Vl" , "SIIiii|ii"},
+    { SKIN_TOKEN_UIVIEWPORT_LOAD,       "Vi" , "sIIiii|ii"},
     
-    { "X"  , "f"},
+    { SKIN_TOKEN_IMAGE_BACKDROP,        "X"  , "f"},
     
-    { "St" , "S"},
-    { "Sx" , "S"},
-    { "Sr" , ""},
+    { SKIN_TOKEN_SETTING,               "St" , "S"},
+    { SKIN_TOKEN_TRANSLATEDSTRING,      "Sx" , "S"},
+    { SKIN_TOKEN_LANG_IS_RTL,           "Sr" , ""},
     
-    { "Tl" , "|I"},
-    { "cs", "" },
-    { "T"  , "IIiiI"},
+    { SKIN_TOKEN_LASTTOUCH,             "Tl" , "|I"},
+    { SKIN_TOKEN_CURRENT_SCREEN,        "cs", "" },
+    { SKIN_TOKEN_TOUCHREGION,           "T"  , "IIiiI"},
     
-    { "Rp"   , ""},
-    { "Rr"   , ""},
-    { "Rf"   , ""},
-    { "Re"   , ""},
-    { "Rb"   , ""},
-    { "Rm"   , ""},
-    { "Rs"   , ""},
-    { "Rn"   , ""},
-    { "Rh"   , ""},
+    { SKIN_TOKEN_HAVE_RECORDING,        "Rp"   , ""},
+    { SKIN_TOKEN_IS_RECORDING,          "Rr"   , ""},
+    { SKIN_TOKEN_REC_FREQ,              "Rf"   , ""},
+    { SKIN_TOKEN_REC_ENCODER,           "Re"   , ""},
+    { SKIN_TOKEN_REC_BITRATE,           "Rb"   , ""},
+    { SKIN_TOKEN_REC_MONO,              "Rm"   , ""},
+    { SKIN_TOKEN_REC_SECONDS,           "Rs"   , ""},
+    { SKIN_TOKEN_REC_MINUTES,           "Rn"   , ""},
+    { SKIN_TOKEN_REC_HOURS,             "Rh"   , ""},
     
-    { ""   , ""} /* Keep this here to mark the end of the table */
+    { SKIN_TOKEN_UNKNOWN,                ""   , ""} /* Keep this here to mark the end of the table */
 };
 
 /* A table of legal escapable characters */
Index: tag_table.h
===================================================================
--- tag_table.h	(revision 26402)
+++ tag_table.h	(working copy)
@@ -30,6 +30,225 @@
 #endif
 
 
+enum skin_token_type {
+    
+  TOKEN_MARKER_CONTROL_TOKENS = -1,
+    SKIN_TOKEN_UNKNOWN,
+
+    /* Markers */
+    SKIN_TOKEN_CHARACTER,
+    SKIN_TOKEN_STRING,
+    SKIN_TOKEN_TRANSLATEDSTRING,
+
+    /* Alignment */
+    SKIN_TOKEN_ALIGN_LEFT,
+    SKIN_TOKEN_ALIGN_LEFT_RTL,
+    SKIN_TOKEN_ALIGN_CENTER,
+    SKIN_TOKEN_ALIGN_RIGHT,
+    SKIN_TOKEN_ALIGN_RIGHT_RTL,
+    SKIN_TOKEN_ALIGN_LANGDIRECTION,
+    
+
+    /* Sublines */
+    SKIN_TOKEN_SUBLINE_TIMEOUT,
+    SKIN_TOKEN_SUBLINE_SCROLL,
+    
+    /* Conditional */
+    SKIN_TOKEN_CONDITIONAL,
+    SKIN_TOKEN_CONDITIONAL_START,
+    SKIN_TOKEN_CONDITIONAL_OPTION,
+    SKIN_TOKEN_CONDITIONAL_END,
+
+    /* Viewport display */
+    SKIN_TOKEN_VIEWPORT_LOAD,
+    SKIN_TOKEN_VIEWPORT_CONDITIONAL,
+    SKIN_TOKEN_VIEWPORT_ENABLE,
+    SKIN_TOKEN_VIEWPORT_CUSTOMLIST,
+    SKIN_TOKEN_UIVIEWPORT_ENABLE,
+    SKIN_TOKEN_UIVIEWPORT_LOAD,
+    
+    /* Battery */
+  TOKEN_MARKER_BATTERY,
+    SKIN_TOKEN_BATTERY_PERCENT,
+    SKIN_TOKEN_BATTERY_PERCENTBAR,
+    SKIN_TOKEN_BATTERY_VOLTS,
+    SKIN_TOKEN_BATTERY_TIME,
+    SKIN_TOKEN_BATTERY_CHARGER_CONNECTED,
+    SKIN_TOKEN_BATTERY_CHARGING,
+    SKIN_TOKEN_BATTERY_SLEEPTIME,
+    SKIN_TOKEN_USB_POWERED,
+
+    /* Sound */
+  TOKEN_MARKER_SOUND,
+    SKIN_TOKEN_SOUND_PITCH,
+    SKIN_TOKEN_SOUND_SPEED,
+    SKIN_TOKEN_REPLAYGAIN,
+    SKIN_TOKEN_CROSSFADE,
+
+    /* Time */
+  TOKEN_MARKER_RTC,
+    SKIN_TOKEN_RTC_PRESENT,
+
+    /* The begin/end values allow us to know if a token is an RTC one.
+       New RTC tokens should be added between the markers. */
+
+    SKIN_TOKENs_RTC_BEGIN, /* just the start marker, not an actual token */
+
+    SKIN_TOKEN_RTC_DAY_OF_MONTH,
+    SKIN_TOKEN_RTC_DAY_OF_MONTH_BLANK_PADDED,
+    SKIN_TOKEN_RTC_12HOUR_CFG,
+    SKIN_TOKEN_RTC_HOUR_24_ZERO_PADDED,
+    SKIN_TOKEN_RTC_HOUR_24,
+    SKIN_TOKEN_RTC_HOUR_12_ZERO_PADDED,
+    SKIN_TOKEN_RTC_HOUR_12,
+    SKIN_TOKEN_RTC_MONTH,
+    SKIN_TOKEN_RTC_MINUTE,
+    SKIN_TOKEN_RTC_SECOND,
+    SKIN_TOKEN_RTC_YEAR_2_DIGITS,
+    SKIN_TOKEN_RTC_YEAR_4_DIGITS,
+    SKIN_TOKEN_RTC_AM_PM_UPPER,
+    SKIN_TOKEN_RTC_AM_PM_LOWER,
+    SKIN_TOKEN_RTC_WEEKDAY_NAME,
+    SKIN_TOKEN_RTC_MONTH_NAME,
+    SKIN_TOKEN_RTC_DAY_OF_WEEK_START_MON,
+    SKIN_TOKEN_RTC_DAY_OF_WEEK_START_SUN,
+
+    SKIN_TOKENS_RTC_END,     /* just the end marker, not an actual token */
+
+    /* Database */
+  TOKEN_MARKER_DATABASE,
+    SKIN_TOKEN_DATABASE_PLAYCOUNT,
+    SKIN_TOKEN_DATABASE_RATING,
+    SKIN_TOKEN_DATABASE_AUTOSCORE,
+
+    /* File */
+  TOKEN_MARKER_FILE,
+    SKIN_TOKEN_FILE_BITRATE,
+    SKIN_TOKEN_FILE_CODEC,
+    SKIN_TOKEN_FILE_FREQUENCY,
+    SKIN_TOKEN_FILE_FREQUENCY_KHZ,
+    SKIN_TOKEN_FILE_NAME,
+    SKIN_TOKEN_FILE_NAME_WITH_EXTENSION,
+    SKIN_TOKEN_FILE_PATH,
+    SKIN_TOKEN_FILE_SIZE,
+    SKIN_TOKEN_FILE_VBR,
+    SKIN_TOKEN_FILE_DIRECTORY,
+
+    /* Image */
+  TOKEN_MARKER_IMAGES,
+    SKIN_TOKEN_IMAGE_BACKDROP,
+    SKIN_TOKEN_IMAGE_PROGRESS_BAR,
+    SKIN_TOKEN_IMAGE_PRELOAD,
+    SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY,
+    SKIN_TOKEN_IMAGE_DISPLAY,
+    
+    /* Albumart */
+    SKIN_TOKEN_ALBUMART_LOAD,
+    SKIN_TOKEN_ALBUMART_DISPLAY,
+
+    /* Metadata */
+  TOKEN_MARKER_METADATA,
+    SKIN_TOKEN_METADATA_ARTIST,
+    SKIN_TOKEN_METADATA_COMPOSER,
+    SKIN_TOKEN_METADATA_ALBUM_ARTIST,
+    SKIN_TOKEN_METADATA_GROUPING,
+    SKIN_TOKEN_METADATA_ALBUM,
+    SKIN_TOKEN_METADATA_GENRE,
+    SKIN_TOKEN_METADATA_DISC_NUMBER,
+    SKIN_TOKEN_METADATA_TRACK_NUMBER,
+    SKIN_TOKEN_METADATA_TRACK_TITLE,
+    SKIN_TOKEN_METADATA_VERSION,
+    SKIN_TOKEN_METADATA_YEAR,
+    SKIN_TOKEN_METADATA_COMMENT,
+
+  TOKEN_MARKER_PLAYBACK_INFO,
+    /* Mode */
+    SKIN_TOKEN_REPEAT_MODE,
+    SKIN_TOKEN_PLAYBACK_STATUS,
+    /* Progressbar */
+    SKIN_TOKEN_PROGRESSBAR,
+    SKIN_TOKEN_PLAYER_PROGRESSBAR,
+    /* Peakmeter */
+    SKIN_TOKEN_PEAKMETER,
+
+    /* Current track */
+    SKIN_TOKEN_TRACK_ELAPSED_PERCENT,
+    SKIN_TOKEN_TRACK_TIME_ELAPSED,
+    SKIN_TOKEN_TRACK_TIME_REMAINING,
+    SKIN_TOKEN_TRACK_LENGTH,
+    SKIN_TOKEN_TRACK_STARTING,
+    SKIN_TOKEN_TRACK_ENDING,
+
+    /* Playlist */
+  TOKEN_MARKER_PLAYLIST,
+    SKIN_TOKEN_PLAYLIST_ENTRIES,
+    SKIN_TOKEN_PLAYLIST_NAME,
+    SKIN_TOKEN_PLAYLIST_POSITION,
+    SKIN_TOKEN_PLAYLIST_SHUFFLE,
+
+
+  TOKEN_MARKER_MISC,
+    SKIN_TOKEN_ENABLE_THEME,
+    SKIN_TOKEN_DISABLE_THEME,
+    SKIN_TOKEN_DRAW_INBUILTBAR,
+    SKIN_TOKEN_LIST_TITLE_TEXT,
+    SKIN_TOKEN_LIST_TITLE_ICON,
+    
+    SKIN_TOKEN_LOAD_FONT,
+    
+    /* buttons */
+    SKIN_TOKEN_BUTTON_VOLUME,
+    SKIN_TOKEN_LASTTOUCH,
+    SKIN_TOKEN_TOUCHREGION,
+    /* Virtual LED */
+    SKIN_TOKEN_VLED_HDD,
+    /* Volume level */
+    SKIN_TOKEN_VOLUME,
+    SKIN_TOKEN_VOLUMEBAR,
+    /* hold */
+    SKIN_TOKEN_MAIN_HOLD,
+    SKIN_TOKEN_REMOTE_HOLD,
+
+    /* Setting option */
+    SKIN_TOKEN_SETTING,
+    SKIN_TOKEN_CURRENT_SCREEN,
+    SKIN_TOKEN_LANG_IS_RTL,
+    
+    /* Recording Tokens */
+  TOKEN_MARKER_RECORDING,
+    SKIN_TOKEN_HAVE_RECORDING,
+    SKIN_TOKEN_IS_RECORDING,
+    SKIN_TOKEN_REC_FREQ,
+    SKIN_TOKEN_REC_ENCODER,
+    SKIN_TOKEN_REC_BITRATE, /* SWCODEC: MP3 bitrate, HWCODEC: MP3 "quality" */
+    SKIN_TOKEN_REC_MONO,
+    SKIN_TOKEN_REC_SECONDS,
+    SKIN_TOKEN_REC_MINUTES,
+    SKIN_TOKEN_REC_HOURS,
+    
+    
+    /* Radio Tokens */
+  TOKEN_MARKER_TUNER,
+    SKIN_TOKEN_HAVE_TUNER,
+    SKIN_TOKEN_TUNER_TUNED,
+    SKIN_TOKEN_TUNER_SCANMODE,
+    SKIN_TOKEN_TUNER_STEREO,
+    SKIN_TOKEN_TUNER_MINFREQ, /* changes based on "region" */
+    SKIN_TOKEN_TUNER_MAXFREQ, /* changes based on "region" */
+    SKIN_TOKEN_TUNER_CURFREQ,
+    SKIN_TOKEN_PRESET_ID, /* "id" of this preset.. really the array element number */
+    SKIN_TOKEN_PRESET_NAME,
+    SKIN_TOKEN_PRESET_FREQ,
+    SKIN_TOKEN_PRESET_COUNT,
+    /* RDS tokens */
+    SKIN_TOKEN_HAVE_RDS,
+    SKIN_TOKEN_RDS_NAME,
+    SKIN_TOKEN_RDS_TEXT,
+    
+    
+  TOKEN_MARKER_END, /* this needs to be the last value in this enum */
+};
+
 /*
  * Struct for tag parsing information
  * name   - The name of the tag, i.e. V for %V
@@ -60,7 +279,7 @@
  */
 struct tag_info
 {
-
+    enum skin_token_type type;
     char* name;
     char* params;
 
