 +        nvmc,
          ipc: kernel::ipc::IPC::new(board_kernel, &memory_allocation_capability),
      };
-
+ 
 diff --git a/boards/nordic/nrf52840dk/src/main.rs b/boards/nordic/nrf52840dk/src/main.rs
-index 169f3d3..2ebb384 100644
+index 169f3d393..2ebb384d8 100644
 --- a/boards/nordic/nrf52840dk/src/main.rs
 +++ b/boards/nordic/nrf52840dk/src/main.rs
 @@ -123,6 +123,11 @@ const NUM_PROCS: usize = 8;
  static mut PROCESSES: [Option<&'static dyn kernel::procs::ProcessType>; NUM_PROCS] =
      [None; NUM_PROCS];
-
+ 
 +static mut STORAGE_LOCATIONS: [kernel::StorageLocation; 1] = [kernel::StorageLocation {
 +    address: 0xC0000,
 +    size: 0x40000,
 +}];
 +
  static mut CHIP: Option<&'static nrf52840::chip::Chip> = None;
-
+ 
  /// Dummy buffer that causes the linker to reserve enough space for the stack.
 @@ -158,6 +163,7 @@ pub struct Platform {
          capsules::virtual_alarm::VirtualMuxAlarm<'static, nrf52840::rtc::Rtc<'static>>,

     nonvolatile_storage: &'static capsules::nonvolatile_storage_driver::NonvolatileStorage<'static>,
+    nvmc: &'static nrf52840::nvmc::SyscallDriver,
 }

 impl kernel::Platform for Platform {
@@ -177,10 +183,30 @@ impl kernel::Platform for Platform {
             capsules::temperature::DRIVER_NUM => f(Some(self.temp)),

+        }
+    }
 }
 
 /// Entry point in the vector table called on hard reset.
@@ -204,7 +230,10 @@ pub unsafe fn reset_handler() {
         UartChannel::Pins(UartPins::new(UART_RTS, UART_TXD, UART_CTS, UART_RXD))
     };
 
-    let board_kernel = static_init!(kernel::Kernel, kernel::Kernel::new(&PROCESSES));
+    let board_kernel = static_init!(
+        kernel::Kernel,
+        kernel::Kernel::new_with_storage(&PROCESSES, &STORAGE_LOCATIONS)
+    );
 
     let gpio = components::gpio::GpioComponent::new(
         board_kernel,
@@ -411,6 +440,14 @@ pub unsafe fn reset_handler() {
         nrf52840::acomp::Comparator
     ));
 
+    let nvmc = static_init!(
+        nrf52840::nvmc::SyscallDriver,
+        nrf52840::nvmc::SyscallDriver::new(
