diff --git a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java b/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
index c63be46..5a03045 100644
--- a/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/FileMappingProvider.java
+++ b/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-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
index c2d3a10..3c84796 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeBulkLoadOperatorNodePushable.java
+++ b/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-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
index 6874f30..3bdf4a2 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeDropOperatorNodePushable.java
+++ b/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-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
index e423487..277938d 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/BTreeOpHelper.java
+++ b/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-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
index cbdb713..e02a37c 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/ConstantTupleSourceOperatorNodePushable.java
+++ b/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-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java b/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
index 995ed23..35eccc9 100644
--- a/hyracks-storage-am-btree/src/main/java/edu/uci/ics/hyracks/storage/am/btree/dataflow/FileMappingProvider.java
+++ b/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-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
index abdf9d3..86e236d 100644
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/FileManager.java
+++ b/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-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java b/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
index 76f0ab8..6fb44a1 100644
--- a/hyracks-storage-common/src/main/java/edu/uci/ics/hyracks/storage/common/file/IFileMappingProvider.java
+++ b/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
