diff --git a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
index 4381bd1..a02156d 100644
--- a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
+++ b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
@@ -299,7 +299,6 @@
                     for (int i = 0; i < B; i++) {
                         try {
                             files[i] = ctx.getResourceManager().createFile(relationName, null);
-                            files[i].deleteOnExit();
                             bufferForPartitions[i] = ctx.getResourceManager().allocateFrame();
                         } catch (IOException e) {
                             throw new HyracksDataException(e);
@@ -374,7 +373,6 @@
                     for (int i = 0; i < B; i++) {
                         try {
                             filesS[i] = ctx.getResourceManager().createFile(largeRelation, null);
-                            filesS[i].deleteOnExit();
                             bufferForPartitions[i] = ctx.getResourceManager().allocateFrame();
                         } catch (IOException e) {
                             throw new HyracksDataException(e);
@@ -442,7 +440,6 @@
                                                 if (wChannel == null) {
                                                     wChannel = new RandomAccessFile(filesS[entry], "rw").getChannel();
                                                     channelsS[entry] = wChannel;
-                                                    wChannel = channelsS[entry];
                                                 }
                                                 wChannel.write(outbuf);
                                                 numWriteI2++;
@@ -468,17 +465,18 @@
                     ITuplePartitionComputer hpcRep0 = new RepartitionComputerFactory(B, hpcf0).createPartitioner();
                     ITuplePartitionComputer hpcRep1 = new RepartitionComputerFactory(B, hpcf1).createPartitioner();
                     if (memoryForHashtable != memsize - 2) {
-                        int[] memRi = new int[B];
                         for (int i = 0; i < B; i++) {
                             try {
-                                FileChannel wChannel = channelsS[i];
-                                if (wChannel != null) {
-                                    ByteBuffer outbuf = bufferForPartitions[i];
-                                    accessor1.reset(outbuf);
-                                    if (accessor1.getTupleCount() > 0) {
-                                        wChannel.write(outbuf);
-                                        numWriteI2++;
+                                ByteBuffer buf = bufferForPartitions[i];
+                                accessor1.reset(buf);
+                                if (accessor1.getTupleCount() > 0) {
+                                    FileChannel wChannel = channelsS[i];
+                                    if (wChannel == null) {
+                                        wChannel = new RandomAccessFile(filesS[i], "rw").getChannel();
+                                        channelsS[i] = wChannel;
                                     }
+                                    wChannel.write(buf);
+                                    numWriteI2++;
                                 }
                             } catch (IOException e) {
                                 throw new HyracksDataException(e);
@@ -510,7 +508,6 @@
                                         FrameUtils.copy(inBuffer, copyBuffer);
                                         joiner.build(copyBuffer);
                                         inBuffer.clear();
-                                        memRi[partitionid]++;
                                         state = inChannel.read(inBuffer);
                                     }
                                     appender.reset(outBuffer, false);
@@ -541,7 +538,6 @@
                     env.set(JOINER0, null);
                     env.set(MEM_HASHTABLE, null);
                     env.set(NUM_PARTITION, null);
-
                 }
 
                 @Override
