diff --git a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeSearchOperatorNodePushable.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeSearchOperatorNodePushable.java
index e8458ef..5f5d916 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeSearchOperatorNodePushable.java
+++ b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeSearchOperatorNodePushable.java
@@ -15,7 +15,6 @@
 package edu.uci.ics.hyracks.storage.am.btree.dataflow;
 
 import java.io.DataOutput;
-import java.io.FileNotFoundException;
 import java.nio.ByteBuffer;
 
 import edu.uci.ics.hyracks.api.context.IHyracksContext;
@@ -37,9 +36,9 @@
 public class BTreeSearchOperatorNodePushable extends AbstractUnaryOutputSourceOperatorNodePushable {
     private BTreeOpHelper btreeOpHelper;
     private boolean isForward;
-    private ITupleReferenceFactory[] searchKeys;    
+    private ITupleReferenceFactory[] searchKeys;
     private int searchKeyFieldCount;
-    
+
     public BTreeSearchOperatorNodePushable(AbstractBTreeOperatorDescriptor opDesc, IHyracksContext ctx,
             boolean isForward, ITupleReferenceFactory[] searchKeys, int searchKeyFields) {
         btreeOpHelper = new BTreeOpHelper(opDesc, ctx, false);
@@ -47,42 +46,41 @@
         this.searchKeys = searchKeys;
         this.searchKeyFieldCount = searchKeyFields;
     }
-    
+
     @Override
     public void initialize() throws HyracksDataException {
-        AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();        
+        AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();
         IHyracksContext ctx = btreeOpHelper.getHyracksContext();
 
         IBTreeLeafFrame cursorFrame = opDesc.getLeafFactory().getFrame();
         IBTreeCursor cursor = new RangeSearchCursor(cursorFrame);
 
-        BTree btree = null;        
+        BTree btree = null;
         try {
-        	btreeOpHelper.init();
+            btreeOpHelper.init();
             //btreeOpHelper.fill();
             btree = btreeOpHelper.getBTree();
-            
+
             IBTreeLeafFrame leafFrame = btreeOpHelper.getLeafFrame();
             IBTreeInteriorFrame interiorFrame = btreeOpHelper.getInteriorFrame();
-            
+
             // construct range predicate
             assert (searchKeyFieldCount <= btree.getMultiComparator().getKeyFieldCount());
             IBinaryComparator[] searchComparators = new IBinaryComparator[searchKeyFieldCount];
-            for (int i = 0; i < searchKeyFieldCount; i++) {                
-            	searchComparators[i] = btree.getMultiComparator().getComparators()[i];
+            for (int i = 0; i < searchKeyFieldCount; i++) {
+                searchComparators[i] = btree.getMultiComparator().getComparators()[i];
             }
-            MultiComparator searchCmp = new MultiComparator(btree.getMultiComparator().getFieldCount(), searchComparators);
-            
+            MultiComparator searchCmp = new MultiComparator(btree.getMultiComparator().getFieldCount(),
+                    searchComparators);
+
             ITupleReference lowKey = searchKeys[0].createTuple(ctx);
             ITupleReference highKey = searchKeys[1].createTuple(ctx);
-            
+
             RangePredicate rangePred = new RangePredicate(isForward, lowKey, highKey, searchCmp);
 
             btree.search(cursor, rangePred, leafFrame, interiorFrame);
-        } catch (FileNotFoundException e1) {
-            e1.printStackTrace();
         } catch (Exception e) {
-            e.printStackTrace();
+            throw new HyracksDataException(e);
         }
 
         MultiComparator cmp = btree.getMultiComparator();
@@ -91,13 +89,13 @@
         appender.reset(frame, true);
         ArrayTupleBuilder tb = new ArrayTupleBuilder(cmp.getFieldCount());
         DataOutput dos = tb.getDataOutput();
-        
+
         try {
             while (cursor.hasNext()) {
-            	tb.reset();
+                tb.reset();
                 cursor.next();
-                
-                ITupleReference frameTuple = cursor.getTuple();                
+
+                ITupleReference frameTuple = cursor.getTuple();
                 for (int i = 0; i < frameTuple.getFieldCount(); i++) {
                     dos.write(frameTuple.getFieldData(i), frameTuple.getFieldStart(i), frameTuple.getFieldLength(i));
                     tb.addFieldEndOffset();
@@ -119,12 +117,12 @@
             if (appender.getTupleCount() > 0) {
                 FrameUtils.flushFrame(frame, writer);
             }
-            
+
             cursor.close();
-            writer.close();                        
+            writer.close();
 
         } catch (Exception e) {
-            e.printStackTrace();
+            throw new HyracksDataException(e);
         }
     }
 }
\ No newline at end of file
