Index: engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
--- engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java	(revision 4435)
+++ engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java	(working copy)
@@ -510,6 +510,12 @@
 				cacheId = new CacheID(this.dqpWorkContext, pi, requestMsg.getCommandString());
 		    	cachable = cacheId.setParameters(requestMsg.getParameterValues());
 				if (cachable) {
+					//allow cache to be transactionally aware
+					TransactionContext tc = request.getTransactionContext(false);
+					if (tc != null) {
+						initTransactionState(tc);
+						resume();
+					}
 					CachedResults cr = rsCache.get(cacheId);
 					//check that there are enough cached results
 					//TODO: possibly ignore max rows for caching
@@ -587,13 +593,7 @@
 			//This is just a dummy result it will get replaced by collector source
 	    	resultsBuffer = this.processor.getBufferManager().createTupleBuffer(this.originalCommand.getProjectedSymbols(), this.request.context.getConnectionId(), TupleSourceType.FINAL);
 		}
-		transactionContext = request.transactionContext;
-		if (this.transactionContext != null && this.transactionContext.getTransactionType() != Scope.NONE) {
-			if (this.requestMsg.getRequestOptions().isContinuous()) {
-				throw new IllegalStateException("Continuous requests are not allowed to be transactional."); //$NON-NLS-1$
-			}
-			this.transactionState = TransactionState.ACTIVE;
-		}
+		initTransactionState(request.transactionContext);
 		if (requestMsg.isNoExec()) {
 		    doneProducingBatches();
             resultsBuffer.close();
@@ -606,6 +606,16 @@
 		request = null;
 	}
 
