diff --git a/client/pom.xml b/client/pom.xml
index 9bad3b3d14e404f95374b8f7e1fa02d13873912a..5881d9f25c55718e2c249fda90d123c1a2b7673f 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.25</version>
+        <version>1.3.26</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-client</artifactId>
diff --git a/client/src/main/java/org/red5/client/Red5Client.java b/client/src/main/java/org/red5/client/Red5Client.java
index b2e6e5aaa4e9a1ce2e47b47c599fe7e043661271..9d6962c51614876fce43b232de8cd98afcf57234 100644
--- a/client/src/main/java/org/red5/client/Red5Client.java
+++ b/client/src/main/java/org/red5/client/Red5Client.java
@@ -18,7 +18,7 @@ public final class Red5Client {
     /**
      * Current server version with revision
      */
-    public static final String VERSION = "Red5 Client 1.3.25";
+    public static final String VERSION = "Red5 Client 1.3.26";
 
     /**
      * Create a new Red5Client object using the connection local to the current thread A bit of magic that lets you access the red5 scope
diff --git a/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java b/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java
index 3ab7436aa452c4e57a10540b4371a27a76ac6805..c280e4f183be053c02a22d83c9bcedac5bcb8693 100644
--- a/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java
+++ b/client/src/main/java/org/red5/client/net/rtmp/BaseRTMPClientHandler.java
@@ -11,7 +11,7 @@ import java.util.Arrays;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -98,7 +98,7 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
     /**
      * Net stream handling
      */
-    private volatile CopyOnWriteArrayList<NetStreamPrivateData> streamDataList = new CopyOnWriteArrayList<>();
+    private volatile CopyOnWriteArraySet<NetStreamPrivateData> streamDataList = new CopyOnWriteArraySet<>();
 
     /**
      * Task to start on connection close
@@ -577,7 +577,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
         log.debug("publish - stream id: {}, name: {}, mode: {}", streamId, name, mode);
         // setup the netstream handler
         if (handler != null) {
-            NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId.doubleValue())).findFirst().orElse(null);
+            final int sid = streamId.intValue();
+            NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null);
             if (streamData != null) {
                 log.debug("Setting handler on stream data - handler: {}", handler);
                 streamData.handler = handler;
@@ -608,7 +609,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
     @Override
     public void publishStreamData(Number streamId, IMessage message) {
         // get the stream data by index of the list
-        NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId.doubleValue())).findFirst().orElse(null);
+        final int sid = streamId.intValue();
+        NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null);
         if (streamData != null) {
             if (streamData.connConsumer != null) {
                 streamData.connConsumer.pushMessage(null, message);
@@ -808,9 +810,10 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
             }
             if (streamId != null) {
                 // try lookup by stream id, if null return the first one
-                NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId)).findFirst().orElse(streamDataList.get(0));
+                final int sid = streamId.intValue();
+                NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null);
                 if (streamData == null) {
-                    log.warn("Stream data was null for id: {}", streamId);
+                    log.warn("Stream data was null for id: {} entry count: {}", streamId, streamDataList.size());
                 } else if (streamData.handler != null) {
                     log.debug("Got stream data and handler");
                     streamData.handler.onStreamEvent((Notify) command);
@@ -1028,9 +1031,9 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
             Object callResult = call.getResult();
             if (callResult != null) {
                 // we expect a number consisting of the stream id, but we'll check for an object map as well
-                Number streamId = null;
+                int streamId = -1;
                 if (callResult instanceof Number) {
-                    streamId = (Number) callResult;
+                    streamId = ((Number) callResult).intValue();
                 } else if (callResult instanceof Map) {
                     Map<?, ?> map = (Map<?, ?>) callResult;
                     // XXX(paul) log out the map contents
@@ -1038,14 +1041,14 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
                     if (map.containsKey("streamId")) {
                         Object tmpStreamId = map.get("streamId");
                         if (tmpStreamId instanceof Number) {
-                            streamId = (Number) tmpStreamId;
+                            streamId = ((Number) tmpStreamId).intValue();
                         } else {
                             log.warn("CreateStreamCallBack resultReceived - stream id is not a number: {}", tmpStreamId);
                         }
                     }
                 }
                 log.debug("CreateStreamCallBack resultReceived - stream id: {} call: {} connection: {}", streamId, call, conn);
-                if (conn != null && streamId != null) {
+                if (conn != null && streamId != -1) {
                     log.debug("Setting new net stream");
                     NetStream stream = new NetStream(streamEventDispatcher);
                     stream.setConnection(conn);
@@ -1100,7 +1103,8 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
                     log.debug("Deleting net stream");
                     conn.removeClientStream(streamId);
                     // send a delete notify?
-                    NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId().equals(streamId)).findFirst().orElse(null);
+                    final int sid = streamId.intValue();
+                    NetStreamPrivateData streamData = streamDataList.stream().filter(s -> s.getStreamId() == sid).findFirst().orElse(null);
                     if (streamData != null) {
                         streamDataList.remove(streamData);
                     } else {
@@ -1148,22 +1152,22 @@ public abstract class BaseRTMPClientHandler extends BaseRTMPHandler implements I
 
         public volatile ConnectionConsumer connConsumer;
 
-        final Number streamId;
+        private final int streamId;
 
-        NetStreamPrivateData(Number streamId) {
+        NetStreamPrivateData(int streamId) {
             this.streamId = streamId;
             if (streamEventHandler != null) {
                 handler = streamEventHandler;
             }
         }
 
-        public Number getStreamId() {
+        public int getStreamId() {
             return streamId;
         }
 
         @Override
         public int hashCode() {
-            return streamId.hashCode();
+            return streamId;
         }
 
     }
diff --git a/client/src/main/resources/logback.xml b/client/src/main/resources/logback.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eae9066fb5117aaacc5391ffd363b0ce302012d5
--- /dev/null
+++ b/client/src/main/resources/logback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<configuration>
+
+    <jmxConfigurator />
+
+    <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE">
+        <encoder>
+            <pattern>[%p] [%thread] %logger - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="CONSOLE" />
+    </root>
+
+    <logger name="org.red5.server.service.ReflectionUtils" level="TRACE" />
+    <logger name="org.red5.server.service.ServiceInvoker" level="TRACE" />
+    <logger name="org.red5.server.net.rtmp.RTMPHandler" level="TRACE" />
+    
+    <logger name="org.red5.client.net.rtmp.BaseRTMPClientHandler" level="TRACE" />
+    <logger name="org.red5.client.test" level="DEBUG" />
+
+</configuration>
\ No newline at end of file
diff --git a/common/pom.xml b/common/pom.xml
index 7382320a0002f0267f73e66a8d88d637e95c97ff..fa9fd28f4f8deda14b33095f48d232088122315f 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.25</version>
+        <version>1.3.26</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-server-common</artifactId>
@@ -124,7 +124,7 @@
         <dependency>
             <groupId>net.engio</groupId>
             <artifactId>mbassador</artifactId>
-            <version>1.3.25</version>
+            <version>1.3.26</version>
         </dependency> -->
         <dependency>
             <groupId>junit</groupId>
diff --git a/common/src/main/java/org/red5/server/api/Red5.java b/common/src/main/java/org/red5/server/api/Red5.java
index ff2678c0092f6485d41fc7a999d84aa2988f9fcc..a4fb0c7f32b19208ddc7510445e2375c4d8d8378 100644
--- a/common/src/main/java/org/red5/server/api/Red5.java
+++ b/common/src/main/java/org/red5/server/api/Red5.java
@@ -55,12 +55,12 @@ public final class Red5 {
     /**
      * Server version with revision
      */
-    public static final String VERSION = "Red5 Server 1.3.25";
+    public static final String VERSION = "Red5 Server 1.3.26";
 
     /**
      * Server version for fmsVer requests
      */
-    public static final String FMS_VERSION = "RED5/1,3,25,0";
+    public static final String FMS_VERSION = "RED5/1,3,26,0";
 
     /**
      * Server capabilities
diff --git a/common/src/main/java/org/red5/server/stream/AbstractClientStream.java b/common/src/main/java/org/red5/server/stream/AbstractClientStream.java
index 08f2c6b130c78aa77e879a0e601d9998723c1170..107e893879956699b5b0e1af88c83124deb89ab4 100644
--- a/common/src/main/java/org/red5/server/stream/AbstractClientStream.java
+++ b/common/src/main/java/org/red5/server/stream/AbstractClientStream.java
@@ -20,7 +20,7 @@ public abstract class AbstractClientStream extends AbstractStream implements ICl
     /**
      * Stream identifier. Unique across server.
      */
-    private Number streamId = 0.0d;
+    private int streamId;
 
     /**
      * Stream name of the broadcasting stream.
@@ -43,10 +43,20 @@ public abstract class AbstractClientStream extends AbstractStream implements ICl
      * @param streamId
      *            Stream id
      */
-    public void setStreamId(Number streamId) {
+    public void setStreamId(int streamId) {
         this.streamId = streamId;
     }
 
+    /**
+     * Setter for stream id
+     *
+     * @param streamId
+     *            Stream id
+     */
+    public void setStreamId(Number streamId) {
+        this.streamId = streamId.intValue();
+    }
+
     /**
      * Return stream id
      *
diff --git a/io/pom.xml b/io/pom.xml
index 1d7df3754a0a75d3f44cee861867302eb9cd557b..ffbd23a02487ffd3f7217949ca17179a2cde4364 100644
--- a/io/pom.xml
+++ b/io/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.25</version>
+        <version>1.3.26</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-io</artifactId>
diff --git a/pom.xml b/pom.xml
index 8c01f81136a9969f45170d72cd408e6952b21c73..cb775dc59676e172b49a8e15b3fdd66d427eafb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <name>Red5</name>
     <description>The Red5 server</description>
     <groupId>org.red5</groupId>
-    <version>1.3.25</version>
+    <version>1.3.26</version>
     <url>https://github.com/Red5/red5-server</url>
     <inceptionYear>2005</inceptionYear>
     <organization>
diff --git a/server/pom.xml b/server/pom.xml
index c49dce6f6b4603bad7e1432b5c3905e1f3932af8..ee63aaa6fbe81bf89fa9038c9a0b749e7c98b3d3 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.25</version>
+        <version>1.3.26</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-server</artifactId>
diff --git a/service/pom.xml b/service/pom.xml
index 28c49c5b32f92706c473ef69391495e893fd28ed..e08e568a0ff722f410d5278884b77079d74bc235 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.25</version>
+        <version>1.3.26</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-service</artifactId>