diff --git a/snmp.cabal b/snmp.cabal
--- a/snmp.cabal
+++ b/snmp.cabal
@@ -1,5 +1,5 @@
 name:                snmp
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            API for write snmp client.
 description:         API for write snmp client.        
 license:             BSD3
diff --git a/src/Network/Snmp/Client/Version3.hs b/src/Network/Snmp/Client/Version3.hs
--- a/src/Network/Snmp/Client/Version3.hs
+++ b/src/Network/Snmp/Client/Version3.hs
@@ -73,9 +73,12 @@
 init' st = withSocketsDo $ do
     rid <- predCounter (ref' st)
     sendAll (socket' st) $ encode $ packet' rid
-    resp <- decode <$> recv (socket' st) 1500 :: IO Packet
-    atomicWriteIORef (engine' st) $ Just (getEngineIdP resp, getEngineBootsP resp, getEngineTimeP resp) 
-    return (getEngineIdP resp, getEngineBootsP resp, getEngineTimeP resp)
+    result <- race (threadDelay (timeout' st)) (decode <$> recv (socket' st) 1500 :: IO Packet)
+    case result of
+         Left _ -> throwIO TimeoutException
+         Right resp -> do
+            atomicWriteIORef (engine' st) $ Just (getEngineIdP resp, getEngineBootsP resp, getEngineTimeP resp) 
+            return (getEngineIdP resp, getEngineBootsP resp, getEngineTimeP resp)
     where
       packet' x = ( setIDP (ID x)
                   . setMaxSizeP (MaxSize 1500)
diff --git a/src/Network/Snmp/Example.hs b/src/Network/Snmp/Example.hs
--- a/src/Network/Snmp/Example.hs
+++ b/src/Network/Snmp/Example.hs
@@ -52,6 +52,22 @@
 >                            } 
 > 
 -}
+conf2 :: Config
+conf2 = (initial Version2) { hostname = "salt" 
+                           , community = Community "helloall"
+                           } 
+
+-- For SNMPv3
+conf3 :: Config
+conf3 = (initial Version3) { hostname = "salt" 
+                           , sequrityName = "aes"
+                           , authPass = "helloallhello"
+                           , privPass = "helloallhello"
+                           , authType = SHA
+                           , privType = AES
+                           , sequrityLevel = AuthPriv
+                           } 
+
 {- $send
 > -- do io 
 > client3 :: IO ()
@@ -65,7 +81,16 @@
 >                   requests
 > 
 -}
+client3 :: IO ()
+client3 = bracket (client conf3)
+                  close
+                  requests
 
+client2 :: IO ()
+client2 = bracket (client conf2)
+                  close
+                  requests
+
 {- $oids
 > -- Describe oids which you need
 > root, eth0, tabl, ipAddr, zeroDotZero :: [Integer]
@@ -83,7 +108,21 @@
 > bad = "1.4.6.1.2.1.1.4"
 > testOid = "1.3.6.1.2.1.25.1.1.0"
 -}
+root, eth0, tabl, ipAddr, zeroDotZero :: [Integer]
+root = [1,3,6,1,2,1,2,2,1,2]
+eth0 = [1,3,6,1,2,1,2,2,1,2,1]
+tabl = [31,1,1,1,1]
+ipAddr = [1,3,6,1,2,1,4,22,1,3,3,192,168,3,1]
+zeroDotZero = [1,3,6,1,2,1,2,2,1,22,20]
 
+oi, sysUptime, memory, sysContact, bad, testOid :: ByteString
+oi = ".1.3.6.1.2.1.1.9.1.2.1"
+sysUptime = "1.3.6.1.2.1.25.1.1.0"
+memory = "1.3.6.1.2.1.25.2"
+sysContact = "1.3.6.1.2.1.1.4.0"
+bad = "1.4.6.1.2.1.1.4"
+testOid = "1.3.6.1.2.1.25.1.1.0"
+
 {- $request
 > -- Describe requests
 > requests :: Client -> IO ()
@@ -107,3 +146,24 @@
 >     print "get sysContact"
 >     putStr . show =<< get snmp [oidFromBS sysContact]
 -}
+requests :: Client -> IO ()
+requests snmp = do
+    print "get request"
+    putStr . show =<< get snmp [oidFromBS testOid]
+    putStr . show =<< get snmp [oidFromBS testOid]
+    putStr . show =<< get snmp [oidFromBS sysUptime, oidFromBS oi, zeroDotZero]
+    print "bulkget request"
+    putStr . show =<< bulkget snmp [oidFromBS sysUptime]
+    print "getnext request"
+    putStr . show =<< getnext snmp [oidFromBS sysUptime]
+    print "walk memory"
+    putStr . show =<< walk snmp [oidFromBS memory]
+    print "bulkwalk memory"
+    putStr . show =<< bulkwalk snmp [oidFromBS memory]
+    print "get sysContact"
+    putStr . show =<< get snmp [oidFromBS sysContact]
+    print "set sysContact"
+    putStr . show =<< (try $ set snmp (Suite [Coupla (oidFromBS sysContact) (String "hello all")]) :: IO (Either ClientException Suite))
+    print "get sysContact"
+    putStr . show =<< get snmp [oidFromBS sysContact]
+
