 			return lang("Tags");
 		
 		if (action == PACKAGE_SHOW || action == GROUP_SHOW || action == TAG_SHOW)
-			return metadata['name'] || metadata['description'] || metadata['url']
+			return metadata['display_name'] || metadata['name'] || metadata['description'] || metadata['url']
 				|| (result is String ? result as String : (result['title'] || result['display_name'] || result['name']))
 				|| params['id'];
 		

		else
		{
			var cmd:String = 'api/' + source.apiVersion.value + '/rest/' + action.split('_')[0];
			if (params)
				cmd += '/' + params['id'];
			url = URLUtil.getFullURL(url, cmd);
			request = new URLRequest(url);

		{
			var list:Array = [];
			if (source.showPackages.value)
				list.push([PACKAGE_LIST, null]);
			if (source.showGroups.value)
				list.push([GROUP_LIST, {"all_fields": true}]);
			if (source.showTags.value)
				list.push([TAG_LIST, {"all_fields": true}]);
			return updateChildren(list, function(node:CKANAction, actionAndParams:Array):void {
				node.action = actionAndParams[0];
				node.params = actionAndParams[1];
				node.metadata = null;
			});
		}
		
		// handle all situations where result is just an array of IDs
		if (StandardLib.getArrayType(result as Array) == String)
			return updateChildren(result as Array, function(node:CKANAction, id:String):void {
				if (action == PACKAGE_LIST || action == TAG_SHOW)
					node.action = PACKAGE_SHOW;
				if (action == GROUP_LIST)
					node.action = GROUP_SHOW;
				if (action == TAG_LIST)
					node.action = TAG_SHOW;
				node.metadata = node.params = {"id": id};
			});
		
		if (action == GROUP_LIST || action == TAG_LIST)
			return updateChildren(result as Array, function(node:CKANAction, meta:Object):void {
				if (action == GROUP_LIST)
					node.action = GROUP_SHOW;
				if (action == TAG_LIST)
					node.action = TAG_SHOW;
				node.metadata = meta;
				node.params = {"id": meta['id']};
			});
		
		if ((action == GROUP_SHOW || action == TAG_SHOW) && result.hasOwnProperty('packages'))
