diff --git a/snmp.cabal b/snmp.cabal
--- a/snmp.cabal
+++ b/snmp.cabal
@@ -1,5 +1,5 @@
 name:                snmp
-version:             0.2.0.0
+version:             0.2.0.1
 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
@@ -35,7 +35,7 @@
 data ST = ST
   { authCache' :: IORef (Maybe ByteString)
   , privCache' :: IORef (Maybe ByteString)
-  , engine' :: IORef (Maybe (ByteString, Int32, Int32))
+  , engine' :: IORef (Maybe (ByteString, ContextEngineID, Int32, Int32))
   , ref' :: IORef Int32
   , salt32 :: IORef Int32
   , salt64 :: IORef Int64
@@ -71,7 +71,7 @@
       }
 
 
-init' :: ST -> IO (ByteString, Int32, Int32)
+init' :: ST -> IO (ByteString, ContextEngineID, Int32, Int32)
 init' st = withSocketsDo $ do
     rid <- predCounter (ref' st)
     sendAll (socket' st) $ encode $ packet' rid
@@ -79,8 +79,9 @@
     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)
+             let pdu = (getPDU resp :: PDU V3)
+             atomicWriteIORef (engine' st) $ Just (getEngineIdP resp, getContextEngineID pdu, getEngineBootsP resp, getEngineTimeP resp) 
+             return (getEngineIdP resp, getContextEngineID pdu, getEngineBootsP resp, getEngineTimeP resp)
     where
       packet' x = ( setIDP (ID x)
                   . setMaxSizeP (MaxSize 1500)
@@ -163,7 +164,7 @@
 packet st suite r = do
     rid <- predCounter (ref' st)
     eid' <- readIORef (engine' st)
-    (eid, boots, time) <- case eid' of
+    (eid, ceid, boots, time) <- case eid' of
                                 Just x -> return x
                                 Nothing -> init' st
     let wrapBulk (GetBulk rid' x _) = GetBulk rid' x 10
@@ -172,6 +173,7 @@
                . (setPrivAuthP (securityLevel' st)) 
                . (setUserNameP (login' st))  
                . (setEngineIdP eid)
+               . (setContextEngineIDPacket ceid)
                . (setEngineBootsP boots)
                . (setEngineTimeP time)
                . (setAuthenticationParametersP cleanPass)  
@@ -180,6 +182,12 @@
                . (setSuite  suite)
                ) v3
     return full
+
+setContextEngineIDPacket :: ContextEngineID -> Packet -> Packet
+setContextEngineIDPacket ceid packet =
+    let pdu = (getPDU packet :: PDU V3)
+        newpdu = setContextEngineID ceid pdu
+    in setPDU newpdu packet
 
 
 sendPacket :: ST -> Packet -> IO ()
