diff --git a/targets/nrf5x/jshardware.c b/targets/nrf5x/jshardware.c
index 879942b42..11472bf12 100644
--- a/targets/nrf5x/jshardware.c
+++ b/targets/nrf5x/jshardware.c
@@ -51,6 +51,7 @@ USB data receive is broken, although examples+config seem almost identical.
 #include "app_util_platform.h"
 #ifdef BLUETOOTH
 #include "app_timer.h"
+#include "nrf_sdm.h"
 #include "bluetooth.h"
 #include "bluetooth_utils.h"
 #include "jswrap_bluetooth.h"
@@ -2478,10 +2526,12 @@ bool jshFlashErasePages(uint32_t addr, uint32_t byteLength) {
       jshFlashWriteProtect(startAddr + byteLength - 1))
     return false;
   uint32_t err;
+  uint8_t sd_enabled;
+  sd_softdevice_is_enabled(&sd_enabled);
   while (byteLength>=4096 && !jspIsInterrupted()) {
     flashIsBusy = true;
     while ((err = sd_flash_page_erase(startAddr / NRF_FICR->CODEPAGESIZE)) == NRF_ERROR_BUSY);
-    if (err!=NRF_SUCCESS) flashIsBusy = false;
+    if (err!=NRF_SUCCESS || !sd_enabled) flashIsBusy = false;
     WAIT_UNTIL(!flashIsBusy, "jshFlashErasePage");
     /*if (err!=NRF_SUCCESS)
       jsiConsolePrintf("jshFlashErasePage got err %d at 0x%x\n", err, addr);*/
@@ -2643,7 +2693,8 @@ void jshFlashWrite(void * buf, uint32_t addr, uint32_t len) {
 #endif
   if (jshFlashWriteProtect(addr)) return;
   uint32_t err = 0;
-
+  uint8_t sd_enabled;
+  sd_softdevice_is_enabled(&sd_enabled);
   if (((size_t)(char*)buf)&3) {
     /* Unaligned *SOURCE* is a problem on nRF5x,
      * so if so we are unaligned, do a whole bunch
@@ -2653,13 +2704,26 @@ void jshFlashWrite(void * buf, uint32_t addr, uint32_t len) {
       uint32_t alignedBuf;
       memcpy(&alignedBuf, buf, 4);
       while ((err = sd_flash_write((uint32_t*)addr, &alignedBuf, 1)) == NRF_ERROR_BUSY);
-      if (err!=NRF_SUCCESS) flashIsBusy = false;
+      if (err!=NRF_SUCCESS || !sd_enabled) flashIsBusy = false;
       WAIT_UNTIL(!flashIsBusy, "jshFlashWrite");
       len -= 4;
       addr += 4;
@@ -2673,7 +2737,7 @@ void jshFlashWrite(void * buf, uint32_t addr, uint32_t len) {
       while ((err = sd_flash_write(((uint32_t*)addr)+wordOffset, ((uint32_t *)buf)+wordOffset, l>>2)) == NRF_ERROR_BUSY && !jspIsInterrupted());
       wordOffset += l>>2;
     }
-    if (err!=NRF_SUCCESS) flashIsBusy = false;
+    if (err!=NRF_SUCCESS || !sd_enabled) flashIsBusy = false;
     WAIT_UNTIL(!flashIsBusy, "jshFlashWrite");
   }
   if (err!=NRF_SUCCESS)
