diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
index 76a2bee..a7c2fdb 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
@@ -68,7 +68,7 @@
     public void open() throws HyracksDataException {
         try {
             transactionContext = transactionManager.getTransactionContext(jobId);
-            transactionContext.isWriteTxn(isWriteTransaction);
+            transactionContext.setWriteTxn(isWriteTransaction);
         } catch (ACIDException e) {
             throw new HyracksDataException(e);
         }
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionContext.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionContext.java
index 531b10f..dc33e69 100644
--- a/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionContext.java
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionContext.java
@@ -23,7 +23,7 @@
 
     public JobId getJobId();
 
-    public void isTimeout(boolean isTimeout);
+    public void setTimeout(boolean isTimeout);
 
     public boolean isTimeout();
 
@@ -39,11 +39,11 @@
 
     public boolean isWriteTxn();
 
-    public void isWriteTxn(boolean isWriterTxn);
+    public void setWriteTxn(boolean isWriterTxn);
 
     public String prettyPrint();
 
-    public void isMetadataTransaction(boolean isMetadataTxn);
+    public void setMetadataTransaction(boolean isMetadataTxn);
 
     public boolean isMetadataTransaction();
 
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionManager.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionManager.java
index 5404ceb..77e960b 100644
--- a/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionManager.java
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/transactions/ITransactionManager.java
@@ -29,13 +29,6 @@
      * transaction has committed. ABORTED: The transaction has aborted.
      * TIMED_OUT: The transaction has timed out waiting to acquire a lock.
      */
-//    public enum TransactionState {
-//        ACTIVE,
-//        COMMITTED,
-//        ABORTED,
-//        TIMED_OUT,
-//    };
-    
     public static final int ACTIVE = 0;
     public static final int COMMITTED = 1;
     public static final int ABORTED = 2;
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
index f48f267..8765aae 100644
--- a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
@@ -110,7 +110,7 @@
     @Override
     public void beginTransaction(JobId transactionId) throws ACIDException, RemoteException {
         ITransactionContext txnCtx = transactionSubsystem.getTransactionManager().beginTransaction(transactionId);
-        txnCtx.isMetadataTransaction(true);
+        txnCtx.setMetadataTransaction(true);
     }
 
     @Override
@@ -274,7 +274,7 @@
         ILSMIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
 
         ITransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        txnCtx.isWriteTxn(true);
+        txnCtx.setWriteTxn(true);
         txnCtx.registerIndexAndCallback(resourceID, lsmIndex, (AbstractOperationCallback) modCallback,
                 metadataIndex.isPrimaryIndex());
 
@@ -582,7 +582,7 @@
         ILSMIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
 
         ITransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        txnCtx.isWriteTxn(true);
+        txnCtx.setWriteTxn(true);
         txnCtx.registerIndexAndCallback(resourceID, lsmIndex, (AbstractOperationCallback) modCallback,
                 metadataIndex.isPrimaryIndex());
 
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
index 2782e63..b44755c 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
@@ -50,7 +50,7 @@
                     ITransactionManager txnManager = ((IAsterixAppRuntimeContext) jobletContext.getApplicationContext()
                             .getApplicationObject()).getTransactionSubsystem().getTransactionManager();
                     ITransactionContext txnContext = txnManager.getTransactionContext(jobId);
-                    txnContext.isWriteTxn(transactionalWrite);
+                    txnContext.setWriteTxn(transactionalWrite);
                     txnManager.completedTransaction(txnContext, new DatasetId(-1), -1,
                             !(jobStatus == JobStatus.FAILURE));
                 } catch (ACIDException e) {
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
index 759b45b..e0baa3f 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
@@ -972,7 +972,7 @@
             jobHT.remove(jobId);
 
             if (existWaiter) {
-                txnContext.isTimeout(true);
+                txnContext.setTimeout(true);
                 txnContext.setTxnState(ITransactionManager.ABORTED);
             }
 
@@ -1880,7 +1880,7 @@
     }
 
     private void requestAbort(ITransactionContext txnContext) throws ACIDException {
-        txnContext.isTimeout(true);
+        txnContext.setTimeout(true);
         throw new ACIDException("Transaction " + txnContext.getJobId()
                 + " should abort (requested by the Lock Manager)");
     }
@@ -2249,13 +2249,13 @@
                     unlock(tempDatasetIdObj, logRecord.getPKHashValue(), txnCtx);
                     txnCtx.notifyOptracker(false);
                 } else if (logRecord.getLogType() == LogType.JOB_COMMIT) {
-                    ((LogPage) logPage).notifyJobCommitter();
                     tempJobIdObj.setId(logRecord.getJobId());
                     txnCtx = txnSubsystem.getTransactionManager().getTransactionContext(tempJobIdObj);
                     if (txnCtx == null) {
                         throw new IllegalStateException("TransactionContext[" + tempJobIdObj + "] doesn't exist.");
                     }
                     txnCtx.notifyOptracker(true);
+                    ((LogPage) logPage).notifyJobCommitter();
                 }
                 logRecord = logPageReader.next();
             }
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
index 7e83140..7fce48d 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
@@ -163,7 +163,7 @@
         return txnSubsystem;
     }
 
