public boolean nameEnumeratorResponse(Interest interest) throws IOException {
		
		boolean result = false;
		ContentName neRequestPrefix = interest.name().cut(CommandMarker.COMMAND_MARKER_BASIC_ENUMERATION.getBytes());
		
		File directoryToEnumerate = NDNNameToFilePath(neRequestPrefix);
		
		if (!directoryToEnumerate.exists() || !directoryToEnumerate.isDirectory()) {
			// nothing to enumerate
			return result;
		}
		
		NameEnumerationResponse ner = new NameEnumerationResponse();
		ner.setPrefix(new ContentName(neRequestPrefix, CommandMarker.COMMAND_MARKER_BASIC_ENUMERATION.getBytes()));
		
		Log.info("Directory to enumerate: {0}, last modified {1}", directoryToEnumerate.getAbsolutePath(), new NDNTime(directoryToEnumerate.lastModified()));
		// stat() the directory to see when it last changed -- will change whenever
		// a file is added or removed, which is the only thing that will change the
		// list we return.
		ner.setTimestamp(new NDNTime(directoryToEnumerate.lastModified()));
		// See if the resulting response is later than the previous one we released.
		
		//now add the response id
	    ContentName prefixWithId = new ContentName(ner.getPrefix(), _responseName.components());
	    //now finish up with version and segment
	    ContentName potentialCollectionName = VersioningProfile.addVersion(prefixWithId, ner.getTimestamp());
	    
	    //switch to add response id to name enumeration objects
		//ContentName potentialCollectionName = VersioningProfile.addVersion(ner.getPrefix(), ner.getTimestamp());
	    
	    potentialCollectionName = SegmentationProfile.segmentName(potentialCollectionName, SegmentationProfile.baseSegment());
		//check if we should respond...
		if (interest.matches(potentialCollectionName, null)) {
		
			// We want to set the version of the NE response to the time of the 
			// last modified file in the directory. Unfortunately that requires us to
			// stat() all the files whether we are going to respond or not.
			String [] children = directoryToEnumerate.list();
			
			if ((null != children) && (children.length > 0)) {
				for (int i = 0; i < children.length; ++i) {
					ner.add(children[i]);
				}

				NameEnumerationResponseMessage nem = ner.getNamesForResponse();
				NameEnumerationResponseMessageObject neResponse = new NameEnumerationResponseMessageObject(prefixWithId, nem, _handle);
				neResponse.save(ner.getTimestamp(), interest);
				result = true;
				Log.info("sending back name enumeration response {0}, timestamp (version) {1}.", ner.getPrefix(), ner.getTimestamp());
			} else {
				Log.info("no children available: we are not sending back a response to the name enumeration interest (interest = {0}); our response would have been {1}", interest, potentialCollectionName);
			}
		} else {
			Log.info("we are not sending back a response to the name enumeration interest (interest = {0}); our response would have been {1}", interest, potentialCollectionName);
			if (interest.exclude().size() > 1) {
				Exclude.Element el = interest.exclude().value(1);
				if ((null != el) && (el instanceof ExcludeComponent)) {
					Log.info("previous version: {0}", VersioningProfile.getVersionComponentAsTimestamp(((ExcludeComponent)el).getBytes()));
				}
			}
		}
		return result;
	}