diff --git a/ChangeLog b/ChangeLog
index 6eb3d4a50a8adfa48e9280fb544cfed05d7a7e73_Q2hhbmdlTG9n..4e2dc471cf848eee004a551f595d5b767b1ff09f_Q2hhbmdlTG9n 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Jan 22 15:30:19 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+	* TODO: updated
+	* FEATURES: added with alist of what's in and what's not
+	* libxslt/xslt.c: fixed top level Param and Variable stuff
+
 Mon Jan 22 11:46:44 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
 
 	* xsltproc.c: removed bug
diff --git a/FEATURES b/FEATURES
new file mode 100644
index 0000000000000000000000000000000000000000..4e2dc471cf848eee004a551f595d5b767b1ff09f_RkVBVFVSRVM=
--- /dev/null
+++ b/FEATURES
@@ -0,0 +1,211 @@
+
+Stylesheet Constructs:
+======================
+
+YES		    xsl:stylesheet
+?			id = id 
+NO			extension-element-prefixes = tokens 
+NO			exclude-result-prefixes = tokens 
+YES			version = number
+
+YES		    xsl:transform
+?			id = id 
+NO			extension-element-prefixes = tokens 
+NO			exclude-result-prefixes = tokens 
+YES			version = number
+
+
+YES		    Literal Result Element as Stylesheet
+
+NO		    Embedding Stylesheets
+
+
+Top Level Elements:
+===================
+
+NO		    xsl:include
+NO			href = uri-reference
+
+NO		    xsl:import
+NO			href = uri-reference
+
+YES		    xsl:strip-space
+YES			elements = tokens
+
+YES		    xsl:preserve-space
+YES			elements = tokens
+
+YES		    xsl:template
+YES			match = pattern 
+YES			name = qname 
+YES			priority = number 
+NO			mode = qname
+
+NO		    xsl:namespace-alias
+NO			stylesheet-prefix = prefix | "#default"
+NO			result-prefix = prefix | "#default"
+
+NO		    xsl:attribute-set
+NO			name = qname 
+NO			use-attribute-sets = qnames
+
+YES		    xsl:variable
+YES			name = qname 
+YES			select = expression
+YES			Content: template
+
+YES		    xsl:param
+YES			name = qname 
+YES			select = expression
+YES			Content: template
+
+NO		    xsl:key
+NO			name = qname 
+NO			match = pattern 
+NO			use = expression
+
+YES		    xsl:output
+YES			method = "xml" | "html" | "text" | qname-but-not-ncname 
+YES			version = nmtoken 
+YES			encoding = string 
+YES			omit-xml-declaration = "yes" | "no"
+YES			standalone = "yes" | "no"
+YES			doctype-public = string 
+YES			doctype-system = string 
+NO			cdata-section-elements = qnames 
+YES			indent = "yes" | "no"
+YES			media-type = string
+
+Instructions:
+=============
+
+YES		    xsl:apply-templates
+YES			select = node-set-expression 
+NO			mode = qname
+
+NO		    xsl:apply-imports
+
+YES		    xsl:call-template
+YES			name = qname
+
+NO		    xsl:element
+NO			name = { qname }
+NO			namespace = { uri-reference }
+NO			use-attribute-sets = qnames
+
+YES		    xsl:attribute
+YES			name = { qname }
+YES			namespace = { uri-reference }
+
+YES		    xsl:text
+YES			disable-output-escaping = "yes" | "no"
+
+		    xsl:processing-instruction
+			name = { ncname }
+
+NO		    xsl:comment
+
+NO		    xsl:copy
+NO			use-attribute-sets = qnames
+
+YES		    xsl:value-of
+YES			select = string-expression 
+NO			disable-output-escaping = "yes" | "no"
+
+NO		    xsl:number
+NO			level = "single" | "multiple" | "any"
+NO			count = pattern 
+NO			from = pattern 
+NO			value = number-expression 
+NO			format = { string }
+NO			lang = { nmtoken }
+NO			letter-value = { "alphabetic" | "traditional" }
+NO			grouping-separator = { char }
+NO			grouping-size = { number }
+
+YES		    xsl:for-each
+YES			select = node-set-expression
+
+YES		    xsl:if
+YES			test = boolean-expression
+
+NO		    xsl:choose
+
+NO		    xsl:when
+NO			test = boolean-expression
+
+NO		    xsl:otherwise
+
+YES		    xsl:sort
+YES			select = string-expression 
+NO			lang = { nmtoken }
+YES			data-type = { "text" | "number" | qname-but-not-ncname }
+YES			order = { "ascending" | "descending" }
+NO			case-order = { "upper-first" | "lower-first" }
+
+YES		    xsl:variable
+YES			name = qname 
+YES			select = expression
+YES			Content: template
+
+YES		    xsl:param
+YES			name = qname 
+YES			select = expression
+YES			Content: template
+
+NO		    xsl:copy-of
+NO			select = expression
+
+YES		    xsl:with-param
+YES			name = qname 
+YES			select = expression
+
+NO		    xsl:decimal-format
+NO			name = qname 
+NO			decimal-separator = char 
+NO			grouping-separator = char 
+NO			infinity = string 
+NO			minus-sign = char 
+NO			NaN = string 
+NO			percent = char 
+NO			per-mille = char 
+NO			zero-digit = char 
+NO			digit = char 
+NO			pattern-separator = char
+
+NO		    xsl:message
+NO			terminate = "yes" | "no"
+
+NO		    xsl:fallback
+
+General:
+========
+
+YES (w.o import)    Conflict Resolution for Template Rules
+YES		    Whitespace Stripping
+YES		    Built-in Template Rules
+YES		        match="*|/"
+YES			match="text()|@*"
+YES			match="processing-instruction()|comment()"
+NO			Namespace
+NO			Mode
+
+YES		    Attribute Value Templates
+
+YES		    Result Tree Fragments
+
+Functions:
+==========
+
+NO		    node-set document(object, node-set?)
+NO		    node-set key(string, object)
+NO		    string format-number(number, string, string?)
+NO		    node-set current() 
+NO		    string unparsed-entity-uri(string)
+NO		    string generate-id(node-set?)
+NO		    object system-property(string)
+NO		    boolean element-available(string)
+NO		    boolean function-available(string)
+
+Daniel.Veillard@imag.fr
+$Id$
diff --git a/TODO b/TODO
index 6eb3d4a50a8adfa48e9280fb544cfed05d7a7e73_VE9ETw==..4e2dc471cf848eee004a551f595d5b767b1ff09f_VE9ETw== 100644
--- a/TODO
+++ b/TODO
@@ -15,6 +15,15 @@
   -> parse them
   -> provide functions to circulate in the import tree of stylesheets
 