-    public synchronized long getAppendLSN() {
+    public long getAppendLSN() {
         return appendLSN;
     }
 
@@ -260,7 +260,7 @@
         return logFileSize * fileId + offset;
     }
 
-    public synchronized void renewLogFiles() {
+    public void renewLogFiles() {
         terminateLogFlusher();
         deleteAllLogFiles();
         initializeLogManager();
@@ -268,6 +268,11 @@
 
     private void terminateLogFlusher() {
         logFlusher.terminate();
+        try {
+            logFlusher.join();
+        } catch (InterruptedException e) {
+            throw new IllegalStateException(e);
+        }
     }
 
     private void deleteAllLogFiles() {
@@ -301,13 +306,7 @@
                 Collections.sort(logFileIds, new Comparator<Long>() {
                     @Override
                     public int compare(Long arg0, Long arg1) {
-                        if (arg0 > arg1) {
-                            return 1;
-                        } else if (arg0 == arg1) {
-                            return 0;
-                        } else {
-                            return -1;
-                        }
+                        return arg0.compareTo(arg1);
                     }
                 });
             }
@@ -386,20 +385,7 @@
                 flushPage.notify();
             }
         }
-        POISON_PILL.isStop(false);
         flushQ.offer(POISON_PILL);
-        synchronized (POISON_PILL) {
-            if(!POISON_PILL.isStop()) {
-                try {
-                    POISON_PILL.wait();
-                } catch (InterruptedException e) {
-                    throw new IllegalStateException("Unexpected interrupted exception", e); 
-                }
-                if (!POISON_PILL.isStop()) {
-                    throw new IllegalStateException("LogFlusher thread is igonoring termination request.");
-                }
-            }
-        }
     }
 
     @Override
@@ -409,15 +395,11 @@
             try {
                 flushPage = flushQ.take();
                 if (flushPage == POISON_PILL) {
-                    synchronized (POISON_PILL) {
-                        POISON_PILL.isStop(true);
-                        POISON_PILL.notify();
-                        break;
-                    }
+                    break;
                 }
                 flushPage.flush();
             } catch (InterruptedException e) {
-                throw new IllegalStateException("Unexpected interrupted exception", e);
+                //ignore
             }
             emptyQ.offer(flushPage);
         }
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogReader.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogReader.java
index 80e6f4a..173088c 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogReader.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogReader.java
@@ -39,6 +39,11 @@
     private long bufferBeginLSN;
     private long fileBeginLSN;
     private FileChannel fileChannel;
