Index: src/java/org/apache/ivy/plugins/latest/LatestRevisionStrategy.java =================================================================== --- src/java/org/apache/ivy/plugins/latest/LatestRevisionStrategy.java (revision 728010) +++ src/java/org/apache/ivy/plugins/latest/LatestRevisionStrategy.java (working copy) @@ -65,8 +65,14 @@ Integer sm1 = (Integer) specialMeanings.get(parts1[i].toLowerCase(Locale.US)); Integer sm2 = (Integer) specialMeanings.get(parts2[i].toLowerCase(Locale.US)); if (sm1 != null) { - sm2 = sm2 == null ? new Integer(0) : sm2; - return sm1.compareTo(sm2); + if ( sm2 != null ) { + int a = sm1.compareTo(sm2); + if ( a == 0 ) { + continue; + } + return a; + } + return sm1.compareTo(new Integer(0)); } if (sm2 != null) { return new Integer(0).compareTo(sm2); Index: test/java/org/apache/ivy/plugins/latest/LatestRevisionStrategyTest.java =================================================================== --- test/java/org/apache/ivy/plugins/latest/LatestRevisionStrategyTest.java (revision 728010) +++ test/java/org/apache/ivy/plugins/latest/LatestRevisionStrategyTest.java (working copy) @@ -68,7 +68,7 @@ public void testSpecialMeaningComparator() { ArtifactInfo[] revs = toMockAI(new String[] {"0.1", "0.2-pre", "0.2-dev", "0.2-rc1", - "0.2-final", "0.2-QA", "1.0-dev1"}); + "0.2-final", "0.2-QA-1", "0.2-QB-2", "1.0-dev1"}); List shuffled = new ArrayList(Arrays.asList(revs)); Collections.shuffle(shuffled); @@ -81,6 +81,9 @@ specialMeaning.setName("QA"); specialMeaning.setValue(new Integer(4)); latestRevisionStrategy.addConfiguredSpecialMeaning(specialMeaning); + specialMeaning.setName("QB"); + specialMeaning.setValue(new Integer(4)); + latestRevisionStrategy.addConfiguredSpecialMeaning(specialMeaning); Collections.sort(shuffled, latestRevisionStrategy.new ArtifactInfoComparator()); assertEquals(Arrays.asList(revs), shuffled); }