 		
 		<cfset local.cfcNames="">
 				
-		<cfif !failed> <cfreturn datas></cfif>
+		<cfif !failed>
+			<cfreturn datas>
+		</cfif>
+
 		<cfset var names="">
 		<cfloop array="#arguments.providers#" item="local.cfcName">
-			
+			<!--- if we can use this provider's cached data because of lastModified setting, then skip retrieval --->
+			<cfif structKeyExists(datas, cfcName) and isStruct(datas[cfcName])
+					and structKeyExists(datas[cfcName], "getInfo")
+					and structKeyExists(datas[cfcName].getInfo, "lastModified")>
+				<cfcontinue />
+			</cfif>
+
 			<!--- when was the last try to recieve this data?, we try only every  --->
 	        <cfif !forcereload and
 				StructKeyExists(session,"cfcstries") and 

				</cfif>
			</cfif>
			<cfset session.cfcstries[cfcName]=now()>
			
			
			<cfset session.cfcs[cfcName]={}>
        	<cfset request.cfcs[cfcName]={}>
			<cfset var name="t"&createUniqueId()>
			<cfset listAppend(names,name)>
			<cfthread name="#name#" provider="#cfcName#" sess="#session.cfcs[cfcName]#" req="#request.cfcs[cfcName]#">
				<cfsetting requesttimeout="50000">
				<cftry>
					<cfset var start=getTickCount()>
					
					<!--- list Applications --->
					<cfhttp url="#attributes.provider#?returnFormat=serialize&method=listApplications" result="local.http">
					<cfset attributes.req.listApplications=evaluate(http.fileContent)>
					<cfset attributes.sess.listApplications=attributes.req.listApplications>
					
					<!--- get Info --->
					<cfhttp url="#attributes.provider#?returnFormat=serialize&method=getInfo" result="local.http">
					<cfset attributes.req.getInfo=evaluate(http.fileContent)>
			        <cfset attributes.req.getInfo.lastModified=now()>
			        <cfset attributes.sess.getInfo=attributes.req.getInfo>

			</cfthread>
		</cfloop>
		<!--- <cfset systemOutput('<print-stack-trace>',true,true)>--->
		<cfif arguments.timeout GT 0 and names neq "">
			<cfthread action="join" names="#names#" timeout="#arguments.timeout#"/>
		</cfif>
			
