--- /home/cpdev/src/classpath/gnu/xml/transform/Stylesheet.java	2006-01-16 17:32:45.000000000 +0000
+++ gnu/xml/transform/Stylesheet.java	2006-01-13 17:34:15.000000000 +0000
@@ -408,7 +408,7 @@
   {
     if (debug)
       System.err.println("getTemplate: mode="+mode+" context="+context);
-    Template selected = null;
+    Set candidates = new TreeSet();
     for (Iterator j = templates.iterator(); j.hasNext(); )
       {
         Template t = (Template) j.next();
@@ -426,21 +426,10 @@
           }
         //System.err.println("\t"+context+" "+t+"="+isMatch);
         if (isMatch)
-          {
-            // Conflict resolution
-            // @see http://www.w3.org/TR/xslt#conflict
-            if (selected == null)
-              selected = t;
-            else
-              {
-                if (t.precedence < selected.precedence ||
-                    t.priority < selected.priority)
-                  continue;
-                selected = t;
-              }
-          }
+          candidates.add(t);
       }
-    if (selected == null)
+    //System.err.println("\tcandidates="+candidates);
+    if (candidates.isEmpty())
       {
         // Apply built-in template
         // Current template is unchanged
@@ -462,39 +451,32 @@
             return null;
           }
       }
-    // Set current template
-    currentTemplate = selected;
-    if (debug)
-      System.err.println("\ttemplate="+currentTemplate+" context="+context);
-    return currentTemplate.node;
+    else
+      {
+        Template t = (Template) candidates.iterator().next();
+        // Set current template
+        currentTemplate = t;
+        if (debug)
+          System.err.println("\ttemplate="+t+" context="+context);
+        return t.node;
+      }
   }
 
   TemplateNode getTemplate(QName mode, QName name)
     throws TransformerException
   {
-    Template selected = null;
+    Set candidates = new TreeSet();
     for (Iterator j = templates.iterator(); j.hasNext(); )
       {
         Template t = (Template) j.next();
         boolean isMatch = t.matches(name);
         if (isMatch)
-          {
-            // Conflict resolution
-            // @see http://www.w3.org/TR/xslt#conflict
-            if (selected == null)
-              selected = t;
-            else
-              {
-                if (t.precedence < selected.precedence ||
-                    t.priority < selected.priority)
-                  continue;
-                selected = t;
-              }
-          }
+          candidates.add(t);
       }
-    if (selected == null)
+    if (candidates.isEmpty())
       return null;
-    return selected.node;
+    Template t = (Template) candidates.iterator().next();
+    return t.node;
   }
 
   /**
@@ -522,9 +504,11 @@
     String p = getAttribute(attrs, "priority");
     String mm = getAttribute(attrs, "mode");
     QName mode = (mm == null) ? null : getQName(mm);
+    double priority = (p == null) ? Template.DEFAULT_PRIORITY :
+      Double.parseDouble(p);
     Node children = node.getFirstChild();
     return new Template(this, name, match, parse(children),
-                        precedence, p, mode);
+                        precedence, priority, mode);
   }
 
   /**
@@ -815,7 +799,7 @@
             templates.add(new Template(this, null, new Root(),
                                        parse(rootClone),
                                        precedence,
-                                       null,
+                                       Template.DEFAULT_PRIORITY,
                                        null));
           }
         else
