diff --git a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
index c63be46..5a03045 100644
--- a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
+++ b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
@@ -33,4 +33,9 @@
 	public void unmapName(String name) {
 		map.remove(name);
 	}
+	
+	@Override
+	public Integer getFileId(String name) {
+		return map.get(name);
+	}
 }
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
index c2d3a10..3c84796 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
@@ -43,16 +43,22 @@
         this.recordDescProvider = recordDescProvider;
         tuple.setFieldPermutation(fieldPermutation);
     }
-
+    
     @Override
-    public void close() throws HyracksDataException {
+    public void open() throws HyracksDataException {
+        AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();
+        RecordDescriptor recDesc = recordDescProvider.getInputRecordDescriptor(opDesc.getOperatorId(), 0);        
+        accessor = new FrameTupleAccessor(btreeOpHelper.getHyracksContext(), recDesc);
+        IBTreeMetaDataFrame metaFrame = new MetaDataFrame();        
+        btreeOpHelper.init();
+        btreeOpHelper.getBTree().open(btreeOpHelper.getBTreeFileId());        
         try {
-            btreeOpHelper.getBTree().endBulkLoad(bulkLoadCtx);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+			bulkLoadCtx = btreeOpHelper.getBTree().beginBulkLoad(fillFactor, btreeOpHelper.getLeafFrame(), btreeOpHelper.getInteriorFrame(), metaFrame);
+		} catch (Exception e) {
+			throw new HyracksDataException(e.getMessage());
+		}
     }
-
+    
     @Override
     public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
         accessor.reset(buffer);
@@ -69,20 +75,14 @@
     }
     
     @Override
-    public void open() throws HyracksDataException {
-        AbstractBTreeOperatorDescriptor opDesc = btreeOpHelper.getOperatorDescriptor();
-        RecordDescriptor recDesc = recordDescProvider.getInputRecordDescriptor(opDesc.getOperatorId(), 0);        
-        accessor = new FrameTupleAccessor(btreeOpHelper.getHyracksContext(), recDesc);
-        IBTreeMetaDataFrame metaFrame = new MetaDataFrame();
+    public void close() throws HyracksDataException {
         try {
-            btreeOpHelper.init();
-            btreeOpHelper.getBTree().open(btreeOpHelper.getBTreeFileId());
-            bulkLoadCtx = btreeOpHelper.getBTree().beginBulkLoad(fillFactor, btreeOpHelper.getLeafFrame(), btreeOpHelper.getInteriorFrame(), metaFrame);
+            btreeOpHelper.getBTree().endBulkLoad(bulkLoadCtx);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
-
+    
     @Override
     public void flush() throws HyracksDataException {
     }
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
index 6874f30..3bdf4a2 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
@@ -49,9 +49,13 @@
         
         File f = fileSplitProvider.getFileSplits()[partition].getLocalFile();        
         String fileName = f.getAbsolutePath();            
+                
+        Integer fileId = fileMappingProviderProvider.getFileMappingProvider().getFileId(fileName);
+        if(fileId == null) {
+        	throw new HyracksDataException("Cannot drop B-Tree with name " + fileName + ". No file mapping exists.");
+        }
+        int btreeFileId = fileId; 
         
-        int btreeFileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, false);
-
         // unregister btree instance            
         btreeRegistry.lock();
         try {
@@ -59,16 +63,16 @@
         } finally {
             btreeRegistry.unlock();
         }
-
+        
+        // remove name to id mapping
+        fileMappingProviderProvider.getFileMappingProvider().unmapName(fileName);
+                
         // unregister file
         fileManager.unregisterFile(btreeFileId);
         
         if (f.exists()) {
             f.delete();
         }
-
-        // remove name to id mapping
-        fileMappingProviderProvider.getFileMappingProvider().unmapName(fileName);
     }
 
     @Override
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
index e423487..277938d 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
@@ -15,10 +15,12 @@
 package edu.uci.ics.hyracks.storage.am.btree.dataflow;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.RandomAccessFile;
 
 import edu.uci.ics.hyracks.api.context.IHyracksContext;
 import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
 import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
 import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeInteriorFrame;
 import edu.uci.ics.hyracks.storage.am.btree.api.IBTreeLeafFrame;
@@ -49,32 +51,49 @@
         this.partition = partition;
     }  
     
