diff --git a/NetSNMP.cabal b/NetSNMP.cabal
--- a/NetSNMP.cabal
+++ b/NetSNMP.cabal
@@ -1,5 +1,5 @@
 name:                 NetSNMP
-version:              0.3.2.2
+version:              0.3.2.3
 synopsis:             Bindings for net-snmp's C API for clients
 description:          Network.Protocol.NetSNMP is a partial binding to the
                       library portion of the net-snmp package.  It uses the
diff --git a/src/Network/Protocol/NetSNMP.hsc b/src/Network/Protocol/NetSNMP.hsc
--- a/src/Network/Protocol/NetSNMP.hsc
+++ b/src/Network/Protocol/NetSNMP.hsc
@@ -367,14 +367,14 @@
 -- * snmpBulkWalk \"localhost\" \"public\" [1,3,6,1,2,1,1]
 --
 -- * snmpBulkWalk \"tcp:localhost:5161\" \"mypassword\" [1,3,6,1,2,1,1]
-snmpBulkWalk 
+snmpBulkWalk
   :: Hostname    -- ^IP or hostname of the agent to be queried.  May have
                  --     prefix of @tcp:@ or suffix of @:port@
   -> Community   -- ^SNMP community (password)
   -> RawOID         -- ^OID to be queried
   -> IO (Either String [SnmpResult])
 snmpBulkWalk hostname community walkoid = snmpBulkWalkN hostname community walkoid 30
-   
+
 snmpBulkWalkN
   :: Hostname    -- ^IP or hostname of the agent to be queried.  May have
                  --     prefix of @tcp:@ or suffix of @:port@
@@ -393,12 +393,15 @@
   where
     bulkWalk :: RawOID -> RawOID -> Session -> Trouble [SnmpResult]
     bulkWalk rootoid startoid session = do
-      vals <- filter (\r -> oid r `isSubIdOf` rootoid) <$> mkSnmpBulkGet 0 maxReps startoid session
-      case vals of
+      res <- filter (onlySubIds rootoid) <$> mkSnmpBulkGet 0 maxReps startoid session
+      let resOids = map oid res
+      unless (nub(resOids) == resOids)
+        (throwT "OID does not increase. There is a loop somewhere.")
+      case res of
         [] -> return []
-        rs -> (vals ++) <$> bulkWalk rootoid (oid (last rs)) session
-    isSubIdOf :: RawOID -> RawOID -> Bool
-    isSubIdOf oa ob = ob `isPrefixOf` oa
+        rs -> (res ++) <$> bulkWalk rootoid (oid (last rs)) session
+    onlySubIds :: RawOID -> SnmpResult -> Bool
+    onlySubIds rootoid res = rootoid `isPrefixOf` oid res
 
 
 -- getbulk, using session info from a 'data Session' and
