diff --git a/src/mhtree/benchmarking/RunBenchmark.java b/src/mhtree/benchmarking/RunBenchmark.java
index 37977bce3e6f5090488083944cf588488cf2522d..9f1bfa9092ad8605995346637a15c178c3a72752 100644
--- a/src/mhtree/benchmarking/RunBenchmark.java
+++ b/src/mhtree/benchmarking/RunBenchmark.java
@@ -36,7 +36,7 @@ import static mhtree.ObjectToNodeDistance.NEAREST;
 
 public class RunBenchmark {
     public static void main(String[] args) throws IOException, AlgorithmMethodException, InstantiationException, NoSuchMethodException, BucketStorageException {
-        if (args.length != 7) {
+        if (args.length != 7 && args.length != 10) {
             throw new IllegalArgumentException("Unexpected number of params");
         }
 
@@ -75,10 +75,17 @@ public class RunBenchmark {
                     Arrays.asList(NEAREST),
                     //Arrays.asList(NEAREST, FURTHEST, AVERAGE),
                     queries, ks);
-        } else {
+        } else if (args.length == 7) {      // Original M-tree
             percentageToRecallMTree(cfg,
                     objects,
-                    queries, ks);
+                    queries, ks,
+                    0, 0, null);
+        } else {    // Pivoting M-tree
+            List<LocalAbstractObject> pivots = loadDataset(args[9]);
+            percentageToRecallMTree(cfg,
+                    objects,
+                    queries, ks,
+                    Integer.parseInt(args[7]), Integer.parseInt(args[8]), pivots);
         }
     }
 
@@ -175,11 +182,18 @@ public class RunBenchmark {
 
     private static void percentageToRecallMTree(MHTreeConfig config, List<LocalAbstractObject> objects, 
             List<LocalAbstractObject> queries,
-            int[] ks) throws NoSuchMethodException, AlgorithmMethodException, RuntimeException, InstantiationException {
+            int[] ks,
+            int pmTreeNPD, int pmTreeNHR, List<LocalAbstractObject> pmTreePivots) throws NoSuchMethodException, AlgorithmMethodException, RuntimeException, InstantiationException {
 
         long buildingStartTimeStamp = System.currentTimeMillis();
 
-        MTree mTree = new MTree(config.nodeDegree, config.leafCapacity);
+        System.out.println("Building M-tree with NPD=" + pmTreeNPD + " and NHR=" + pmTreeNHR);
+        MTree mTree;
+        if (pmTreeNHR == 0 && pmTreeNHR == 0)
+            mTree = new MTree(config.nodeDegree, config.leafCapacity);
+        else        // Pivoting M-tree
+            mTree = new MTree(config.nodeDegree, config.leafCapacity, 
+                                Math.max(pmTreeNPD, pmTreeNHR), pmTreePivots.iterator(), pmTreeNPD, pmTreeNHR);
 
         Collections.shuffle(objects);
 
@@ -189,7 +203,7 @@ public class RunBenchmark {
         long buildingTime = System.currentTimeMillis() - buildingStartTimeStamp;
 
         mTree.printStatistics();
-        //System.out.println("Fat factor: " + mTree.getFatFactor());
+        System.out.println("Fat factor: " + mTree.getFatFactor());
         System.out.println("Building time: " + buildingTime + " msec");
 
         System.out.println("kNN queries will be executed for k=" + Arrays.toString(ks));