-    void init() throws Exception {
+    void init() throws HyracksDataException {
     	
     	IBufferCache bufferCache = opDesc.getBufferCacheProvider().getBufferCache();
         FileManager fileManager = opDesc.getBufferCacheProvider().getFileManager();
         IFileMappingProviderProvider fileMappingProviderProvider = opDesc.getFileMappingProviderProvider();               
         IFileSplitProvider fileSplitProvider = opDesc.getFileSplitProvider();
         
-        //String ncDataPath = System.getProperty("NodeControllerDataPath");
         File f = fileSplitProvider.getFileSplits()[partition].getLocalFile();
         if(!f.exists()) {
         	File dir = new File(f.getParent());        	
         	dir.mkdirs();
         }
-        RandomAccessFile raf = new RandomAccessFile(f, "rw");
+        RandomAccessFile raf;
+		try {
+			raf = new RandomAccessFile(f, "rw");
+		} catch (FileNotFoundException e) {
+			throw new HyracksDataException(e.getMessage());
+		}
         
         String fileName = f.getAbsolutePath();
-        btreeFileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, createBTree);     
+        Integer fileId = fileMappingProviderProvider.getFileMappingProvider().getFileId(fileName);        
+        if(fileId == null) {
+        	if(createBTree) {
+        		fileId = fileMappingProviderProvider.getFileMappingProvider().mapNameToFileId(fileName, createBTree);        		
+        	}
+        	else {
+        		throw new HyracksDataException("Cannot get id for file " + fileName + ". File name has not been mapped.");
+        	}
+        }
+        else {
+        	if(createBTree) {
+        		throw new HyracksDataException("Cannot map file " + fileName + " to an id. File name has already been mapped.");
+        	}        	     
+        }        
+        btreeFileId = fileId;  
         
         if (!f.exists() && !createBTree) {
-            throw new Exception("Trying to open btree from file " + fileName + " but file doesn't exist.");
+            throw new HyracksDataException("Trying to open btree from file " + fileName + " but file doesn't exist.");
         }
         
-        try {
-            FileInfo fi = new FileInfo(btreeFileId, raf);
-            fileManager.registerFile(fi);
-        } catch (Exception e) {
+        if(createBTree) {
+        	FileInfo fi = new FileInfo(btreeFileId, raf);
+        	fileManager.registerFile(fi);
         }
         
         interiorFrame = opDesc.getInteriorFactory().getFrame();
@@ -90,7 +109,7 @@
                 // check if btree has already been registered by another thread
                 btree = btreeRegistry.get(btreeFileId);
                 if (btree == null) {
-                    // this thread should create and register the btee
+                    // this thread should create and register the btree
                 	                   
                     IBinaryComparator[] comparators = new IBinaryComparator[opDesc.getComparatorFactories().length];
                     for (int i = 0; i < opDesc.getComparatorFactories().length; i++) {
@@ -102,7 +121,11 @@
                     btree = new BTree(bufferCache, opDesc.getInteriorFactory(), opDesc.getLeafFactory(), cmp);
                     if (createBTree) {
                         MetaDataFrame metaFrame = new MetaDataFrame();
-                        btree.create(btreeFileId, leafFrame, metaFrame);
+                        try {
+							btree.create(btreeFileId, leafFrame, metaFrame);
+						} catch (Exception e) {
+							throw new HyracksDataException(e.getMessage());
+						}
                     }
                     btree.open(btreeFileId);
                     btreeRegistry.register(btreeFileId, btree);
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
index cbdb713..e02a37c 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
@@ -30,7 +30,8 @@
 		ByteBuffer writeBuffer = ctx.getResourceManager().allocateFrame();
 		FrameTupleAppender appender = new FrameTupleAppender(ctx);
 		appender.reset(writeBuffer, true);
-		appender.append(fieldSlots, tupleData, 0, tupleSize);		
+		if(fieldSlots != null && tupleData != null && tupleSize > 0)
+			appender.append(fieldSlots, tupleData, 0, tupleSize);
 		FrameUtils.flushFrame(writeBuffer, writer);
 		writer.close();
 	}
diff --git a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
index 995ed23..35eccc9 100644
--- a/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
+++ b/hyracks/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
@@ -33,4 +33,9 @@
 	public void unmapName(String name) {
 		map.remove(name);
 	}
+
+	@Override
+	public Integer getFileId(String name) {
+		return map.get(name);
+	}
 }
diff --git a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
index abdf9d3..86e236d 100644
--- a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
+++ b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
@@ -29,7 +29,7 @@
 
     public void registerFile(FileInfo fInfo) throws HyracksDataException {
         if (fileRegistry.containsKey(fInfo.getFileId())) {
-            throw new HyracksDataException("File with id " + fInfo.getFileId() + " is already registered");
+            throw new HyracksDataException("File " + fInfo.getFile().toString() + " with id " + fInfo.getFileId() + " is already registered");
         }
         fileRegistry.put(fInfo.getFileId(), fInfo);
     }
diff --git a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
index 76f0ab8..6fb44a1 100644
--- a/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
+++ b/hyracks/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
@@ -37,4 +37,14 @@
      * @return void
      */
     public void unmapName(String name);
+    
+    /**
+     * Get file id of an already mapped file
+     * 
+     * @param name
+     *            - Name of the file
+     * 
+     * @return The file id on a successful lookup, null if unsuccessful.
+     */
+    public Integer getFileId(String name);
 }
\ No newline at end of file
