docs: function DHT (seeds, onConnect, onUpdate) {
  	var l_map = {};
  
  	// build DHT connection
  	var l_dht = undefined;
  		
  	// init DHT
  	if (seeds instanceof Array) {
  		l_dht = kademlia({
    			address: '127.0.0.1',
    			port: 65535,
    			seeds: seeds,
    			storage: levelup('./store/dht_db')
  		});
  		
  		l_dht.on('connect', function () {
  			LOG.warn('DHT connected...', 'SR.DHT');
  			UTIL.safeCall(onConnect);
  		});		
  	}
  	else
  		UTIL.safeCall(onConnect);
  	
  	this.set = function (key, value, onDone) {
  		if (!l_dht) {
  			l_map[key] = value;
  			return UTIL.safeCall(onDone, true);		
  		}
  		
  		l_dht.put(key, value, function (err) {
  			if (err) {
  				LOG.error(err, 'SR.DHT');
  				UTIL.safeCall(onDone, false);
  			}
  			else
  				UTIL.safeCall(onDone, true);
  		});
  	};
  
  	this.get = function (key, onDone) {
  		if (!l_dht) {
  			if (l_map.hasOwnProperty(key))
  				UTIL.safeCall(onDone, l_map[key]);
  			else
  				UTIL.safeCall(onDone);
  			return;
  		}
  
   		l_dht.get(key, function (err, value) {
  			if (err) {
  				LOG.error(err, 'SR.DHT');
  				UTIL.safeCall(onDone);				
  			}
  			else {
  				// remove from local & return undefined
  				if (value === 'DELETED') {
  					delete l_map[key];
  					return UTIL.safeCall(onDone);
  				}
  				
  				// update to local
  				l_map[key] = value;
  				UTIL.safeCall(onDone, value);
  			}
  		});
  	};
  	
  	this.delete = function (key, onDone) {
  		if (!l_dht) {
  			
  			if (l_map.hasOwnProperty(key)) {
  				delete l_map[key];
  				UTIL.safeCall(onDone, true);
  			}
  			else {
  				UTIL.safeCall(onDone, false);
  			}
  			return;
  		}
  		
  		// TODO: need a way to delete?
  		l_dht.put(key, 'DELETED', function (err) {
  			if (err) {
  				LOG.error(err, 'SR.DHT');
  				UTIL.safeCall(onDone, false);
  			}
  			else
  				UTIL.safeCall(onDone, true);
  		});
  	}
  }