diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+1.0.0.10
+--------
+* Add `forbidden_IPs` field in `config.json`
+* Use 
+  [Reserved IP addresses](https://en.wikipedia.org/wiki/Reserved_IP_addresses)
+  as the default value for `forbidden_IPs`
+* Add `show-default-config` to options
+
 1.0.0.1
 -------
 * Default to no buffer, rely on buffer in the kernel. Add force Explicit
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -110,10 +110,11 @@
 
 ## Force ECN
 
-On Linux 3.7+ (as root)
+On Linux 2.4.20+ (as root)
 
     echo 1 > /proc/sys/net/ipv4/tcp_ecn
 
+ECN is recommended on both `local` and `remote`.
 
 Credits
 =======
diff --git a/moesocks.cabal b/moesocks.cabal
--- a/moesocks.cabal
+++ b/moesocks.cabal
@@ -1,6 +1,6 @@
 name:               moesocks
 category:           Network
-version:            1.0.0.1
+version:            1.0.0.10
 license:            Apache-2.0
 synopsis:           A functional firewall killer
 description:        A SOCKS5 proxy using the client / server architecture.
diff --git a/src/Network/MoeSocks/Bootstrap.hs b/src/Network/MoeSocks/Bootstrap.hs
--- a/src/Network/MoeSocks/Bootstrap.hs
+++ b/src/Network/MoeSocks/Bootstrap.hs
@@ -23,12 +23,24 @@
 import qualified Network.MoeSocks.Type.Bootstrap.Config as C
 import qualified Network.MoeSocks.Type.Bootstrap.Option as O
 
+
+asList :: ([(Text, Value)] -> [(Text, Value)]) -> Value -> Value
+asList f = over _Object - H.fromList . f . H.toList
+
+toReadableConfig :: Value -> Value
+toReadableConfig = asList - each . _1 %~ T.tail
+
+showConfig :: C.Config -> Text
+showConfig =  review _JSON
+              . toReadableConfig
+              . review _JSON
+
 withGateOptions :: O.Options -> IO a -> IO ()
 withGateOptions someOptions aIO = do
+  let _br = putStrLn ""
+
   if someOptions ^. O.listMethods
     then do
-      let _br = putStrLn ""
-
       _br
       putStrLn "Recommended:"
       itraverse_ (\k _ -> putStrLn - "\t\t" <> k ^. _Text) - safeMethods
@@ -37,8 +49,12 @@
       putStrLn "Supported:"
       itraverse_ (\k _ -> putStrLn - "\t\t" <> k ^. _Text) - unsafeMethods
 
-    else
-      () <$ aIO
+    else 
+      if someOptions ^. O.showDefaultConfig
+        then
+          putStrLn - showConfig defaultConfig ^. _Text
+        else
+          () <$ aIO
 
 loadConfig :: O.Options -> ExceptT String IO C.Config
 loadConfig someOptions = do
@@ -51,9 +67,6 @@
 
   let
 
-      asList :: ([(Text, Value)] -> [(Text, Value)]) -> Value -> Value
-      asList f = over _Object - H.fromList . f . H.toList
-
       fixConfig:: Text -> Text
       fixConfig x =
         let _remoteHost = "remoteHost"
@@ -84,14 +97,6 @@
                                                 . fixConfig
                                                 )
 
-      toReadableConfig :: Value -> Value
-      toReadableConfig = asList - each . _1 %~ T.tail
-
-      showConfig :: C.Config -> Text
-      showConfig =  review _JSON
-                    . toReadableConfig
-                    . review _JSON
-
       filterEssentialConfig :: Value -> Value
       filterEssentialConfig = over _Object - \_obj ->
                                 foldl (flip H.delete) _obj -
@@ -111,7 +116,7 @@
 
       optionalConfig = filterEssentialConfig - toJSON defaultConfig
 
-      _maybeConfig = -- trace ("JSON: " <> show _v)
+      _maybeConfig =  -- trace' "JSON: "
                       _v
                       >>= decode
                           . encode
diff --git a/src/Network/MoeSocks/Default.hs b/src/Network/MoeSocks/Default.hs
--- a/src/Network/MoeSocks/Default.hs
+++ b/src/Network/MoeSocks/Default.hs
@@ -3,9 +3,14 @@
 module Network.MoeSocks.Default where
 
 import Control.Lens
+import Control.Monad.Writer
+import Data.IP
+import Data.Text (Text)
+import Data.Text.Lens
 import Network.MoeSocks.Encrypt (constCipherBox)
 import Network.MoeSocks.Type
 import System.Log.Logger
+import qualified Data.Text as T
 import qualified Network.MoeSocks.Type.Bootstrap.Config as C
 import qualified Network.MoeSocks.Type.Bootstrap.Option as O
 
@@ -25,9 +30,47 @@
   , C._obfuscationFlushBound = 4096
   , C._fastOpen = False
   , C._socketOption_TCP_NOTSENT_LOWAT = True
+  , C._forbidden_IPs = _reserved_IP_Addresses
   }
 
+  where
+    _reserved_IP_Addresses :: [Text]
+    _reserved_IP_Addresses = execWriter $ do
+      let ip = tell . pure
 
