diff --git a/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/scheduler/naive/NaiveScheduler.java b/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/scheduler/naive/NaiveScheduler.java
index f40e8cd..c433bf9 100644
--- a/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/scheduler/naive/NaiveScheduler.java
+++ b/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/scheduler/naive/NaiveScheduler.java
@@ -67,7 +67,6 @@
             String[] opParts = null;
             if (!jas.allocations.containsKey(oid)) {
                 Set<ConstraintExpression> opConstraints = jas.opConstraints.get(oid);
-                System.err.println("Constraints: " + opConstraints);
                 for (ConstraintExpression ce : opConstraints) {
                     int nParts = getNumPartitions(oid, ce);
                     if (nParts != -1) {
@@ -137,12 +136,9 @@
     }
 
     private int getNumPartitions(OperatorDescriptorId oid, ConstraintExpression ce) {
-        System.err.println(ce);
         if (ce.getTag() == ExpressionTag.RELATIONAL) {
             RelationalExpression re = (RelationalExpression) ce;
             if (re.getOperator() == RelationalExpression.Operator.EQUAL) {
-                System.err.println("Left: " + re.getLeft());
-                System.err.println("Right: " + re.getRight());
                 if (re.getLeft().getTag() == ConstraintExpression.ExpressionTag.PARTITION_COUNT) {
                     return getNumPartitions(oid, (PartitionCountExpression) re.getLeft(), re.getRight());
                 } else if (re.getRight().getTag() == ConstraintExpression.ExpressionTag.PARTITION_COUNT) {
@@ -209,4 +205,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
