diff --git a/software/slaprunner/buildout.hash.cfg b/software/slaprunner/buildout.hash.cfg
index 904a621a9e07804a48307fa314e15701f05fe4e1..1b5de251c3773551510252f0f45c719a7eb22752 100644
--- a/software/slaprunner/buildout.hash.cfg
+++ b/software/slaprunner/buildout.hash.cfg
@@ -22,7 +22,7 @@ md5sum = 04e31ac503753f89510dd412b4680c56
 
 [template-runner-import-script]
 filename = template/runner-import.sh.jinja2
-md5sum = 95f870546037c32f5d81ef9895b2629b
+md5sum = 92ac3f6982dec97e3b2df90f97111bd3
 
 [instance-runner-import]
 filename = instance-runner-import.cfg.in
diff --git a/software/slaprunner/template/runner-import.sh.jinja2 b/software/slaprunner/template/runner-import.sh.jinja2
index cef02fb858121f1e6cbdd4953e394248dfe8cc35..cfe216da361eb5696ab23c48d5919073b5b91a68 100644
--- a/software/slaprunner/template/runner-import.sh.jinja2
+++ b/software/slaprunner/template/runner-import.sh.jinja2
@@ -132,6 +132,13 @@ SLAPOS='{{ directory["bin"] }}'/slapos
 # XXX hardcoded
 SQLITE3="$HOME/software_release/parts/sqlite3/bin/sqlite3"
 DATABASE="$HOME/srv/runner/proxy.db"
+db_query () {
+  # Try opening locked tables for 5 seconds to prevent "database is locked" error
+"$SQLITE3" "$DATABASE" <<EOF
+.timeout 5000
+$@
+EOF
+}
 # If slapproxy database is empty then no software release was opened
 if [ ! -s "$DATABASE" ]; then
   log_message "Slapproxy database empty, no Software Requested... Writing status file... End"
@@ -141,17 +148,17 @@ fi
 # Change slapproxy database to point instances to new software release
 # XXX hardcoded
 PARTITION=$(basename $HOME)
-OLD_SOFTWARE_RELEASE=$("$SQLITE3" "$DATABASE" "select software_release from partition11 where reference='slappart0';")
+OLD_SOFTWARE_RELEASE=$(db_query "select software_release from partition11 where reference='slappart0';")
 SOFTWARE_RELEASE=$(echo "$OLD_SOFTWARE_RELEASE" | sed 's/\/\(slappart\|test0-\)[0-9][0-9]*\//\/'"$PARTITION"'\//')
-"$SQLITE3" "$DATABASE" "update partition11 set software_release='$SOFTWARE_RELEASE' where software_release NOT NULL;"
-"$SQLITE3" "$DATABASE" "update software11 set url='$SOFTWARE_RELEASE' where url='$OLD_SOFTWARE_RELEASE';" || "$SQLITE3" "$DATABASE" "delete from software11 where url='$OLD_SOFTWARE_RELEASE';"
+db_query "update partition11 set software_release='$SOFTWARE_RELEASE' where software_release NOT NULL;"
+db_query "update software11 set url='$SOFTWARE_RELEASE' where url='$OLD_SOFTWARE_RELEASE';" || db_query "delete from software11 where url='$OLD_SOFTWARE_RELEASE';"
 # Change slapproxy database to have all instances stopped
-"$SQLITE3" "$DATABASE" "update partition11 set requested_state='stopped';"
+db_query "update partition11 set requested_state='stopped';"
 # Change slapproxy database to get correct IPs
 IPV4='{{ ipv4 }}'
 IPV6='{{ ipv6 }}'
-"$SQLITE3" "$DATABASE" "update partition_network11 set address='$IPV4' where netmask='255.255.255.255';"
-"$SQLITE3" "$DATABASE" "update partition_network11 set address='$IPV6' where netmask='ffff:ffff:ffff::';"
+db_query "update partition_network11 set address='$IPV4' where netmask='255.255.255.255';"
+db_query "update partition_network11 set address='$IPV6' where netmask='ffff:ffff:ffff::';"
 
 MASTERURL='http://{{ ipv4 }}:{{ proxy_port }}'
 
@@ -219,7 +226,7 @@ done
 
 # Change back slapproxy database to have all instances started
 log_message "Set instances as to start after takeover..."
-"$SQLITE3" "$DATABASE" "update partition11 set requested_state='started';"
+db_query "update partition11 set requested_state='started';"
 
 # Write exit code to an arbitrary file that will be checked by promise/monitor
 log_message "Writing status file... End"