+      -- https://en.wikipedia.org/wiki/Reserved_IP_addresses
+      ip "0.0.0.0/8"
+      ip "10.0.0.0/8"
+      ip "100.64.0.0/10"
+      ip "127.0.0.0/8"
+      ip "169.254.0.0/16"
+      ip "172.16.0.0/12"
+      ip "192.0.0.0/24"
+      ip "192.0.2.0/24"
+      ip "192.88.99.0/24"
+      ip "192.168.0.0/16"
+      ip "198.18.0.0/15"
+      ip "198.51.100.0/24"
+      ip "203.0.113.0/24"
+      ip "224.0.0.0/4"
+      ip "240.0.0.0/4"
+      ip "255.255.255.255/32"
+
+      ip "::/128"
+      ip "::1/128"
+      ip "::ffff:0:0/96"
+      ip "100::/64"
+      ip "64:ff9b::/96"
+      ip "2001::/32"
+      ip "2001:10::/28"
+      ip "2001:20::/28"
+      ip "2001:db8::/32"
+      ip "2002::/16"
+      ip "fc00::/7"
+      ip "fe80::/10"
+      ip "ff00::/8"
+
+
 defaultOptions :: O.Options
 defaultOptions = O.Options
   {
@@ -38,11 +81,19 @@
   , O._forward_UDPs = []
   , O._disable_SOCKS5 = False
   , O._obfuscation = False
-  , O._forbidden_IPs = ["127.0.0.1", "0.0.0.0", "::1"]
   , O._listMethods = False
+  , O._showDefaultConfig = False
   , O._params = []
   } 
 
+parseForbidden_IPs :: [Text] -> [IPRange]
+parseForbidden_IPs =
+                    toListOf $ each
+                              . to T.strip
+                              . _Text
+                              . _Show
+                     
+
 defaultEnv :: Env
 defaultEnv =
   let _c = defaultConfig
@@ -58,7 +109,8 @@
     , _fastOpen                       = _c ^. C.fastOpen
     , _socketOption_TCP_NOTSENT_LOWAT = _c ^. C.socketOption_TCP_NOTSENT_LOWAT
     , _obfuscation                    = _o ^. O.obfuscation
-    , _forbidden_IPs                  = _o ^. O.forbidden_IPs
+    , _forbidden_IPs                  = _c ^. C.forbidden_IPs 
+                                            & parseForbidden_IPs
     {-, _config = defaultConfig-}
     , _cipherBox = let (a,b,c,d) = constCipherBox in CipherBox a b c d
   }
diff --git a/src/Network/MoeSocks/Helper.hs b/src/Network/MoeSocks/Helper.hs
--- a/src/Network/MoeSocks/Helper.hs
+++ b/src/Network/MoeSocks/Helper.hs
@@ -460,7 +460,7 @@
 toHaskellNamingConvention x = 
   let xs = x & T.split (`elem` ['_', '-'])
   in
-  if xs & anyOf each (T.all isUpper)
+  if xs & anyOf each (T.all isUpper . T.dropWhile (== 's') . T.reverse)
     then x
     else xs
             & over (_tail . traversed) T.toTitle
diff --git a/src/Network/MoeSocks/Options.hs b/src/Network/MoeSocks/Options.hs
--- a/src/Network/MoeSocks/Options.hs
+++ b/src/Network/MoeSocks/Options.hs
@@ -4,7 +4,6 @@
 
 import Control.Lens
 import Data.Aeson
-import Data.IP
 import Data.Maybe
 import Data.Text (Text)
 import Data.Text.Lens
@@ -12,11 +11,11 @@
 import Network.MoeSocks.Helper
 import Network.MoeSocks.Type.Bootstrap.Option
 import Network.MoeSocks.Type.Common
-import qualified Network.MoeSocks.Type.Bootstrap.Config as C
 import Options.Applicative hiding (Parser)
 import Prelude hiding ((-), takeWhile)
 import System.Log.Logger
 import qualified Data.Text as T
