diff --git a/ChaosMetadataService/object_storage/influxDB/InfluxDB.cpp b/ChaosMetadataService/object_storage/influxDB/InfluxDB.cpp
index 9967b6ecf4152e19ee7f9a041c6737c0c6eec9df..4b1b5bc9e4754642bed1823659d95a18936ee2a3 100644
--- a/ChaosMetadataService/object_storage/influxDB/InfluxDB.cpp
+++ b/ChaosMetadataService/object_storage/influxDB/InfluxDB.cpp
@@ -138,6 +138,8 @@ int InfluxDB::pushObject(const std::string&                       key,
           break;
         case DataType::TYPE_INT32:
         case DataType::TYPE_INT64:
+        case DataType::TYPE_UINT64:
+
                   measurements << c << *i << "=" << stored_object.getStringValue(*i)<<'i';
                         nmeas++;
           first++;
diff --git a/TestFramework/data/TestCDataWrapper.cpp b/TestFramework/data/TestCDataWrapper.cpp
index 48e6450fe26b3d7521e095afad0ae7ff5cc4379f..08a5a58501270929e32e7566cb20ba820e3774a5 100644
--- a/TestFramework/data/TestCDataWrapper.cpp
+++ b/TestFramework/data/TestCDataWrapper.cpp
@@ -322,8 +322,8 @@ TEST(CDataWrapperTest, VectorDouble) {
 TEST(CDataWrapperTest, U64) {
 
     CDataWrapper data;
-    data.append("U64max",numeric_limits<uint64_t>::max());
-    data.append("U64min",numeric_limits<uint64_t>::min());
+    data.addUInt64Value("U64max",numeric_limits<uint64_t>::max());
+    data.addUInt64Value("U64min",numeric_limits<uint64_t>::min());
 
     uint64_t max=data.getUInt64Value("U64max");    
     uint64_t min=data.getUInt64Value("U64min");    
diff --git a/chaos/common/data/CDataVariant.cpp b/chaos/common/data/CDataVariant.cpp
index 5c85ebbae8785f31a6aaddced6a2be669c062f88..0deb772b9bacf834f90acceb1dae69b25cba8ae9 100644
--- a/chaos/common/data/CDataVariant.cpp
+++ b/chaos/common/data/CDataVariant.cpp
@@ -159,7 +159,7 @@ type(DataType::TYPE_INT64),
 _internal_variant(int64_value) { }
 
 CDataVariant::CDataVariant(uint64_t int64_value):
-type(DataType::TYPE_INT64),
+type(DataType::TYPE_UINT64),
 _internal_variant(int64_value) { }
 
 CDataVariant::CDataVariant(double double_value):
@@ -224,6 +224,10 @@ type(_type){
             _internal_variant = *static_cast<const int64_t*>(_value_pointer);
             break;
         }
+        case DataType::TYPE_UINT64:{
+            _internal_variant = *static_cast<const uint64_t*>(_value_pointer);
+            break;
+        }
         case DataType::TYPE_DOUBLE:{
             _internal_variant = *static_cast<const double*>(_value_pointer);
             break;
diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp
index bb0ff470875b66287a2b3e5bbeaaa746c41581b8..f1dddbdd4f81a177fa70260e3d3065f63de5f994 100644
--- a/chaos/common/data/CDataWrapper.cpp
+++ b/chaos/common/data/CDataWrapper.cpp
@@ -229,7 +229,7 @@ void CDataWrapper::appendInt64ToArray(int64_t value) {
 }
 
 //append a strin gto an open array
-void CDataWrapper::appendInt64ToArray(uint64_t value) {
+void CDataWrapper::appendUInt64ToArray(uint64_t value) {
     ENSURE_ARRAY(bson_tmp_array);
     bson_append_timestamp(ACCESS_BSON(bson_tmp_array),
                       ChaosToString(array_index++).c_str(),
@@ -538,9 +538,6 @@ void CDataWrapper::append(const std::string& key,int32_t val){
 void CDataWrapper::append(const std::string& key,int64_t val){
     addInt64Value(key, val);
 }
-void CDataWrapper::append(const std::string& key,uint64_t val){
-    addUInt64Value(key, val);
-}
 
 void CDataWrapper::append(const std::string& key,double val){
     addDoubleValue(key, val);
@@ -1337,13 +1334,13 @@ int CDataWrapper::setAsString(const std::string& key,const std::string& sval){
             setBson(&it,tmp);
         }
         break;
-        case BSON_TYPE_TIMESTAMP:{
+       /* case BSON_TYPE_TIMESTAMP:{
             CDataVariant val(sval);
 
             uint64_t tmp=val.asUInt64();
             setBson(&it,tmp);
         }
-        break;
+        break;*/
          case BSON_TYPE_DOUBLE:{
             CDataVariant val(sval);
 
@@ -1392,15 +1389,6 @@ int CDataWrapper::setBson( const bson_iter_t *v ,const int64_t& val){
     return -1;
 }
 
-int CDataWrapper::setBson( const bson_iter_t *v ,const uint64_t& val){
-    if(ITER_TYPE(v)==BSON_TYPE_TIMESTAMP){
-        
-        memcpy((void*)(v->raw + v->d1), (void*)&val,sizeof(uint64_t));
-        return sizeof(int64_t);
-    }
-    return -1;
-}
-
 int CDataWrapper::setBson(const bson_iter_t *v ,const int32_t& val){
     if(ITER_TYPE(v)==BSON_TYPE_INT32){
         memcpy((void*)(v->raw + v->d1),(void*)&val ,sizeof(int32_t));
diff --git a/chaos/common/data/CDataWrapper.h b/chaos/common/data/CDataWrapper.h
index e892abaa7ba7a27d05012ac11b90c617222a3853..766c9e228f8995ee1b8b790cfc46d004ca795a66 100644
--- a/chaos/common/data/CDataWrapper.h
+++ b/chaos/common/data/CDataWrapper.h
@@ -90,7 +90,7 @@ namespace chaos {
                 int array_index;
                 ChaosBsonShrdPtr bson_tmp_array;
                 explicit CDataWrapper(const std::string& json_document);
-                int setBson(const bson_iter_t * ,const uint64_t& val);
+               // int setBson(const bson_iter_t * ,const uint64_t& val);
                 int setBson(const bson_iter_t * ,const int64_t& val);
                 int setBson(const bson_iter_t *v ,const int32_t& val);
                 int setBson(const bson_iter_t * ,const double& val);
@@ -145,7 +145,7 @@ namespace chaos {
                 void appendStringToArray(const string &value);
                 void appendInt32ToArray(int32_t value);
                 void appendInt64ToArray(int64_t value);
-                void appendInt64ToArray(uint64_t value);
+                void appendUInt64ToArray(uint64_t value);
 
                 void appendDoubleToArray(double value);
                 void appendBooleanToArray(bool value);
@@ -163,7 +163,6 @@ namespace chaos {
                 void addInt32Value(const std::string&, int32_t);
                 void append(const std::string& key,int32_t val);
                 void append(const std::string& key,int64_t val);
-                void append(const std::string& key,uint64_t val);
 
                 void append(const std::string& key,double val);
                 void append(const std::string& key,bool val);
diff --git a/chaos/common/data/CUSchemaDB.cpp b/chaos/common/data/CUSchemaDB.cpp
index cc39d9dd14387a35b29a4f712c56562031b57e9d..1469c0e32a8a19e98379160783ab364c4643759a 100644
--- a/chaos/common/data/CUSchemaDB.cpp
+++ b/chaos/common/data/CUSchemaDB.cpp
@@ -250,6 +250,8 @@ void CUSchemaDB::addAttributeToDataSet(const std::string& node_uid,
             typeMaxDimension = sizeof(int32_t);
             break;
         case DataType::TYPE_INT64:
+        case DataType::TYPE_UINT64:
+
             typeMaxDimension = sizeof(int64_t);
             break;
         case DataType::TYPE_CLUSTER:
diff --git a/chaos/common/data/cache/AttributeCache.cpp b/chaos/common/data/cache/AttributeCache.cpp
index 2375a41bd9928c0a5698ba5243b85c80bbdecb4d..0fc708b47c5f9784b59077aae4fa26a7e3e6c02e 100644
--- a/chaos/common/data/cache/AttributeCache.cpp
+++ b/chaos/common/data/cache/AttributeCache.cpp
@@ -70,6 +70,8 @@ void AttributeCache::addAttribute(const string& name,
             size = sizeof(int32_t);
             break;
         case chaos::DataType::TYPE_INT64:
+        case chaos::DataType::TYPE_UINT64:
+
             size = sizeof(int64_t);
             break;
             
@@ -110,6 +112,8 @@ void AttributeCache::addAttribute(const std::string& name,
             size = sizeof(int32_t);
             break;
         case chaos::DataType::TYPE_INT64:
+        case chaos::DataType::TYPE_UINT64:
+
             size = sizeof(int64_t);
             break;
         case chaos::DataType::TYPE_STRING:
diff --git a/chaos/common/data/cache/AttributeValue.cpp b/chaos/common/data/cache/AttributeValue.cpp
index 01fa37485e9b6923b557eacaef5c042dcb426a72..c99c07495977aeea8ac25fafd168256bdfde9742 100644
--- a/chaos/common/data/cache/AttributeValue.cpp
+++ b/chaos/common/data/cache/AttributeValue.cpp
@@ -132,6 +132,20 @@ bool AttributeValue::setValue(const void* value_ptr,
           
             break;
         }
+        case DataType::TYPE_UINT64: {
+            uint64_t i64v = *(uint64_t*)value_ptr;
+             if(old_value.i64data!=i64v){
+                *(uint64_t*)value_buffer=i64v;
+                tag_has_changed =true;
+                old_value.i64data=i64v;
+            }else {
+                tag_has_changed =false;
+
+            }
+            //copy string to buffer
+          
+            break;
+        }
         case DataType::TYPE_DOUBLE: {
             double dv = *(double*)value_ptr;
              if(old_value.ddata!=dv){
@@ -276,6 +290,25 @@ bool AttributeValue::setValue(const CDataVariant& attribute_value,
                         sizeof(int64_t));*/
             break;
         }
+        case DataType::TYPE_UINT64: {
+            if(!grow(sizeof(int64_t))) return false;
+            uint64_t i64v = attribute_value.asUInt64();
+            old_value.i64data=*(uint64_t*)value_buffer;
+
+            *(uint64_t*)value_buffer=i64v;
+
+             if(old_value.i64data!=i64v){
+                tag_has_changed =true;
+            }else {
+                tag_has_changed =false;
+
+            }
+            //copy string to buffer
+            /*std::memcpy(value_buffer,
+                        &i64v,
+                        sizeof(int64_t));*/
+            break;
+        }
         case DataType::TYPE_DOUBLE: {
             if(!grow(sizeof(double))) return false;
             double dv = attribute_value.asDouble();
@@ -497,6 +530,9 @@ std::string AttributeValue::toString() {
         case chaos::DataType::TYPE_INT64:{
             return ChaosToString(*getValuePtr<int64_t>());
         }
+        case chaos::DataType::TYPE_UINT64:{
+            return ChaosToString(*getValuePtr<uint64_t>());
+        }
             
         default:
             break;
@@ -535,6 +571,9 @@ std::string AttributeValue::toString(int double_precision) {
         case chaos::DataType::TYPE_INT64:{
             return ChaosToString(*getValuePtr<int64_t>());
         }
+         case chaos::DataType::TYPE_UINT64:{
+            return ChaosToString(*getValuePtr<uint64_t>());
+        }
             
         default:
             break;
diff --git a/chaos/common/rpc/psm/PSMClient.cpp b/chaos/common/rpc/psm/PSMClient.cpp
index 8211c465c247e66b445f754e2bdbf679494dbd67..5a8faa0f35c2d143326822054d7a03cf709ee7ff 100644
--- a/chaos/common/rpc/psm/PSMClient.cpp
+++ b/chaos/common/rpc/psm/PSMClient.cpp
@@ -143,7 +143,7 @@ bool PSMClient::submitMessage(NFISharedPtr forwardInfo,
         forwardInfo->message->addInt64Value(RPC_TS_KEY, chaos::common::utility::TimingUtil::getTimeStamp());
 
         std::string key=forwardInfo->destinationAddr;
-        PSMC_LDBG<<seq_id<<"] Reqid:"<<forwardInfo->sender_request_id<<" "<<forwardInfo->sender_node_id<<" Sends message to:"<<forwardInfo->destinationAddr<<" size:"<<forwardInfo->message->getBSONRawSize();
+        PSMC_LDBG<<seq_id<<"] Reqid:"<<forwardInfo->sender_request_id<<" "<<forwardInfo->sender_node_id<<" Sends message to:"<<forwardInfo->destinationAddr<<" size:"<<forwardInfo->message->getBSONRawSize();//<<":"<<forwardInfo->message->getJSONString();
         prod->pushMsgAsync(*forwardInfo->message.get(),key);
 
     } catch(CException& ex){
diff --git a/chaos/cu_toolkit/control_manager/handler/AbstractAttributeHandler.h b/chaos/cu_toolkit/control_manager/handler/AbstractAttributeHandler.h
index e2c308a7ef2b93b8d40d0eff493dd485faf549d9..fd9e5cc05dfeea13fbfbe246c1ee879ae5b632d4 100644
--- a/chaos/cu_toolkit/control_manager/handler/AbstractAttributeHandler.h
+++ b/chaos/cu_toolkit/control_manager/handler/AbstractAttributeHandler.h
@@ -60,6 +60,8 @@ namespace chaos {
                         
                         if(range_info.valueType == chaos::DataType::TYPE_INT32 ||
                            range_info.valueType == chaos::DataType::TYPE_INT64 ||
+                           range_info.valueType == chaos::DataType::TYPE_UINT64 ||
+
                            range_info.valueType == chaos::DataType::TYPE_DOUBLE) {
                             min = boost::lexical_cast<T>(range_info.minRange);
                             max = boost::lexical_cast<T>(range_info.maxRange);
diff --git a/chaos_micro_unit_toolkit/data/DataPack.cpp b/chaos_micro_unit_toolkit/data/DataPack.cpp
index 373bc7ce32c90c84bfcd3df79635c6276214eef0..b5372095e95cb7db4c5a05089d7a5041160f9e52 100644
--- a/chaos_micro_unit_toolkit/data/DataPack.cpp
+++ b/chaos_micro_unit_toolkit/data/DataPack.cpp
@@ -363,6 +363,7 @@ uint32_t DataPack::getValueSize(const std::string& key) const{
     const bson_value_t *v = bson_iter_value(&it);
     switch(v->value_type) {
         case BSON_TYPE_INT64:
+        case BSON_TYPE_TIMESTAMP:
             return sizeof(int64_t);
         case BSON_TYPE_INT32:
             return sizeof(int32_t);