diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1b0d6002bd3cb3fd1b8996baec47d89dfa730fd..c31d605bd28213d887e01e20bb954b5bdd8c0342 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -392,6 +392,17 @@ endif()
 # Provide an option for generating documentation.
 add_subdirectory(Utilities/Doxygen)
 
+#----------------------------------------------------------------------
+# Provide a target to generate the SuperBuild archive (only for Unix)
+if(UNIX)
+  add_custom_target(SuperBuild-archive
+    COMMAND ./SuperbuildDownloadList.sh
+      ${OTB_BINARY_DIR}/Download
+      ${OTB_BINARY_DIR}
+    WORKING_DIRECTORY ${OTB_SOURCE_DIR}/Utilities/Maintenance
+    )
+endif()
+
 # TODO cleanup
 # Create target to download data from the OTBData group. This must come after
 # all tests have been added that reference the group, so we put it last.
diff --git a/Utilities/Maintenance/SuperbuildDownloadList.sh b/Utilities/Maintenance/SuperbuildDownloadList.sh
index e0cc7033b1933fc5d8943747184a249d51d01f5c..2cb32210b12d8d28a5c985047956271ad4e970e2 100755
--- a/Utilities/Maintenance/SuperbuildDownloadList.sh
+++ b/Utilities/Maintenance/SuperbuildDownloadList.sh
@@ -1,2 +1,62 @@
 #/bin/bash
-grep -h -E "^[^#]*\"https?://.*(\.tar\.gz|\.tar\.bz2|\.tgz|\.tar\.xz|\.zip|export=download).*\"" ../../SuperBuild/CMake/*.cmake | grep -o -E "https?://[^\"]*" | sed "s/\/download$//" | sort | uniq
+
+if [ $# -eq 2 ]; then
+DOWNLOAD_DIR=$(readlink -f $1)
+OUTPUT_DIR=$(readlink -f $2)
+else
+echo 'Usage: '$0' <download_directory> <archive_output_directory>'
+exit 1
+fi
+
+SB_CMAKE_DIR_REL=$(dirname $0)/../../SuperBuild/CMake
+SB_CMAKE_DIR=$(readlink -f ${SB_CMAKE_DIR_REL})
+
+DOWNLOAD_LIST=$(grep -h -E "^[^#]*\"https?://.*(\.tar\.gz|\.tar\.bz2|\.tgz|\.tar\.xz|\.zip|export=download).*\"" ${SB_CMAKE_DIR}/*.cmake | grep -o -E "https?://[^\"]*" | sed "s/\/\(download\)\?$//" | sort | uniq)
+
+DOWNLOAD_NAMES=
+
+mkdir -p ${DOWNLOAD_DIR}
+cd ${DOWNLOAD_DIR}
+
+echo "Start downloads..."
+
+for url in ${DOWNLOAD_LIST}; do
+  # clean log file
+  echo "" >download.log
+
+  file_name=$(echo "${url}" | grep -o -E "[^\/]+$")
+  docs_google=$(echo "${file_name}" | grep -F "export=download")
+  if [ "${docs_google}" = "" ]; then
+    echo "Download ${file_name}..."
+    wget -N ${url} -o download.log
+  else
+    # look into the original file for a valid download name
+    file_name=$(grep -h -A 3 -B 3 -F "${url}" ${SB_CMAKE_DIR}/*.cmake | grep -E "^[^#]*DOWNLOAD_NAME" | grep -o -E "[^ ]*\.(tar\.gz|tar\.bz2|tar\.xz|zip)" | uniq)
+    if [ -z "$file_name" ]; then
+      echo "Can't find correct filename for url ${url} : skip download"
+    else
+      echo "Download ${file_name}..."
+      wget -O ${file_name} ${url} -o download.log
+    fi
+  fi
+
+  download_errors=$(grep "ERROR" download.log)
+  if [ "$download_errors" != "" ]; then
+    echo "=== Error downloading ${file_name} ==="
+    cat download.log
+  else
+    if [ "$file_name" != "" ]; then
+      DOWNLOAD_NAMES="${DOWNLOAD_NAMES} ${file_name}"
+    fi
+  fi
+done
+
+rm download.log
+
+echo "Create archive..."
+
+cd ${OUTPUT_DIR}
+tar -cjf SuperBuild-archives.tar.bz2 -C ${DOWNLOAD_DIR} ${DOWNLOAD_NAMES}
+
+echo "Compute md5sum..."
+md5sum SuperBuild-archives.tar.bz2 >SuperBuild-archives.md5