http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java 
b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
new file mode 100644
index 0000000..36bed35
--- /dev/null
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sshd.common.util.buffer;
+
+/**
+ * TODO Add javadoc
+ *
+ * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
+ */
+public class BufferUtils {
+
+    public static String printHex(byte[] array) {
+        return printHex(array, 0, array.length);
+    }
+
+    public static String printHex(byte[] array, int offset, int len) {
+        return printHex(array, offset, len, ' ');
+    }
+
+    public static String printHex(byte[] array, int offset, int len, char sep) 
{
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < len; i++) {
+            byte b = array[offset + i];
+            if (sb.length() > 0) {
+                sb.append(sep);
+            }
+            sb.append(digits[(b >> 4) & 0x0F]);
+            sb.append(digits[b & 0x0F]);
+        }
+        return sb.toString();
+    }
+
+    public static boolean equals(byte[] a1, byte[] a2) {
+        if (a1.length != a2.length) {
+            return false;
+        }
+        return equals(a1, 0, a2, 0, a1.length);
+    }
+
+    public static boolean equals(byte[] a1, int a1Offset, byte[] a2, int 
a2Offset, int length) {
+        if (a1.length < a1Offset + length || a2.length < a2Offset + length) {
+            return false;
+        }
+        while (length-- > 0) {
+            if (a1[a1Offset++] != a2[a2Offset++]) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    final static char[] digits = {
+           '0' , '1' , '2' , '3' , '4' , '5' ,
+           '6' , '7' , '8' , '9' , 'a' , 'b' ,
+           'c' , 'd' , 'e' , 'f'
+    };
+
+    public static final int getNextPowerOf2(int i) {
+        int j = 1;
+        while (j < i) {
+            j <<= 1;
+        }
+        return j;
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
new file mode 100644
index 0000000..da05aef
--- /dev/null
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sshd.common.util.buffer;
+
+import java.nio.charset.Charset;
+
+import org.apache.sshd.common.util.Readable;
+
+/**
+ * Provides an implementation of {@link Buffer} using a backing byte array
+ * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
+ */
+public final class ByteArrayBuffer extends Buffer {
+    public static final int DEFAULT_SIZE = 256;
+    public static final int MAX_LEN = 65536;
+
+    private byte[] data;
+    private int rpos;
+    private int wpos;
+
+    public ByteArrayBuffer() {
+        this(DEFAULT_SIZE);
+    }
+
+    public ByteArrayBuffer(int size) {
+        this(new byte[BufferUtils.getNextPowerOf2(size)], false);
+    }
+
+    public ByteArrayBuffer(byte[] data) {
+        this(data, 0, data.length, true);
+    }
+
+    public ByteArrayBuffer(byte[] data, boolean read) {
+        this(data, 0, data.length, read);
+    }
+
+    public ByteArrayBuffer(byte[] data, int off, int len) {
+        this(data, off, len, true);
+    }
+
+    public ByteArrayBuffer(byte[] data, int off, int len, boolean read) {
+        this.data = data;
+        this.rpos = off;
+        this.wpos = (read ? len : 0) + off;
+    }
+
+    @Override
+    public int rpos() {
+        return rpos;
+    }
+
+    @Override
+    public void rpos(int rpos) {
+        this.rpos = rpos;
+    }
+
+    @Override
+    public int wpos() {
+        return wpos;
+    }
+
+    @Override
+    public void wpos(int wpos) {
+        ensureCapacity(wpos - this.wpos);
+        this.wpos = wpos;
+    }
+
+    @Override
+    public int available() {
+        return wpos - rpos;
+    }
+
+    @Override
+    public int capacity() {
+        return data.length - wpos;
+    }
+
+    @Override
+    public byte[] array() {
+        return data;
+    }
+
+    @Override
+    public void compact() {
+        if (available() > 0) {
+            System.arraycopy(data, rpos, data, 0, wpos - rpos);
+        }
+        wpos -= rpos;
+        rpos = 0;
+    }
+
+    @Override
+    public void clear() {
+        rpos = 0;
+        wpos = 0;
+    }
+
+    @Override
+    public byte getByte() {
+        // TODO use Byte.BYTES for JDK-8
+        ensureAvailable(Byte.SIZE / Byte.SIZE);
+        return data[rpos++];
+    }
+
+    @Override
+    public void putByte(byte b) {
+        // TODO use Byte.BYTES in JDK-8
+        ensureCapacity(Byte.SIZE / Byte.SIZE);
+        data[wpos++] = b;
+    }
+
+    @Override
+    public int putBuffer(Readable buffer, boolean expand) {
+        int r = expand ? buffer.available() : Math.min(buffer.available(), 
capacity());
+        ensureCapacity(r);
+        buffer.getRawBytes(data, wpos, r);
+        wpos += r;
+        return r;
+    }
+
+    @Override
+    public void putRawBytes(byte[] d, int off, int len) {
+        ensureCapacity(len);
+        System.arraycopy(d, off, data, wpos, len);
+        wpos += len;
+    }
+
+    @Override
+    public String getString(Charset charset) {
+        int len = getInt();
+        if (len < 0) {
+            throw new BufferException("Bad item length: " + len);
+        }
+        ensureAvailable(len);
+        String s = new String(data, rpos, len, charset);
+        rpos += len;
+        return s;
+    }
+
+    @Override
+    public void getRawBytes(byte[] buf, int off, int len) {
+        ensureAvailable(len);
+        System.arraycopy(data, rpos, buf, off, len);
+        rpos += len;
+    }
+
+    @Override
+    protected void ensureCapacity(int capacity) {
+        if (data.length - wpos < capacity) {
+            int cw = wpos + capacity;
+            byte[] tmp = new byte[BufferUtils.getNextPowerOf2(cw)];
+            System.arraycopy(data, 0, tmp, 0, data.length);
+            data = tmp;
+        }
+    }
+
+    @Override
+    protected int size() {
+        return data.length;
+    }
+}

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java
index ab1676e..abcd43b 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/util/io/LoggingFilterOutputStream.java
@@ -22,7 +22,7 @@ import java.io.FilterOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import org.apache.sshd.common.util.BufferUtils;
+import org.apache.sshd.common.util.buffer.BufferUtils;
 import org.slf4j.Logger;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java 
b/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java
index c581cbd..bb80288 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/UserAuth.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sshd.server;
 
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.session.ServerSession;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
index 947beb1..7d70939 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/AbstractUserAuth.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sshd.server.auth;
 
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.session.ServerSession;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java
index db439ff..e061b5c 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthKeyboardInteractive.java
@@ -21,7 +21,7 @@ package org.apache.sshd.server.auth;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.PasswordAuthenticator;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.session.ServerSession;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java
index 8b9f5a7..980b119 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthNone.java
@@ -19,7 +19,7 @@
 package org.apache.sshd.server.auth;
 
 import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.session.ServerSession;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java
index 6219c3a..f4b2372 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPassword.java
@@ -21,7 +21,7 @@ package org.apache.sshd.server.auth;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.PasswordAuthenticator;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.session.ServerSession;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
index 58fa336..e6e8874 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
@@ -23,7 +23,8 @@ import java.security.PublicKey;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.Signature;
 import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.PublickeyAuthenticator;
 import org.apache.sshd.server.UserAuth;
 
@@ -35,14 +36,17 @@ import org.apache.sshd.server.UserAuth;
 public class UserAuthPublicKey extends AbstractUserAuth {
 
     public static class Factory implements NamedFactory<UserAuth> {
+        @Override
         public String getName() {
             return "publickey";
         }
+        @Override
         public UserAuth create() {
             return new UserAuthPublicKey();
         }
     }
 
+    @Override
     public Boolean doAuth(Buffer buffer, boolean init) throws Exception {
         if (!init) {
             throw new IllegalStateException();
@@ -70,7 +74,7 @@ public class UserAuthPublicKey extends AbstractUserAuth {
         }
 
         if (!authenticator.authenticate(username, key, session)) {
-            return false;
+            return Boolean.FALSE;
         }
         if (!hasSig) {
             Buffer buf = 
session.createBuffer(SshConstants.SSH_MSG_USERAUTH_PK_OK);
@@ -79,8 +83,8 @@ public class UserAuthPublicKey extends AbstractUserAuth {
             session.writePacket(buf);
             return null;
         } else {
-            Buffer buf = new Buffer();
-            buf.putString(session.getKex().getH());
+            Buffer buf = new ByteArrayBuffer();
+            buf.putBytes(session.getKex().getH());
             buf.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST);
             buf.putString(username);
             buf.putString(service);
@@ -94,7 +98,7 @@ public class UserAuthPublicKey extends AbstractUserAuth {
             if (!verif.verify(sig)) {
                 throw new Exception("Key verification failed");
             }
-            return true;
+            return Boolean.TRUE;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
index 4b5db95..8893f94 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/gss/UserAuthGSS.java
@@ -21,7 +21,8 @@ package org.apache.sshd.server.auth.gss;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.UserAuth;
 import org.apache.sshd.server.auth.AbstractUserAuth;
 import org.apache.sshd.server.session.ServerSession;
@@ -54,6 +55,7 @@ public class UserAuthGSS extends AbstractUserAuth {
     /**
      * Handle the first authentication step.
      */
+    @Override
     protected Boolean doAuth(Buffer buffer, boolean initial) throws Exception {
         GSSAuthenticator auth = getAuthenticator(session);
 
@@ -120,11 +122,11 @@ public class UserAuthGSS extends AbstractUserAuth {
 
                 // Make the MIC message so the token can be verified
 
-                Buffer msgbuf = new Buffer();
+                Buffer msgbuf = new ByteArrayBuffer();
 
-                msgbuf.putString(session.getSessionId());
+                msgbuf.putBytes(session.getSessionId());
                 msgbuf.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST);
-                msgbuf.putString(username.getBytes("UTF-8"));
+                msgbuf.putString(username);
                 msgbuf.putString(service);
                 msgbuf.putString("gssapi-with-mic");
 
@@ -180,6 +182,7 @@ public class UserAuthGSS extends AbstractUserAuth {
      *
      * @return The user name
      */
+    @Override
     public String getUserName() {
         return identity != null ? identity : username;
     }
@@ -187,6 +190,7 @@ public class UserAuthGSS extends AbstractUserAuth {
     /**
      * Free any system resources used by the module.
      */
+    @Override
     public void destroy() {
         if (context != null) {
             try {
@@ -241,6 +245,7 @@ public class UserAuthGSS extends AbstractUserAuth {
          *
          * @return Tge name, always 'gssapi-with-mic' here.
          */
+        @Override
         public String getName() {
             return "gssapi-with-mic";
         }
@@ -250,6 +255,7 @@ public class UserAuthGSS extends AbstractUserAuth {
          *
          * @return The instance
          */
+        @Override
         public UserAuth create() {
             return new UserAuthGSS();
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
index e55b687..8f6bb24 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
@@ -24,7 +24,7 @@ import org.apache.sshd.client.future.DefaultOpenFuture;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.channel.AbstractChannel;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java
index 24d19b3..fbc8396 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/AsyncDataReceiver.java
@@ -23,7 +23,7 @@ import java.io.IOException;
 import org.apache.sshd.common.Channel;
 import org.apache.sshd.common.channel.ChannelAsyncInputStream;
 import org.apache.sshd.common.io.IoInputStream;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 public class AsyncDataReceiver implements ChannelDataReceiver {
 
@@ -37,11 +37,13 @@ public class AsyncDataReceiver implements 
ChannelDataReceiver {
         return in;
     }
 
+    @Override
     public int data(ChannelSession channel, byte[] buf, int start, int len) 
throws IOException {
-        in.write(new Buffer(buf, start, len));
+        in.write(new ByteArrayBuffer(buf, start, len));
         return 0;
     }
 
+    @Override
     public void close() throws IOException {
         in.close(false);
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
index ea8ef71..c977c20 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
@@ -29,7 +29,6 @@ import java.util.Set;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.sshd.agent.SshAgent;
@@ -42,7 +41,6 @@ import org.apache.sshd.common.ForwardingFilter;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.PtyMode;
 import org.apache.sshd.common.RequestHandler;
-import org.apache.sshd.common.Session;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.channel.ChannelAsyncOutputStream;
 import org.apache.sshd.common.channel.ChannelOutputStream;
@@ -51,9 +49,10 @@ import org.apache.sshd.common.file.FileSystemFactory;
 import org.apache.sshd.common.future.CloseFuture;
 import org.apache.sshd.common.future.DefaultCloseFuture;
 import org.apache.sshd.common.future.SshFutureListener;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.IoUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.common.util.io.LoggingFilterOutputStream;
 import org.apache.sshd.server.AsyncCommand;
 import org.apache.sshd.server.ChannelSessionAware;
@@ -78,10 +77,12 @@ public class ChannelSession extends AbstractServerChannel {
 
     public static class Factory implements NamedFactory<Channel> {
 
+        @Override
         public String getName() {
             return "session";
         }
 
+        @Override
         public Channel create() {
             return new ChannelSession();
         }
@@ -99,6 +100,7 @@ public class ChannelSession extends AbstractServerChannel {
             ptyModes = new ConcurrentHashMap<PtyMode, Integer>();
         }
 
+        @Override
         public void addSignalListener(SignalListener listener, Signal... 
signals) {
             if (signals == null) {
                 throw new IllegalArgumentException("signals may not be null");
@@ -107,6 +109,7 @@ public class ChannelSession extends AbstractServerChannel {
             addSignalListener(listener, Arrays.asList(signals));
         }
 
+        @Override
         public void addSignalListener(SignalListener listener) {
             addSignalListener(listener, Signal.SIGNALS);
         }
@@ -116,6 +119,7 @@ public class ChannelSession extends AbstractServerChannel {
          * we hold the listeners inside a Set, so even if we add several times
          * the same listener to the same signal set, it is harmless
          */
+        @Override
         public void addSignalListener(SignalListener listener, 
Collection<Signal> signals) {
             if (listener == null) {
                 throw new IllegalArgumentException("listener may not be null");
@@ -130,14 +134,17 @@ public class ChannelSession extends AbstractServerChannel 
{
             }
         }
 
+        @Override
         public Map<String, String> getEnv() {
             return env;
         }
 
+        @Override
         public Map<PtyMode, Integer> getPtyModes() {
             return ptyModes;
         }
 
+        @Override
         public void removeSignalListener(SignalListener listener) {
             if (listener == null) {
                 throw new IllegalArgumentException("listener may not be null");
@@ -219,12 +226,15 @@ public class ChannelSession extends AbstractServerChannel 
{
     }
 
     public class CommandCloseable extends CloseableUtils.IoBaseCloseable {
+        @Override
         public boolean isClosed() {
             return commandExitFuture.isClosed();
         }
+        @Override
         public boolean isClosing() {
             return isClosed();
         }
+        @Override
         public CloseFuture close(boolean immediately) {
             if (immediately || command == null) {
                 commandExitFuture.setClosed();
@@ -245,6 +255,7 @@ public class ChannelSession extends AbstractServerChannel {
 
                 manager.getScheduledExecutorService().schedule(task, timeout, 
TimeUnit.MILLISECONDS);
                 commandExitFuture.addListener(new 
SshFutureListener<CloseFuture>() {
+                    @Override
                     public void operationComplete(CloseFuture future) {
                         task.cancel();
                     }
@@ -271,6 +282,7 @@ public class ChannelSession extends AbstractServerChannel {
         IoUtils.closeQuietly(receiver);
     }
 
+    @Override
     protected void doWriteData(byte[] data, int off, int len) throws 
IOException {
         // If we're already closing, ignore incoming data
         if (isClosing()) {
@@ -283,12 +295,13 @@ public class ChannelSession extends AbstractServerChannel 
{
             }
         } else {
             if (tempBuffer == null) {
-                tempBuffer = new Buffer(len);
+                tempBuffer = new ByteArrayBuffer(len);
             }
             tempBuffer.putRawBytes(data, off, len);
         }
     }
 
+    @Override
     protected void doWriteExtendedData(byte[] data, int off, int len) throws 
IOException {
         throw new UnsupportedOperationException("Server channel does not 
support extended data");
     }
@@ -540,6 +553,7 @@ public class ChannelSession extends AbstractServerChannel {
             doWriteData(buffer.array(), buffer.rpos(), buffer.available());
         }
         command.setExitCallback(new ExitCallback() {
+            @Override
             public void onExit(int exitValue) {
                 try {
                     closeShell(exitValue);
@@ -547,6 +561,7 @@ public class ChannelSession extends AbstractServerChannel {
                     log.info("Error closing shell", e);
                 }
             }
+            @Override
             public void onExit(int exitValue, String exitMessage) {
                 onExit(exitValue);
             }
@@ -608,6 +623,7 @@ public class ChannelSession extends AbstractServerChannel {
     }
 
     private class ChannelSessionRequestHandler implements 
RequestHandler<Channel> {
+        @Override
         public Result process(Channel channel, String request, boolean 
wantReply, Buffer buffer) throws Exception {
             Boolean r = handleRequest(request, buffer);
             if (r == null) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
index 4f2e980..0c43929 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/channel/PuttyRequestHandler.java
@@ -20,7 +20,7 @@ package org.apache.sshd.server.channel;
 
 import org.apache.sshd.common.Channel;
 import org.apache.sshd.common.RequestHandler;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
index 1f34f24..189f328 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
@@ -22,7 +22,7 @@ import org.apache.sshd.common.RequestHandler;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshdSocketAddress;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Handler for cancel-tcpip-forward global request.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java 
b/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java
index 20ab0b9..c6881d0 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java
@@ -21,7 +21,7 @@ package org.apache.sshd.server.global;
 import org.apache.sshd.common.RequestHandler;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Handler for keepalive@xxx global request.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java
index bfd5b26..38bf122 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/global/NoMoreSessionsHandler.java
@@ -21,7 +21,7 @@ package org.apache.sshd.server.global;
 import org.apache.sshd.common.RequestHandler;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Handler for no-more-sessions@xxx global request.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
index 1de692b..7151e4b 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
@@ -22,7 +22,7 @@ import org.apache.sshd.common.RequestHandler;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshdSocketAddress;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Handler for tcpip-forward global request.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java 
b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java
index 5473d65..335cafe 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEXServer.java
@@ -34,14 +34,15 @@ import org.apache.sshd.common.Random;
 import org.apache.sshd.common.Signature;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.kex.DHG;
 import org.apache.sshd.common.kex.DHFactory;
+import org.apache.sshd.common.kex.DHG;
 import org.apache.sshd.common.kex.DHGroupData;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.BufferUtils;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.ServerFactoryManager;
 
 /**
@@ -83,11 +84,13 @@ public class DHGEXServer extends 
AbstractDHServerKeyExchange {
         this.factory = factory;
     }
 
+    @Override
     public void init(AbstractSession s, byte[] V_S, byte[] V_C, byte[] I_S, 
byte[] I_C) throws Exception {
         super.init(s, V_S, V_C, I_S, I_C);
         expected = SshConstants.SSH_MSG_KEX_DH_GEX_REQUEST;
     }
 
+    @Override
     public boolean next(Buffer buffer) throws Exception {
         byte cmd = buffer.getByte();
 
@@ -157,16 +160,16 @@ public class DHGEXServer extends 
AbstractDHServerKeyExchange {
             Signature sig = 
NamedFactory.Utils.create(session.getFactoryManager().getSignatureFactories(), 
algo);
             sig.init(kp.getPublic(), kp.getPrivate());
 
-            buffer = new Buffer();
+            buffer = new ByteArrayBuffer();
             buffer.putRawPublicKey(kp.getPublic());
             K_S = buffer.getCompactData();
 
             buffer.clear();
-            buffer.putString(V_C);
-            buffer.putString(V_S);
-            buffer.putString(I_C);
-            buffer.putString(I_S);
-            buffer.putString(K_S);
+            buffer.putBytes(V_C);
+            buffer.putBytes(V_S);
+            buffer.putBytes(I_C);
+            buffer.putBytes(I_S);
+            buffer.putBytes(K_S);
             if (oldRequest) {
                 buffer.putInt(prf);
             } else {
@@ -186,7 +189,7 @@ public class DHGEXServer extends 
AbstractDHServerKeyExchange {
             buffer.clear();
             sig.update(H, 0, H.length);
             buffer.putString(algo);
-            buffer.putString(sig.sign());
+            buffer.putBytes(sig.sign());
             sigH = buffer.getCompactData();
 
             if (log.isDebugEnabled()) {
@@ -201,9 +204,9 @@ public class DHGEXServer extends 
AbstractDHServerKeyExchange {
             buffer.rpos(5);
             buffer.wpos(5);
             buffer.putByte(SshConstants.SSH_MSG_KEX_DH_GEX_REPLY);
-            buffer.putString(K_S);
-            buffer.putString(f);
-            buffer.putString(sigH);
+            buffer.putBytes(K_S);
+            buffer.putBytes(f);
+            buffer.putBytes(sigH);
             session.writePacket(buffer);
             return true;
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java 
b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java
index 13df5c2..c18d532 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGServer.java
@@ -28,8 +28,9 @@ import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.kex.AbstractDH;
 import org.apache.sshd.common.kex.DHFactory;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.BufferUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
@@ -74,6 +75,7 @@ public class DHGServer extends AbstractDHServerKeyExchange {
         f = dh.getE();
     }
 
+    @Override
     public boolean next(Buffer buffer) throws Exception {
         byte cmd = buffer.getByte();
         if (cmd != SshConstants.SSH_MSG_KEXDH_INIT) {
@@ -91,16 +93,16 @@ public class DHGServer extends AbstractDHServerKeyExchange {
         Signature sig = 
NamedFactory.Utils.create(session.getFactoryManager().getSignatureFactories(), 
algo);
         sig.init(kp.getPublic(), kp.getPrivate());
 
-        buffer = new Buffer();
+        buffer = new ByteArrayBuffer();
         buffer.putRawPublicKey(kp.getPublic());
         K_S = buffer.getCompactData();
 
         buffer.clear();
-        buffer.putString(V_C);
-        buffer.putString(V_S);
-        buffer.putString(I_C);
-        buffer.putString(I_S);
-        buffer.putString(K_S);
+        buffer.putBytes(V_C);
+        buffer.putBytes(V_S);
+        buffer.putBytes(I_C);
+        buffer.putBytes(I_S);
+        buffer.putBytes(K_S);
         buffer.putMPInt(e);
         buffer.putMPInt(f);
         buffer.putMPInt(K);
@@ -111,7 +113,7 @@ public class DHGServer extends AbstractDHServerKeyExchange {
         buffer.clear();
         sig.update(H, 0, H.length);
         buffer.putString(algo);
-        buffer.putString(sig.sign());
+        buffer.putBytes(sig.sign());
         sigH = buffer.getCompactData();
 
         if (log.isDebugEnabled()) {
@@ -126,9 +128,9 @@ public class DHGServer extends AbstractDHServerKeyExchange {
         buffer.rpos(5);
         buffer.wpos(5);
         buffer.putByte(SshConstants.SSH_MSG_KEXDH_REPLY);
-        buffer.putString(K_S);
-        buffer.putString(f);
-        buffer.putString(sigH);
+        buffer.putBytes(K_S);
+        buffer.putBytes(f);
+        buffer.putBytes(sigH);
         session.writePacket(buffer);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java 
b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
index 0a779a7..f195abc 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
@@ -33,8 +33,9 @@ import org.apache.sshd.common.future.SshFutureListener;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.io.IoWriteFuture;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.ServerFactoryManager;
 
 /**
@@ -63,13 +64,17 @@ public class ServerSession extends AbstractSession {
         return negotiated[index];
     }
 
+    @Override
     public ServerFactoryManager getFactoryManager() {
         return (ServerFactoryManager) factoryManager;
     }
 
+    @Override
     protected void checkKeys() {
+        // nothing
     }
 
+    @Override
     public void startService(String name) throws Exception {
         currentService = 
ServiceFactory.Utils.create(getFactoryManager().getServiceFactories(), name, 
this);
     }
@@ -80,6 +85,7 @@ public class ServerSession extends AbstractSession {
         disconnect(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR, "Unsupported 
packet: SSH_MSG_SERVICE_ACCEPT");
     }
 
+    @Override
     protected void checkRekey() throws IOException {
         if (kexState.get() == KEX_STATE_DONE) {
             if (   inPackets > MAX_PACKETS || outPackets > MAX_PACKETS
@@ -102,6 +108,7 @@ public class ServerSession extends AbstractSession {
         sendIdentification(serverVersion);
     }
 
+    @Override
     protected void sendKexInit() throws IOException {
        /*
         * Make sure that the provided host keys have at least one supported 
signature factory
@@ -154,6 +161,7 @@ public class ServerSession extends AbstractSession {
         I_S = sendKexInit(serverProposal);
     }
 
+    @Override
     protected boolean readIdentification(Buffer buffer) throws IOException {
         clientVersion = doReadIdentification(buffer, true);
         if (clientVersion == null) {
@@ -162,7 +170,7 @@ public class ServerSession extends AbstractSession {
         log.debug("Client version string: {}", clientVersion);
         if (!clientVersion.startsWith(DEFAULT_SSH_VERSION_PREFIX)) {
             String msg = "Unsupported protocol version: " + clientVersion;
-            ioSession.write(new Buffer((msg + 
"\n").getBytes())).addListener(new SshFutureListener<IoWriteFuture>() {
+            ioSession.write(new ByteArrayBuffer((msg + 
"\n").getBytes())).addListener(new SshFutureListener<IoWriteFuture>() {
                 @Override
                 public void operationComplete(IoWriteFuture future) {
                     close(true);
@@ -176,6 +184,7 @@ public class ServerSession extends AbstractSession {
         return true;
     }
 
+    @Override
     protected void receiveKexInit(Buffer buffer) throws IOException {
         clientProposal = new String[SshConstants.PROPOSAL_MAX];
         I_C = receiveKexInit(buffer, clientProposal);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
index 49d7712..f31851a 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
@@ -34,9 +34,9 @@ import org.apache.sshd.common.ServiceFactory;
 import org.apache.sshd.common.Session;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.ServerFactoryManager;
 import org.apache.sshd.server.UserAuth;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java 
b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
index 218b27d..3a8ce58 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/sftp/SftpSubsystem.java
@@ -81,12 +81,13 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.file.FileSystemAware;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.common.util.IoUtils;
 import org.apache.sshd.common.util.OsUtils;
 import org.apache.sshd.common.util.SelectorUtils;
 import org.apache.sshd.common.util.ThreadUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.Environment;
 import org.apache.sshd.server.ExitCallback;
@@ -161,6 +162,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
             return file;
         }
 
+        @Override
         public void close() throws IOException {
             // ignored
         }
@@ -191,14 +193,17 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
             this.done = done;
         }
 
+        @Override
         public boolean hasNext() {
             return fileList.hasNext();
         }
 
+        @Override
         public Path next() {
             return fileList.next();
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException("Not allowed to remove " + 
toString());
         }
@@ -364,10 +369,12 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
         return unsupportedAttributePolicy;
     }
 
+    @Override
     public void setSession(ServerSession session) {
         this.session = session;
     }
 
+    @Override
     public void setFileSystem(FileSystem fileSystem) {
         if (fileSystem != this.fileSystem) {
             this.fileSystem = fileSystem;
@@ -375,22 +382,27 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
         }
     }
 
+    @Override
     public void setExitCallback(ExitCallback callback) {
         this.callback = callback;
     }
 
+    @Override
     public void setInputStream(InputStream in) {
         this.in = in;
     }
 
+    @Override
     public void setOutputStream(OutputStream out) {
         this.out = out;
     }
 
+    @Override
     public void setErrorStream(OutputStream err) {
         this.err = err;
     }
 
+    @Override
     public void start(Environment env) throws IOException {
         this.env = env;
         try {
@@ -401,6 +413,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
         }
     }
 
+    @Override
     public void run() {
         DataInputStream dis = null;
         try {
@@ -410,7 +423,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
                 if (length < 5) {
                     throw new IllegalArgumentException();
                 }
-                Buffer buffer = new Buffer(length + 4);
+                Buffer buffer = new ByteArrayBuffer(length + 4);
                 buffer.putInt(length);
                 int nb = length;
                 while (nb > 0) {
@@ -1122,7 +1135,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
                 sendStatus(id, SSH_FX_INVALID_HANDLE, handle);
             } else {
                 FileHandle fh = (FileHandle) p;
-                Buffer buf = new Buffer(len + 9);
+                Buffer buf = new ByteArrayBuffer(len + 9);
                 buf.putByte((byte) SSH_FXP_DATA);
                 buf.putInt(id);
                 int pos = buf.wpos();
@@ -1308,7 +1321,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
     }
 
     protected void sendHandle(int id, String handle) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_HANDLE);
         buffer.putInt(id);
         buffer.putString(handle);
@@ -1316,7 +1329,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
     }
 
     protected void sendAttrs(int id, Path file, int flags, boolean 
followLinks) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_ATTRS);
         buffer.putInt(id);
         writeAttrs(buffer, file, flags, followLinks);
@@ -1324,7 +1337,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
     }
 
     protected void sendPath(int id, Path f, Map<String, Object> attrs) throws 
IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_NAME);
         buffer.putInt(id);
         buffer.putInt(1);
@@ -1352,7 +1365,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
     }
 
     protected void sendLink(int id, String link) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_NAME);
         buffer.putInt(id);
         buffer.putInt(1);
@@ -1364,7 +1377,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
     }
 
     protected void sendName(int id, Iterator<Path> files) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_NAME);
         buffer.putInt(id);
         int wpos = buffer.wpos();
@@ -1732,10 +1745,20 @@ public class SftpSubsystem implements Command, 
Runnable, SessionAware, FileSyste
                 }
                 continue;
             }
-            case "uid":              view = "unix"; break;
-            case "gid":              view = "unix"; break;
-            case "owner":            view = "posix"; value = toUser(file, 
(UserPrincipal) value); break;
-            case "group":            view = "posix"; value = toGroup(file, 
(GroupPrincipal) value); break;
+            case "uid":
+                view = "unix";
+                break;
+            case "gid":
+                view = "unix";
+                break;
+            case "owner":
+                view = "posix";
+                value = toUser(file, (UserPrincipal) value);
+                break;
+            case "group":
+                view = "posix";
+                value = toGroup(file, (GroupPrincipal) value);
+                break;
             case "permissions":
                 if (OsUtils.isWin32()) {
                     @SuppressWarnings("unchecked")
@@ -1746,9 +1769,15 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
                 view = "posix";
                 break;
 
-            case "creationTime":     view = "basic"; break;
-            case "lastModifiedTime": view = "basic"; break;
-            case "lastAccessTime":   view = "basic"; break;
+            case "creationTime":
+                view = "basic";
+                break;
+            case "lastModifiedTime":
+                view = "basic";
+                break;
+            case "lastAccessTime":
+                view = "basic";
+                break;
             default:    // ignored
             }
             if (view != null && value != null) {
@@ -2096,7 +2125,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
             log.debug("Send SSH_FXP_STATUS (substatus={}, lang={}, msg={})", 
new Object[] { substatus, lang, msg });
         }
 
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putByte((byte) SSH_FXP_STATUS);
         buffer.putInt(id);
         buffer.putInt(substatus);
@@ -2112,6 +2141,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
         dos.flush();
     }
 
+    @Override
     public void destroy() {
         if (!closed) {
             if (log.isDebugEnabled()) {
@@ -2225,6 +2255,7 @@ public class SftpSubsystem implements Command, Runnable, 
SessionAware, FileSyste
             this.name = name;
         }
 
+        @Override
         public final String getName() {
             return name;
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java 
b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
index 608c953..44f2137 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/shell/ProcessShellFactory.java
@@ -27,7 +27,8 @@ import java.util.EnumSet;
 import java.util.Map;
 
 import org.apache.sshd.common.Factory;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.Command;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -73,6 +74,7 @@ public class ProcessShellFactory implements Factory<Command> {
         this.command = command;
     }
 
+    @Override
     public Command create() {
         return new InvertedShellWrapper(new ProcessShell());
     }
@@ -84,6 +86,7 @@ public class ProcessShellFactory implements Factory<Command> {
         private TtyFilterInputStream out;
         private TtyFilterInputStream err;
 
+        @Override
         public void start(Map<String,String> env) throws IOException {
             String[] cmds = new String[command.length];
             for (int i = 0; i < cmds.length; i++) {
@@ -108,18 +111,22 @@ public class ProcessShellFactory implements 
Factory<Command> {
             in = new TtyFilterOutputStream(process.getOutputStream(), err);
         }
 
+        @Override
         public OutputStream getInputStream() {
             return in;
         }
 
+        @Override
         public InputStream getOutputStream() {
             return out;
         }
 
+        @Override
         public InputStream getErrorStream() {
             return err;
         }
 
+        @Override
         public boolean isAlive() {
             try {
                 process.exitValue();
@@ -129,6 +136,7 @@ public class ProcessShellFactory implements 
Factory<Command> {
             }
         }
 
+        @Override
         public int exitValue() {
             try {
                 return process.waitFor();
@@ -137,6 +145,7 @@ public class ProcessShellFactory implements 
Factory<Command> {
             }
         }
 
+        @Override
         public void destroy() {
             if (process != null) {
                 process.destroy();
@@ -148,7 +157,7 @@ public class ProcessShellFactory implements 
Factory<Command> {
             private int lastChar;
             public TtyFilterInputStream(InputStream in) {
                 super(in);
-                buffer = new Buffer(32);
+                buffer = new ByteArrayBuffer(32);
             }
             synchronized void write(int c) {
                 buffer.putByte((byte) c);
@@ -171,7 +180,7 @@ public class ProcessShellFactory implements 
Factory<Command> {
                 }
                 if (c == '\n' && ttyOptions.contains(TtyOptions.ONlCr) && 
lastChar != '\r') {
                     c = '\r';
-                    Buffer buf = new Buffer();
+                    Buffer buf = new ByteArrayBuffer();
                     buf.putByte((byte) '\n');
                     buf.putBuffer(buffer);
                     buffer = buf;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java 
b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
index 992d5b4..a04ff11 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
@@ -33,9 +33,10 @@ import org.apache.sshd.common.io.IoAcceptor;
 import org.apache.sshd.common.io.IoHandler;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.Readable;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
@@ -128,6 +129,7 @@ public class X11ForwardSupport extends 
CloseableUtils.AbstractInnerCloseable imp
         }
     }
 
+    @Override
     public void sessionCreated(IoSession session) throws Exception {
         ChannelForwardedX11 channel = new ChannelForwardedX11(session);
         session.setAttribute(ChannelForwardedX11.class, channel);
@@ -141,6 +143,7 @@ public class X11ForwardSupport extends 
CloseableUtils.AbstractInnerCloseable imp
         }
     }
 
+    @Override
     public void sessionClosed(IoSession session) throws Exception {
         ChannelForwardedX11 channel = (ChannelForwardedX11) 
session.getAttribute(ChannelForwardedX11.class);
         if ( channel != null ){
@@ -148,14 +151,16 @@ public class X11ForwardSupport extends 
CloseableUtils.AbstractInnerCloseable imp
         }
     }
 
+    @Override
     public void messageReceived(IoSession session, Readable message) throws 
Exception {
         ChannelForwardedX11 channel = (ChannelForwardedX11) 
session.getAttribute(ChannelForwardedX11.class);
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putBuffer(message);
         channel.getInvertedIn().write(buffer.array(), buffer.rpos(), 
buffer.available());
         channel.getInvertedIn().flush();
     }
 
+    @Override
     public void exceptionCaught(IoSession session, Throwable cause) throws 
Exception {
         cause.printStackTrace();
         session.close(false);
@@ -169,6 +174,7 @@ public class X11ForwardSupport extends 
CloseableUtils.AbstractInnerCloseable imp
             this.serverSession = serverSession;
         }
 
+        @Override
         public synchronized OpenFuture open() throws IOException {
             InetSocketAddress remote = (InetSocketAddress) 
serverSession.getRemoteAddress();
             if (closeFuture.isClosed()) {
@@ -200,9 +206,10 @@ public class X11ForwardSupport extends 
CloseableUtils.AbstractInnerCloseable imp
             return builder().sequential(serverSession, 
super.getInnerCloseable()).build();
         }
 
+        @Override
         protected synchronized void doWriteData(byte[] data, int off, int len) 
throws IOException {
             localWindow.consumeAndCheck(len);
-            serverSession.write(new Buffer(data, off, len));
+            serverSession.write(new ByteArrayBuffer(data, off, len));
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java 
b/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java
index 38a4018..5f9428d 100644
--- a/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/AbstractSessionTest.java
@@ -18,17 +18,18 @@
  */
 package org.apache.sshd;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
 import java.io.IOException;
 
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.util.BaseTest;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
 /**
  * Test basic stuff on AbstractSession.
  *
@@ -45,28 +46,28 @@ public class AbstractSessionTest extends BaseTest {
 
     @Test
     public void testReadIdentSimple() {
-        Buffer buf = new Buffer("SSH-2.0-software\r\n".getBytes());
+        Buffer buf = new ByteArrayBuffer("SSH-2.0-software\r\n".getBytes());
         String ident = session.doReadIdentification(buf);
         assertEquals("SSH-2.0-software", ident);
     }
 
     @Test
     public void testReadIdentWithoutCR() {
-        Buffer buf = new Buffer("SSH-2.0-software\n".getBytes());
+        Buffer buf = new ByteArrayBuffer("SSH-2.0-software\n".getBytes());
         String ident = session.doReadIdentification(buf);
         assertEquals("SSH-2.0-software", ident);
     }
 
     @Test
     public void testReadIdentWithHeaders() {
-        Buffer buf = new Buffer(("a header 
line\r\nSSH-2.0-software\r\n").getBytes());
+        Buffer buf = new ByteArrayBuffer(("a header 
line\r\nSSH-2.0-software\r\n").getBytes());
         String ident = session.doReadIdentification(buf);
         assertEquals("SSH-2.0-software", ident);
     }
 
     @Test
     public void testReadIdentWithSplitPackets() {
-        Buffer buf = new Buffer("header line\r\nSSH".getBytes());
+        Buffer buf = new ByteArrayBuffer("header line\r\nSSH".getBytes());
         String ident = session.doReadIdentification(buf);
         assertNull(ident);
         buf.putRawBytes("-2.0-software\r\n".getBytes());
@@ -76,13 +77,13 @@ public class AbstractSessionTest extends BaseTest {
 
     @Test(expected = IllegalStateException.class)
     public void testReadIdentBadLineEnding() {
-        Buffer buf = new Buffer(("SSH-2.0-software\ra").getBytes());
+        Buffer buf = new ByteArrayBuffer(("SSH-2.0-software\ra").getBytes());
         String ident = session.doReadIdentification(buf);
     }
 
     @Test(expected = IllegalStateException.class)
     public void testReadIdentLongLine() {
-        Buffer buf = new Buffer(("SSH-2.0-software" +
+        Buffer buf = new ByteArrayBuffer(("SSH-2.0-software" +
                 "01234567890123456789012345678901234567890123456789" +
                 "01234567890123456789012345678901234567890123456789" +
                 "01234567890123456789012345678901234567890123456789" +
@@ -99,7 +100,7 @@ public class AbstractSessionTest extends BaseTest {
             
sb.append("01234567890123456789012345678901234567890123456789\r\n");
         }
         sb.append("SSH-2.0-software\r\n");
-        Buffer buf = new Buffer(sb.toString().getBytes());
+        Buffer buf = new ByteArrayBuffer(sb.toString().getBytes());
         String ident = session.doReadIdentification(buf);
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java 
b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
index 95b23c6..4a86365 100644
--- a/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/AuthenticationTest.java
@@ -28,7 +28,7 @@ import org.apache.sshd.client.session.ClientSessionImpl;
 import org.apache.sshd.common.KeyPairProvider;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.deprecated.ClientUserAuthServiceOld;
 import org.apache.sshd.deprecated.UserAuthKeyboardInteractive;
 import org.apache.sshd.deprecated.UserAuthPassword;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java 
b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
index 56ed4ed..fb7e389 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
@@ -18,6 +18,12 @@
  */
 package org.apache.sshd;
 
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -44,6 +50,7 @@ import org.apache.sshd.client.channel.ChannelShell;
 import org.apache.sshd.client.future.AuthFuture;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.Channel;
+import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.KeyPairProvider;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.RuntimeSshException;
@@ -52,7 +59,6 @@ import org.apache.sshd.common.Session;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.cipher.BuiltinCiphers;
-import org.apache.sshd.common.cipher.CipherNone;
 import org.apache.sshd.common.forward.TcpipServerChannel;
 import org.apache.sshd.common.future.CloseFuture;
 import org.apache.sshd.common.future.SshFutureListener;
@@ -63,8 +69,9 @@ import org.apache.sshd.common.io.mina.MinaSession;
 import org.apache.sshd.common.io.nio2.Nio2Session;
 import org.apache.sshd.common.session.AbstractSession;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.BufferUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.common.util.io.NoCloseOutputStream;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.CommandFactory;
@@ -86,12 +93,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 /**
  * TODO Add javadoc
  *
@@ -114,6 +115,7 @@ public class ClientTest extends BaseTest {
         sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
         sshd.setShellFactory(new TestEchoShellFactory());
         sshd.setCommandFactory(new CommandFactory() {
+            @Override
             public Command createCommand(String command) {
                 return new UnknownCommand(command);
             }
@@ -176,10 +178,10 @@ public class ClientTest extends BaseTest {
 
     @Test
     public void testAsyncClient() throws Exception {
-        sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024");
+        sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
         sshd.setShellFactory(new AsyncEchoShellFactory());
 
-        client.getProperties().put(SshClient.WINDOW_SIZE, "1024");
+        client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.addPasswordIdentity("smx");
@@ -196,13 +198,14 @@ public class ClientTest extends BaseTest {
         final ByteArrayOutputStream baosErr = new ByteArrayOutputStream();
         final AtomicInteger writes = new AtomicInteger(nbMessages);
 
-        channel.getAsyncIn().write(new Buffer(message))
+        channel.getAsyncIn().write(new ByteArrayBuffer(message))
                 .addListener(new SshFutureListener<IoWriteFuture>() {
+                    @Override
                     public void operationComplete(IoWriteFuture future) {
                         try {
                             if (future.isWritten()) {
                                 if (writes.decrementAndGet() > 0) {
-                                    channel.getAsyncIn().write(new 
Buffer(message)).addListener(this);
+                                    channel.getAsyncIn().write(new 
ByteArrayBuffer(message)).addListener(this);
                                 } else {
                                     channel.getAsyncIn().close(false);
                                 }
@@ -217,8 +220,9 @@ public class ClientTest extends BaseTest {
                         }
                     }
                 });
-        channel.getAsyncOut().read(new Buffer())
+        channel.getAsyncOut().read(new ByteArrayBuffer())
                 .addListener(new SshFutureListener<IoReadFuture>() {
+                    @Override
                     public void operationComplete(IoReadFuture future) {
                         try {
                             future.verify();
@@ -235,8 +239,9 @@ public class ClientTest extends BaseTest {
                         }
                     }
                 });
-        channel.getAsyncErr().read(new Buffer())
+        channel.getAsyncErr().read(new ByteArrayBuffer())
                 .addListener(new SshFutureListener<IoReadFuture>() {
+                    @Override
                     public void operationComplete(IoReadFuture future) {
                         try {
                             future.verify();
@@ -280,7 +285,7 @@ public class ClientTest extends BaseTest {
         } catch (SshException e) {
             // That's ok, the channel is being closed by the other side
         }
-        assertEquals(ChannelExec.CLOSED, channel.waitFor(ChannelExec.CLOSED, 
0) & ChannelExec.CLOSED);
+        assertEquals(ClientChannel.CLOSED, 
channel.waitFor(ClientChannel.CLOSED, 0) & ClientChannel.CLOSED);
         session.close(false).await();
         client.stop();
     }
@@ -568,6 +573,7 @@ public class ClientTest extends BaseTest {
     public void testPublicKeyAuthNewWithFailureOnFirstIdentity() throws 
Exception {
         final KeyPair pair = 
Utils.createTestHostKeyProvider().loadKey(KeyPairProvider.SSH_RSA);
         sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() {
+            @Override
             public boolean authenticate(String username, PublicKey key, 
ServerSession session) {
                 return key.equals(pair.getPublic());
             }
@@ -624,8 +630,10 @@ public class ClientTest extends BaseTest {
         client.getProperties().put(ClientFactoryManager.PASSWORD_PROMPTS, "3");
         client.setUserAuthFactories(Arrays.<NamedFactory<UserAuth>>asList(new 
UserAuthKeyboardInteractive.Factory()));
         client.setUserInteraction(new UserInteraction() {
+            @Override
             public void welcome(String banner) {
             }
+            @Override
             public String[] interactive(String destination, String name, 
String instruction, String[] prompt, boolean[] echo) {
                 count.incrementAndGet();
                 return new String[] { "bad" };
@@ -649,9 +657,11 @@ public class ClientTest extends BaseTest {
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.setUserInteraction(new UserInteraction() {
+            @Override
             public void welcome(String banner) {
             }
 
+            @Override
             public String[] interactive(String destination, String name, 
String instruction,
                                         String[] prompt, boolean[] echo) {
                 count.incrementAndGet();
@@ -674,9 +684,11 @@ public class ClientTest extends BaseTest {
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.setUserInteraction(new UserInteraction() {
+            @Override
             public void welcome(String banner) {
             }
 
+            @Override
             public String[] interactive(String destination, String name, 
String instruction,
                                         String[] prompt, boolean[] echo) {
                 count.incrementAndGet();
@@ -728,6 +740,7 @@ public class ClientTest extends BaseTest {
         final AtomicBoolean ok = new AtomicBoolean();
         client.setServerKeyVerifier(
                 new ServerKeyVerifier() {
+                    @Override
                     public boolean verifyServerKey(
                             ClientSession sshClientSession,
                             SocketAddress remoteAddress,

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java 
b/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java
index 2eb9309..1e0dd98 100644
--- a/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/SftpFileSystemTest.java
@@ -56,6 +56,7 @@ import org.apache.sshd.util.BogusPasswordAuthenticator;
 import org.apache.sshd.util.EchoShellFactory;
 import org.apache.sshd.util.Utils;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -186,8 +187,9 @@ public class SftpFileSystemTest extends BaseTest {
             Files.write(file, "Hello world\n".getBytes());
     
             Map<String, Object> attrs = Files.readAttributes(file, "posix:*");
+            Assert.assertNotNull("NO attributes read for " + file, attrs);
     
-            Files.setAttribute(file, "basic:size", 2l);
+            Files.setAttribute(file, "basic:size", Long.valueOf(2l));
             Files.setAttribute(file, "posix:permissions", 
PosixFilePermissions.fromString("rwxr-----"));
             Files.setAttribute(file, "basic:lastModifiedTime", 
FileTime.fromMillis(100000l));
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java 
b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
index c2b4832..cec1d11 100644
--- a/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/SftpTest.java
@@ -18,6 +18,17 @@
  */
 package org.apache.sshd;
 
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FX_FILE_ALREADY_EXISTS;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_NO_SUCH_FILE;
+import static org.apache.sshd.common.sftp.SftpConstants.S_IRUSR;
+import static org.apache.sshd.common.sftp.SftpConstants.S_IWUSR;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -29,13 +40,10 @@ import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.Vector;
 
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.SftpException;
 import org.apache.sshd.client.SftpClient;
 import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.OsUtils;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.command.ScpCommandFactory;
 import org.apache.sshd.server.sftp.SftpSubsystemFactory;
@@ -46,21 +54,13 @@ import org.apache.sshd.util.JSchLogger;
 import org.apache.sshd.util.SimpleUserInfo;
 import org.apache.sshd.util.Utils;
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
-import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FX_FILE_ALREADY_EXISTS;
-import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_NO_SUCH_FILE;
-import static org.apache.sshd.common.sftp.SftpConstants.S_IRUSR;
-import static org.apache.sshd.common.sftp.SftpConstants.S_IWUSR;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import com.jcraft.jsch.ChannelSftp;
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.SftpException;
 
 public class SftpTest extends BaseTest {
 
@@ -291,14 +291,14 @@ public class SftpTest extends BaseTest {
 
         uploadAndVerifyFile(sftp, 0, "emptyFile.txt");
         uploadAndVerifyFile(sftp, 1000, "smallFile.txt");
-        uploadAndVerifyFile(sftp, Buffer.MAX_LEN - 1, 
"bufferMaxLenMinusOneFile.txt");
-        uploadAndVerifyFile(sftp, Buffer.MAX_LEN, "bufferMaxLenFile.txt");
+        uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN - 1, 
"bufferMaxLenMinusOneFile.txt");
+        uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN, 
"bufferMaxLenFile.txt");
         // were chunking not implemented, these would fail. these sizes should 
invoke our internal chunking mechanism
-        uploadAndVerifyFile(sftp, Buffer.MAX_LEN + 1, 
"bufferMaxLenPlusOneFile.txt");
-        uploadAndVerifyFile(sftp, (int)(1.5 * Buffer.MAX_LEN), 
"1point5BufferMaxLenFile.txt");
-        uploadAndVerifyFile(sftp, (2 * Buffer.MAX_LEN) - 1, 
"2TimesBufferMaxLenMinusOneFile.txt");
-        uploadAndVerifyFile(sftp, 2 * Buffer.MAX_LEN, 
"2TimesBufferMaxLenFile.txt");
-        uploadAndVerifyFile(sftp, (2 * Buffer.MAX_LEN) + 1, 
"2TimesBufferMaxLenPlusOneFile.txt");
+        uploadAndVerifyFile(sftp, ByteArrayBuffer.MAX_LEN + 1, 
"bufferMaxLenPlusOneFile.txt");
+        uploadAndVerifyFile(sftp, (int)(1.5 * ByteArrayBuffer.MAX_LEN), 
"1point5BufferMaxLenFile.txt");
+        uploadAndVerifyFile(sftp, (2 * ByteArrayBuffer.MAX_LEN) - 1, 
"2TimesBufferMaxLenMinusOneFile.txt");
+        uploadAndVerifyFile(sftp, 2 * ByteArrayBuffer.MAX_LEN, 
"2TimesBufferMaxLenFile.txt");
+        uploadAndVerifyFile(sftp, (2 * ByteArrayBuffer.MAX_LEN) + 1, 
"2TimesBufferMaxLenPlusOneFile.txt");
         uploadAndVerifyFile(sftp, 200000, "largerFile.txt");
 
         // test erroneous calls that check for negative values

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java 
b/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java
index 4a866ef..cf56589 100644
--- a/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/WindowAdjustTest.java
@@ -32,7 +32,8 @@ import org.apache.sshd.common.io.IoInputStream;
 import org.apache.sshd.common.io.IoOutputStream;
 import org.apache.sshd.common.io.IoWriteFuture;
 import org.apache.sshd.common.io.WritePendingException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.common.util.io.NoCloseOutputStream;
 import org.apache.sshd.server.AsyncCommand;
 import org.apache.sshd.server.Command;
@@ -141,9 +142,9 @@ public class WindowAdjustTest {
             new Thread(new Runnable() {
                 public void run() {
                     for (int i = 0; i < sendCount; i++) {
-                        a.write(new Buffer(msg));
+                        a.write(new ByteArrayBuffer(msg));
                     }
-                    a.write(new Buffer((lastMsg.getBytes())));
+                    a.write(new ByteArrayBuffer((lastMsg.getBytes())));
                 }
             }).start();
         }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/WindowTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/WindowTest.java 
b/sshd-core/src/test/java/org/apache/sshd/WindowTest.java
index 40df419..b57d2f4 100644
--- a/sshd-core/src/test/java/org/apache/sshd/WindowTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/WindowTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.sshd;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.IOException;
@@ -31,6 +34,7 @@ import java.util.concurrent.CountDownLatch;
 import org.apache.sshd.client.channel.ChannelShell;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.Channel;
+import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.RuntimeSshException;
 import org.apache.sshd.common.Service;
@@ -38,7 +42,8 @@ import org.apache.sshd.common.Session;
 import org.apache.sshd.common.channel.Window;
 import org.apache.sshd.common.forward.TcpipServerChannel;
 import org.apache.sshd.common.io.IoReadFuture;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.CommandFactory;
 import org.apache.sshd.server.channel.ChannelSession;
@@ -55,9 +60,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
 /**
  * TODO Add javadoc
  *
@@ -80,6 +82,7 @@ public class WindowTest extends BaseTest {
         sshd.setKeyPairProvider(Utils.createTestHostKeyProvider());
         sshd.setShellFactory(new TestEchoShellFactory());
         sshd.setCommandFactory(new CommandFactory() {
+            @Override
             public Command createCommand(String command) {
                 return new UnknownCommand(command);
             }
@@ -143,8 +146,8 @@ public class WindowTest extends BaseTest {
     @Test
     public void testWindowConsumptionWithInvertedStreams() throws Exception {
         sshd.setShellFactory(new AsyncEchoShellFactory());
-        sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024");
-        client.getProperties().put(SshClient.WINDOW_SIZE, "1024");
+        sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
+        client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.addPasswordIdentity("smx");
@@ -183,8 +186,8 @@ public class WindowTest extends BaseTest {
     @Test
     public void testWindowConsumptionWithDirectStreams() throws Exception {
         sshd.setShellFactory(new AsyncEchoShellFactory());
-        sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024");
-        client.getProperties().put(SshClient.WINDOW_SIZE, "1024");
+        sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
+        client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.addPasswordIdentity("smx");
@@ -210,28 +213,29 @@ public class WindowTest extends BaseTest {
         final String message = "0123456789";
         final int nbMessages = 500;
 
-        BufferedWriter writer = new BufferedWriter(new 
OutputStreamWriter(inPos));
-        BufferedReader reader = new BufferedReader(new 
InputStreamReader(outPis));
-        for (int i = 0; i < nbMessages; i++) {
-            writer.write(message);
-            writer.write("\n");
-            writer.flush();
-
-            waitForWindowEquals(clientLocal, serverRemote, "client local", 
"server remote");
-
-            String line = reader.readLine();
-            assertEquals(message, line);
-
-            waitForWindowEquals(clientLocal, serverRemote, "client local", 
"server remote");
-            waitForWindowEquals(clientRemote, serverLocal, "client remote", 
"server local");
+        try(BufferedWriter writer = new BufferedWriter(new 
OutputStreamWriter(inPos));
+            BufferedReader reader = new BufferedReader(new 
InputStreamReader(outPis))) {
+            for (int i = 0; i < nbMessages; i++) {
+                writer.write(message);
+                writer.write("\n");
+                writer.flush();
+    
+                waitForWindowEquals(clientLocal, serverRemote, "client local", 
"server remote");
+    
+                String line = reader.readLine();
+                assertEquals(message, line);
+    
+                waitForWindowEquals(clientLocal, serverRemote, "client local", 
"server remote");
+                waitForWindowEquals(clientRemote, serverLocal, "client 
remote", "server local");
+            }
         }
     }
 
     @Test
     public void testWindowConsumptionWithAsyncStreams() throws Exception {
         sshd.setShellFactory(new AsyncEchoShellFactory());
-        sshd.getProperties().put(SshServer.WINDOW_SIZE, "1024");
-        client.getProperties().put(SshClient.WINDOW_SIZE, "1024");
+        sshd.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
+        client.getProperties().put(FactoryManager.WINDOW_SIZE, "1024");
         client.start();
         ClientSession session = client.connect("smx", "localhost", 
port).await().getSession();
         session.addPasswordIdentity("smx");
@@ -253,12 +257,12 @@ public class WindowTest extends BaseTest {
 
         for (int i = 0; i < nbMessages; i++) {
 
-            Buffer buffer = new Buffer((message + "\n").getBytes());
+            Buffer buffer = new ByteArrayBuffer((message + "\n").getBytes());
             channel.getAsyncIn().write(buffer).verify();
 
             waitForWindowNotEquals(clientLocal, serverRemote, "client local", 
"server remote");
 
-            Buffer buf = new Buffer(16);
+            Buffer buf = new ByteArrayBuffer(16);
             IoReadFuture future = channel.getAsyncOut().read(buf);
             future.verify();
             assertEquals(11, buf.available());

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java 
b/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java
index d939ed3..481c117 100644
--- a/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/common/util/BufferTest.java
@@ -18,14 +18,16 @@
  */
 package org.apache.sshd.common.util;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.util.BaseTest;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-
 public class BufferTest extends BaseTest {
 
     @Test
@@ -33,7 +35,7 @@ public class BufferTest extends BaseTest {
         long v = 1234567890123456789L;
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         new DataOutputStream(stream).writeLong(v);
-        Buffer buffer = new Buffer(stream.toByteArray());
+        Buffer buffer = new ByteArrayBuffer(stream.toByteArray());
         assertEquals(v, buffer.getLong());
     }
 }

Reply via email to