diff --git a/plugins/teiid/org.teiid.runtime.client/admin/org/teiid/adminapi/Admin.java b/plugins/teiid/org.teiid.runtime.client/admin/org/teiid/adminapi/Admin.java
index e5c7fa4..6ac986c 100644
--- a/plugins/teiid/org.teiid.runtime.client/admin/org/teiid/adminapi/Admin.java
+++ b/plugins/teiid/org.teiid.runtime.client/admin/org/teiid/adminapi/Admin.java
@@ -25,12 +25,16 @@
 import java.io.InputStream;
 import java.util.Collection;
 import java.util.EnumSet;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+
 import org.teiid.adminapi.VDB.ConnectionType;
 import org.teiid.designer.annotation.Removed;
 import org.teiid.designer.annotation.Since;
+import org.teiid.designer.runtime.spi.ITeiidDataSource;
 import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
+import org.teiid.runtime.client.admin.ModelConnectionMatcher;
 
 public interface Admin {
 
@@ -247,7 +251,7 @@
      * @throws AdminException
      */
     @Since(Version.TEIID_8_7)
-    Collection<? extends PropertyDefinition> getTranslatorPropertyDefinitions(String translatorName, TranlatorPropertyType type) throws AdminException;
+    Collection<? extends PropertyDefinition> getTranslatorPropertyDefinitions(String translatorName, TranlatorPropertyType type, Collection<? extends Translator> translators) throws AdminException;
     
 
     /**
@@ -371,23 +375,23 @@
      * @param properties - properties
      * @throws AdminException
      */
-    void createDataSource(String deploymentName, String templateName, Properties properties) throws AdminException;
-
+    void createDataSource(String deploymentName, String templateName,  Collection<String> dsNames, Properties properties) throws AdminException;
+    
     /**
-     * Given the deployed name of the data source, this will return all the configuration properties
-     * used to create the datasource. If sensitive information like passwords are masked, they will NOT
-     * be decrypted. "driver-name" property on the returned properties defines the template name used
-     * to create this data source.
+     * Returns a map of data source objects
+     * @param connectionMatcher
+     * @return map of data source objects
+     * @throws AdminException
      */
-    Properties getDataSource(String deployedName) throws AdminException;
+    Map<String, ITeiidDataSource> getDataSources(ModelConnectionMatcher connectionMatcher) throws AdminException;
 
     /**
      * Delete data source.
      * @param deployedName
      * @throws AdminException
      */
-    void deleteDataSource(String deployedName) throws AdminException;
-
+    void deleteDataSource(String deployedName,  Collection<String> dsNames) throws AdminException;
+    
     /**
      * Returns the all names of all the data sources available in the configuration.
      */
diff --git a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ExecutionAdmin.java b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ExecutionAdmin.java
index caea2f8..365b78e 100644
--- a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ExecutionAdmin.java
+++ b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ExecutionAdmin.java
@@ -152,17 +152,14 @@
     public void deleteDataSource( String dsName ) throws Exception {
         // Check if exists, return false
         if (this.dataSourceNames.contains(dsName)) {
-            this.admin.deleteDataSource(dsName);
+            this.admin.deleteDataSource(dsName, this.dataSourceNames);
 
-            if (!this.admin.getDataSourceNames().contains(dsName)) {
-                this.dataSourceNames.remove(dsName);
-                ITeiidDataSource tds = this.dataSourceByNameMap.get(dsName);
+            ITeiidDataSource tds = this.dataSourceByNameMap.get(dsName);
+            
+            refreshDataSources();
 
-                if (tds != null) {
-                    this.dataSourceByNameMap.remove(dsName);
-                    this.eventManager.notifyListeners(ExecutionConfigurationEvent.createRemoveDataSourceEvent(tds));
-
-                }
+            if (tds != null) {
+                this.eventManager.notifyListeners(ExecutionConfigurationEvent.createRemoveDataSourceEvent(tds));
             }
         }
     }
@@ -373,20 +370,16 @@
             }
         }
 
-        this.admin.createDataSource(dsName, typeName, properties);
+        this.admin.createDataSource(dsName, typeName, this.dataSourceNames, properties);
 
-        refreshDataSourceNames();
+        refreshDataSources();
 
         // Check that local name list contains new dsName
