diff --git a/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java b/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
index ea86425..646795f 100644
--- a/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
+++ b/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/edu/uci/ics/hyracks/tests/btree/BTreeOperatorsTest.java
@@ -34,6 +34,7 @@
 import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeInteriorFrameFactory;
 import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrameFactory;
 import edu.uci.ics.hyracks.storage.am.btree.api.IFieldAccessor;
+import edu.uci.ics.hyracks.storage.am.btree.api.IFieldAccessorFactory;
 import edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeBulkLoadOperatorDescriptor;
 import edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeRegistryProvider;
 import edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor;
@@ -46,8 +47,8 @@
 import edu.uci.ics.hyracks.storage.am.btree.impls.MultiComparator;
 import edu.uci.ics.hyracks.storage.am.btree.impls.RangePredicate;
 import edu.uci.ics.hyracks.storage.am.btree.impls.RangeSearchCursor;
-import edu.uci.ics.hyracks.storage.am.btree.types.Int32Accessor;
-import edu.uci.ics.hyracks.storage.am.btree.types.StringAccessor;
+import edu.uci.ics.hyracks.storage.am.btree.types.Int32AccessorFactory;
+import edu.uci.ics.hyracks.storage.am.btree.types.UTF8StringAccessorFactory;
 import edu.uci.ics.hyracks.tests.integration.AbstractIntegrationTest;
 
 public class BTreeOperatorsTest extends AbstractIntegrationTest {
@@ -83,56 +84,68 @@
         sorter.setPartitionConstraint(sortersPartitionConstraint);
         
         IBTreeInteriorFrameFactory interiorFrameFactory = new NSMInteriorFrameFactory();
-		IBTreeLeafFrameFactory leafFrameFactory = new NSMLeafFrameFactory();        
+		IBTreeLeafFrameFactory leafFrameFactory = new NSMLeafFrameFactory();
 		
-		IFieldAccessor[] fields = new IFieldAccessor[3];
-		fields[0] = new StringAccessor(); // key
-		fields[1] = new StringAccessor(); // payload
-		fields[2] = new StringAccessor(); // payload
+		IBufferCacheProvider bufferCacheProvider = new BufferCacheProvider();		
+		IBTreeRegistryProvider btreeRegistryProvider = new BTreeRegistryProvider();
+        
+        // build first bulk load operator		
+		IFieldAccessorFactory[] fieldAccessorFactories = new IFieldAccessorFactory[3];
+		fieldAccessorFactories[0] = new UTF8StringAccessorFactory(); // key
+		fieldAccessorFactories[1] = new UTF8StringAccessorFactory(); // payload
+		fieldAccessorFactories[2] = new UTF8StringAccessorFactory(); // payload
 
 		int keyLen = 1;
-		IBinaryComparator[] cmps = new IBinaryComparator[keyLen];
-		cmps[0] = UTF8StringBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-		MultiComparator cmp = new MultiComparator(cmps, fields);
-		
-		IBufferCacheProvider bufferCacheProvider = new BufferCacheProvider();
-		IBTreeRegistryProvider btreeRegistryProvider = new BTreeRegistryProvider();
+		IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[keyLen];
+		comparatorFactories[0] = UTF8StringBinaryComparatorFactory.INSTANCE;		
+				
         int[] keyFields = { 1 };
         int[] payloadFields = { 4, 5 };
         int btreeFileId = 0;
         
-		BTreeBulkLoadOperatorDescriptor btreeBulkLoad = new BTreeBulkLoadOperatorDescriptor(spec, ordersSplitProvider, ordersDesc, bufferCacheProvider, btreeRegistryProvider, btreeFileId, "/tmp/btreetest.bin", interiorFrameFactory, leafFrameFactory, cmp, keyFields, payloadFields, 0.7f);
-		
-		PartitionConstraint btreePartitionConstraint = new ExplicitPartitionConstraint(new LocationConstraint[] { new AbsoluteLocationConstraint(NC1_ID) });
-		btreeBulkLoad.setPartitionConstraint(btreePartitionConstraint);
+		BTreeBulkLoadOperatorDescriptor btreeBulkLoad = new BTreeBulkLoadOperatorDescriptor(spec, ordersSplitProvider, ordersDesc, bufferCacheProvider, btreeRegistryProvider, btreeFileId, "/tmp/btreetest.bin", interiorFrameFactory, leafFrameFactory, fieldAccessorFactories, comparatorFactories, keyFields, payloadFields, 0.7f);		
+		PartitionConstraint btreePartitionConstraintA = new ExplicitPartitionConstraint(new LocationConstraint[] { new AbsoluteLocationConstraint(NC1_ID) });
+		btreeBulkLoad.setPartitionConstraint(btreePartitionConstraintA);
 				
         spec.connect(new OneToOneConnectorDescriptor(spec), ordScanner, 0, sorter, 0);
         
         spec.connect(new OneToOneConnectorDescriptor(spec), sorter, 0, btreeBulkLoad, 0);
-        
+              
         spec.addRoot(btreeBulkLoad);
         runTest(spec);
         
+        // construct a multicomparator from the factories (only for printing purposes)                
+        IFieldAccessor[] fields = new IFieldAccessor[fieldAccessorFactories.length];
+    	for(int i = 0; i < fieldAccessorFactories.length; i++) {
+    		fields[i] = fieldAccessorFactories[i].getFieldAccessor();
+    	}
+    	
+    	IBinaryComparator[] comparators = new IBinaryComparator[comparatorFactories.length];
+    	for(int i = 0; i < comparatorFactories.length; i++) {
+    		comparators[i] = comparatorFactories[i].createBinaryComparator();
+    	}
+    	
+        MultiComparator cmpA = new MultiComparator(comparators, fields);
+
         // try an ordered scan on the bulk-loaded btree
-        BTree btree = btreeRegistryProvider.getBTreeRegistry().get(btreeFileId);
+        BTree btreeA = btreeRegistryProvider.getBTreeRegistry().get(btreeFileId);
         IBTreeCursor scanCursor = new RangeSearchCursor(leafFrameFactory.getFrame());
         RangePredicate nullPred = new RangePredicate(true, null, null, null);
-        btree.search(scanCursor, nullPred, leafFrameFactory.getFrame(), interiorFrameFactory.getFrame());
+        btreeA.search(scanCursor, nullPred, leafFrameFactory.getFrame(), interiorFrameFactory.getFrame());
         try {
         	while (scanCursor.hasNext()) {
         		scanCursor.next();
         		byte[] array = scanCursor.getPage().getBuffer().array();
         		int recOffset = scanCursor.getOffset();                
-        		String rec = cmp.printRecord(array, recOffset);
+        		String rec = cmpA.printRecord(array, recOffset);
         		System.out.println(rec);
         	}
         } catch (Exception e) {
         	e.printStackTrace();
         } finally {
         	scanCursor.close();
-        }
+        }                        
 	}
