Index: parsetreenode.cpp
===================================================================
--- parsetreenode.cpp	(revision 26442)
+++ parsetreenode.cpp	(working copy)
@@ -22,6 +22,7 @@
 extern "C"
 {
 #include "symbols.h"
+#include "tag_table.h"
 }
 
 #include "parsetreenode.h"
@@ -140,7 +141,7 @@
             /* When generating code, we DO NOT insert the leading TAGSYM, leave
              * the calling functions to handle that
              */
-            buffer.append(element->name);
+            buffer.append(element->tag->name);
 
             if(element->params_count > 0)
             {
@@ -294,7 +295,7 @@
                 return QString(element->text);
 
             case TAG:
-                return QString(element->name);
+                return QString(element->tag->name);
             }
         }
         else if(param)
Index: skin_debug.c
===================================================================
--- skin_debug.c	(revision 26442)
+++ skin_debug.c	(working copy)
@@ -25,6 +25,7 @@
 
 #include "skin_parser.h"
 #include "skin_debug.h"
+#include "tag_table.h"
 
 /* Global variables for debug output */
 int debug_indent_level = 0;
@@ -123,7 +124,7 @@
             break;
 
         case TAG:
-            printf("[ %s tag on line %d with %d arguments\n", current->name,
+            printf("[ %s tag on line %d with %d arguments\n", current->tag->name,
                    current->line, current->params_count);
             debug_indent_level++;
             skin_debug_params(current->params_count, current->params);
Index: skin_parser.c
===================================================================
--- skin_parser.c	(revision 26442)
+++ skin_parser.c	(working copy)
@@ -347,6 +347,7 @@
 
     char tag_name[3];
     char* tag_args;
+    struct tag_info *tag;
 
     int num_args = 1;
     int i;
@@ -361,12 +362,12 @@
     tag_name[2] = '\0';
 
     /* First we check the two characters after the '%', then a single char */
-    tag_args = find_tag(tag_name);
+    tag = find_tag(tag_name);
 
-    if(!tag_args)
+    if(!tag)
     {
         tag_name[1] = '\0';
-        tag_args = find_tag(tag_name);
+        tag = find_tag(tag_name);
         cursor++;
     }
     else
@@ -374,7 +375,7 @@
         cursor += 2;
     }
 
-    if(!tag_args)
+    if(!tag)
     {
         skin_error(ILLEGAL_TAG);
         return 0;
@@ -382,7 +383,8 @@
 
     /* Copying basic tag info */
     element->type = TAG;
-    strcpy(element->name, tag_name);
+    element->tag = tag;
+    tag_args = tag->params;
     element->line = skin_line;
 
     /* Checking for the * flag */
Index: tag_table.c
===================================================================
--- tag_table.c	(revision 26442)
+++ tag_table.c	(working copy)
@@ -216,7 +216,7 @@
  * Just does a straight search through the tag table to find one by
  * the given name
  */
-char* find_tag(char* name)
+struct tag_info* find_tag(char* name)
 {
     
     struct tag_info* current = legal_tags;
@@ -233,7 +233,7 @@
     if(current->name[0] == '\0')
         return NULL;
     else
-        return current->params;
+        return current;
 
 }
 
Index: skin_parser.h
===================================================================
--- skin_parser.h	(revision 26442)
+++ skin_parser.h	(working copy)
@@ -101,7 +101,7 @@
     char* text;
 
     /* The tag or conditional name */
-    char name[3];
+    struct tag_info *tag;
 
     /* Pointer to and size of an array of parameters */
     int params_count;
Index: tag_table.h
===================================================================
--- tag_table.h	(revision 26442)
+++ tag_table.h	(working copy)
@@ -287,7 +287,7 @@
  * Finds a tag by name and returns its parameter list, or an empty
  * string if the tag is not found in the table
  */
-char* find_tag(char* name);
+struct tag_info* find_tag(char* name);
 
 /*
  * Determines whether a character is legal to escape or not.  If 
