diff --git a/lib/netstd/Thrift/Transport/Server/TServerSocketTransport.cs b/lib/netstd/Thrift/Transport/Server/TServerSocketTransport.cs
index bc06640..4f46f99 100644
--- a/lib/netstd/Thrift/Transport/Server/TServerSocketTransport.cs
+++ b/lib/netstd/Thrift/Transport/Server/TServerSocketTransport.cs
@@ -16,6 +16,7 @@
 // under the License.
 
 using System;
+using System.Diagnostics;
 using System.Net;
 using System.Net.Sockets;
 using System.Threading;
@@ -24,27 +25,25 @@
 
 namespace Thrift.Transport.Server
 {
+
     // ReSharper disable once InconsistentNaming
     public class TServerSocketTransport : TServerTransport
     {
         private readonly int _clientTimeout;
-        private readonly bool _useBufferedSockets;
-        private readonly bool _useFramedTransport;
+        private readonly Buffering _buffering;
         private TcpListener _server;
 
-        public TServerSocketTransport(TcpListener listener, int clientTimeout = 0, bool useBufferedSockets = false, bool useFramedTransport = false)
+        public TServerSocketTransport(TcpListener listener, int clientTimeout = 0, Buffering buffering = Buffering.None)
         {
             _server = listener;
             _clientTimeout = clientTimeout;
-            _useBufferedSockets = useBufferedSockets;
-            _useFramedTransport = useFramedTransport;
+            _buffering = buffering;
         }
 
-        public TServerSocketTransport(int port, int clientTimeout = 0, bool useBufferedSockets = false, bool useFramedTransport = false)
+        public TServerSocketTransport(int port, int clientTimeout = 0, Buffering buffering = Buffering.None)
         {
             _clientTimeout = clientTimeout;
-            _useBufferedSockets = useBufferedSockets;
-            _useFramedTransport = useFramedTransport;
+            _buffering = buffering;
             try
             {
                 // Make server socket
@@ -103,14 +102,19 @@
                         Timeout = _clientTimeout
                     };
 
-                    if (_useBufferedSockets)
+                    switch (_buffering)
                     {
-                        tSocketTransport = new TBufferedTransport(tSocketTransport);
-                    }
+                        case Buffering.BufferedTransport:
+                            tSocketTransport = new TBufferedTransport(tSocketTransport);
+                            break;
 
-                    if (_useFramedTransport)
-                    {
-                        tSocketTransport = new TFramedTransport(tSocketTransport);
+                        case Buffering.FramedTransport:
+                            tSocketTransport = new TFramedTransport(tSocketTransport);
+                            break;
+
+                        default:
+                            Debug.Assert(_buffering == Buffering.None);
+                            break;
                     }
 
                     return tSocketTransport;
diff --git a/lib/netstd/Thrift/Transport/Server/TTlsServerSocketTransport.cs b/lib/netstd/Thrift/Transport/Server/TTlsServerSocketTransport.cs
index 14d7ff2..2025b65 100644
--- a/lib/netstd/Thrift/Transport/Server/TTlsServerSocketTransport.cs
+++ b/lib/netstd/Thrift/Transport/Server/TTlsServerSocketTransport.cs
@@ -16,6 +16,7 @@
 // under the License.
 
 using System;
+using System.Diagnostics;
 using System.Net;
 using System.Net.Security;
 using System.Net.Sockets;
@@ -36,31 +37,17 @@
         private readonly int _port;
         private readonly X509Certificate2 _serverCertificate;
         private readonly SslProtocols _sslProtocols;
-        private readonly bool _useBufferedSockets;
-        private readonly bool _useFramedTransport;
+        private readonly Buffering _buffering;
         private TcpListener _server;
 
         public TTlsServerSocketTransport(int port, X509Certificate2 certificate)
-            : this(port, false, certificate)
+            : this(port, Buffering.None, certificate)
         {
         }
 
         public TTlsServerSocketTransport(
             int port,
-            bool useBufferedSockets,
-            X509Certificate2 certificate,
-            RemoteCertificateValidationCallback clientCertValidator = null,
-            LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
-            SslProtocols sslProtocols = SslProtocols.Tls12) 
-            : this(port, useBufferedSockets, false, certificate,
-                clientCertValidator, localCertificateSelectionCallback, sslProtocols)
-        {
-        }
-        
-        public TTlsServerSocketTransport(
-            int port,
-            bool useBufferedSockets,
-            bool useFramedTransport,
+            Buffering buffering,
             X509Certificate2 certificate,
             RemoteCertificateValidationCallback clientCertValidator = null,
             LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
@@ -74,8 +61,7 @@
 
             _port = port;
             _serverCertificate = certificate;
-            _useBufferedSockets = useBufferedSockets;
-            _useFramedTransport = useFramedTransport;
+            _buffering = buffering;
             _clientCertValidator = clientCertValidator;
             _localCertificateSelectionCallback = localCertificateSelectionCallback;
             _sslProtocols = sslProtocols;
@@ -138,15 +124,20 @@
                 await tTlsSocket.SetupTlsAsync();
 
                 TTransport trans = tTlsSocket;
-                
-                if (_useBufferedSockets)
-                {
-                    trans = new TBufferedTransport(trans);
-                }
 
-                if (_useFramedTransport)
+                switch(_buffering)
                 {
-                    trans = new TFramedTransport(trans);
+                    case Buffering.BufferedTransport:
+                        trans = new TBufferedTransport(trans);
+                        break;
+
+                    case Buffering.FramedTransport:
+                        trans = new TFramedTransport(trans);
+                        break;
+
+                    default:
+                        Debug.Assert(_buffering == Buffering.None);
+                        break;
                 }
                 
                 return trans;
@@ -174,4 +165,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/lib/netstd/Thrift/Transport/TFramedTransport.cs b/lib/netstd/Thrift/Transport/TFramedTransport.cs
index 59963f1..6d0802d 100644
--- a/lib/netstd/Thrift/Transport/TFramedTransport.cs
+++ b/lib/netstd/Thrift/Transport/TFramedTransport.cs
@@ -1,4 +1,4 @@
-﻿// Licensed to the Apache Software Foundation(ASF) under one
+// 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
@@ -22,7 +22,14 @@
 
 namespace Thrift.Transport
 {
-    //TODO: check for correct implementation 
+    // it does not make much sense to use buffered when we already use framed
+    public enum Buffering
+    {
+        None,
+        BufferedTransport,
+        FramedTransport
+    }
+
 
     // ReSharper disable once InconsistentNaming
     public class TFramedTransport : TTransport
@@ -206,4 +213,4 @@
             _isDisposed = true;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/test/netstd/Server/TestServer.cs b/test/netstd/Server/TestServer.cs
index e25e611..8db92dc 100644
--- a/test/netstd/Server/TestServer.cs
+++ b/test/netstd/Server/TestServer.cs
@@ -43,15 +43,6 @@
         Json
     }
 
-    // it does not make much sense to use buffered when we already use framed
-    internal enum LayeredChoice
-    {
-        None,
-        Buffered,
-        Framed
-    }
-
-
     internal enum TransportChoice
     {
         Socket,
@@ -61,7 +52,7 @@
 
     internal class ServerParam
     {
-        internal LayeredChoice layered = LayeredChoice.None;
+        internal Buffering buffering = Buffering.None;
         internal ProtocolChoice protocol = ProtocolChoice.Binary;
         internal TransportChoice transport = TransportChoice.Socket;
         internal int port = 9090;
@@ -84,11 +75,11 @@
                 }
                 else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
                 {
-                    layered = LayeredChoice.Buffered;
+                    buffering = Buffering.BufferedTransport;
                 }
                 else if (args[i] == "-f" || args[i] == "--framed" || args[i] == "--transport=framed")
                 {
-                    layered = LayeredChoice.Framed;
+                    buffering = Buffering.FramedTransport;
                 }
                 else if (args[i] == "--binary" || args[i] == "--protocol=binary")
                 {
@@ -552,8 +543,7 @@
 
                 // Transport
                 TServerTransport trans;
-                var useBuffered = (param.layered == LayeredChoice.Buffered);
-                var useFramed = (param.layered == LayeredChoice.Framed);
+
                 switch (param.transport)
                 {
                     case TransportChoice.NamedPipe:
@@ -570,7 +560,7 @@
                         }
 
                         transFactory = new TTransportFactory(); // framed/buffered is built into socket transports
-                        trans = new TTlsServerSocketTransport( param.port, useBuffered, useFramed, cert,
+                        trans = new TTlsServerSocketTransport( param.port, param.buffering, cert,
                             (sender, certificate, chain, errors) => true, 
                             null, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12);
                         break;
@@ -578,19 +568,19 @@
                     case TransportChoice.Socket:
                     default:  
                         transFactory = new TTransportFactory(); // framed/buffered is built into socket transports
-                        trans = new TServerSocketTransport(param.port, 0, useBuffered, useFramed);
+                        trans = new TServerSocketTransport(param.port, 0, param.buffering);
                         break;
                 }
 
                 // add layered transport, if not already set above
                 if (transFactory == null)
                 {
-                    switch (param.layered)
+                    switch (param.buffering)
                     {
-                        case LayeredChoice.Framed:
+                        case Buffering.FramedTransport:
                             transFactory = new TFramedTransport.Factory();
                             break;
-                        case LayeredChoice.Buffered:
+                        case Buffering.BufferedTransport:
                             transFactory = new TBufferedTransport.Factory();
                             break;
                     }
@@ -627,8 +617,8 @@
                 var where = (! string.IsNullOrEmpty(param.pipe)) ? "on pipe " + param.pipe : "on port " + param.port;
                 Console.WriteLine("Starting the AsyncBaseServer " + where +
                                   " with processor TPrototypeProcessorFactory prototype factory " +
-                                  (param.layered == LayeredChoice.Buffered ? " with buffered transport" : "") +
-                                  (param.layered == LayeredChoice.Framed ? " with framed transport" : "") +
+                                  (param.buffering == Buffering.BufferedTransport ? " with buffered transport" : "") +
+                                  (param.buffering == Buffering.FramedTransport ? " with framed transport" : "") +
                                   (param.transport == TransportChoice.TlsSocket ? " with encryption" : "") +
                                   (param.protocol == ProtocolChoice.Compact ? " with compact protocol" : "") +
                                   (param.protocol == ProtocolChoice.Json ? " with json protocol" : "") +
diff --git a/tutorial/netstd/Server/Program.cs b/tutorial/netstd/Server/Program.cs
index 9a650c5..1d9dd15 100644
--- a/tutorial/netstd/Server/Program.cs
+++ b/tutorial/netstd/Server/Program.cs
@@ -143,13 +143,13 @@
                     serverTransport = new TServerSocketTransport(9090);
                     break;
                 case Transport.TcpBuffered:
-                    serverTransport = new TServerSocketTransport(port: 9090, clientTimeout: 10000, useBufferedSockets: true);
+                    serverTransport = new TServerSocketTransport(port: 9090, clientTimeout: 10000, buffering: Buffering.BufferedTransport);
                     break;
                 case Transport.NamedPipe:
                     serverTransport = new TNamedPipeServerTransport(".test");
                     break;
                 case Transport.TcpTls:
-                    serverTransport = new TTlsServerSocketTransport(9090, false, GetCertificate(), ClientCertValidator, LocalCertificateSelectionCallback);
+                    serverTransport = new TTlsServerSocketTransport(9090, Buffering.None, GetCertificate(), ClientCertValidator, LocalCertificateSelectionCallback);
                     break;
                 case Transport.Framed:
                     serverTransport = new TServerFramedTransport(9090);
