diff --git a/hyracks-algebricks/hyracks-algebricks-tests/src/test/java/edu/uci/ics/hyracks/algebricks/tests/tools/WriteValueTest.java b/hyracks-algebricks/hyracks-algebricks-tests/src/test/java/edu/uci/ics/hyracks/algebricks/tests/tools/WriteValueTest.java
index 73dc16d..18f0e75 100644
--- a/hyracks-algebricks/hyracks-algebricks-tests/src/test/java/edu/uci/ics/hyracks/algebricks/tests/tools/WriteValueTest.java
+++ b/hyracks-algebricks/hyracks-algebricks-tests/src/test/java/edu/uci/ics/hyracks/algebricks/tests/tools/WriteValueTest.java
@@ -80,7 +80,7 @@
         dout.writeUTF(str);
         baaos.reset();
         WriteValueTools.writeUTF8String(interm.getByteArray(), 0, interm.size(), baaos);
-        byte[] b = str.getBytes();
+        byte[] b = str.getBytes("UTF-8");
         if (baaos.size() != b.length + 2) {
             throw new Exception("Expecting to write " + b + " in " + b.length + " bytes, but found " + baaos.size()
                     + " bytes.");
diff --git a/hyracks-control-common/src/main/java/edu/uci/ics/hyracks/control/common/controllers/CCConfig.java b/hyracks-control-common/src/main/java/edu/uci/ics/hyracks/control/common/controllers/CCConfig.java
index 4536fc4..350f527 100644
--- a/hyracks-control-common/src/main/java/edu/uci/ics/hyracks/control/common/controllers/CCConfig.java
+++ b/hyracks-control-common/src/main/java/edu/uci/ics/hyracks/control/common/controllers/CCConfig.java
@@ -32,7 +32,7 @@
     public int clusterNetPort = 1099;
 
     @Option(name = "-http-port", usage = "Sets the http port for the Cluster Controller (default: 19001)")
-    public int httpPort = 19001;
+    public int httpPort = 16001;
 
     @Option(name = "-heartbeat-period", usage = "Sets the time duration between two heartbeats from each node controller in milliseconds (default: 10000)")
     public int heartbeatPeriod = 10000;
diff --git a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
index d6f3fd1..4b55d4b 100644
--- a/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
+++ b/hyracks-net/src/main/java/edu/uci/ics/hyracks/net/protocols/muxdemux/ChannelControlBlock.java
@@ -21,7 +21,6 @@
 import java.util.Deque;
 import java.util.Queue;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -152,14 +151,14 @@
     private final class WriteInterface implements IChannelWriteInterface {
         private final Queue<ByteBuffer> wiFullQueue;
 
-        private int channelWriteEventCount;
+        private boolean channelWritabilityState;
 
         private final ICloseableBufferAcceptor fba = new ICloseableBufferAcceptor() {
             @Override
             public void accept(ByteBuffer buffer) {
                 synchronized (ChannelControlBlock.this) {
                     wiFullQueue.add(buffer);
-                    incrementLocalWriteEventCount();
+                    adjustChannelWritability();
                 }
             }
 
@@ -173,7 +172,7 @@
                         return;
                     }
                     eos = true;
-                    incrementLocalWriteEventCount();
+                    adjustChannelWritability();
                 }
             }
 
@@ -181,14 +180,14 @@
             public void error(int ecode) {
                 synchronized (ChannelControlBlock.this) {
                     WriteInterface.this.ecode = ecode;
-                    incrementLocalWriteEventCount();
+                    adjustChannelWritability();
                 }
             }
         };
 
         private IBufferAcceptor eba;
 
-        private final AtomicInteger credits;
+        private int credits;
 
         private boolean eos;
 
@@ -202,7 +201,7 @@
 
         WriteInterface() {
             wiFullQueue = new ArrayDeque<ByteBuffer>();
-            credits = new AtomicInteger();
+            credits = 0;
             eos = false;
             eosSent = false;
             ecode = -1;
@@ -224,30 +223,32 @@
                 currentWriteBuffer = wiFullQueue.poll();
             }
             if (currentWriteBuffer != null) {
-                int size = Math.min(currentWriteBuffer.remaining(), credits.get());
+                int size = Math.min(currentWriteBuffer.remaining(), credits);
                 if (size > 0) {
-                    credits.addAndGet(-size);
+                    credits -= size;
                     writerState.command.setChannelId(channelId);
                     writerState.command.setCommandType(MuxDemuxCommand.CommandType.DATA);
                     writerState.command.setData(size);
                     writerState.reset(currentWriteBuffer, size, ChannelControlBlock.this);
+                } else {
+                    adjustChannelWritability();
                 }
             } else if (ecode >= 0 && !ecodeSent) {
-                decrementLocalWriteEventCount();
                 writerState.command.setChannelId(channelId);
                 writerState.command.setCommandType(MuxDemuxCommand.CommandType.ERROR);
                 writerState.command.setData(ecode);
                 writerState.reset(null, 0, null);
                 ecodeSent = true;
                 localClose.set(true);
+                adjustChannelWritability();
             } else if (wi.eos && !wi.eosSent) {
-                decrementLocalWriteEventCount();
                 writerState.command.setChannelId(channelId);
                 writerState.command.setCommandType(MuxDemuxCommand.CommandType.CLOSE_CHANNEL);
                 writerState.command.setData(0);
                 writerState.reset(null, 0, null);
                 eosSent = true;
                 localClose.set(true);
+                adjustChannelWritability();
             }
         }
 
@@ -255,23 +256,37 @@
             if (currentWriteBuffer.remaining() <= 0) {
                 currentWriteBuffer.clear();
                 eba.accept(currentWriteBuffer);
-                decrementLocalWriteEventCount();
                 currentWriteBuffer = null;
+                adjustChannelWritability();
             }
         }
 
-        void incrementLocalWriteEventCount() {
-            ++channelWriteEventCount;
-            if (channelWriteEventCount == 1) {
-                cSet.markPendingWrite(channelId);
+        private boolean computeWritability() {
+            boolean writableDataPresent = currentWriteBuffer != null || !wiFullQueue.isEmpty();
+            if (writableDataPresent) {
+                return credits > 0;
             }
+            if (eos && !eosSent) {
+                return true;
+            }
+            if (ecode >= 0 && !ecodeSent) {
+                return true;
+            }
+            return false;
         }
 
-        void decrementLocalWriteEventCount() {
-            --channelWriteEventCount;
-            if (channelWriteEventCount == 0) {
-                cSet.unmarkPendingWrite(channelId);
+        void adjustChannelWritability() {
+            boolean writable = computeWritability();
+            if (writable) {
+                if (!channelWritabilityState) {
+                    cSet.markPendingWrite(channelId);
+                }
+            } else {
+                if (channelWritabilityState) {
+                    cSet.unmarkPendingWrite(channelId);
+                }
             }
+            channelWritabilityState = writable;
         }
     }
 
@@ -295,8 +310,9 @@
         this.ri.credits = credits;
     }
 
-    void addWriteCredits(int delta) {
-        wi.credits.addAndGet(delta);
+    synchronized void addWriteCredits(int delta) {
+        wi.credits += delta;
+        wi.adjustChannelWritability();
     }
 
     synchronized void reportRemoteEOS() {
