diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index 86f78da1c713ecbcace49e84046e7ba915936784..6df27d94ac810deee88791310b9038584f22e625 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -22,7 +22,7 @@ jobs:
       - name: Install dependencies
         run: |
           python -m pip install --upgrade pip setuptools wheel
-          pip install tockloader pylint
+          pip install 'tockloader~=1.4' pylint
       - name: Register matcher
         run: echo ::add-matcher::./.github/python_matcher.json
       - name: Test code with pylint
diff --git a/deploy.py b/deploy.py
index 6b552faad1e6c6dd474bf0b924ec1da2e2fbb786..a7d6f62603a2a495d26b8b03a7123f05b8d643e5 100755
--- a/deploy.py
+++ b/deploy.py
@@ -29,6 +29,7 @@ import sys
 
 import colorama
 from six.moves import input
+import tockloader
 from tockloader import tab
 from tockloader import tbfh
 from tockloader import tockloader as loader
@@ -252,12 +253,16 @@ class OpenSKInstaller:
         board=self.args.board,
         debug=False,
         force=False,
+        jlink_cmd="JLinkExe",
         jlink=self.args.programmer == "jlink",
         jlink_device=board.jlink_device,
         jlink_if=board.jlink_if,
         jlink_speed=1200,
         openocd=self.args.programmer == "openocd",
         openocd_board=board.openocd_board,
+        openocd_cmd="openocd",
+        openocd_commands=copy.copy(board.openocd_commands),
+        openocd_options=copy.copy(board.openocd_options),
         jtag=False,
         no_bootloader_entry=False,
         page_size=board.page_size,
@@ -399,7 +404,7 @@ class OpenSKInstaller:
     setattr(args, "make", False)
     setattr(args, "no_replace", False)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     tabs = [tab.TAB(tab_filename)]
     try:
       tock.install(tabs, replace="yes", erase=args.erase)
@@ -428,7 +433,7 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "address", board_props.app_address)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
       tock.flash_binary(kernel, board_props.kernel_address)
     except TockLoaderException as e:
@@ -441,7 +446,7 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "address", board_props.padding_address)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
       tock.flash_binary(padding, args.address)
     except TockLoaderException as e:
@@ -451,11 +456,14 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     board_props = SUPPORTED_BOARDS[self.args.board]
     setattr(args, "app_address", board_props.app_address)
+    # Ensure we don't force erase all apps but only the apps starting
+    # at `board.app_address`. This makes sure we don't erase the padding.
+    setattr(args, "force", False)
     info("Erasing all installed applications")
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
-      tock.erase_apps(False)
+      tock.erase_apps()
     except TockLoaderException as e:
       # Erasing apps is not critical
       info(("A non-critical error occurred while erasing "
@@ -467,6 +475,7 @@ class OpenSKInstaller:
       return False
     args = copy.copy(self.tockloader_default_args)
     tock = loader.TockLoader(args)
+    tock.open()
     app_found = False
     with tock._start_communication_with_board():
       apps = [app.name for app in tock._extract_all_app_headers()]
@@ -515,6 +524,10 @@ class OpenSKInstaller:
     final_hex.tofile(dest_file, format="hex")
 
   def check_prerequisites(self):
+    if not tockloader.__version__.startswith("1.4"):
+      fatal(("Your version of tockloader is too old: found {}, expected "
+             "1.4.0.".format(tockloader.__version__)))
+
     if self.args.programmer == "jlink":
       assert_mandatory_binary("JLinkExe")
 
diff --git a/setup.sh b/setup.sh
index c4297adc9ccae692ed06aa5e588285e7a1046129..439003b05d72e42d7f1ef4cd92fce609c665d07e 100755
--- a/setup.sh
+++ b/setup.sh
@@ -86,7 +86,7 @@ source tools/gen_key_materials.sh
 generate_crypto_materials N
 
 rustup install $(head -n 1 rust-toolchain)
-pip3 install --user --upgrade tockloader six intelhex
+pip3 install --user --upgrade 'tockloader~=1.4' six intelhex
 rustup target add thumbv7em-none-eabi
 
 # Install dependency to create applications.