diff --git a/radius.cabal b/radius.cabal
--- a/radius.cabal
+++ b/radius.cabal
@@ -1,5 +1,5 @@
 name:                radius
-version:             0.5.0.0
+version:             0.5.0.1
 synopsis:            Remote Authentication Dial In User Service (RADIUS)
 description:         This module provides types and on the wire de/coding of RADIUS packets as per RFC2865
 homepage:            https://github.com/erickg/radius#readme
diff --git a/src/Network/RADIUS/Encoding.hs b/src/Network/RADIUS/Encoding.hs
--- a/src/Network/RADIUS/Encoding.hs
+++ b/src/Network/RADIUS/Encoding.hs
@@ -13,7 +13,7 @@
 
 -}
 
-module Network.RADIUS.Encoding (radiusHeaderSize, sign) where
+module Network.RADIUS.Encoding where
 
 import Control.Monad               (when)
 import Data.Binary                 (Binary(..), encode)
@@ -82,7 +82,6 @@
   return Packet { getHeader           = header,
                   getPacketAttributes = attributes }
 
--- | Add authenticator field to a RADIUS packet using the specified secret
 sign :: ByteString -> ByteString -> ByteString
 sign packet secret =
     let authenticator = hashMD5 $ packet `append` secret
@@ -90,7 +89,6 @@
         attributes    = B.drop (fromIntegral radiusHeaderSize) packet
     in prologue `append` authenticator `append` attributes
 
--- | Used internally to calculate authenticator field
 hashMD5 :: ByteString -> ByteString
 hashMD5 = B.fromStrict . convert . (hashlazy :: ByteString -> Digest MD5)
 
@@ -135,6 +133,8 @@
     put (LoginLATNodeAttribute str)             = putAttributeStr  35 str
     put (LoginLATGroupAttribute str)            = putAttributeStr  36 str
     put (FramedAppleTalkZoneAttribute str)      = putAttributeStr  39 str
+    put (AcctSessionIdAttribute str)            = putAttributeStr  44 str
+    put (AcctMultiSessionIdAttribute str)       = putAttributeStr  50 str
     put (CHAPChallengeAttribute str)            = putAttributeStr  60 str
     put (LoginLATPortAttribute str)             = putAttributeStr  63 str
     put (ARAPPasswordAttribute str)             = putAttributeStr  70 str
@@ -155,6 +155,16 @@
     put (IdleTimeoutAttribute value)            = putAttribute     28 value
     put (FramedAppleTalkLinkAttribute value)    = putAttribute     37 value
     put (FramedAppleTalkNetworkAttribute value) = putAttribute     38 value
+    put (AcctStatusTypeAttribute value)         = putAttribute     40 value
+    put (AcctDelayTimeAttribute value)          = putAttribute     41 value
+    put (AcctInputOctetsAttribute value)        = putAttribute     42 value
+    put (AcctOutputOctetsAttribute value)       = putAttribute     43 value
+    put (AcctAuthenticAttribute value)          = putAttribute     45 value
+    put (AcctSessionTimeAttribute value)        = putAttribute     46 value
+    put (AcctInputPacketsAttribute value)       = putAttribute     47 value
+    put (AcctOutputPacketsAttribute value)      = putAttribute     48 value
+    put (AcctTerminateCauseAttribute value)     = putAttribute     49 value
+    put (AcctLinkCountAttribute value)          = putAttribute     51 value
     put (PortLimitAttribute value)              = putAttribute     62 value
     put (NASIPAddress value)                    = putAttribute      4 value
     put (NASIPv6Address value)                  = putAttribute     95 value
@@ -240,6 +250,8 @@
 getAttribute  35 = getAttributeStr >>= return . LoginLATNodeAttribute
 getAttribute  36 = getAttributeStr >>= return . LoginLATGroupAttribute
 getAttribute  39 = getAttributeStr >>= return . FramedAppleTalkZoneAttribute
