Index: src/java/org/apache/ivy/plugins/circular/CircularDependencyHelper.java
===================================================================
--- src/java/org/apache/ivy/plugins/circular/CircularDependencyHelper.java	(revision 540202)
+++ src/java/org/apache/ivy/plugins/circular/CircularDependencyHelper.java	(working copy)
@@ -17,6 +17,8 @@
  */
 package org.apache.ivy.plugins.circular;
 
+import java.util.HashSet;
+import java.util.Set;
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 
@@ -28,11 +30,18 @@
      * @return
      */
     public static String formatMessage(final ModuleRevisionId[] mrids) {
+        Set alreadyAdded = new HashSet();
         StringBuffer buff = new StringBuffer();
         buff.append(mrids[0]);
+        alreadyAdded.add(mrids[0]);
         for (int i = 1; i < mrids.length; i++) {
             buff.append("->");
-            buff.append(mrids[i]);
+            if (alreadyAdded.add(mrids[i])) {
+                buff.append(mrids[i]);
+            }
+            else {
+                buff.append("...");
+            }
         }
         return buff.toString();
     }
Index: src/java/org/apache/ivy/plugins/circular/AbstractCircularDependencyStrategy.java
===================================================================
--- src/java/org/apache/ivy/plugins/circular/AbstractCircularDependencyStrategy.java	(revision 540202)
+++ src/java/org/apache/ivy/plugins/circular/AbstractCircularDependencyStrategy.java	(working copy)
@@ -17,8 +17,14 @@
  */
 package org.apache.ivy.plugins.circular;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
+
 public abstract class AbstractCircularDependencyStrategy implements CircularDependencyStrategy {
 	private String _name;
+    private Set _alreadySeen;
 
 	protected AbstractCircularDependencyStrategy(String name) {
 		_name = name;	
@@ -31,4 +37,17 @@
 	public String toString() {
 		return getName();
 	}
+
+    /**
+     * Test whether a given circular dependency has been given as an
+     * argument to this method before.  Returns true if the particular
+     * set of IDs has never been seen.
+     */
+    protected boolean isNewDependency(ModuleRevisionId[] mrids) {
+        if (_alreadySeen == null) {
+            _alreadySeen = new HashSet();
+        }
+        Set mridSet = new HashSet(Arrays.asList(mrids));
+        return _alreadySeen.add(mridSet);
+    }
 }
Index: src/java/org/apache/ivy/plugins/circular/IgnoreCircularDependencyStrategy.java
===================================================================
--- src/java/org/apache/ivy/plugins/circular/IgnoreCircularDependencyStrategy.java	(revision 540202)
+++ src/java/org/apache/ivy/plugins/circular/IgnoreCircularDependencyStrategy.java	(working copy)
@@ -34,6 +34,8 @@
 	}
 	
 	public void handleCircularDependency(ModuleRevisionId[] mrids) {
-		Message.verbose("circular dependency found: "+ CircularDependencyHelper.formatMessage(mrids));
+        if (isNewDependency(mrids)) {
+            Message.verbose("circular dependency found: "+ CircularDependencyHelper.formatMessage(mrids));
+        }
 	}
 }
Index: src/java/org/apache/ivy/plugins/circular/WarnCircularDependencyStrategy.java
===================================================================
--- src/java/org/apache/ivy/plugins/circular/WarnCircularDependencyStrategy.java	(revision 540202)
+++ src/java/org/apache/ivy/plugins/circular/WarnCircularDependencyStrategy.java	(working copy)
@@ -24,7 +24,6 @@
 	
 	private static final CircularDependencyStrategy INSTANCE = new WarnCircularDependencyStrategy();
 
-
 	public static CircularDependencyStrategy getInstance() {
 		return INSTANCE;
 	}
@@ -34,6 +33,8 @@
 	}
 	
 	public void handleCircularDependency(ModuleRevisionId[] mrids) {
-		Message.warn("circular dependency found: "+ CircularDependencyHelper.formatMessage(mrids));
+        if (isNewDependency(mrids)) {
+            Message.warn("circular dependency found: "+ CircularDependencyHelper.formatMessage(mrids));
+        }
 	}
 }
