diff --git a/lib/skin_parser/skin_parser.h b/lib/skin_parser/skin_parser.h
index 6f1af25..6e8745c 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 and size of 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
@@ -105,15 +105,13 @@ struct skin_element
     const struct tag_info *tag;
 
     /* Pointer to and size of an array of parameters */
-    int params_count;
     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;
+    short children_count;
+    short line;
+    /* Defines what type of element it is */
+    enum skin_element_type type;
+    char params_count;
 };
 
 enum skin_cb_returnvalue