+Extra functions:
+  -> make a separate module.
+  -> document() should not be a problem since Result Tree Fragments are
+     implemnted
+  -> others 
+
+ID and Key support:
+  -> Id should be simple, key will probably requires some hash tables.
+
 Pattern tester:
   -> try to optimize for ID scan and tests.
 
diff --git a/libxslt/xslt.c b/libxslt/xslt.c
index 6eb3d4a50a8adfa48e9280fb544cfed05d7a7e73_bGlieHNsdC94c2x0LmM=..4e2dc471cf848eee004a551f595d5b767b1ff09f_bGlieHNsdC94c2x0LmM= 100644
--- a/libxslt/xslt.c
+++ b/libxslt/xslt.c
@@ -564,6 +564,7 @@
     }
 
     /*
-     * Find and handle the params
+     * Skip the first params
+     */
     cur = template->children;
     while (cur != NULL) {
@@ -568,4 +569,4 @@
     cur = template->children;
     while (cur != NULL) {
-	/ *
+	/*
 	 * Remove Blank nodes found at this level.
@@ -571,5 +572,5 @@
 	 * Remove Blank nodes found at this level.
-	 * /
+	 */
 	if (IS_BLANK_NODE(cur)) {
 	    xmlNodePtr blank = cur;
 
@@ -578,9 +579,7 @@
 	    xmlFreeNode(blank);
 	    continue;
 	}
-	if ((IS_XSLT_ELEM(cur)) && (IS_XSLT_NAME(cur, "param"))) {
-	    xsltParseGlobalParam(style, cur);
-	} else
+	if ((IS_XSLT_ELEM(cur)) && (!(IS_XSLT_NAME(cur, "param"))))
 	    break;
 	cur = cur->next;
     }
@@ -584,7 +583,6 @@
 	    break;
 	cur = cur->next;
     }
-     */
 
     /*
      * Browse the remaining of the template
@@ -782,5 +780,5 @@
         } else if (IS_XSLT_NAME(cur, "attribute-set")) {
 	    TODO /* Handle attribute-set */
         } else if (IS_XSLT_NAME(cur, "variable")) {
-	    TODO /* Handle variable */
+	    xsltParseGlobalVariable(style, cur);
         } else if (IS_XSLT_NAME(cur, "param")) {
@@ -786,5 +784,5 @@
         } else if (IS_XSLT_NAME(cur, "param")) {
-	    TODO /* Handle param */
+	    xsltParseGlobalParam(style, cur);
         } else if (IS_XSLT_NAME(cur, "template")) {
 #ifdef DEBUG_PARSING
 	    templates++;