+	private void initTransactionState(TransactionContext tc) {
+		transactionContext = tc;
+		if (this.transactionContext != null && this.transactionContext.getTransactionType() != Scope.NONE) {
+			if (this.requestMsg.getRequestOptions().isContinuous()) {
+				throw new IllegalStateException("Continuous requests are not allowed to be transactional."); //$NON-NLS-1$
+			}
+			this.transactionState = TransactionState.ACTIVE;
+		}
+	}
+
 	private CacheHint getCacheHint() {
 		if (requestMsg.getCommand() != null) {
 			return ((Command)requestMsg.getCommand()).getCacheHint();
@@ -942,7 +952,6 @@
 		return transactionContext;
 	}
 	
-	
 	Collection<DataTierTupleSource> getConnectorRequests() {
 		synchronized (this.connectorInfo) {
 			return new ArrayList<DataTierTupleSource>(this.connectorInfo.values());
Index: test-integration/common/src/test/java/org/teiid/arquillian/IntegrationTestTransactions.java
===================================================================
--- test-integration/common/src/test/java/org/teiid/arquillian/IntegrationTestTransactions.java	(revision 4435)
+++ test-integration/common/src/test/java/org/teiid/arquillian/IntegrationTestTransactions.java	(working copy)
@@ -74,6 +74,21 @@
 		execute("rollback");
 		execute("select * from temp");
 		assertRowCount(0);
+		
+		execute("select rand(1)"); //TODO - I think our rand function doesn't make sense
+		this.internalConnection.setAutoCommit(false);
+		execute("/*+ cache */ select rand()");
+		internalResultSet.next();
+		double d = internalResultSet.getDouble(1);
+		execute("/*+ cache */ select rand()");
+		internalResultSet.next();
+		double d1 = internalResultSet.getDouble(1);
+		assertEquals("Expected same", d, d1, 0);
+		this.internalConnection.rollback();
+		execute("/*+ cache */ select rand()");
+		internalResultSet.next();
+		double d2 = internalResultSet.getDouble(1);
+		assertTrue("Expected different", d != d2);
     }
 
 }
Index: engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- engine/src/main/java/org/teiid/dqp/internal/process/Request.java	(revision 4435)
+++ engine/src/main/java/org/teiid/dqp/internal/process/Request.java	(working copy)
@@ -336,14 +336,24 @@
     }
 
     private void createProcessor() throws TeiidComponentException {
-        
-        TransactionContext tc = transactionService.getOrCreateTransactionContext(workContext.getSessionId());
+    	this.context.setTransactionContext(getTransactionContext(true));
+        this.processor = new QueryProcessor(processPlan, context, bufferManager, processorDataManager);
+    	this.processor.setContinuous(this.requestMsg.getRequestOptions().isContinuous());
+    }
+
+	TransactionContext getTransactionContext(boolean startAutoWrap) throws TeiidComponentException {
+		if (this.transactionContext != null) {
+			return this.transactionContext;
+		}
+		TransactionContext tc = transactionService.getOrCreateTransactionContext(workContext.getSessionId());
         
         Assertion.assertTrue(tc.getTransactionType() != TransactionContext.Scope.REQUEST, "Transaction already associated with request."); //$NON-NLS-1$
 
         // If local or global transaction is not started.
         if (tc.getTransactionType() == Scope.NONE) {
-            
+            if (!startAutoWrap) {
+            	return null;
+            }
             boolean startAutoWrapTxn = false;
             
             if(RequestMessage.TXN_WRAP_ON.equals(requestMsg.getTxnAutoWrapMode())){ 
@@ -365,10 +375,8 @@
         
         tc.setIsolationLevel(requestMsg.getTransactionIsolation());
         this.transactionContext = tc;
-        this.context.setTransactionContext(tc);
-        this.processor = new QueryProcessor(processPlan, context, bufferManager, processorDataManager);
-    	this.processor.setContinuous(this.requestMsg.getRequestOptions().isContinuous());
-    }
+        return this.transactionContext;
+	}
 
     /**
      * state side effects:
Index: build/kits/jboss-as7/bin/scripts/teiid-domain-mode-install.cli
===================================================================
--- build/kits/jboss-as7/bin/scripts/teiid-domain-mode-install.cli	(revision 4433)
+++ build/kits/jboss-as7/bin/scripts/teiid-domain-mode-install.cli	(working copy)
@@ -10,17 +10,19 @@
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/replicated-cache=resultset-repl:add(mode=SYNC, batching=true)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/replicated-cache=resultset-repl/locking=LOCKING:add(isolation=READ_COMMITTED)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/replicated-cache=resultset-repl/expiration=EXPIRATION:add(lifespan=7200000)
-/profile=ha/subsystem=infinispan/cache-container=teiid-cache/replicated-cache=resultset-repl/eviction=EVICTION:add(max-entries=1024, strategy=LRU)
+/profile=ha/subsystem=infinispan/cache-container=teiid-cache/replicated-cache=resultset-repl/eviction=EVICTION:add(max-entries=1024, strategy=LIRS)
+/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/transaction=TRANSACTION:add(mode=NON_XA)
 
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset:add(mode=SYNC, batching=true)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/locking=LOCKING:add(isolation=READ_COMMITTED)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/expiration=EXPIRATION:add(lifespan=7200000)
-/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/eviction=EVICTION:add(max-entries=1024, strategy=LRU)
+/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/eviction=EVICTION:add(max-entries=1024, strategy=LIRS)
+/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=resultset/transaction=TRANSACTION:add(mode=NON_XA)
 
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=preparedplan:add(mode=SYNC, batching=true)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=preparedplan/locking=LOCKING:add(isolation=READ_COMMITTED)
 /profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=preparedplan/expiration=EXPIRATION:add(lifespan=28800)
-/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=preparedplan/eviction=EVICTION:add(max-entries=512, strategy=LRU)
+/profile=ha/subsystem=infinispan/cache-container=teiid-cache/local-cache=preparedplan/eviction=EVICTION:add(max-entries=512, strategy=LIRS)
 
 /profile=ha/subsystem=security/security-domain=teiid-security:add(cache-type=default)
 /profile=ha/subsystem=security/security-domain=teiid-security/authentication=classic:add(login-modules=[{"code"=>"org.jboss.security.auth.spi.UsersRolesLoginModule", "flag"=>"required", "module-options"=>[("usersProperties"=>"${jboss.domain.config.dir}/teiid-security-users.properties"), ("rolesProperties"=>"${jboss.domain.config.dir}/teiid-security-roles.properties")]}]) 
Index: build/kits/jboss-as7/standalone/configuration/standalone-teiid.xml
===================================================================
--- build/kits/jboss-as7/standalone/configuration/standalone-teiid.xml	(revision 4433)
+++ build/kits/jboss-as7/standalone/configuration/standalone-teiid.xml	(working copy)
@@ -170,10 +170,12 @@
             </cache-container>
             <cache-container name="teiid" default-cache="resultset">
                 <local-cache name="resultset">
+                	<transaction mode="NON_XA"/>
                     <expiration lifespan="7200000" />
                     <eviction max-entries="1024" strategy="LIRS"/>
                 </local-cache>
                 <local-cache name="resultset-repl">
+                	<transaction mode="NON_XA"/>
                     <expiration lifespan="7200000" />
                     <eviction max-entries="1024" strategy="LIRS"/>
                 </local-cache>                
