anchor.diff:  		return tmpStruct;
   	}
   
  -	//verifyCacheConnection
  -
  -	public struct function verifyCacheConnection( required string name ){
  -		var tmpStruct = {};
  -		try{
  -			admin
  -				action="verifyCacheConnection"
  -				type="#variables.type#"
  -				password="#variables.password#"
  -				name="#arguments.name#";
  -				tmpStruct.label = "Ok";
  -		} catch ( any e ){
  -			tmpStruct.label = "Error";
  -			tmpStruct.message = e.message;
  -		}
  -		return tmpStruct;
  +	/**
  +	* @hint returns the list of datasource driver details
  +	*/
  +	public query function getDatasourceDriverList(){
  +		admin
  +			action="getDatasourceDriverList"
  +			type="#variables.type#"
  +			password="#variables.password#"
  +			returnVariable="local.rtn";
  +			return rtn;
  +	}
  +
  +	/**
  +	* @hint returns a list mail servers defined for this context
  +	*/
  +	public query function getMailservers(){
  +		admin
  +			action="getMailservers"
  +			type="#variables.type#"
  +			password="#variables.password#"
  +			returnVariable="local.mailservers";
  +		return local.mailservers;
  +	}
  +
  +	/**
  +	* @hint updates a specific mail server defined for this context
  +	* @host Mail server host name (for example smtp.gmail.com).
  +	* @port Port of the mail server (for example 587).
  +	* @username Username of the mail server.
  +	* @password Password of the mail server.
  +	* @tls Enable Transport Layer Security.
  +	* @ssl Enable secure connections via SSL.
  +	* @life Overall timeout for the connections established to the mail server.
  +	* @idle Idle timeout for the connections established to the mail server.
  +	*/
  +	public void function updateMailServer( required string host, required string port, required string username, required string password, required boolean tls, required boolean ssl, required string life, required string idle ){
  +		admin
  +			action="updateMailServer"
  +			type="#variables.type#"
  +			password="#variables.password#"
  +
  +			hostname="#arguments.host#"
  +			dbusername="#arguments.username#"
  +			dbpassword="#arguments.password#"
  +			life="#arguments.life#"
  +			idle="#arguments.idle#"
  +
  +			port="#arguments.port#"
  +			id="new"
  +			tls="#arguments.tls#"
  +			ssl="#arguments.ssl#"
  +			remoteClients="#variables.remoteClients#";
   	}
   
   	//verifyMailServer
  -
   	public struct function verifyMailServer( required string hostname, required string port, required string mailusername, required string mailpassword ){
   		local.stVeritfyMessages={};
   		try{
  
positive.code: 	*/
  	public void function updateRegional(string timezone, string locale,string timeserver,boolean usetimeserver){
  		var regional="";
  		
  		// check timezone
  		if(isNull(arguments.timezone) || isEmpty(arguments.timezone)) {
  			regional=getRegional();
  			arguments.timezone=regional.timezone;
  		}
  		
  		// check locale
  		if(isNull(arguments.locale) || isEmpty(arguments.locale)) {
  			if(isSimpleValue(regional))regional=getRegional();
  			arguments.locale=regional.locale;
  		}
  		
  		// check timeserver
  		if(isNull(arguments.timeserver) || isEmpty(arguments.timeserver)) {
  			if(isSimpleValue(regional))regional=getRegional();
  			arguments.timeserver=regional.timeserver;
  		}
  		
  		// check usetimeserver
  		if(isNull(arguments.usetimeserver)) {
  			if(isSimpleValue(regional))regional=getRegional();
  			arguments.usetimeserver=regional.usetimeserver;
  		}
  			
  		admin 
  			action="updateRegional"
  			type="#variables.type#"
  			password="#variables.password#"
  			
  			timezone="#arguments.timezone#"
  			locale="#arguments.locale#"
  			timeserver="#arguments.timeserver#"
  			usetimeserver="#arguments.usetimeserver#"
  			remoteClients="#variables.remoteClients#";
  			
  	}
  	
  	/**
  	* @hint remove web specific regional settings and set back to server context settings, this function only works with type "web" and is ignored with type "server"
  	*/
  	public void function resetRegional(){
  		if(variables.type != "web") return;
  			
  		admin 
  			action="updateRegional"
  			type="#variables.type#"
  			password="#variables.password#"
  			
  			timezone=""
  			locale=""
  			timeserver=""
  			usetimeserver=""
  			remoteClients="#variables.remoteClients#";
  			
  	}
  	
  	/**
  	* @hint returns charset information about this context
  	*/
  	public struct function getCharset(){
  		admin 
  			action="getCharset"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.rtn";
  			return rtn;
  	}
  	
  	/**
  	* @hint updates the charset settings of this context
  	* @resourceCharset default charset used for read/write resources (cffile,wilewrite ...)
  
negative.code: 		return stVeritfyMessages;
  	}
  
  
  	/**
  	* @hint removes a specific mailserver defined for this context.
  	* @host hostname for the mail server to be removed.
  	* @username username of the mail server to be removed.
  	*/
  	public void function removeMailServer( required string host, required string username ){
  		admin
  			action="removeMailServer"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			hostname="#arguments.host#"
  			username="#arguments.username#"
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint returns mail settings for this context.
  	*/
  	public struct function getMailSetting(){
  		admin
  			action="getMailSetting"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.mail";
  		return local.mail;
  	}
  
  	/**
  	* @hint updates the mail settings for this context
  	* @spoolenable If enabled the mails are sent in a background thread and the main request does not have to wait until the mails are sent.
  	* @timeout Time in seconds that the Task Manager waits to send a single mail, when the time is reached the Task Manager stops the thread and the mail gets moved to unsent folder, where the Task Manager will pick it up later to try to send it again.
  	* @defaultEncoding Default encoding used for mail servers
  	*/
  	public void function updateMailSetting( required boolean spoolEnable, required numeric timeOut, required string defaultEncoding ){
  		admin
  			action="updateMailSetting"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			spoolEnable="#arguments.spoolEnable#"
  			timeout="#arguments.timeOut#"
  			defaultEncoding="#arguments.defaultEncoding#"
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint resets the mail settings for this context
  	*/
  	public void function resetMailSetting(){
  		admin
  			action="updateMailSetting"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			spoolEnable=""
  			timeout=""
  			defaultEncoding=""
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint returns the list of mappings defined for this context
  	*/
  	public query function getMappings(){
  		admin
  			action="getMappings"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.mappings";
  		return local.mappings;
  	}
  
  	public struct function getMapping( required string virtual ){
  		admin
  			action="getMapping"
  			type="#variables.type#"
  			password="#variables.password#"
  			virtual = "#arguments.virtual#"
  			returnVariable="local.providers";
  		return providers;
  	}
  
  	/**
  	* @hint updates/inserts a specific mapping for this context
  	* @virtual virtual name for the mapping
  	* @physical physical path for the mapping
  	* @archive archive path for the mapping, if needed.
  	* @primary type of mapping ( physical/archive )
  	* @inspect type of inspection for the mapping(never/once/always/"").
  	*/
  	public void function updateMapping(required string virtual, string physical="", string archive="", string primary="", string inspect="") {
  		admin
  			action="updateMapping"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			virtual="#arguments.virtual#"
  			physical="#arguments.physical#"
  			archive="#arguments.archive#"
  			primary="#arguments.primary#"
  			inspect="#arguments.inspect#"
  			toplevel="yes"
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint removes a mapping defined in this context
  	* @virtual virtual name for the mapping to be removed.
  	*/
  	public void function removeMapping(required string virtual){
  		admin
  			action="removeMapping"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			virtual="#arguments.virtual#"
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint compiles the mapping for any errors
  	* @virtual virtual name for the mapping to be compiled.
  	*/
  	public void function compileMapping(required string virtual, boolean stopOnError=true){
  		admin
  			action="compileMapping"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			virtual="#arguments.virtual#"
  			stoponerror="#stopOnError#"
  			remoteClients="#variables.remoteClients#";
  	}
  
  	/**
  	* @hint creates new archieve for the mapping
  	* @virtual virtual name for the mapping.
  	* @addCFMLFile Add all CFML Source Templates as well (.cfm,.cfc,.cfml).
  	* @addNonCFMLFile Add all Non CFML Source Templates as well (.js,.css,.gif,.png ...)
  	* @doDownload Whether need to download the archive or not.
  	*/
  	public void function createArchiveFromMapping(required string virtual, boolean addCFMLFile=true, boolean addNonCFMLFile=true, required string target){
  		var ext="lar";
  		var filename=arguments.virtual;
  		filename=mid(filename,2,len(filename));
  		if(len(filename)){
  			filename="archive-"&filename&"."&ext;
  		}else{
  			filename="archive-root."&ext;
  		}
  		filename=Replace(filename,"/","-","all");
  		var target=expandPath("#cgi.context_path#/lucee/archives/"&filename);
  		count=0;
  		while(fileExists(target)){
  			count=count+1;
  			target="#cgi.context_path#/lucee/archives/"&filename;
  			target=replace(target,'.'&ext,count&'.'&ext);
  			target=expandPath(target);
  		}
  		admin
  			action="createArchive"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			file="#arguments.target#"
  			virtual="#arguments.virtual#"
  			addCFMLFiles="#arguments.addCFMLFile#"
  			addNonCFMLFiles="#arguments.addNonCFMLFile#"
  			append="true"
  			remoteClients="#variables.remoteClients#";
  
  		// downloadFile(arguments.target);
  	}
  
  	//getCustomTagMappings
  	public query function getCustomTagMappings(){
  		admin
  			action="getCustomTagMappings"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.providers";
  		return providers;
  	}
  
  	/**
  	* @hint returns the list of extensions for this context.
  	*/
  	public query function getExtensions(){
  		admin
  			action="getRHExtensions"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.extensions";
  		return local.extensions;
  	}
  
  	/**
  	* @hint returns the extension Info
  	*/
  	public struct function getExtensionInfo(){
  		admin
  			action="getExtensionInfo"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.info";
  		return info;
  	}
  
  	/**
  	* @hint updates(install/upgrade/downgrade) a specific extension.
  	* @provider provider of the extension
  	* @id id of the extension
  	* @version version of the extension
  	*/
  	public void function updateExtension( required string provider, required string id , required string version ){
  		admin
  			action="updateRHExtension"
  			type="#variables.type#"
  			password="#variables.password#"
  			source="#downloadFull(arguments.provider,arguments.id,arguments.version)#";
  	}
  
  	/**
  	* @hint removes(uninstall) a specific extension.
  	* @id id of the extension to be removed
  	*/
  	public void function removeExtension( required string id  ){
  		admin
  			action="removeRHExtension"
  			type="#variables.type#"
  			password="#variables.password#"
  			id="#arguments.id#";
  	}
  
  	/**
  	* @hint returns the list of extension providers for this context.
  	*/
  	public query function getExtensionProviders(){
  		admin
  			action="getRHExtensionProviders"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.providers";
  		return local.providers;
  	}
  
  	/**
  	* @hint Adds a new extension provider for this context.
  	* @url URL to the Extension Provider (Example: http://www.myhost.com)
  	*/
  	public void function updateExtensionProvider( required string url ){
  		admin
  			action="updateRHExtensionProvider"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			url="#trim(arguments.url)#";
  	}
  
  	/**
  	* @hint Adds a new extension provider for this context.
  	* @url URL to the Extension Provider (Example: http://www.myhost.com)
  	*/
  	public void function removeExtensionProvider( required string url ){
  		admin
  			action="removeRHExtensionProvider"
  			type="#variables.type#"
  			password="#variables.password#"
  
  			url="#trim(arguments.url)#";
  	}
  
  	//getRHServerExtensions
  	public query function getRHServerExtensions(){
  		admin
  			action="getRHServerExtensions"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.rtn";
  		return rtn;
  	}
  
  	//getLocalExtension
  	public struct function getLocalExtension( required string id  ){
  		admin
  			action="getLocalExtension"
  			type="#variables.type#"
  			password="#variables.password#"
  			id="#arguments.id#"
  			returnVariable="local.rtn";
  		return rtn;
  	}
  
  	//getLocalExtensions
  	public query function getLocalExtensions(){
  		admin
  			action="getLocalExtensions"
  			type="#variables.type#"
  			password="#variables.password#"
  			returnVariable="local.rtn";
  		return rtn;
  	}
  
  	//verifyExtensionProvider
  	public struct function verifyExtensionProvider( required string url ){
  		local.verifyExtensionProvider={};
  		try{
  