+import qualified Network.MoeSocks.Type.Bootstrap.Config as C
 import qualified Options.Applicative as O
 import Data.Attoparsec.Text (Parser, takeWhile, char, decimal, skipSpace,
                               parseOnly, many', choice)
@@ -30,6 +29,14 @@
 textParam :: O.Mod O.OptionFields String -> O.Parser (Maybe Value)
 textParam = optional . fmap toJSON . textOption
 
+commaSeperatedArrayParam :: O.Mod O.OptionFields String 
+                          -> O.Parser (Maybe Value)
+commaSeperatedArrayParam = 
+  optional . fmap toJSON . fmap (filter (isn't _Empty)
+                                    . map T.strip 
+                                    . T.splitOn ",") 
+                          . textOption
+
 intParam :: O.Mod O.OptionFields Int -> O.Parser (Maybe Value)
 intParam = optional . fmap toJSON . option auto
 
@@ -69,6 +76,11 @@
                       long "list-methods"
                   <>  help "Show supported encryption methods"
 
+      _showDefaultConfig :: O.Parser Bool
+      _showDefaultConfig = switch -
+                      long "show-default-config"
+                  <>  help "Show default json configuration"
+      
       _tcpBufferSize = intParam -
                               long "tcp-buffer-size"
                           <>  metavar "SIZE"
@@ -209,28 +221,16 @@
           & parseOnly forwardListParser
           & toListOf (traverse . traverse)
 
-      _forbidden_IPs :: O.Parser (Maybe Text)
-      _forbidden_IPs = optional - textOption -
+      _forbidden_IPs = commaSeperatedArrayParam -
                           long "forbidden-ip"
                       <>  metavar "IPLIST"
-                      <>  defaultHelp (defaultOptions ^. forbidden_IPs
-                                        & map show
-                                        & map (review _Text)
+                      <>  defaultHelp (defaultConfig ^. C.forbidden_IPs
                                         & T.intercalate ", ")
                                 (""
                                 <> "comma seperated IP list forbidden to "
                                 <> "connect"
                                 )
 
-      parseForbidden_IP :: Maybe Text -> [IPRange]
-      parseForbidden_IP = maybe (defaultOptions ^. forbidden_IPs) -
-                                (toListOf - each
-                                          . to T.strip
-                                          . _Text
-                                          . _Show
-                                ) . T.splitOn ","
-
-
       tag :: a -> O.Parser (Maybe b) -> O.Parser (Maybe (a, b))
       tag x = fmap . fmap - ((,) x)
 
@@ -246,6 +246,7 @@
         , tag "_timeout"        _timeout
         , tag "_tcpBufferSize"  _tcpBufferSize
         , tag "_fastOpen"       _fastOpen
+        , tag "_forbidden_IPs"  _forbidden_IPs
         ]
         & sequenceA
         & fmap catMaybes
@@ -261,8 +262,8 @@
               <*> fmap parseForwarding _forwardUDP
               <*> _disable_SOCKS5
               <*> _obfuscation
-              <*> fmap parseForbidden_IP _forbidden_IPs
               <*> _listMethods
+              <*> _showDefaultConfig
               <*> _params
 
 opts :: ParserInfo Options
diff --git a/src/Network/MoeSocks/Runtime.hs b/src/Network/MoeSocks/Runtime.hs
--- a/src/Network/MoeSocks/Runtime.hs
+++ b/src/Network/MoeSocks/Runtime.hs
@@ -126,7 +126,10 @@
         & fastOpen                       .~ _c ^. C.fastOpen
         & socketOption_TCP_NOTSENT_LOWAT .~ _s
         & obfuscation                    .~ _o ^. O.obfuscation
-        & forbidden_IPs                  .~ _o ^. O.forbidden_IPs
+        & forbidden_IPs                  .~ (_c ^. C.forbidden_IPs
+                                                & parseForbidden_IPs)
+                                            
+                                        
   
   let _jobs = loadJobs _c _o & filterJobs (_o ^. O.runningMode)
 
diff --git a/src/Network/MoeSocks/Type/Bootstrap/Config.hs b/src/Network/MoeSocks/Type/Bootstrap/Config.hs
--- a/src/Network/MoeSocks/Type/Bootstrap/Config.hs
+++ b/src/Network/MoeSocks/Type/Bootstrap/Config.hs
@@ -23,6 +23,7 @@
   , _obfuscationFlushBound :: Int -- should be greater then MTU
   , _fastOpen :: Bool
   , _socketOption_TCP_NOTSENT_LOWAT :: Bool
+  , _forbidden_IPs :: [Text]
   }
   deriving (Show, Eq, Generic)
 
diff --git a/src/Network/MoeSocks/Type/Bootstrap/Option.hs b/src/Network/MoeSocks/Type/Bootstrap/Option.hs
--- a/src/Network/MoeSocks/Type/Bootstrap/Option.hs
+++ b/src/Network/MoeSocks/Type/Bootstrap/Option.hs
@@ -6,9 +6,8 @@
 import Control.Lens
 import Data.Aeson
 import Data.Text (Text)
-import Data.IP
-import System.Log.Logger
 import Network.MoeSocks.Type.Common
+import System.Log.Logger
 
 data RunningMode = RemoteMode | LocalMode | DebugMode
       deriving (Show, Eq)
@@ -22,8 +21,8 @@
   , _forward_UDPs :: [Forward]
   , _disable_SOCKS5 :: Bool
   , _obfuscation :: Bool
-  , _forbidden_IPs :: [IPRange]
   , _listMethods :: Bool
+  , _showDefaultConfig :: Bool
   , _params :: [(Text, Value)]
   }
   deriving (Show, Eq)
diff --git a/src/Network/MoeSocks/Type/Runtime.hs b/src/Network/MoeSocks/Type/Runtime.hs
--- a/src/Network/MoeSocks/Type/Runtime.hs
+++ b/src/Network/MoeSocks/Type/Runtime.hs
@@ -131,7 +131,6 @@
   , _socketOption_TCP_NOTSENT_LOWAT :: Bool
   , _obfuscation :: Bool
   , _forbidden_IPs :: [IPRange]
-
   , _cipherBox :: CipherBox
   }
 