+getAttribute  44 = getAttributeStr >>= return . AcctSessionIdAttribute
+getAttribute  50 = getAttributeStr >>= return . AcctMultiSessionIdAttribute
 getAttribute  60 = getAttributeStr >>= return . CHAPChallengeAttribute
 getAttribute  63 = getAttributeStr >>= return . LoginLATPortAttribute
 getAttribute  70 = getAttributeStr >>= return . ARAPPasswordAttribute
@@ -274,6 +286,16 @@
 getAttribute 98 = getAttributeValue >>= return . LoginIPv6HostAttribute
 getAttribute 15 = getAttributeValue >>= return . LoginServiceAttribute
 getAttribute 29 = getAttributeValue >>= return . TerminationActionAttribute
+getAttribute 40 = getAttributeValue >>= return . AcctStatusTypeAttribute
+getAttribute 41 = getAttributeValue >>= return . AcctDelayTimeAttribute
+getAttribute 42 = getAttributeValue >>= return . AcctInputOctetsAttribute
+getAttribute 43 = getAttributeValue >>= return . AcctOutputOctetsAttribute
+getAttribute 45 = getAttributeValue >>= return . AcctAuthenticAttribute
+getAttribute 46 = getAttributeValue >>= return . AcctSessionTimeAttribute
+getAttribute 47 = getAttributeValue >>= return . AcctInputPacketsAttribute
+getAttribute 48 = getAttributeValue >>= return . AcctOutputPacketsAttribute
+getAttribute 49 = getAttributeValue >>= return . AcctTerminateCauseAttribute
+getAttribute 51 = getAttributeValue >>= return . AcctLinkCountAttribute
 getAttribute 61 = getAttributeValue >>= return . NASPortTypeAttribute
 getAttribute 52 = getAttributeValue >>= return . AccountInputGigawordsAttribute
 getAttribute 53 = getAttributeValue >>= return . AccountOutputGigawordsAttribute
@@ -333,6 +355,18 @@
     get = getEnum
 
 instance Binary TerminationAction where
+    put = putEnum
+    get = getEnum
+
+instance Binary StatusType where
+    put = putEnum
+    get = getEnum
+
+instance Binary Authentic where
+    put = putEnum
+    get = getEnum
+
+instance Binary TerminateCause where
     put = putEnum
     get = getEnum
 
diff --git a/src/Network/RADIUS/Types.hs b/src/Network/RADIUS/Types.hs
--- a/src/Network/RADIUS/Types.hs
+++ b/src/Network/RADIUS/Types.hs
@@ -110,6 +110,18 @@
   | FramedAppleTalkLinkAttribute    { getFramedAppleTalkLinkAttribute    :: Word32            }
   | FramedAppleTalkNetworkAttribute { getFramedAppleTalkNetworkAttribute :: Word32            }
   | FramedAppleTalkZoneAttribute    { getFramedAppleTalkZoneAttribute    :: ByteString        }
+  | AcctStatusTypeAttribute         { getAcctStatusTypeAttribute         :: StatusType        }
+  | AcctDelayTimeAttribute          { getAcctDelayTimeAttribute          :: Word32            }
+  | AcctInputOctetsAttribute        { getAcctInputOctetsAttribute        :: Word32            }
+  | AcctOutputOctetsAttribute       { getAcctOutputOctetsAttribute       :: Word32            }
+  | AcctSessionIdAttribute          { getAcctSessionIdAttribute          :: ByteString        }
+  | AcctAuthenticAttribute          { getAcctAuthenticAttribute          :: Authentic         }
+  | AcctSessionTimeAttribute        { getAcctSessionTimeAttribute        :: Word32            }
+  | AcctInputPacketsAttribute       { getAcctInputPacketsAttribute       :: Word32            }
+  | AcctOutputPacketsAttribute      { getAcctOutputPacketsAttribute      :: Word32            }
+  | AcctTerminateCauseAttribute     { getAcctTerminateCauseAttribute     :: TerminateCause    }
+  | AcctMultiSessionIdAttribute     { getAcctMultiSessionIdAttribute     :: ByteString        }
+  | AcctLinkCountAttribute          { getAcctLinkCountAttribute          :: Word32            }
   | CHAPChallengeAttribute          { getCHAPChallengeAttribute          :: ByteString        }
   | NASPortTypeAttribute            { getNASPortTypeAttribute            :: NASPortType       }
   | PortLimitAttribute              { getPortLimitAttribute              :: Word32            }
