diff --git a/src/datastore_mad/remotes/aoe/aoe.conf b/src/datastore_mad/remotes/aoe/aoe.conf
new file mode 100644
index 0000000..58cba96
--- /dev/null
+++ b/src/datastore_mad/remotes/aoe/aoe.conf
@@ -0,0 +1,24 @@
+# -------------------------------------------------------------------------- #
+# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may #
+# not use this file except in compliance with the License. You may obtain #
+# a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+#--------------------------------------------------------------------------- #
+
+# Default AoE target host
+HOST=localhost
+
+# Default ethernet interface
+DEFAULT_ETH=eth1
+
+# Default volume group
+VG_NAME=vg-one
diff --git a/src/datastore_mad/remotes/aoe/clone b/src/datastore_mad/remotes/aoe/clone
new file mode 100755
index 0000000..5414185
--- /dev/null
+++ b/src/datastore_mad/remotes/aoe/clone
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# -------------------------------------------------------------------------- #
+# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may #
+# not use this file except in compliance with the License. You may obtain #
+# a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+#--------------------------------------------------------------------------- #
+
+###############################################################################
+# This script is used to copy a VM image (SRC) to the image repository as DST
+# Several SRC types are supported
+###############################################################################
+# -------- Set up the environment to source common tools & conf ------------
+if [ -z "${ONE_LOCATION}" ]; then
+ LIB_LOCATION=/usr/lib/one
+else
+ LIB_LOCATION=$ONE_LOCATION/lib
+fi
+
+. $LIB_LOCATION/sh/scripts_common.sh
+
+DRIVER_PATH=$(dirname $0)
+source ${DRIVER_PATH}/../libfs.sh
+source ${DRIVER_PATH}/aoe.conf
+
+# -------- Get cp and datastore arguments from OpenNebula core ------------
+
+DRV_ACTION=$1
+ID=$2
+
+XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"
+
+unset i XPATH_ELEMENTS
+
+while IFS= read -r -d '' element; do
+ XPATH_ELEMENTS[i++]="$element"
+done < <($XPATH /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/UMASK \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
+ /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DEFAULT_ETH \
+ /DS_DRIVER_ACTION_DATA/IMAGE/PATH \
+ /DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
+
+BASE_PATH="${XPATH_ELEMENTS[0]}"
+RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
+SAFE_DIRS="${XPATH_ELEMENTS[2]}"
+UMASK="${XPATH_ELEMENTS[3]}"
+DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
+VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
+DEFAULT_ETH="${XPATH_ELEMENTS[6]:-$DEFAULT_ETH}"
+SRC="${XPATH_ELEMENTS[7]}"
+SIZE="${XPATH_ELEMENTS[8]}"
+
+set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
+
+LV_NAME="lv-one-${ID}"
+DEV="/dev/$VG_NAME/$LV_NAME"
+
+SHELF=`echo $SRC | sed 's/e//g' | awk -F. '{print \$1}'`
+SLOT=`echo $SRC | sed 's/e//g' | awk -F. '{print \$2}'`
+
+ETHER_SRC=`$SSH $DST_HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
+LV_SRC=$(echo $ETHER_SRC|awk -F/ '{print $NF}')
+DEV_SRC="/dev/$VG_NAME/$LV_SRC"
+
+CLONE_CMD=$(cat < vmid dsid
+# - host is the target host to deploy the VM
+# - remote_system_ds is the path for the system datastore in the host
+# - vmid is the id of the VM
+# - dsid is the target datastore (0 is the system datastore)
+
+DST=$1
+
+VMID=$2
+DSID=$3
+
+if [ -z "${ONE_LOCATION}" ]; then
+ TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
+else
+ TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
+fi
+
+. $TMCOMMON
+
+DRIVER_PATH=$(dirname $0)
+
+source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
+
+#-------------------------------------------------------------------------------
+# Return if deleting a disk, we will delete them when removing the
+# remote_system_ds directory for the VM (remotely)
+#-------------------------------------------------------------------------------
+DST_PATH=`arg_path $DST`
+DST_HOST=`arg_host $DST`
+
+#-------------------------------------------------------------------------------
+# Get IQN information
+#-------------------------------------------------------------------------------
+
+DISK_ID=$(echo "$DST_PATH" | $AWK -F. '{print $NF}')
+
+XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
+
+unset i XPATH_ELEMENTS
+
+while IFS= read -r -d '' element; do
+ XPATH_ELEMENTS[i++]="$element"
+done < <(onevm show -x $VMID| $XPATH \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/IMAGE_ID \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT)
+
+SHELFSLOT_SOURCE="${XPATH_ELEMENTS[0]}"
+IMAGE_ID="${XPATH_ELEMENTS[1]}"
+PERSISTENT="${XPATH_ELEMENTS[2]}"
+
+TARGET=`arg_path $SHELFSLOT`
+TARGET_HOST=$HOST
+
+#-------------------------------------------------------------------------------
+# Remove directory if dst_path is a directory
+#-------------------------------------------------------------------------------
+
+if [ `is_disk $DST_PATH` -eq 0 ]; then
+ # Directory
+ log "Deleting $DST_PATH"
+ ssh_exec_and_log "$DST_HOST" "rm -rf $DST_PATH" "Error deleting $DST_PATH"
+ exit 0
+fi
+
+if [ "$PERSISTENT" = "YES" ]; then
+ exit 0
+fi
+
+#-------------------------------------------------------------------------------
+# Remove target and LV in the AoE server
+#-------------------------------------------------------------------------------
+
+
+TARGET_LV_NAME="lv-one-$IMAGE_ID-$VMID"
+ETHER_SRC=`$SSH $TARGET_HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH /dev/$VG_NAME/$TARGET_LV_NAME)`
+SHELF=`echo $ETHER_SRC | sed 's/e//g' | awk -F. '{print \$1}'`
+SLOT=`echo $ETHER_SRC | sed 's/e//g' | awk -F. '{print \$2}'`
+
+DELETE_CMD=$(cat < vmid dsid
+#
+# - hostX is the target host to deploy the VM
+# - system_ds is the path for the system datastore in the host
+# - vmid is the id of the VM
+# - dsid is the target datastore (0 is the system datastore)
+
+SRC=$1
+DST=$2
+
+VMID=$3
+DSID=$4
+
+if [ -z "${ONE_LOCATION}" ]; then
+ TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
+else
+ TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
+fi
+
+. $TMCOMMON
+
+DRIVER_PATH=$(dirname $0)
+
+source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
+
+#-------------------------------------------------------------------------------
+# Return if moving a disk, we will move them when moving the whole system_ds
+# directory for the VM
+#-------------------------------------------------------------------------------
+SRC_PATH=`arg_path $SRC`
+DST_PATH=`arg_path $DST`
+
+SRC_HOST=`arg_host $SRC`
+DST_HOST=`arg_host $DST`
+
+DST_DIR=`dirname $DST_PATH`
+
+if [ `is_disk $SRC_PATH` -eq 0 ]; then
+ ssh_make_path $DST_HOST $DST_DIR
+
+ log "Moving $SRC to $DST"
+
+ exec_and_log "$SCP -r $SRC $DST" "Could not copy $SRC to $DST"
+
+ ssh_exec_and_log "$SRC_HOST" "rm -rf $SRC_PATH" \
+ "Could not remove $SRC_HOST:$SRC_PATH"
+
+ exit 0
+fi
+
+if [ "$SRC" == "$DST" ]; then
+ log "Not moving $SRC to $DST, they are the same path"
+ exit 0
+fi
+
+exit 0
diff --git a/src/tm_mad/aoe/mvds b/src/tm_mad/aoe/mvds
new file mode 100755
index 0000000..df8cb17
--- /dev/null
+++ b/src/tm_mad/aoe/mvds
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+# -------------------------------------------------------------------------- #
+# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may #
+# not use this file except in compliance with the License. You may obtain #
+# a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+#--------------------------------------------------------------------------- #
+
+# mvds host:remote_system_ds/disk.i fe:SOURCE
+# - fe is the front-end hostname
+# - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk
+# - host is the target host to deploy the VM
+# - remote_system_ds is the path for the system datastore in the host
+# - vmid is the id of the VM
+# - dsid is the target datastore (0 is the system datastore)
+
+SRC=$1
+DST=$2
+
+VMID=$3
+DSID=$4
+
+if [ -z "${ONE_LOCATION}" ]; then
+ TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
+else
+ TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
+fi
+
+DRIVER_PATH=$(dirname $0)
+
+. $TMCOMMON
+
+source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
+
+SRC_HOST=`arg_host $SRC`
+NEW_IQN="$DST"
+
+DISK_ID=$(echo $SRC|awk -F. '{print $NF}')
+
+#-------------------------------------------------------------------------------
+# Get image information
+#-------------------------------------------------------------------------------
+
+XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
+
+unset i XPATH_ELEMENTS
+
+while IFS= read -r -d '' element; do
+ XPATH_ELEMENTS[i++]="$element"
+done < <(onevm show -x $VMID| $XPATH \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SAVE_AS \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT \
+ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/IMAGE_ID)
+
+IQN="${XPATH_ELEMENTS[0]}"
+SAVE_AS="${XPATH_ELEMENTS[1]}"
+PERSISTENT="${XPATH_ELEMENTS[2]}"
+IMAGE_ID="${XPATH_ELEMENTS[3]}"
+
+# Exit if not save_as. We are finished if this was a persistent image.
+[ -z "$SAVE_AS" ] && exit 0
+
+#-------------------------------------------------------------------------------
+# IQN and TARGETs
+#-------------------------------------------------------------------------------
+if [ -z "$PERSISTENT" ]; then
+ LV_NAME="lv-one-$IMAGE_ID-$VMID"
+else
+ LV_NAME="lv-one-$IMAGE_ID"
+fi
+SOURCE_DEV="/dev/$VG_NAME/$LV_NAME"
+OLD_ETHER_SRC=`$SSH $HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $SOURCE_DEV)`
+OLD_SHELF=`echo $OLD_ETHER_SRC | sed 's/e//g' | awk -F. '{print \$1}'`
+OLD_SLOT=`echo $OLD_ETHER_SRC | sed 's/e//g' | awk -F. '{print \$2}'`
+
+
+SHELF=`echo $NEW_IQN | sed 's/e//g' | awk -F. '{print \$1}'`
+SLOT=`echo $NEW_IQN | sed 's/e//g' | awk -F. '{print \$2}'`
+
+ETHER_SRC=`$SSH $HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
+
+TARGET_LV_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF)}'`
+TARGET_DEV="/dev/$VG_NAME/$TARGET_LV_NAME"
+TARGET_HOST=$HOST
+
+CLONE_CMD=$(cat <