-        if (dataSourceExists(dsName)) {
-            String nullStr = null;
-            ITeiidDataSource tds = new TeiidDataSource(nullStr, dsName, typeName, properties);
-
-            this.dataSourceByNameMap.put(dsName, tds);
-            this.eventManager.notifyListeners(ExecutionConfigurationEvent.createAddDataSourceEvent(tds));
-
-            return tds;
-        }
+        ITeiidDataSource tds = this.dataSourceByNameMap.get(dsName);
+        if( tds != null ) {
+        	this.eventManager.notifyListeners(ExecutionConfigurationEvent.createAddDataSourceEvent(tds));
+        	return tds;
+        } 
 
         // We shouldn't get here if data source was created
         throw new TeiidExecutionException(
@@ -540,7 +533,8 @@
         return this.admin.getDataSourceTemplateNames();
     }
     
-    @Override
+    @SuppressWarnings("unchecked")
+	@Override
     public Collection<TeiidPropertyDefinition> getTemplatePropertyDefns(String templateName) throws Exception {
         Collection<? extends PropertyDefinition> propDefs = this.admin.getTemplatePropertyDefinitions(templateName);
 
@@ -578,7 +572,7 @@
             return null;
         }
 
-        return this.admin.getDataSource(name);
+        return getDataSource(name).getProperties();
     }
 
     @Override
@@ -684,30 +678,14 @@
      * @throws Exception if refreshing admin connection fails
      */
     public void refresh() throws Exception {
-        // populate translator map
-        refreshTranslators(this.admin.getTranslators());
 
         // populate data source type names set
         refreshDataSourceTypes();
 
-        // populate data source names list
-        refreshDataSourceNames();
-
-        this.dataSourceByNameMap.clear();
-        Collection<ITeiidDataSource> tdsList = connectionMatcher.findTeiidDataSources(this.dataSourceNames);
-        for (ITeiidDataSource ds : tdsList) {
-            if (!isLessThanTeiidEight()) {
-                /* Not done in Teiid 7.7 */
-                // Get Properties for the source
-                Properties dsProps = this.admin.getDataSource(ds.getName());
-                // Transfer properties to the ITeiidDataSource
-                ds.getProperties().clear();
-                ds.getProperties().putAll(dsProps);
-            }
-
-        	// put ds into map
-            this.dataSourceByNameMap.put(ds.getName(), ds);
-        }
+        refreshDataSources();
+        
+        // populate translator map
+        refreshTranslators();
 
         // populate VDBs and source bindings
         refreshVDBs();
@@ -715,10 +693,19 @@
         // notify listeners
         this.eventManager.notifyListeners(ExecutionConfigurationEvent.createServerRefreshEvent(this.teiidServer));
     }
-
-    protected void refreshDataSourceNames() throws Exception {
-        // populate data source names list
-        this.dataSourceNames = new ArrayList(this.admin.getDataSourceNames());
+    
+    protected void refreshDataSources() throws Exception {
+        this.dataSourceByNameMap.clear();
+        this.dataSourceNames.clear();
+        
+        Map<String, ITeiidDataSource> actualDataSources = this.admin.getDataSources(connectionMatcher);
+        
+        for( String dsName : actualDataSources.keySet() ) {
+        	ITeiidDataSource ds = actualDataSources.get(dsName);
+        	
+        	this.dataSourceByNameMap.put(dsName, ds);
+        	this.dataSourceNames.add(dsName);
+        }
     }
 
     /**
@@ -727,22 +714,24 @@
      * @param translators
      * @throws Exception
      */
-    protected void refreshTranslators( Collection<? extends Translator> translators ) throws Exception {
-        for (Translator translator : translators) {
+    protected void refreshTranslators() throws Exception {
+    	Collection<? extends Translator> translators = this.admin.getTranslators();
+        for (Translator translator : translators ) {
             if (translator.getName() != null) {
                 if( teiidServer.getServerVersion().isLessThan(Version.TEIID_8_6.get())) {
                 	Collection<? extends PropertyDefinition> propDefs = this.admin.getTemplatePropertyDefinitions(translator.getName());
                 	this.translatorByNameMap.put(translator.getName(), new TeiidTranslator(translator, propDefs, teiidServer));
                 } else if( teiidServer.getServerVersion().isLessThan(Version.TEIID_8_7.get())) {
-                	Collection<? extends PropertyDefinition> propDefs = this.admin.getTranslatorPropertyDefinitions(translator.getName());
+                	@SuppressWarnings("deprecation")
+					Collection<? extends PropertyDefinition> propDefs = this.admin.getTranslatorPropertyDefinitions(translator.getName());
                 	this.translatorByNameMap.put(translator.getName(), new TeiidTranslator(translator, propDefs, teiidServer));
                 } else { // TEIID SERVER VERSION 8.7 AND HIGHER
                 	Collection<? extends PropertyDefinition> propDefs  = 
-                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.OVERRIDE);
+                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.OVERRIDE, translators);
                 	Collection<? extends PropertyDefinition> importPropDefs  = 
-                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.IMPORT);
+                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.IMPORT, translators);
                 	Collection<? extends PropertyDefinition> extPropDefs  = 
-                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.EXTENSION_METADATA);
+                			this.admin.getTranslatorPropertyDefinitions(translator.getName(), Admin.TranlatorPropertyType.EXTENSION_METADATA, translators);
                 	this.translatorByNameMap.put(translator.getName(), new TeiidTranslator(translator, propDefs, importPropDefs, extPropDefs, teiidServer));
                 }
             }
