Index: /trunk/psLib/src/sys/psMemory.c
===================================================================
--- /trunk/psLib/src/sys/psMemory.c	(revision 32173)
+++ /trunk/psLib/src/sys/psMemory.c	(revision 32174)
@@ -889,5 +889,7 @@
                       psMemBlock ***array,
                       FILE * fd,
-                      bool persistence)
+                      bool persistence,
+		      int maxDisplayedLeaksCount          ///< List at most maxDisplayedLeaksCount (-1 for all)
+		  )
 {
     psS32 nleak = 0;
@@ -915,4 +917,20 @@
     for (memBlock = topBlock; memBlock->nextBlock != NULL; memBlock = memBlock->nextBlock) { }
 
+    int maxToDisplay = maxDisplayedLeaksCount;
+    psMemBlock *memBlockBackup = memBlock;
+    if (maxToDisplay == -1 ) {
+      for (; memBlock != NULL; memBlock = memBlock->previousBlock) {
+	if ( (memBlock->refCounter > 0) &&
+	     ( (persistence) || (!persistence && !memBlock->persistent) ) &&
+	     (memBlock->id >= id0)) {
+	  nleak++;
+	}
+      }
+      maxToDisplay=nleak;
+    }
+    fprintf(stderr,"maxToDisplay: %d\n", maxToDisplay);
+    memBlock = memBlockBackup;
+
+    nleak=0;
     // iterate through the block list starting with the oldest block
     for (; memBlock != NULL; memBlock = memBlock->previousBlock) {
@@ -924,5 +942,5 @@
 
 	    // only print a max of 500 leaks (make this an argument)
-            if ((nleak < 500) && (fd != NULL)) {
+            if ( (nleak <= maxToDisplay) && (fd != NULL) ) {
                 if (nleak == 1) {
                     fprintf(fd, "# func at (file:line)  ID: X  Ref: X\n");
Index: /trunk/psLib/src/sys/psMemory.h
===================================================================
--- /trunk/psLib/src/sys/psMemory.h	(revision 32173)
+++ /trunk/psLib/src/sys/psMemory.h	(revision 32174)
@@ -367,4 +367,11 @@
     bool persistence                   ///< make check across all object even persistent ones
 );
+int psMemCheckLeaks2(
+    psMemId id0,                       ///< don't list blocks with id < id0
+    psMemBlock ***array,               ///< pointer to array of pointers to leaked blocks, or NULL
+    FILE * fd,                         ///< print list of leaks to fd (or NULL)
+    bool persistence,                  ///< make check across all object even persistent ones
+    int maxDisplayedLeaksCount         ///< List at most maxDisplayedLeaksCount (-1 for all)
+);
 #else // ifdef DOXYGEN
 int p_psMemCheckLeaks(
@@ -375,9 +382,12 @@
     psMemBlock ***array,                ///< pointer to array of pointers to leaked blocks, or NULL
     FILE * fd,                          ///< print list of leaks to fd (or NULL)
-    bool persistence                    ///< make check across all object even persistent ones
-);
-#ifndef SWIG
+    bool persistence,                   ///< make check across all object even persistent ones
+    int maxDisplayedLeaksCount          ///< List at most maxDisplayedLeaksCount (-1 for all)
+);
+#ifndef SWIG
+#define psMemCheckLeaks2(id0, array, fd, persistence, maxDisplayedLeaksCount) \
+      p_psMemCheckLeaks(__FILE__, __LINE__, __func__, id0, array, fd, persistence, maxDisplayedLeaksCount)
 #define psMemCheckLeaks(id0, array, fd, persistence) \
-      p_psMemCheckLeaks(__FILE__, __LINE__, __func__, id0, array, fd, persistence)
+      p_psMemCheckLeaks(__FILE__, __LINE__, __func__, id0, array, fd, persistence, 500)
 #endif // ifndef SWIG
 #endif // ifdef DOXYGEN