@@ -221,6 +233,95 @@
 
 data TerminationAction = DefaultTerminationAction | RADIUSRequestTerminationAction
                        deriving (Show, Eq, Enum, Data)
+
+data StatusType = Start | Stop | InterimUpdate | AccountingOn | AccountingOff | Failed
+  deriving (Show, Eq, Data)
+
+instance Enum StatusType where
+  fromEnum Start         = 1
+  fromEnum Stop          = 2
+  fromEnum InterimUpdate = 3
+  fromEnum AccountingOn  = 7
+  fromEnum AccountingOff = 8
+  fromEnum Failed        = 15
+  toEnum 1  = Start
+  toEnum 2  = Stop
+  toEnum 3  = InterimUpdate
+  toEnum 7  = AccountingOn
+  toEnum 8  = AccountingOff
+  toEnum 15 = Failed
+  toEnum x  = error $ "Invalid Acct-Status-Type attribute " ++ show x
+
+data Authentic = Radius | Local | Remote
+  deriving (Show, Eq, Data)
+
+instance Enum Authentic where
+  fromEnum Radius = 1
+  fromEnum Local  = 2
+  fromEnum Remote = 3
+  toEnum 1 = Radius
+  toEnum 2 = Local
+  toEnum 3 = Remote
+  toEnum x = error $ "Invalid Acc-Authentic attribute " ++ show x
+
+data TerminateCause = UserRequest
+                    | LostCarrier
+                    | LostService
+                    | IdleTimeout
+                    | SessionTimeout
+                    | AdminReset
+                    | AdminReboot
+                    | PortError
+                    | NASError
+                    | NASRequest
+                    | NASReboot
+                    | PortUnneeded
+                    | PortPreempted
+                    | PortSuspended
+                    | ServiceUnavailable
+                    | Callback
+                    | UserError
+                    | HostRequest
+  deriving (Show, Eq, Data)
+
+instance Enum TerminateCause where
+  fromEnum UserRequest        = 1
+  fromEnum LostCarrier        = 2
+  fromEnum LostService        = 3
+  fromEnum IdleTimeout        = 4
+  fromEnum SessionTimeout     = 5
+  fromEnum AdminReset         = 6
+  fromEnum AdminReboot        = 7
+  fromEnum PortError          = 8
+  fromEnum NASError           = 9
+  fromEnum NASRequest         = 10
+  fromEnum NASReboot          = 11
+  fromEnum PortUnneeded       = 12
+  fromEnum PortPreempted      = 13
+  fromEnum PortSuspended      = 14
+  fromEnum ServiceUnavailable = 15
+  fromEnum Callback           = 16
+  fromEnum UserError          = 17
+  fromEnum HostRequest        = 18
+  toEnum 1  = UserRequest
+  toEnum 2  = LostCarrier
+  toEnum 3  = LostService
+  toEnum 4  = IdleTimeout
+  toEnum 5  = SessionTimeout
+  toEnum 6  = AdminReset
+  toEnum 7  = AdminReboot
+  toEnum 8  = PortError
+  toEnum 9  = NASError
+  toEnum 10 = NASRequest
+  toEnum 11 = NASReboot
+  toEnum 12 = PortUnneeded
+  toEnum 13 = PortPreempted
+  toEnum 14 = PortSuspended
+  toEnum 15 = ServiceUnavailable
+  toEnum 16 = Callback
+  toEnum 17 = UserError
+  toEnum 18 = HostRequest
+  toEnum x  = error $ "Invalid Acct-Terminate-Cause attribute " ++ show x
 
 data NASPortType = AsyncNASPort
                  | SyncNASPort
