diff --git a/src/Umbraco.Core/Persistence/Repositories/DeepCloneRuntimeCacheProvider.cs b/src/Umbraco.Core/Persistence/Repositories/DeepCloneRuntimeCacheProvider.cs
new file mode 100644
index 0000000000..fa998f06a2
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/Repositories/DeepCloneRuntimeCacheProvider.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web.Caching;
+using Umbraco.Core.Cache;
+using Umbraco.Core.Models;
+using Umbraco.Core.Models.EntityBase;
+
+namespace Umbraco.Core.Persistence.Repositories
+{
+ ///
+ /// Ensures that all inserts and returns are a deep cloned copy of the item when
+ /// the item is IDeepCloneable
+ ///
+ internal class DeepCloneRuntimeCacheProvider : IRuntimeCacheProvider
+ {
+ private readonly IRuntimeCacheProvider _innerProvider;
+
+ public DeepCloneRuntimeCacheProvider(IRuntimeCacheProvider innerProvider)
+ {
+ _innerProvider = innerProvider;
+ }
+
+ #region Clear - doesn't require any changes
+ public void ClearAllCache()
+ {
+ _innerProvider.ClearAllCache();
+ }
+
+ public void ClearCacheItem(string key)
+ {
+ _innerProvider.ClearCacheItem(key);
+ }
+
+ public void ClearCacheObjectTypes(string typeName)
+ {
+ _innerProvider.ClearCacheObjectTypes(typeName);
+ }
+
+ public void ClearCacheObjectTypes()
+ {
+ _innerProvider.ClearCacheObjectTypes();
+ }
+
+ public void ClearCacheObjectTypes(Func predicate)
+ {
+ _innerProvider.ClearCacheObjectTypes(predicate);
+ }
+
+ public void ClearCacheByKeySearch(string keyStartsWith)
+ {
+ _innerProvider.ClearCacheByKeySearch(keyStartsWith);
+ }
+
+ public void ClearCacheByKeyExpression(string regexString)
+ {
+ _innerProvider.ClearCacheByKeyExpression(regexString);
+ }
+ #endregion
+
+ public IEnumerable