diff --git a/boards.txt b/boards.txt
index d7600b879d4ee27359fc853c13e1ee8c3944c2e6..2b79e2d3967b410d17c2b5f65ee9c3371ec5a772 100644
--- a/boards.txt
+++ b/boards.txt
@@ -15,6 +15,7 @@ arduino_zero_dbg.build.board=SAM_ZERO
 arduino_zero_dbg.build.core=arduino
 arduino_zero_dbg.build.extra_flags=-D__SAMD21G18A__ -mthumb {build.usb_flags}
 arduino_zero_dbg.build.ldscript=linker_scripts/gcc/flash.ld
+arduino_zero_dbg.build.openocdscript=openocd_scripts/arduino_zero.cfg
 arduino_zero_dbg.build.variant=arduino_zero
 arduino_zero_dbg.build.variant_system_lib=
 arduino_zero_dbg.build.vid=0x03eb
@@ -36,6 +37,7 @@ arduino_zero.build.board=SAM_ZERO
 arduino_zero.build.core=arduino
 arduino_zero.build.extra_flags=-D__SAMD21G18A__ -mthumb {build.usb_flags}
 arduino_zero.build.ldscript=linker_scripts/gcc/flash.ld
+arduino_zero.build.openocdscript=openocd_scripts/arduino_zero.cfg
 arduino_zero.build.variant=arduino_zero
 arduino_zero.build.variant_system_lib=
 arduino_zero.build.vid=0x2341
@@ -57,6 +59,7 @@ arduino_zero_bl_dbg.build.board=SAM_ZERO
 arduino_zero_bl_dbg.build.core=arduino
 arduino_zero_bl_dbg.build.extra_flags=-D__SAMD21G18A__ -mthumb {build.usb_flags}
 arduino_zero_bl_dbg.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
+arduino_zero_bl.build.openocdscript=openocd_scripts/arduino_zero.cfg
 arduino_zero_bl_dbg.build.variant=arduino_zero
 arduino_zero_bl_dbg.build.variant_system_lib=
 arduino_zero_bl_dbg.build.vid=0x03eb
@@ -78,7 +81,8 @@ arduino_zero_bl.build.board=SAM_ZERO
 arduino_zero_bl.build.core=arduino
 arduino_zero_bl.build.extra_flags=-D__SAMD21G18A__ -mthumb {build.usb_flags}
 arduino_zero_bl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
-arduino_zero_bl.build.variant=arduino_zero_bl
+arduino_zero_bl.build.openocdscript=openocd_scripts/arduino_zero.cfg
+arduino_zero_bl.build.variant=arduino_zero
 arduino_zero_bl.build.variant_system_lib=
 arduino_zero_bl.build.vid=0x2341
 arduino_zero_bl.build.pid=0x004d
diff --git a/platform.txt b/platform.txt
index ec2a9e0a1397a94b3d0be2e666d5ba0dc74cdd68..d6e38a806dc637a09cc280a0f11ac8617228ea92 100644
--- a/platform.txt
+++ b/platform.txt
@@ -55,7 +55,6 @@ recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -m
 recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}"
 
 ## Combine gc-sections, archives, and objects
-#recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group
 recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" -o "{build.path}/{build.project_name}.elf" --specs=nano.specs "-L{build.path}" -Wl,--start-group -lm -lgcc -Wl,--end-group -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {object_files} "{build.path}/{archive_file}" -Wl,--end-group
 
 ## Create eeprom
@@ -73,10 +72,13 @@ recipe.size.regex=\.text\s+([0-9]+).*
 # -------------------
 
 tools.openocd.cmd=bin/openocd
-tools.openocd.cmd.windows=openocd.exe
+tools.openocd.cmd.windows=bin/openocd-0.8.0.exe
 tools.openocd.path={runtime.ide.path}/hardware/tools/openocd-0.8.0
 
 tools.openocd.upload.params.verbose=
 tools.openocd.upload.params.quiet=
-tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f board/atmel_samd21_xplained_pro.cfg -c "program {build.path}/{build.project_name}.elf verify reset"
+#tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f board/atmel_samd21_xplained_pro.cfg -c "program {build.path}/{build.project_name}.elf verify reset"
+tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f {build.variant.path}/{build.variant}/{build.openocdscript} -c "program {build.path}/{build.project_name}.elf verify reset"
+#tools.openocd.upload.pattern.windows="{path}/{cmd}" {upload.verbose} -s "{path}/scripts/" -f board/atmel_samd21_xplained_pro.cfg -c "program {build.path}/{build.project_name}.elf verify reset"
+tools.openocd.upload.pattern.windows="{path}/{cmd}" -s "{path}/scripts/" -f "../../../arduino/samd/variants/{build.variant}/{build.openocdscript}" -c "program {build.path}/{build.project_name}.elf verify reset"
 
diff --git a/variants/arduino_zero/openocd_scripts/arduino_zero.cfg b/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..d114849e71e21d888d69d8d224c246dd5dccaf7b
--- /dev/null
+++ b/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
@@ -0,0 +1,11 @@
+#
+# Arduino Zero.
+#
+
+source [find interface/cmsis-dap.cfg]
+
+# chip name
+set CHIPNAME at91samd21g18
+set ENDIAN little
+
+source [find target/at91samdXX.cfg]