diff --git a/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/IgniteClientSpringCacheManager.java b/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/IgniteClientSpringCacheManager.java
index 49ed32b..ab39040 100644
--- a/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/IgniteClientSpringCacheManager.java
+++ b/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/IgniteClientSpringCacheManager.java
@@ -24,7 +24,7 @@
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.configuration.ClientConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.A;
-import org.apache.ignite.springdata.proxy.IgniteCacheClientProxy;
+import org.apache.ignite.springdata.proxy.IgniteClientCacheProxy;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.context.ApplicationListener;
@@ -169,7 +169,7 @@
 
         ClientCache<Object, Object> cache = cli.getOrCreateCache(ccfg.setName(name));
 
-        return new SpringCache(new IgniteCacheClientProxy<>(cache), this);
+        return new SpringCache(new IgniteClientCacheProxy<>(cache), this);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java b/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java
index 62622f6..6e407b3 100644
--- a/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java
+++ b/modules/spring-cache-ext/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java
@@ -29,7 +29,7 @@
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.springdata.proxy.IgniteCacheProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
@@ -355,7 +355,7 @@
             ? ignite.getOrCreateCache(cacheCfg, nearCacheCfg)
             : ignite.getOrCreateCache(cacheCfg);
 
-        return new SpringCache(new IgniteCacheProxyImpl<>(cache), this);
+        return new SpringCache(new IgniteNodeCacheProxy<>(cache), this);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-cache-ext/src/test/java/org/apache/ignite/cache/spring/SpringCacheTest.java b/modules/spring-cache-ext/src/test/java/org/apache/ignite/cache/spring/SpringCacheTest.java
index 06298b5..3e4c228 100644
--- a/modules/spring-cache-ext/src/test/java/org/apache/ignite/cache/spring/SpringCacheTest.java
+++ b/modules/spring-cache-ext/src/test/java/org/apache/ignite/cache/spring/SpringCacheTest.java
@@ -20,7 +20,7 @@
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.internal.util.typedef.G;
-import org.apache.ignite.springdata.proxy.IgniteCacheProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
@@ -59,7 +59,7 @@
 
         cacheName = String.valueOf(System.currentTimeMillis());
         nativeCache = ignite.getOrCreateCache(cacheName);
-        springCache = new SpringCache(new IgniteCacheProxyImpl<>(nativeCache), null);
+        springCache = new SpringCache(new IgniteNodeCacheProxy<>(nativeCache), null);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.java b/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.java
index 03b0bb4..2724940 100644
--- a/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.java
+++ b/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/query/IgniteRepositoryQuery.java
@@ -48,7 +48,7 @@
 import org.apache.ignite.cache.query.SqlQuery;
 import org.apache.ignite.cache.query.TextQuery;
 import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