@@ -761,7 +750,7 @@
     
     protected void refreshDataSourceTypes() throws Exception {
         // populate data source type names set
-        this.dataSourceTypeNames = new HashSet(this.admin.getDataSourceTemplateNames());
+        this.dataSourceTypeNames = new HashSet<String>(this.admin.getDataSourceTemplateNames());
     }
 
     /**
diff --git a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ModelConnectionMatcher.java b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ModelConnectionMatcher.java
index b5aaf4a..b6d158e 100644
--- a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ModelConnectionMatcher.java
+++ b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/ModelConnectionMatcher.java
@@ -17,7 +17,7 @@
      */
     public static final String PREVIEW_PREFIX = "PREVIEW_"; //$NON-NLS-1$
     
-    public Collection<ITeiidDataSource> findTeiidDataSources( Collection<String> names) throws Exception {
+    public Collection<ITeiidDataSource> findTeiidDataSources( Collection<String> names) {
         Collection<ITeiidDataSource> dataSources = new ArrayList<ITeiidDataSource>();
 
         for (String name : names) {
diff --git a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/v8/Admin8Factory.java b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/v8/Admin8Factory.java
index ceb7079..8c78fe4 100644
--- a/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/v8/Admin8Factory.java
+++ b/plugins/teiid/org.teiid.runtime.client/src/org/teiid/runtime/client/admin/v8/Admin8Factory.java
@@ -25,6 +25,7 @@
 import static org.jboss.as.controller.client.helpers.ClientConstants.DEPLOYMENT_REMOVE_OPERATION;
 import static org.jboss.as.controller.client.helpers.ClientConstants.DEPLOYMENT_UNDEPLOY_OPERATION;
 import static org.jboss.as.controller.client.helpers.ClientConstants.RESULT;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
@@ -45,6 +46,7 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
+
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.NameCallback;
@@ -52,6 +54,7 @@
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.security.sasl.RealmCallback;
 import javax.security.sasl.RealmChoiceCallback;
+
 import org.jboss.as.cli.Util;
 import org.jboss.as.cli.operation.OperationFormatException;
 import org.jboss.as.cli.operation.impl.DefaultOperationRequestAddress;
@@ -87,9 +90,11 @@
 import org.teiid.core.util.ObjectConverterUtil;
 import org.teiid.designer.annotation.Removed;
 import org.teiid.designer.annotation.Since;
+import org.teiid.designer.runtime.spi.ITeiidDataSource;
 import org.teiid.designer.runtime.version.spi.ITeiidServerVersion;
 import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
 import org.teiid.runtime.client.Messages;
+import org.teiid.runtime.client.admin.ModelConnectionMatcher;
 
 
 /**
@@ -460,15 +465,14 @@
 		}
 
 		@Override
-		public void createDataSource(String deploymentName,	String templateName, Properties properties)	throws AdminException {
+		public void createDataSource(String deploymentName,	String templateName, Collection<String> dsNames, Properties properties)	throws AdminException {
 			deploymentName = removeJavaContext(deploymentName);
 
-			Collection<String> dsNames = getDataSourceNames();
 			if (dsNames.contains(deploymentName)) {
 				 throw new AdminProcessingException(Messages.gs(Messages.TEIID.TEIID70003, deploymentName));
 			}
 
-			Set<String> resourceAdapters = getResourceAdapterNames();
+			Set<String> resourceAdapters = getResourceAdapterNames(getConnectionFactoryNames());
         	if (resourceAdapters.contains(templateName)) {
 	            createConnectionFactory(deploymentName, templateName, properties);
 	            return;
@@ -550,56 +554,6 @@
 	        } catch (IOException e) {
 	        	 throw new AdminComponentException(e);
 	        }
-		}
-
-		@Override
-		public Properties getDataSource(String deployedName) throws AdminException {
-			deployedName = removeJavaContext(deployedName);
-
-			Collection<String> dsNames = getDataSourceNames();
-			if (!dsNames.contains(deployedName)) {
-				 throw new AdminProcessingException(Messages.gs(Messages.TEIID.TEIID70008, deployedName));
-			}
-
-			Properties dsProperties = new Properties();
-
-			// check regular data-source
-			cliCall("read-resource",
-					new String[] { "subsystem", "datasources", "data-source", deployedName}, null,
-					new DataSourceProperties(dsProperties));
-
-			// check xa connections
-			if (dsProperties.isEmpty()) {
-				cliCall("read-resource",
-						new String[] {"subsystem", "datasources", "xa-data-source", deployedName}, null,
-						new DataSourceProperties(dsProperties));
-			}
-
-			// check connection factories
-			if (dsProperties.isEmpty()) {
-				Map<String, String> raDSMap = getConnectionFactoryNames();
-				// deployed rar name, may be it is == deployedName or if server restarts it will be rar name or rar->[1..n] name
-				String rarName = raDSMap.get(deployedName);
-				if (rarName != null) {
-					cliCall("read-resource",
-							new String[] { "subsystem", "resource-adapters", "resource-adapter", rarName, "connection-definitions", deployedName},
-							null, new ConnectionFactoryProperties(dsProperties, rarName, deployedName, null));
-				}
-
-				// figure out driver-name
-                if (dsProperties.getProperty("driver-name") == null) {
-                    String moduleName = getResourceAdapterModuleName(rarName);
-                    Set<String> installedRars = getResourceAdapterNames();
-                    for (String installedRar:installedRars) {
-                        if (getResourceAdapterModuleName(installedRar).equals(moduleName)) {
-                            dsProperties.setProperty("driver-name", installedRar);
-                            break;
-                        }
-                    }
-                }
-			}
-
-			return dsProperties;
 		}
 
 		private class DataSourceProperties extends ResultCallback {
@@ -689,10 +643,9 @@
 		}
 
 		@Override
-		public void deleteDataSource(String deployedName) throws AdminException {
+		public void deleteDataSource(String deployedName, Collection<String> dsNames) throws AdminException {
 			deployedName = removeJavaContext(deployedName);
 
-			Collection<String> dsNames = getDataSourceNames();
 			if (!dsNames.contains(deployedName)) {
 				 throw new AdminProcessingException(Messages.gs(Messages.TEIID.TEIID70008, deployedName));
 			}
@@ -971,7 +924,7 @@
 	        return Collections.emptyList();
 
 		}
-
+		
 		/**
 		 * /subsystem=datasources:read-children-names(child-type=data-source)
 		 * /subsystem=resource-adapters/resource-adapter={rar-file}:read-resource
@@ -994,6 +947,67 @@
 				}
 			}
 	        return dsNames;
+		}
+		@Override
+		public Map<String, ITeiidDataSource>  getDataSources(ModelConnectionMatcher connectionMatcher) throws AdminException {
+			Map<String, ITeiidDataSource> dataSourcesMap = new HashMap<String, ITeiidDataSource>();
+			Set<String> datasourceNames = new HashSet<String>();
+			
+			Map<String, String> raDSMap = getConnectionFactoryNames();
+			Set<String> installedRars = getResourceAdapterNames(raDSMap);
+			
+			datasourceNames.addAll(getChildNodeNames("datasources", "data-source"));
+			datasourceNames.addAll(getChildNodeNames("datasources", "xa-data-source"));
+			datasourceNames.addAll(raDSMap.keySet());
+
+			Collection<ITeiidDataSource> dataSources = connectionMatcher.findTeiidDataSources(datasourceNames);
+			
+			for (ITeiidDataSource dSource : dataSources) {
+				String deployedName = removeJavaContext(dSource.getName());
+
+				if (!datasourceNames.contains(deployedName)) {
+					 throw new AdminProcessingException(Messages.gs(Messages.TEIID.TEIID70008, deployedName));
+				}
+
+				Properties dsProperties = new Properties();
+
+				// check regular data-source
+				cliCall("read-resource",
+						new String[] { "subsystem", "datasources", "data-source", deployedName}, null,
+						new DataSourceProperties(dsProperties));
+
+				// check xa connections
+				if (dsProperties.isEmpty()) {
+					cliCall("read-resource",
+							new String[] {"subsystem", "datasources", "xa-data-source", deployedName}, null,
+							new DataSourceProperties(dsProperties));
+				}
+
+				// check connection factories
+				if (dsProperties.isEmpty()) {
+					// deployed rar name, may be it is == deployedName or if server restarts it will be rar name or rar->[1..n] name
+					String rarName = raDSMap.get(deployedName);
+					if (rarName != null) {
+						cliCall("read-resource",
+								new String[] { "subsystem", "resource-adapters", "resource-adapter", rarName, "connection-definitions", deployedName},
+								null, new ConnectionFactoryProperties(dsProperties, rarName, deployedName, null));
+					}
+
+					// figure out driver-name
+	                if (dsProperties.getProperty("driver-name") == null) {
+	                    String moduleName = getResourceAdapterModuleName(rarName);
+	                    for (String installedRar:installedRars) {
+	                        if (getResourceAdapterModuleName(installedRar).equals(moduleName)) {
+	                            dsProperties.setProperty("driver-name", installedRar);
+	                            break;
+	                        }
+	                    }
+	                }
+				}
+				
+				dataSourcesMap.put(dSource.getName(), dSource);
+			}
+	        return dataSourcesMap;
 		}
 
 		private Map<String, String> getConnectionFactoryNames() throws AdminException {
@@ -1039,12 +1053,11 @@
 		}
 
 		// :read-children-names(child-type=deployment)
-		private Set<String> getResourceAdapterNames() throws AdminException {
+		private Set<String> getResourceAdapterNames(Map<String, String> connFactoryMap) throws AdminException {
 			Set<String> templates = getDeployedResourceAdaptorNames();
             templates.addAll(getInstalledResourceAdaptorNames());
             
             //AS-4776 HACK - BEGIN
-            Map<String, String> connFactoryMap = getConnectionFactoryNames();
             for (String key:connFactoryMap.keySet()) {
             	templates.remove(key);
             }
@@ -1071,7 +1084,7 @@
 		public Set<String> getDataSourceTemplateNames() throws AdminException {
 			Set<String> templates = new HashSet<String>();
 			templates.addAll(getInstalledJDBCDrivers());
-			templates.addAll(getResourceAdapterNames());
+			templates.addAll(getResourceAdapterNames(getConnectionFactoryNames()));
 			return templates;
 		}
 
@@ -1182,7 +1195,7 @@
 			BuildPropertyDefinitions builder = new BuildPropertyDefinitions();
 
 			// RAR properties
-			Set<String> resourceAdapters = getResourceAdapterNames();
+			Set<String> resourceAdapters = getResourceAdapterNames(getConnectionFactoryNames());
         	if (resourceAdapters.contains(templateName)) {
         		cliCall("read-rar-description", new String[] {"subsystem", "teiid"}, new String[] {"rar-name", templateName}, builder);
         		buildResourceAdpaterProperties(templateName, builder);
@@ -1233,11 +1246,11 @@
 		
 		@Override
         @Since(Version.TEIID_8_7)
-        public Collection<? extends PropertyDefinition> getTranslatorPropertyDefinitions(String translatorName, TranlatorPropertyType type) throws AdminException{
+        public Collection<? extends PropertyDefinition> getTranslatorPropertyDefinitions(String translatorName, TranlatorPropertyType type, Collection<? extends Translator> translators) throws AdminException{
             requires("getTranslatorPropertyDefinitions(String, TranslatorPropertyType)", Version.TEIID_8_7.get());
 
 		    BuildPropertyDefinitions builder = new BuildPropertyDefinitions();
-            Collection<? extends Translator> translators = getTranslators();
+
             for (Translator t:translators) {
                 if (t.getName().equalsIgnoreCase(translatorName)) {
                     cliCall("read-translator-properties", new String[] {"subsystem", "teiid"}, new String[] {"translator-name", translatorName, "type", type.name()}, builder);