Index: V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/CacheTest.cs
===================================================================
--- V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/CacheTest.cs	(revision 668665)
+++ V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/CacheTest.cs	(working copy)
@@ -141,6 +141,27 @@
 
             Assert.AreEqual(firstId, secondId);
         }
+
+        /// <summary>
+        /// Tests handling of Aggregate results from cache.
+        /// </summary>
+        /// <remarks>The aggregate in the cache should immutable</remarks>
+        [Test]
+        public void TestAggregateContainer()
+        {
+            IList list = dataMapper.QueryForList("GetCachedAccountsViaResultMap", null);
+            
+            Assert.IsTrue(list.Count > 0);
+            int originalCount = list.Count;
+            list.RemoveAt(0);
+
+            IList list2 = dataMapper.QueryForList("GetCachedAccountsViaResultMap", null);
+            Assert.IsTrue(list2.Count == originalCount);
+
+
+
+
+        }
 	    
         /// <summary>
         /// Test Cache query
Index: V3/src/Apache.Ibatis.DataMapper/MappedStatements/CachingStatement.cs
===================================================================
--- V3/src/Apache.Ibatis.DataMapper/MappedStatements/CachingStatement.cs	(revision 668812)
+++ V3/src/Apache.Ibatis.DataMapper/MappedStatements/CachingStatement.cs	(working copy)
@@ -147,7 +147,7 @@
 				Statement.CacheModel[cacheKey] = map;
 			}
 
-			return map;
+			return new Hashtable(map);
 		}
 
         #region ExecuteQueryForMap .NET 2.0
@@ -188,7 +188,7 @@
                 Statement.CacheModel[cacheKey] = map;
             }
 
-            return map;
+            return new Dictionary<K, V>(map);
         }
 
         /// <summary>
@@ -271,7 +271,7 @@
                 Statement.CacheModel[cacheKey] = list;
             }
 
-            return RaisePostEvent<IList, PostSelectEventArgs>(PostSelectEvent, param, list);
+            return RaisePostEvent<IList, PostSelectEventArgs>(PostSelectEvent, param, new ArrayList(list));
         }
         #endregion
 
@@ -313,7 +313,7 @@
                 list = mappedStatement.RunQueryForList<T>(request, session, param);
                 Statement.CacheModel[cacheKey] = list;
             }
-            return RaisePostEvent<IList<T>, PostSelectEventArgs>(PostSelectEvent, param, list);
+            return RaisePostEvent<IList<T>, PostSelectEventArgs>(PostSelectEvent, param, new List<T>(list));
         }
         #endregion
 