-import org.apache.ignite.springdata.proxy.IgniteCacheClientProxy;
+import org.apache.ignite.springdata.proxy.IgniteClientCacheProxy;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.springdata20.repository.config.DynamicQueryConfig;
@@ -346,7 +346,7 @@
             qryCursor = cache.query(iQry);
         }
         catch (IllegalArgumentException e) {
-            if (cache instanceof IgniteCacheClientProxy) {
+            if (cache instanceof IgniteClientCacheProxy) {
                 throw new IllegalStateException(String.format("Query of type %s is not supported by thin client." +
                     " Check %s#%s method configuration or use Ignite node instance to connect to the Ignite cluster.",
                     iQry.getClass().getSimpleName(), mtd.getDeclaringClass().getName(), mtd.getName()), e);
diff --git a/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.java b/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.java
index 9410ec2..b3e449a 100644
--- a/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.java
+++ b/modules/spring-data-2.0-ext/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryImpl.java
@@ -30,9 +30,9 @@
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
-import org.apache.ignite.springdata.proxy.IgniteCacheProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.apache.ignite.springdata.proxy.IgniteProxy;
-import org.apache.ignite.springdata.proxy.IgniteProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeProxy;
 import org.apache.ignite.springdata20.repository.IgniteRepository;
 import org.apache.ignite.springdata20.repository.config.RepositoryConfig;
 import org.jetbrains.annotations.Nullable;
@@ -76,16 +76,16 @@
 
     /** {@inheritDoc} */
     @Override public IgniteCache<K, V> cache() {
-        if (cache instanceof IgniteCacheProxyImpl)
-            return ((IgniteCacheProxyImpl<K, V>)cache).delegate();
+        if (cache instanceof IgniteNodeCacheProxy)
+            return ((IgniteNodeCacheProxy<K, V>)cache).delegate();
 
         throw new UnsupportedOperationException(UNSUPPORTED_ERR_MSG);
     }
 
     /** {@inheritDoc} */
     @Override public Ignite ignite() {
-        if (ignite instanceof IgniteProxyImpl)
-            return ((IgniteProxyImpl)ignite).delegate();
+        if (ignite instanceof IgniteNodeProxy)
+            return ((IgniteNodeProxy)ignite).delegate();
 
         throw new UnsupportedOperationException(UNSUPPORTED_ERR_MSG);
     }
diff --git a/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.java b/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.java
index 56e5c4c..26b8fb9 100644
--- a/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.java
+++ b/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/query/IgniteRepositoryQuery.java
@@ -48,7 +48,7 @@
 import org.apache.ignite.cache.query.SqlQuery;
 import org.apache.ignite.cache.query.TextQuery;
 import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
-import org.apache.ignite.springdata.proxy.IgniteCacheClientProxy;
+import org.apache.ignite.springdata.proxy.IgniteClientCacheProxy;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.springdata22.repository.config.DynamicQueryConfig;
@@ -346,7 +346,7 @@
             qryCursor = cache.query(iQry);
         }
         catch (IllegalArgumentException e) {
-            if (cache instanceof IgniteCacheClientProxy) {
+            if (cache instanceof IgniteClientCacheProxy) {
                 throw new IllegalStateException(String.format("Query of type %s is not supported by thin client." +
                     " Check %s#%s method configuration or use Ignite node instance to connect to the Ignite cluster.",
                     iQry.getClass().getSimpleName(), mtd.getDeclaringClass().getName(), mtd.getName()), e);
diff --git a/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.java b/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.java
index d91da58..5bc5c3a 100644
--- a/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.java
+++ b/modules/spring-data-2.2-ext/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryImpl.java
@@ -30,9 +30,9 @@
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
-import org.apache.ignite.springdata.proxy.IgniteCacheProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.apache.ignite.springdata.proxy.IgniteProxy;
-import org.apache.ignite.springdata.proxy.IgniteProxyImpl;
+import org.apache.ignite.springdata.proxy.IgniteNodeProxy;
 import org.apache.ignite.springdata22.repository.IgniteRepository;
 import org.apache.ignite.springdata22.repository.config.RepositoryConfig;
 import org.jetbrains.annotations.Nullable;
@@ -76,16 +76,16 @@
 
     /** {@inheritDoc} */
     @Override public IgniteCache<K, V> cache() {
-        if (cache instanceof IgniteCacheProxyImpl)
-            return ((IgniteCacheProxyImpl<K, V>)cache).delegate();
+        if (cache instanceof IgniteNodeCacheProxy)
+            return ((IgniteNodeCacheProxy<K, V>)cache).delegate();
 
         throw new UnsupportedOperationException(UNSUPPORTED_ERR_MSG);
     }
 
     /** {@inheritDoc} */
     @Override public Ignite ignite() {
-        if (ignite instanceof IgniteProxyImpl)
-            return ((IgniteProxyImpl)ignite).delegate();
+        if (ignite instanceof IgniteNodeProxy)
+            return ((IgniteNodeProxy)ignite).delegate();
 
         throw new UnsupportedOperationException(UNSUPPORTED_ERR_MSG);
     }
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteProxyImpl.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteNodeProxy.java
similarity index 85%
rename from modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteProxyImpl.java
rename to modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteNodeProxy.java
index 79807e4..6ae19bb 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteProxyImpl.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/ClosableIgniteNodeProxy.java
@@ -19,12 +19,12 @@
 
 import org.apache.ignite.Ignite;
 
-/** Extends {@link IgniteProxyImpl} with the ability to close underlying Ignite instance. */
-public class ClosableIgniteProxyImpl extends IgniteProxyImpl implements AutoCloseable {
+/** Extends {@link IgniteNodeProxy} with the ability to close underlying Ignite instance. */
+public class ClosableIgniteNodeProxy extends IgniteNodeProxy implements AutoCloseable {
     /**
      * @param ignite Ignite instance.
      */
-    public ClosableIgniteProxyImpl(Ignite ignite) {
+    public ClosableIgniteNodeProxy(Ignite ignite) {
         super(ignite);
     }
 
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheClientProxy.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientCacheProxy.java
similarity index 95%
rename from modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheClientProxy.java
rename to modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientCacheProxy.java
index 5d7be5c..63197cf 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheClientProxy.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientCacheProxy.java
@@ -31,12 +31,12 @@
 import org.jetbrains.annotations.NotNull;
 
 /** Implementation of {@link IgniteCacheProxy} that provides access to Ignite cache through {@link ClientCache} instance. */
-public class IgniteCacheClientProxy<K, V> implements IgniteCacheProxy<K, V> {
+public class IgniteClientCacheProxy<K, V> implements IgniteCacheProxy<K, V> {
     /** {@link ClientCache} instance to which operations are delegated. */
     private final ClientCache<K, V> cache;
 
     /** */
-    public IgniteCacheClientProxy(ClientCache<K, V> cache) {
+    public IgniteClientCacheProxy(ClientCache<K, V> cache) {
         this.cache = cache;
     }
 
@@ -82,7 +82,7 @@
 
     /** {@inheritDoc} */
     @Override public IgniteCacheProxy<K, V> withExpiryPolicy(ExpiryPolicy expirePlc) {
-        return new IgniteCacheClientProxy<>(cache.withExpirePolicy(expirePlc));
+        return new IgniteClientCacheProxy<>(cache.withExpirePolicy(expirePlc));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientProxy.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientProxy.java
index 00dc42e..1fd04d3 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientProxy.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteClientProxy.java
@@ -32,12 +32,12 @@
 
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCacheProxy<K, V> getOrCreateCache(String name) {
-        return new IgniteCacheClientProxy<>(cli.getOrCreateCache(name));
+        return new IgniteClientCacheProxy<>(cli.getOrCreateCache(name));
     }
 
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCacheProxy<K, V> cache(String name) {
-        return new IgniteCacheClientProxy<>(cli.cache(name));
+        return new IgniteClientCacheProxy<>(cli.cache(name));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheProxyImpl.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeCacheProxy.java
similarity index 93%
rename from modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheProxyImpl.java
rename to modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeCacheProxy.java
index 2c96506..8a4120d 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteCacheProxyImpl.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeCacheProxy.java
@@ -31,12 +31,12 @@
 import org.jetbrains.annotations.NotNull;
 
 /** Implementation of {@link IgniteCacheProxy} that provides access to Ignite cache through {@link IgniteCache} instance. */
-public class IgniteCacheProxyImpl<K, V> implements IgniteCacheProxy<K, V> {
+public class IgniteNodeCacheProxy<K, V> implements IgniteCacheProxy<K, V> {
     /** {@link IgniteCache} instance to which operations are delegated. */
     private final IgniteCache<K, V> cache;
 
     /** */
-    public IgniteCacheProxyImpl(IgniteCache<K, V> cache) {
+    public IgniteNodeCacheProxy(IgniteCache<K, V> cache) {
         this.cache = cache;
     }
 
@@ -82,7 +82,7 @@
 
     /** {@inheritDoc} */
     @Override public IgniteCacheProxy<K, V> withExpiryPolicy(ExpiryPolicy expirePlc) {
-        return new IgniteCacheProxyImpl<>(cache.withExpiryPolicy(expirePlc));
+        return new IgniteNodeCacheProxy<>(cache.withExpiryPolicy(expirePlc));
     }
 
     /** {@inheritDoc} */
@@ -107,7 +107,7 @@
 
     /** {@inheritDoc} */
     @Override public IgniteCacheProxy<K, V> withSkipStore() {
-        return new IgniteCacheProxyImpl<>(cache.withSkipStore());
+        return new IgniteNodeCacheProxy<>(cache.withSkipStore());
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxyImpl.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeProxy.java
similarity index 87%
rename from modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxyImpl.java
rename to modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeProxy.java
index 85acceb..4e6c62b 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxyImpl.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteNodeProxy.java
@@ -22,25 +22,25 @@
 import org.apache.ignite.IgniteCache;
 
 /** Implementation of {@link IgniteProxy} that provides access to Ignite cluster through {@link Ignite} instance. */
-public class IgniteProxyImpl implements IgniteProxy {
+public class IgniteNodeProxy implements IgniteProxy {
     /** {@link Ignite} instance to which operations are delegated. */
     protected final Ignite ignite;
 
     /** */
-    public IgniteProxyImpl(Ignite ignite) {
+    public IgniteNodeProxy(Ignite ignite) {
         this.ignite = ignite;
     }
 
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCacheProxy<K, V> getOrCreateCache(String name) {
-        return new IgniteCacheProxyImpl<>(ignite.getOrCreateCache(name));
+        return new IgniteNodeCacheProxy<>(ignite.getOrCreateCache(name));
     }
 
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCacheProxy<K, V> cache(String name) {
         IgniteCache<K, V> cache = ignite.cache(name);
 
-        return cache == null ? null : new IgniteCacheProxyImpl<>(cache);
+        return cache == null ? null : new IgniteNodeCacheProxy<>(cache);
     }
 
     /** @return {@link Ignite} instance to which operations are delegated. */
@@ -56,7 +56,7 @@
         if (other == null || getClass() != other.getClass())
             return false;
 
-        return Objects.equals(ignite, ((IgniteProxyImpl)other).ignite);
+        return Objects.equals(ignite, ((IgniteNodeProxy)other).ignite);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxy.java b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxy.java
index 62e0d5c..d464212 100644
--- a/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxy.java
+++ b/modules/spring-data-commons/src/main/java/org/apache/ignite/springdata/proxy/IgniteProxy.java
@@ -47,19 +47,19 @@
      */
     public static IgniteProxy of(Object connObj) {
         if (connObj instanceof Ignite)
-            return new IgniteProxyImpl((Ignite)connObj);
+            return new IgniteNodeProxy((Ignite)connObj);
         else if (connObj instanceof IgniteConfiguration) {
             try {
-                return new IgniteProxyImpl(Ignition.ignite(((IgniteConfiguration)connObj).getIgniteInstanceName()));
+                return new IgniteNodeProxy(Ignition.ignite(((IgniteConfiguration)connObj).getIgniteInstanceName()));
             }
             catch (Exception ignored) {
                 // No-op.
             }
 
-            return new ClosableIgniteProxyImpl(Ignition.start((IgniteConfiguration)connObj));
+            return new ClosableIgniteNodeProxy(Ignition.start((IgniteConfiguration)connObj));
         }
         else if (connObj instanceof String)
-            return new ClosableIgniteProxyImpl(Ignition.start((String)connObj));
+            return new ClosableIgniteNodeProxy(Ignition.start((String)connObj));
         else if (connObj instanceof IgniteClient)
             return new IgniteClientProxy((IgniteClient)connObj);
         else if (connObj instanceof ClientConfiguration)
diff --git a/modules/spring-tx-ext/pom.xml b/modules/spring-tx-ext/pom.xml
index adfe9ea..4fd5c1d 100644
--- a/modules/spring-tx-ext/pom.xml
+++ b/modules/spring-tx-ext/pom.xml
@@ -76,6 +76,13 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-spring-data-commons</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java
index eb7cd78..045739d 100644
--- a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java
+++ b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.ignite.transactions.spring;
 
+import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.CacheProxy;
 import org.junit.Test;
 import org.springframework.transaction.IllegalTransactionStateException;
 import org.springframework.transaction.InvalidIsolationLevelException;
@@ -33,7 +33,7 @@
     protected static final String CACHE_NAME = "testCache";
 
     /** */
-    public abstract CacheProxy<Integer, String> cache();
+    public abstract IgniteCacheProxy<Integer, String> cache();
 
     /** */
     public abstract GridSpringTransactionService service();
diff --git a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java
index d5e2a8e..083c255 100644
--- a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java
+++ b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java
@@ -20,8 +20,8 @@
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.CacheProxy;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.IgniteCacheProxy;
+import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.GenericXmlApplicationContext;
 
@@ -46,8 +46,8 @@
         return cfg;
     }
 
-    @Override public CacheProxy<Integer, String> cache() {
-        return new IgniteCacheProxy<>(grid().cache(CACHE_NAME));
+    @Override public IgniteCacheProxy<Integer, String> cache() {
+        return new IgniteNodeCacheProxy<>(grid().cache(CACHE_NAME));
     }
 
     @Override public GridSpringTransactionService service() {
diff --git a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java
index 19774a6..5695896 100644
--- a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java
+++ b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java
@@ -18,8 +18,8 @@
 package org.apache.ignite.transactions.spring;
 
 import org.apache.ignite.Ignite;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.CacheProxy;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.IgniteCacheProxy;
+import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
+import org.apache.ignite.springdata.proxy.IgniteNodeCacheProxy;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.GenericXmlApplicationContext;
 
@@ -31,8 +31,8 @@
     /** */
     private GridSpringTransactionService service;
 
-    @Override public CacheProxy<Integer, String> cache() {
-        return new IgniteCacheProxy<>(ignite.cache(CACHE_NAME));
+    @Override public IgniteCacheProxy<Integer, String> cache() {
+        return new IgniteNodeCacheProxy<>(ignite.cache(CACHE_NAME));
     }
 
     @Override public GridSpringTransactionService service() {
diff --git a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java
index 4a0d02f..77af202 100644
--- a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java
+++ b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java
@@ -17,8 +17,7 @@
 
 package org.apache.ignite.transactions.spring;
 
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.client.ClientCache;
+import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
@@ -37,7 +36,7 @@
      * @param entryCnt Entries count.
      */
     @Transactional
-    public void put(CacheProxy<Integer, String> cache, int entryCnt) {
+    public void put(IgniteCacheProxy<Integer, String> cache, int entryCnt) {
         for (int i = 0; i < entryCnt; i++)
             cache.put(i, String.valueOf(i));
     }
@@ -47,7 +46,7 @@
      * @param entryCnt Entries count.
      */
     @Transactional
-    public void putWithError(CacheProxy<Integer, String> cache, int entryCnt) {
+    public void putWithError(IgniteCacheProxy<Integer, String> cache, int entryCnt) {
         for (int i = 0; i < entryCnt; i++)
             cache.put(i, String.valueOf(i));
 
@@ -58,7 +57,7 @@
      * @param cache Cache.
      */
     @Transactional(propagation = Propagation.MANDATORY)
-    public void putWithMandatoryPropagation(CacheProxy<Integer, String> cache) {
+    public void putWithMandatoryPropagation(IgniteCacheProxy<Integer, String> cache) {
         cache.put(1, "1");
     }
 
@@ -66,13 +65,13 @@
      * @param cache Cache.
      */
     @Transactional(isolation = Isolation.READ_UNCOMMITTED)
-    public void putWithUnsupportedIsolationLevel(CacheProxy<Integer, String> cache) {
+    public void putWithUnsupportedIsolationLevel(IgniteCacheProxy<Integer, String> cache) {
         cache.put(1, "1");
     }
 
     /** */
     @Transactional
-    public void putWithNestedError(CacheProxy<Integer, String> cache, int entryCnt) {
+    public void putWithNestedError(IgniteCacheProxy<Integer, String> cache, int entryCnt) {
         self.put(cache, entryCnt);
 
         try {
@@ -82,68 +81,4 @@
             // No-op.
         }
     }
-
-    /** */
-    public static class ClientCacheProxy<K, V> implements CacheProxy<K, V> {
-        /** */
-        private final ClientCache<K, V> cliCache;
-
-        /** */
-        public ClientCacheProxy(ClientCache<K, V> cliCache) {
-            this.cliCache = cliCache;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(K key, V val) {
-            cliCache.put(key, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int size() {
-            return cliCache.size();
-        }
-
-        /** {@inheritDoc} */
-        @Override public void removeAll() {
-            cliCache.removeAll();
-        }
-    }
-
-    /** */
-    public static class IgniteCacheProxy<K, V> implements CacheProxy<K, V> {
-        /** */
-        private final IgniteCache<K, V> cache;
-
-        /** */
-        public IgniteCacheProxy(IgniteCache<K, V> cache) {
-            this.cache = cache;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(K key, V val) {
-             cache.put(key, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int size() {
-            return cache.size();
-        }
-
-        /** {@inheritDoc} */
-        @Override public void removeAll() {
-            cache.removeAll();
-        }
-    }
-
-    /** */
-    public static interface CacheProxy<K, V> {
-        /** */
-        public void put(K key, V val);
-
-        /** */
-        public int size();
-
-        /** */
-        public void removeAll();
-    }
 }
diff --git a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/IgniteClientSpringTransactionManagerTest.java b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/IgniteClientSpringTransactionManagerTest.java
index 0d333ea..5f9fad5 100644
--- a/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/IgniteClientSpringTransactionManagerTest.java
+++ b/modules/spring-tx-ext/src/test/java/org/apache/ignite/transactions/spring/IgniteClientSpringTransactionManagerTest.java
@@ -22,9 +22,9 @@
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.ClientConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.springdata.proxy.IgniteCacheProxy;
+import org.apache.ignite.springdata.proxy.IgniteClientCacheProxy;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.CacheProxy;
-import org.apache.ignite.transactions.spring.GridSpringTransactionService.ClientCacheProxy;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -65,8 +65,8 @@
     }
 
     /** {@inheritDoc} */
-    @Override public CacheProxy<Integer, String> cache() {
-        return new ClientCacheProxy<>(cli.cache(CACHE_NAME));
+    @Override public IgniteCacheProxy<Integer, String> cache() {
+        return new IgniteClientCacheProxy<>(cli.cache(CACHE_NAME));
     }
 
     /** {@inheritDoc} */
