diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp
index 0cd8d7df14391447c724303924d0436fffaa402c..5c809d44a907b3e988c969aeee8414477de016ba 100644
--- a/chaos/common/data/CDataWrapper.cpp
+++ b/chaos/common/data/CDataWrapper.cpp
@@ -811,7 +811,13 @@ CDBufferUniquePtr CDataWrapper::getBinaryValueAsCDataBuffer(const std::string& k
 
 // check if the key is present in data wrapper
 bool CDataWrapper::hasKey(const std::string& key) const {
-  return bson_has_field(ACCESS_BSON(bson), key.c_str());
+   bson_iter_t iter;
+   bson_iter_t child;
+
+   BSON_ASSERT (bson);
+   if(key.size()==0) return false;
+  return (bson_iter_init (&iter, ACCESS_BSON(bson)) && bson_iter_find_descendant (&iter, key.c_str(), &child));
+   
 }
 
 bool CDataWrapper::isVector(const std::string& key) const {