diff --git a/install.sh b/install.sh
--- a/install.sh
+++ b/install.sh
@@ -168,6 +168,7 @@ ETC_DIRS="$ETC_LOCATION/im_kvm \
           $ETC_LOCATION/vmm_sh \
           $ETC_LOCATION/tm_nfs \
           $ETC_LOCATION/tm_ssh \
+          $ETC_LOCATION/tm_ssh_cache \
           $ETC_LOCATION/tm_dummy \
           $ETC_LOCATION/tm_lvm \
           $ETC_LOCATION/hm \
@@ -184,6 +185,7 @@ LIB_DIRS="$LIB_LOCATION/ruby \
           $LIB_LOCATION/tm_commands \
           $LIB_LOCATION/tm_commands/nfs \
           $LIB_LOCATION/tm_commands/ssh \
+          $LIB_LOCATION/tm_commands/ssh_cache \
           $LIB_LOCATION/tm_commands/dummy \
           $LIB_LOCATION/tm_commands/lvm \
           $LIB_LOCATION/mads \
@@ -275,6 +277,7 @@ INSTALL_FILES=(
     VMM_SSH_GANGLIA_POLL:$LIB_LOCATION/remotes/vmm/xen/poll_local
     NFS_TM_COMMANDS_LIB_FILES:$LIB_LOCATION/tm_commands/nfs
     SSH_TM_COMMANDS_LIB_FILES:$LIB_LOCATION/tm_commands/ssh
+    SSH_CACHE_TM_COMMANDS_LIB_FILES:$LIB_LOCATION/tm_commands/ssh_cache
     DUMMY_TM_COMMANDS_LIB_FILES:$LIB_LOCATION/tm_commands/dummy
     LVM_TM_COMMANDS_LIB_FILES:$LIB_LOCATION/tm_commands/lvm
     EXAMPLE_SHARE_FILES:$SHARE_LOCATION/examples
@@ -330,6 +333,7 @@ INSTALL_ETC_FILES=(
     IM_EC2_ETC_FILES:$ETC_LOCATION/im_ec2
     TM_NFS_ETC_FILES:$ETC_LOCATION/tm_nfs
     TM_SSH_ETC_FILES:$ETC_LOCATION/tm_ssh
+    TM_SSH_CACHE_ETC_FILES:$ETC_LOCATION/tm_ssh_cache
     TM_DUMMY_ETC_FILES:$ETC_LOCATION/tm_dummy
     TM_LVM_ETC_FILES:$ETC_LOCATION/tm_lvm
     HM_ETC_FILES:$ETC_LOCATION/hm
@@ -502,6 +506,8 @@ SSH_TM_COMMANDS_LIB_FILES="src/tm_mad/ss
                            src/tm_mad/ssh/tm_mv.sh \
                            src/tm_mad/ssh/tm_context.sh"
 
+SSH_CACHE_TM_COMMANDS_LIB_FILES="src/tm_mad/ssh_cache/tm_clone.sh"
+
 DUMMY_TM_COMMANDS_LIB_FILES="src/tm_mad/dummy/tm_dummy.sh"
 
 LVM_TM_COMMANDS_LIB_FILES="src/tm_mad/lvm/tm_clone.sh \
@@ -547,6 +553,7 @@ IM_EC2_ETC_FILES="src/im_mad/ec2/im_ec2r
 # Storage drivers config. files, to be installed under $ETC_LOCATION
 #   - nfs, $ETC_LOCATION/tm_nfs
 #   - ssh, $ETC_LOCATION/tm_ssh
+#   - ssh_cache, $ETC_LOCATION/tm_ssh_cache
 #   - dummy, $ETC_LOCATION/tm_dummy
 #   - lvm, $ETC_LOCATION/tm_lvm
 #-------------------------------------------------------------------------------
@@ -557,6 +564,9 @@ TM_NFS_ETC_FILES="src/tm_mad/nfs/tm_nfs.
 TM_SSH_ETC_FILES="src/tm_mad/ssh/tm_ssh.conf \
                   src/tm_mad/ssh/tm_sshrc"
 
+TM_SSH_CACHE_ETC_FILES="src/tm_mad/ssh_cache/tm_ssh_cache.conf \
+                  src/tm_mad/ssh_cache/tm_ssh_cacherc"
+
 TM_DUMMY_ETC_FILES="src/tm_mad/dummy/tm_dummy.conf \
                     src/tm_mad/dummy/tm_dummyrc"
 
diff --git a/src/tm_mad/ssh_cache/tm_clone.sh b/src/tm_mad/ssh_cache/tm_clone.sh
new file mode 100755
--- /dev/null
+++ b/src/tm_mad/ssh_cache/tm_clone.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# (C) 2011 Krzysztof Pawlik
+# Grupa Onet.pl S.A.
+
+MY_UNIQUE_ID="${$}-${RANDOM}"
+CACHE_DIRECTORY="/nebula/image-cache"
+
+SRC="${1}"
+DST="${2}"
+
+if [ -z "${ONE_LOCATION}" ]; then
+    TMCOMMON="/usr/lib/one/mads/tm_common.sh"
+else
+    TMCOMMON="${ONE_LOCATION}/lib/mads/tm_common.sh"
+fi
+
+. "${TMCOMMON}"
+
+SRC_PATH="$(arg_path "${SRC}")"
+DST_PATH="$(arg_path "${DST}")"
+
+SRC_HOST="$(arg_host "${SRC}")"		# Unused
+DST_HOST="$(arg_host "${DST}")"
+
+DST_DIR="$(dirname "${DST_PATH}")"
+
+CACHED_IMAGE="${CACHE_DIRECTORY}/$(basename "${SRC_PATH}")"
+
+exec_and_log "${SSH} ${DST_HOST} mkdir -p ${CACHE_DIRECTORY}"
+exec_and_log "${SSH} ${DST_HOST} mkdir -p ${DST_DIR}"
+
+local_size="$(stat --format="%s" "${SRC_PATH}")"
+remote_size="$(${SSH} ${DST_HOST} stat --format="%s" ${CACHED_IMAGE} 2> /dev/null)"
+[[ -n "${remote_size}" ]] || remote_size="0"
+log "ssh_cache: remote_size=${remote_size} local_size=${local_size}"
+
+if [[ "${remote_size}" -ne "${local_size}" ]]; then
+	exec_and_log "${SCP} ${SRC} ${DST_HOST}:${CACHED_IMAGE}-${MY_UNIQUE_ID}"
+	exec_and_log "${SSH} ${DST_HOST} chmod 666 ${CACHED_IMAGE}-${MY_UNIQUE_ID}"
+	exec_and_log "${SSH} ${DST_HOST} mv -f ${CACHED_IMAGE}-${MY_UNIQUE_ID} ${CACHED_IMAGE}"
+fi
+
+exec_and_log "${SSH} ${DST_HOST} cp -a ${CACHED_IMAGE} ${DST_PATH}"
+
+exit 0
diff --git a/src/tm_mad/ssh_cache/tm_ssh_cache.conf b/src/tm_mad/ssh_cache/tm_ssh_cache.conf
new file mode 100755
--- /dev/null
+++ b/src/tm_mad/ssh_cache/tm_ssh_cache.conf
@@ -0,0 +1,7 @@
+CLONE   = ssh_cache/tm_clone.sh
+LN      = ssh/tm_ln.sh
+MKSWAP  = ssh/tm_mkswap.sh
+MKIMAGE = ssh/tm_mkimage.sh
+DELETE  = ssh/tm_delete.sh
+MV      = ssh/tm_mv.sh
+CONTEXT = ssh/tm_context.sh
diff --git a/src/tm_mad/ssh_cache/tm_ssh_cacherc b/src/tm_mad/ssh_cache/tm_ssh_cacherc
new file mode 100644