+    
+    private enum ReturnState {
+        FLUSH,
+        EOF
+    };
 
     public LogReader(LogManager logMgr, long logFileSize, int logPageSize, MutableLong flushLSN, boolean isRecoveryMode) {
         this.logMgr = logMgr;
@@ -53,42 +58,18 @@
     @Override
     public void initializeScan(long beginLSN) throws ACIDException {
         readLSN = beginLSN;
-        synchronized (flushLSN) {
-            while (readLSN >= flushLSN.get()) {
-                if (isRecoveryMode) {
-                    return;
-                }
-                try {
-                    if (IS_DEBUG_MODE) {
-                        LOGGER.info("initializeScan()| flushLSN: " + flushLSN.get() + ", readLSN: " + readLSN);
-                    }
-                    flushLSN.wait();
-                } catch (InterruptedException e) {
-                    //ignore.
-                }
-            }
+        if (waitForFlushOrReturnIfEOF() == ReturnState.EOF) {
+            return;
         }
         getFileChannel();
         readPage();
     }
-
+    
     //for scanning
     @Override
     public ILogRecord next() throws ACIDException {
-        synchronized (flushLSN) {
-            while (readLSN >= flushLSN.get()) {
-                if (isRecoveryMode) {
-                    return null;
-                }
-                try {
-                    if (IS_DEBUG_MODE) {
-                        LOGGER.info("next()| flushLSN: " + flushLSN.get() + ", readLSN: " + readLSN);
-                    }
-                    flushLSN.wait();
-                } catch (InterruptedException e) {
-                    //ignore
-                }
-            }
+        if (waitForFlushOrReturnIfEOF() == ReturnState.EOF) {
+            return null;
         }
         if (readBuffer.position() == readBuffer.limit() || !logRecord.readLogRecord(readBuffer)) {
             readNextPage();
@@ -100,6 +81,26 @@
         readLSN += logRecord.getLogSize();
         return logRecord;
     }
+    
+    private ReturnState waitForFlushOrReturnIfEOF() {
+        synchronized (flushLSN) {
+            while (readLSN >= flushLSN.get()) {
+                if (isRecoveryMode) {
+                    return ReturnState.EOF;
+                }
+                try {
+                    if (IS_DEBUG_MODE) {
+                        LOGGER.info("waitForFlushOrReturnIfEOF()| flushLSN: " + flushLSN.get() + ", readLSN: "
+                                + readLSN);
+                    }
+                    flushLSN.wait();
+                } catch (InterruptedException e) {
+                    //ignore
+                }
+            }
+            return ReturnState.FLUSH;
+        }
+    }
 
     private void readNextPage() throws ACIDException {
         try {
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecord.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecord.java
index 6f571ab..380e524 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecord.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecord.java
@@ -207,20 +207,8 @@
     @Override
     public String getLogRecordForDisplay() {
         StringBuilder builder = new StringBuilder();
-        String logTypeDisplay = null;
-        switch (logType) {
-            case LogType.JOB_COMMIT:
-                logTypeDisplay = "JOB_COMMIT";
-                break;
-            case LogType.UPDATE:
-                logTypeDisplay = "UPDATE";
-                break;
-            case LogType.ENTITY_COMMIT:
-                logTypeDisplay = "ENTITY_COMMIT";
-                break;
-        }
         builder.append(" LSN : ").append(LSN);
-        builder.append(" LogType : ").append(logTypeDisplay);
+        builder.append(" LogType : ").append(LogType.toString(logType));
         builder.append(" JobId : ").append(jobId);
         builder.append(" DatasetId : ").append(datasetId);
         builder.append(" PKHashValue : ").append(PKHashValue);
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
index 3fc710a..823c8d3 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
@@ -19,5 +19,22 @@
     public static final byte UPDATE = 0;
     public static final byte JOB_COMMIT = 1;
     public static final byte ENTITY_COMMIT = 2;
+    private static final String STRING_UPDATE = "UPDATE";
+    private static final String STRING_JOB_COMMIT = "JOB_COMMIT";
+    private static final String STRING_ENTITY_COMMIT = "ENTITY_COMMIT";
+    private static final String STRING_INVALID_LOG_TYPE = "INVALID_LOG_TYPE";
+
+    public static String toString(byte logType) {
+        switch (logType) {
+            case LogType.UPDATE:
+                return STRING_UPDATE;
+            case LogType.JOB_COMMIT:
+                return STRING_JOB_COMMIT;
+            case LogType.ENTITY_COMMIT:
+                return STRING_ENTITY_COMMIT;
+            default:
+                return STRING_INVALID_LOG_TYPE;
+        }
+    }
 
 }
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
index af14a1d..81a73d5 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
@@ -673,9 +673,9 @@
 
     private void undo(ILogRecord logRecord) {
         try {
-            IIndex index = (IIndex) txnSubsystem.getAsterixAppRuntimeContextProvider().getIndexLifecycleManager()
+            ILSMIndex index = (ILSMIndex) txnSubsystem.getAsterixAppRuntimeContextProvider().getIndexLifecycleManager()
                     .getIndex(logRecord.getResourceId());
-            ILSMIndexAccessor indexAccessor = (ILSMIndexAccessor) index.createAccessor(NoOpOperationCallback.INSTANCE,
+            ILSMIndexAccessor indexAccessor = index.createAccessor(NoOpOperationCallback.INSTANCE,
                     NoOpOperationCallback.INSTANCE);
             if (logRecord.getResourceType() == ResourceType.LSM_BTREE) {
                 if (logRecord.getOldOp() != IndexOperation.NOOP.ordinal()) {
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
index 940ba23..678956b 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
@@ -149,7 +149,7 @@
         }
     }
 
-    public void isWriteTxn(boolean isWriteTxn) {
+    public void setWriteTxn(boolean isWriteTxn) {
         this.isWriteTxn.set(isWriteTxn);
     }
 
@@ -171,7 +171,7 @@
         return jobId;
     }
 
-    public void isTimeout(boolean isTimeout) {
+    public void setTimeout(boolean isTimeout) {
         this.isTimeout = isTimeout;
     }
 
@@ -198,7 +198,7 @@
     }
 
     @Override
-    public void isMetadataTransaction(boolean isMetadataTxn) {
+    public void setMetadataTransaction(boolean isMetadataTxn) {
         this.isMetadataTxn = isMetadataTxn;
     }
 
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
index 82d980c..01bce83 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
@@ -60,8 +60,7 @@
             if (LOGGER.isLoggable(Level.SEVERE)) {
                 LOGGER.severe(msg);
             }
-            ae.printStackTrace();
-            throw new Error(msg);
+            throw new Error(msg, ae);
         } finally {
             txnSubsystem.getLockManager().releaseLocks(txnCtx);
             transactionContextRepository.remove(txnCtx.getJobId());