-		
 	
 	@Test
 	public void btreeSearchTest() throws Exception {
@@ -144,15 +157,14 @@
 		IBTreeInteriorFrameFactory interiorFrameFactory = new NSMInteriorFrameFactory();
 		IBTreeLeafFrameFactory leafFrameFactory = new NSMLeafFrameFactory();        
 		
-		IFieldAccessor[] fields = new IFieldAccessor[2];
-		fields[0] = new Int32Accessor(); // key field
-		fields[1] = new Int32Accessor(); // value field
-
+		IFieldAccessorFactory[] fieldAccessorFactories = new IFieldAccessorFactory[2];
+		fieldAccessorFactories[0] = new Int32AccessorFactory(); // key
+		fieldAccessorFactories[1] = new Int32AccessorFactory(); // value
+		
 		int keyLen = 1;
-		IBinaryComparator[] cmps = new IBinaryComparator[keyLen];
-		cmps[0] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-		MultiComparator cmp = new MultiComparator(cmps, fields);		
-
+		IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[keyLen];
+		comparatorFactories[0] = IntegerBinaryComparatorFactory.INSTANCE;	
+		
 		ByteArrayAccessibleOutputStream lkbaaos = new ByteArrayAccessibleOutputStream();
 		DataOutputStream lkdos = new DataOutputStream(lkbaaos);    	    	    	
 		IntegerSerializerDeserializer.INSTANCE.serialize(-1000, lkdos);
@@ -160,24 +172,18 @@
 		ByteArrayAccessibleOutputStream hkbaaos = new ByteArrayAccessibleOutputStream();
 		DataOutputStream hkdos = new DataOutputStream(hkbaaos);    	    	    	
 		IntegerSerializerDeserializer.INSTANCE.serialize(1000, hkdos);
-
+				
 		byte[] lowKey = lkbaaos.toByteArray();
 		byte[] highKey = hkbaaos.toByteArray();
-
-		IBinaryComparator[] searchCmps = new IBinaryComparator[1];
-		searchCmps[0] = IntegerBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-		MultiComparator searchCmp = new MultiComparator(searchCmps, fields);
-
-		RangePredicate rangePred = new RangePredicate(true, lowKey, highKey, searchCmp);
 		
 		IBufferCacheProvider bufferCacheProvider = new BufferCacheProvider();
 		IBTreeRegistryProvider btreeRegistryProvider = new BTreeRegistryProvider();
 		
 		RecordDescriptor recDesc = new RecordDescriptor(
                 new ISerializerDeserializer[] { IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
-						
-		int btreeFileId = 1;		
-		BTreeSearchOperatorDescriptor btreeSearchOp = new BTreeSearchOperatorDescriptor(spec, splitProvider, recDesc, bufferCacheProvider, btreeRegistryProvider, btreeFileId, "/tmp/btreetest.bin", interiorFrameFactory, leafFrameFactory, cmp, rangePred);
+		
+		int btreeFileId = 2;		
+		BTreeSearchOperatorDescriptor btreeSearchOp = new BTreeSearchOperatorDescriptor(spec, splitProvider, recDesc, bufferCacheProvider, btreeRegistryProvider, btreeFileId, "/tmp/btreetest.bin", interiorFrameFactory, leafFrameFactory, fieldAccessorFactories, comparatorFactories, true, lowKey, highKey, comparatorFactories.length);
 		//BTreeDiskOrderScanOperatorDescriptor btreeSearchOp = new BTreeDiskOrderScanOperatorDescriptor(spec, splitProvider, recDesc, bufferCacheProvider, btreeRegistryProvider, 0, "/tmp/btreetest.bin", interiorFrameFactory, leafFrameFactory, cmp);
 		
 		PartitionConstraint btreePartitionConstraint = new ExplicitPartitionConstraint(new LocationConstraint[] { new AbsoluteLocationConstraint(NC1_ID) });
