diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h
index 9df2137..bfca7b7 100644
--- a/apps/gui/skin_engine/skin_tokens.h
+++ b/apps/gui/skin_engine/skin_tokens.h
@@ -26,18 +26,17 @@
 #include "tag_table.h"
 
 struct wps_token {
-    enum skin_token_type type; /* enough to store the token type */
-    
-    /* Whether the tag (e.g. track name or the album) refers the
-       current or the next song (false=current, true=next) */
-    bool next;
-
     union {
         char c;
         unsigned short i;
         long l;
         void* data;
     } value;
+
+    enum skin_token_type type; /* enough to store the token type */
+    /* Whether the tag (e.g. track name or the album) refers the
+       current or the next song (false=current, true=next) */
+    bool next;
 };
 
 struct skin_token_list {
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index c16191c..ed09ad0 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -135,7 +135,7 @@ struct align_pos {
 #define WPS_MAX_VIEWPORTS   24
 #define WPS_MAX_LINES       ((LCD_HEIGHT/5+1) * 2)
 #define WPS_MAX_SUBLINES    (WPS_MAX_LINES*3)
-#define WPS_MAX_TOKENS      1024
+#define WPS_MAX_TOKENS      1150
 #define WPS_MAX_STRINGS     128
 #define STRING_BUFFER_SIZE  1024
 #define WPS_MAX_COND_LEVEL  10
diff --git a/lib/skin_parser/skin_parser.h b/lib/skin_parser/skin_parser.h
index 6f1af25..3e06349 100644
--- a/lib/skin_parser/skin_parser.h
+++ b/lib/skin_parser/skin_parser.h
@@ -86,15 +86,15 @@ struct skin_tag_parameter
             
 };
 
-/* Defines an element of a SKIN file */
+/* Defines an element of a SKIN file,
+ *
+ * This is allocated a lot, so it's optimized for size */
 struct skin_element
 {
-    /* Defines what type of element it is */
-    enum skin_element_type type;
-
-    /* The line on which it's defined in the source file */
-    int line;
-
+    /* Link to the next element */
+    struct skin_element* next;
+    /* Pointer to an array of children */
+    struct skin_element** children;
     /* Placeholder for element data
      * TEXT and COMMENT uses it for the text string
      * TAG, VIEWPORT, LINE, etc may use it for post parse extra storage
@@ -104,16 +104,17 @@ struct skin_element
     /* The tag or conditional name */
     const struct tag_info *tag;
 
-    /* Pointer to and size of an array of parameters */
-    int params_count;
+    /* Pointer to an array of parameters */
     struct skin_tag_parameter* params;
 
-    /* Pointer to and size of an array of children */
-    int children_count;
-    struct skin_element** children;
-
-    /* Link to the next element */
-    struct skin_element* next;
+    /* Number of elements in the children array */
+    short children_count;
+    /* The line on which it's defined in the source file */
+    short line;
+    /* Defines what type of element it is */
+    enum skin_element_type type;
+    /* Number of elements in the params array */
+    char params_count;
 };
 
 enum skin_cb_returnvalue
