diff --git a/README.md b/README.md
index fa3b054..08b8f58 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,8 @@ MCUboot bootloader porting for Arduino [Mbed OS](https://os.mbed.com/docs/mbed-o
 The following boards are supported:
  * [Portenta H7](https://store.arduino.cc/products/portenta-h7)
  * [Portenta H7 Lite](https://store.arduino.cc/products/portenta-h7-lite)
- * [Portenta H7 Lite Connected]((https://store.arduino.cc/products/portenta-h7-lite))
+ * [Portenta H7 Lite Connected](https://store.arduino.cc/products/portenta-h7-lite)
+ * [Nicla Vision](https://store.arduino.cc/products/nicla-vision)
 
 ## :grey_question: What
 MCUboot provides secure boot for 32-bit microcontrollers. For a detailed description on what MCUboot does and how it works please read the [official documentaion](https://docs.mcuboot.com/).
@@ -112,7 +113,7 @@ The following command will setup the mbed environment and clone the needed repos
 mbed config root . && mbed deploy
 mbed compile -m PORTENTA_H7_M7 -t GCC_ARM --profile=release --profile mbed-os/tools/profiles/extensions/lto.json
 ```
-Additional flags are needed for [Lite](generate_rel.sh#L24) and [Lite Connected](generate_rel.sh#L35) boards.
+Additional flags are needed for [Lite](generate_rel.sh#L24), [Lite Connected](generate_rel.sh#L35) and [Nicla Vision](generate_rel.sh#L46) boards.
 
 ### Debug
 
@@ -121,7 +122,7 @@ Additional flags are needed for [Lite](generate_rel.sh#L24) and [Lite Connected]
  - MCUboot idle: The board green LED will fade-in fade-out
 
 2. Serial
- - MCUboot debug prints are disabled by default. They can be enabled putting `BT_SEL` (`PI8`) pin `HIGH` or calling `MCUboot::bootDebug(1);` in your Sketch.
+ - MCUboot debug prints are disabled by default. They can be enabled putting `BT_SEL` (`PI8`) pin `HIGH` if available or calling `MCUboot::bootDebug(1);` in your Sketch.
 
 ## :mag_right: Other resources
 
diff --git a/app/board.h b/app/board.h
index c7e14f4..c2520c6 100644
--- a/app/board.h
+++ b/app/board.h
@@ -63,76 +63,148 @@
 #define BOARD_EXTCLOCK       25
 #endif
 
-#define BOARD_GREEN_LED                     PK_6
-#define BOARD_RED_LED                       PK_5
-#define BOARD_BLUE_LED                      PK_7
+#if BOARD_HAS_VIDEO
+  #define BOARD_VIDEO_ENABLE                  PJ_2
+  #define BOARD_VIDEO_RESET                   PJ_3
+#endif
 
-#define BOARD_BOOT_SEL                      PI_8
-#define BOARD_USB_RESET                     PJ_4
+#if defined TARGET_PORTENTA_H7_M7
+  #define BOARD_GREEN_LED                     PK_6
+  #define BOARD_RED_LED                       PK_5
+  #define BOARD_BLUE_LED                      PK_7
+
+  #define BOARD_USB_RESET                     PJ_4
+  #define BOARD_BOOT_SEL                      PI_8
+
+  #define BOARD_I2C_SCL                       PB_6
+  #define BOARD_I2C_SDA                       PB_7
+
+  #define BOARD_USBD_VID                      0x2341
+  #define BOARD_USBD_PID                      0x035B
+
+  #define BOARD_USBD_STRING                   "Portenta H7 MCUboot"
+
+  #define BOARD_QSPI_SO0                      PD_11
+  #define BOARD_QSPI_SO1                      PD_12
+  #define BOARD_QSPI_SO2                      PF_7
+  #define BOARD_QSPI_SO3                      PD_13
+  #define BOARD_QSPI_SCK                      PF_10
+  #define BOARD_QSPI_CS                       PG_6
+
+  #define BOARD_USB_OTG_FS_DM_DP_PIN          (GPIO_PIN_11 | GPIO_PIN_12)
+  #define BOARD_USB_OTG_FS_DM_DP_MODE         (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_FS_DM_DP_PULL         (GPIO_NOPULL)
+  #define BOARD_USB_OTG_FS_DM_DP_SPEED        (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_FS_DM_DP_ALTERNATE    (GPIO_AF10_OTG1_FS)
+  #define BOARD_USB_OTG_FS_DM_DP_GPIO         (GPIOA)
+
+  #define BOARD_USB_OTG_HS_CLK_PIN            (GPIO_PIN_5)
+  #define BOARD_USB_OTG_HS_CLK_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_CLK_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_CLK_SPEED          (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_HS_CLK_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_CLK_GPIO           (GPIOA)
+
+  #define BOARD_USB_OTG_HS_D0_PIN             (GPIO_PIN_3)
+  #define BOARD_USB_OTG_HS_D0_MODE            (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_D0_PULL            (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_D0_SPEED           (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_HS_D0_ALTERNATE       (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_D0_GPIO            (GPIOA)
+
+  #define BOARD_USB_OTG_HS_D1_D7_PIN          (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13)
+  #define BOARD_USB_OTG_HS_D1_D7_MODE         (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_D1_D7_PULL         (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_D1_D7_ALTERNATE    (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_D1_D7_GPIO         (GPIOB)
+
+  #define BOARD_USB_OTG_HS_STP_PIN            (GPIO_PIN_0)
+  #define BOARD_USB_OTG_HS_STP_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_STP_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_STP_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_STP_GPIO           (GPIOC)
+
+  #define BOARD_USB_OTG_HS_NXT_PIN            (GPIO_PIN_4)
+  #define BOARD_USB_OTG_HS_NXT_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_NXT_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_NXT_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_NXT_GPIO           (GPIOH)
+
+  #define BOARD_USB_OTG_HS_DIR_PIN            (GPIO_PIN_11)
+  #define BOARD_USB_OTG_HS_DIR_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_DIR_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_DIR_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_DIR_GPIO           (GPIOI)
+
+#elif defined TARGET_NICLA_VISION
+  #define BOARD_GREEN_LED                     PC_13
+  #define BOARD_RED_LED                       PE_3
+  #define BOARD_BLUE_LED                      PF_4
+
+  #define BOARD_USB_RESET                     PA_2
+
+  #define BOARD_I2C_SCL                       PF_1
+  #define BOARD_I2C_SDA                       PF_0
+
+  #define BOARD_USBD_VID                      0x2341
+  #define BOARD_USBD_PID                      0x035F
+
+  #define BOARD_USBD_STRING                   "Nicla Vision MCUboot"
+
+  #define BOARD_QSPI_SO0                      PD_11
+  #define BOARD_QSPI_SO1                      PF_9
+  #define BOARD_QSPI_SO2                      PE_2
+  #define BOARD_QSPI_SO3                      PD_13
+  #define BOARD_QSPI_SCK                      PF_10
+  #define BOARD_QSPI_CS                       PG_6
+
+  #define BOARD_USB_OTG_FS_DM_DP_PIN          (GPIO_PIN_11 | GPIO_PIN_12)
+  #define BOARD_USB_OTG_FS_DM_DP_MODE         (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_FS_DM_DP_PULL         (GPIO_PULLUP)
+  #define BOARD_USB_OTG_FS_DM_DP_SPEED        (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_FS_DM_DP_ALTERNATE    (GPIO_AF10_OTG1_FS)
+  #define BOARD_USB_OTG_FS_DM_DP_GPIO         (GPIOA)
+
+  #define BOARD_USB_OTG_HS_CLK_PIN            (GPIO_PIN_5)
+  #define BOARD_USB_OTG_HS_CLK_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_CLK_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_CLK_SPEED          (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_HS_CLK_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_CLK_GPIO           (GPIOA)
+
+  #define BOARD_USB_OTG_HS_D0_PIN             (GPIO_PIN_3)
+  #define BOARD_USB_OTG_HS_D0_MODE            (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_D0_PULL            (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_D0_SPEED           (GPIO_SPEED_FREQ_VERY_HIGH)
+  #define BOARD_USB_OTG_HS_D0_ALTERNATE       (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_D0_GPIO            (GPIOA)
+
+  #define BOARD_USB_OTG_HS_D1_D7_PIN          (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13)
+  #define BOARD_USB_OTG_HS_D1_D7_MODE         (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_D1_D7_PULL         (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_D1_D7_ALTERNATE    (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_D1_D7_GPIO         (GPIOB)
+
+  #define BOARD_USB_OTG_HS_STP_PIN            (GPIO_PIN_0)
+  #define BOARD_USB_OTG_HS_STP_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_STP_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_STP_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_STP_GPIO           (GPIOC)
+
+  #define BOARD_USB_OTG_HS_NXT_PIN            (GPIO_PIN_3)
+  #define BOARD_USB_OTG_HS_NXT_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_NXT_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_NXT_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_NXT_GPIO           (GPIOC)
+
+  #define BOARD_USB_OTG_HS_DIR_PIN            (GPIO_PIN_2)
+  #define BOARD_USB_OTG_HS_DIR_MODE           (GPIO_MODE_AF_PP)
+  #define BOARD_USB_OTG_HS_DIR_PULL           (GPIO_NOPULL)
+  #define BOARD_USB_OTG_HS_DIR_ALTERNATE      (GPIO_AF10_OTG2_HS)
+  #define BOARD_USB_OTG_HS_DIR_GPIO           (GPIOC)
 
-#ifdef BOARD_HAS_VIDEO
-#define BOARD_VIDEO_ENABLE                  PJ_2
-#define BOARD_VIDEO_RESET                   PJ_3
-#endif
+#else
 
-#define BOARD_I2C_SCL                       PB_6
-#define BOARD_I2C_SDA                       PB_7
-
-#define BOARD_USBD_VID                      0x2341
-#define BOARD_USBD_PID                      0x035B
-
-#define BOARD_USBD_STRING                   "Portenta H7 MCUboot"
-
-#define BOARD_QSPI_SO0                      PD_11
-#define BOARD_QSPI_SO1                      PD_12
-#define BOARD_QSPI_SO2                      PF_7
-#define BOARD_QSPI_SO3                      PD_13
-#define BOARD_QSPI_SCK                      PF_10
-#define BOARD_QSPI_CS                       PG_6
-
-#define BOARD_USB_OTG_FS_DM_DP_PIN          (GPIO_PIN_11 | GPIO_PIN_12)
-#define BOARD_USB_OTG_FS_DM_DP_MODE         (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_FS_DM_DP_PULL         (GPIO_NOPULL)
-#define BOARD_USB_OTG_FS_DM_DP_SPEED        (GPIO_SPEED_FREQ_VERY_HIGH)
-#define BOARD_USB_OTG_FS_DM_DP_ALTERNATE    (GPIO_AF10_OTG1_FS)
-#define BOARD_USB_OTG_FS_DM_DP_GPIO         (GPIOA)
-
-#define BOARD_USB_OTG_HS_CLK_PIN            (GPIO_PIN_5)
-#define BOARD_USB_OTG_HS_CLK_MODE           (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_CLK_PULL           (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_CLK_SPEED          (GPIO_SPEED_FREQ_VERY_HIGH)
-#define BOARD_USB_OTG_HS_CLK_ALTERNATE      (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_CLK_GPIO           (GPIOA)
-
-#define BOARD_USB_OTG_HS_D0_PIN             (GPIO_PIN_3)
-#define BOARD_USB_OTG_HS_D0_MODE            (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_D0_PULL            (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_D0_SPEED           (GPIO_SPEED_FREQ_VERY_HIGH)
-#define BOARD_USB_OTG_HS_D0_ALTERNATE       (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_D0_GPIO            (GPIOA)
-
-#define BOARD_USB_OTG_HS_D1_D7_PIN          (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13)
-#define BOARD_USB_OTG_HS_D1_D7_MODE         (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_D1_D7_PULL         (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_D1_D7_ALTERNATE    (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_D1_D7_GPIO         (GPIOB)
-
-#define BOARD_USB_OTG_HS_STP_PIN            (GPIO_PIN_0)
-#define BOARD_USB_OTG_HS_STP_MODE           (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_STP_PULL           (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_STP_ALTERNATE      (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_STP_GPIO           (GPIOC)
-
-#define BOARD_USB_OTG_HS_NXT_PIN            (GPIO_PIN_4)
-#define BOARD_USB_OTG_HS_NXT_MODE           (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_NXT_PULL           (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_NXT_ALTERNATE      (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_NXT_GPIO           (GPIOH)
-
-#define BOARD_USB_OTG_HS_DIR_PIN            (GPIO_PIN_11)
-#define BOARD_USB_OTG_HS_DIR_MODE           (GPIO_MODE_AF_PP)
-#define BOARD_USB_OTG_HS_DIR_PULL           (GPIO_NOPULL)
-#define BOARD_USB_OTG_HS_DIR_ALTERNATE      (GPIO_AF10_OTG2_HS)
-#define BOARD_USB_OTG_HS_DIR_GPIO           (GPIOI)
+#endif
 
 #endif /* __BOARD_H */
diff --git a/app/default_bd.cpp b/app/default_bd.cpp
index 8baf7a1..96210db 100644
--- a/app/default_bd.cpp
+++ b/app/default_bd.cpp
@@ -148,7 +148,7 @@ static void initBlockTable(void) {
             BOOT_LOG_ERR("SDMMC");
 #endif
         } else if (block_info[SECONDARY_BLOCK_DEVICE].raw_type & QSPI_FLASH_FLAG) {
-            block_info[SECONDARY_BLOCK_DEVICE].raw_bd = new QSPIFBlockDevice(PD_11, PD_12, PF_7, PD_13, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000);
+            block_info[SECONDARY_BLOCK_DEVICE].raw_bd = mbed::BlockDevice::get_default_instance();
             block_info[SCRATCH_BLOCK_DEVICE].raw_bd = block_info[SECONDARY_BLOCK_DEVICE].raw_bd;
         } else {
             BOOT_LOG_ERR("Config");
@@ -236,7 +236,7 @@ static void initBlockTable(void) {
             BOOT_LOG_ERR("SDMMC");
 #endif
         } else if (block_info[SECONDARY_BLOCK_DEVICE].raw_type & QSPI_FLASH_FLAG) {
-            block_info[SECONDARY_BLOCK_DEVICE].raw_bd = new QSPIFBlockDevice(PD_11, PD_12, PF_7, PD_13, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000);
+            block_info[SECONDARY_BLOCK_DEVICE].raw_bd = mbed::BlockDevice::get_default_instance();
         } else {
             BOOT_LOG_ERR("U config");
         }
@@ -250,7 +250,7 @@ static void initBlockTable(void) {
             BOOT_LOG_ERR("SDMMC");
 #endif
         } else if (block_info[SCRATCH_BLOCK_DEVICE].raw_type & QSPI_FLASH_FLAG) {
-            block_info[SCRATCH_BLOCK_DEVICE].raw_bd = new QSPIFBlockDevice(PD_11, PD_12, PF_7, PD_13, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000);
+            block_info[SCRATCH_BLOCK_DEVICE].raw_bd = mbed::BlockDevice::get_default_instance();
         } else {
             BOOT_LOG_ERR("S config");
         }
@@ -395,11 +395,13 @@ mbed::BlockDevice* get_scratch_bd(void) {
     return nullptr;
 }
 
+#if !defined(BOOTUTIL_LIBARY_BUILD)
 mbed::BlockDevice* BlockDevice::get_default_instance()
 {
     static QSPIFBlockDevice default_bd(BOARD_QSPI_SO0, BOARD_QSPI_SO1, BOARD_QSPI_SO2, BOARD_QSPI_SO3,  BOARD_QSPI_SCK, BOARD_QSPI_CS, QSPIF_POLARITY_MODE_1, 40000000);
     return &default_bd;
 }
+#endif
 
 FlashIAP flash;
 
diff --git a/app/main.cpp b/app/main.cpp
index e6d533b..dcc0f0c 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -66,7 +66,11 @@ USBD_HandleTypeDef USBD_Device;
 DigitalOut red(BOARD_RED_LED, 1);
 DigitalOut green(BOARD_GREEN_LED, 1);
 DigitalOut blue(BOARD_BLUE_LED, 1);
+#if defined(TARGET_NICLA_VISION)
+bool boot_sel = false;
+#else
 DigitalIn boot_sel(BOARD_BOOT_SEL,PullDown);
+#endif
 
 Ticker swap_ticker;
 bool debug_enabled = false;
diff --git a/app/power/power.cpp b/app/power/power.cpp
index 1bdebff..0ba673a 100644
--- a/app/power/power.cpp
+++ b/app/power/power.cpp
@@ -20,6 +20,7 @@
 #include "board.h"
 #include "mbed.h"
 
+#if defined TARGET_PORTENTA_H7_M7
 static void portenta_power_init() {
   I2C i2c(BOARD_I2C_SDA, BOARD_I2C_SCL);
 
@@ -85,8 +86,46 @@ static void portenta_power_init() {
   data[1]=0xF;
   i2c.write(8 << 1, data, sizeof(data));
 }
+#endif
 
+#if defined TARGET_NICLA_VISION
+static void nicla_vision_power_init() {
+  I2C i2c(BOARD_I2C_SDA, BOARD_I2C_SCL);
+
+  char data[2];
+
+  data[0]=0x9C;
+  data[1]=(1 << 7);
+  i2c.write(8 << 1, data, sizeof(data));
+
+  // Disable charger led
+  data[0]=0x9E;
+  data[1]=(1 << 5);
+  i2c.write(8 << 1, data, sizeof(data));
+
+  HAL_Delay(10);
+
+  // SW3: set 2A as current limit
+  // Helps keeping the rail up at wifi startup
+  data[0]=0x42;
+  data[1]=(2);
+  i2c.write(8 << 1, data, sizeof(data));
+
+  HAL_Delay(10);
+
+  // Change VBUS INPUT CURRENT LIMIT to 1.5A
+  data[0]=0x94;
+  data[1]=(20 << 3);
+  i2c.write(8 << 1, data, sizeof(data));
+}
+#endif
 
 void power_init() {
+#if defined TARGET_PORTENTA_H7_M7
   portenta_power_init();
-}
\ No newline at end of file
+#elif defined TARGET_NICLA_VISION
+  nicla_vision_power_init();
+#else
+
+#endif
+}
diff --git a/app/power/power.h b/app/power/power.h
index f6028c3..1921322 100644
--- a/app/power/power.h
+++ b/app/power/power.h
@@ -21,4 +21,4 @@
 
 void power_init();
 
-#endif //__POWER_H
\ No newline at end of file
+#endif //__POWER_H
diff --git a/app/sdcard/BSP.c b/app/sdcard/BSP.c
index e5ab77b..d320901 100644
--- a/app/sdcard/BSP.c
+++ b/app/sdcard/BSP.c
@@ -454,7 +454,7 @@ __weak void BSP_SD_ReadCpltCallback(void)
 
 }
 
-void SDMMC2_IRQHandler(void)
+__weak void SDMMC2_IRQHandler(void)
 {
   BSP_SD_IRQHandler();
 }
diff --git a/generate_lib.sh b/generate_lib.sh
deleted file mode 100755
index 1ba7f73..0000000
--- a/generate_lib.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --app=mbed_app_bootutil.json
-echo
-echo Generating library
-find ./BUILD/PORTENTA_H7_M7/GCC_ARM/ \( -name "FileBlockDevice.o" -o -name "BSP.o" -o -name "SDMMCBlockDevice.o" -o -name "target.o" -o -name "rtc.o" -o -name "default_bd.o" -o -name "bootutil_extra.o" -o -name "flash_map_backend.o" -o -name "bootutil_public.o" \) | xargs arm-none-eabi-ar -csr libbootutil.a
-echo -n "Library: "
-find ./ -name "libbootutil.a"
-echo
diff --git a/generate_rel.sh b/generate_rel.sh
index 0fe9913..51629fb 100755
--- a/generate_rel.sh
+++ b/generate_rel.sh
@@ -1,13 +1,17 @@
 #!/bin/bash
 rm -rf release
+rm -rf BUILD
 
-mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --app=mbed_app_bootutil.json
+if [[ $1 == "library" ]] || [[ $1 == "all" ]]; then
+mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --app=mbed_app_bootutil.json -DBOOTUTIL_LIBARY_BUILD=1
 echo
 echo Generating bootutil library
-find ./BUILD/PORTENTA_H7_M7/GCC_ARM/ \( -name "FileBlockDevice.o" -o -name "BSP.o" -o -name "SDMMCBlockDevice.o" -o -name "target.o" -o -name "rtc.o" -o -name "default_bd.o" -o -name "bootutil_extra.o" -o -name "flash_map_backend.o" -o -name "bootutil_public.o" \) | xargs arm-none-eabi-ar -csr libbootutil.a
+find ./BUILD/PORTENTA_H7_M7/GCC_ARM/ \( -name "FileBlockDevice.o" -o -name "BSP.o" -o -name "SDMMCBlockDevice.o" -o -name "rtc.o" -o -name "default_bd.o" -o -name "bootutil_extra.o" -o -name "flash_map_backend.o" -o -name "bootutil_public.o" \) | xargs arm-none-eabi-ar -csr libbootutil.a
 echo -n "Library: "
 find ./ -name "libbootutil.a"
+fi
 
+if [[ $1 == "portenta" ]] || [[ $1 == "all" ]]; then
 echo
 echo Generating binaries for PORTENTA H7
 mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --profile=release --profile mbed-os/tools/profiles/extensions/lto.json -N mcuboot_portenta_h7
@@ -18,7 +22,9 @@ cp ./BUILD/PORTENTA_H7_M7/GCC_ARM-RELEASE/mcuboot_portenta_h7_application.elf ./
 xxd -i ./release/PORTENTA_H7/mcuboot_portenta_h7.bin > ./release/PORTENTA_H7/mcuboot_portenta_h7.h
 sed -i "s/unsigned char __release_PORTENTA_H7_mcuboot_portenta_h7_bin/const unsigned char mcuboot_portenta_h7_bin/" ./release/PORTENTA_H7/mcuboot_portenta_h7.h
 sed -i "s/__release_PORTENTA_H7_mcuboot_portenta_h7_bin_len/mcuboot_portenta_h7_bin_len/" ./release/PORTENTA_H7/mcuboot_portenta_h7.h
+fi
 
+if [[ $1 == "lite" ]] || [[ $1 == "all" ]]; then
 echo
 echo Generating binaries for PORTENTA H7 Lite
 mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --profile=release --profile mbed-os/tools/profiles/extensions/lto.json -DBOARD_HAS_VIDEO=0 -DBOARD_HAS_WIFI=0 -N mcuboot_portenta_h7_lite
@@ -29,14 +35,30 @@ cp ./BUILD/PORTENTA_H7_M7/GCC_ARM-RELEASE/mcuboot_portenta_h7_lite_application.e
 xxd -i ./release/PORTENTA_H7_Lite/mcuboot_portenta_h7_lite.bin > ./release/PORTENTA_H7_Lite/mcuboot_portenta_h7_lite.h
 sed -i "s/unsigned char __release_PORTENTA_H7_mcuboot_portenta_h7_lite_bin/const unsigned char mcuboot_portenta_h7_lite_bin/" ./release/PORTENTA_H7_Lite/mcuboot_portenta_h7_lite.h
 sed -i "s/__release_PORTENTA_H7_mcuboot_portenta_h7_lite_bin_len/mcuboot_portenta_h7_lite_bin_len/" ./release/PORTENTA_H7_Lite/mcuboot_portenta_h7_lite.h
+fi
 
+if [[ $1 == "connected" ]] || [[ $1 == "all" ]]; then
 echo
 echo Generating binaries for PORTENTA H7 Lite Connected
 mbed compile -c -m PORTENTA_H7_M7 -t GCC_ARM --profile=release --profile mbed-os/tools/profiles/extensions/lto.json -DBOARD_HAS_VIDEO=0 -N mcuboot_portenta_h7_lite_connected
 mkdir -p release/PORTENTA_H7_Lite_Connected
-mv ./libbootutil.a ./release/PORTENTA_H7_Lite_Connected
+cp ./libbootutil.a ./release/PORTENTA_H7_Lite_Connected
 cp ./BUILD/PORTENTA_H7_M7/GCC_ARM-RELEASE/mcuboot_portenta_h7_lite_connected.bin ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.bin
 cp ./BUILD/PORTENTA_H7_M7/GCC_ARM-RELEASE/mcuboot_portenta_h7_lite_connected_application.elf ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.elf
 xxd -i ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.bin > ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.h
 sed -i "s/unsigned char __release_PORTENTA_H7_mcuboot_portenta_h7_lite_connected_bin/const unsigned char mcuboot_portenta_h7_lite_connected_bin/" ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.h
-sed -i "s/__release_PORTENTA_H7_mcuboot_portenta_h7_lite_connected_bin_len/mcuboot_portenta_h7_lite_connected_bin_len/" ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.h
\ No newline at end of file
+sed -i "s/__release_PORTENTA_H7_mcuboot_portenta_h7_lite_connected_bin_len/mcuboot_portenta_h7_lite_connected_bin_len/" ./release/PORTENTA_H7_Lite_Connected/mcuboot_portenta_h7_lite_connected.h
+fi
+
+if [[ $1 == "nicla" ]] || [[ $1 == "all" ]]; then
+echo
+echo Generating binaries for NICLA VISION
+mbed compile -c -m NICLA_VISION -t GCC_ARM --profile=release --profile mbed-os/tools/profiles/extensions/lto.json -N mcuboot_nicla_vision
+mkdir -p release/NICLA_VISION
+mv ./libbootutil.a ./release/NICLA_VISION
+cp ./BUILD/NICLA_VISION/GCC_ARM-RELEASE/mcuboot_nicla_vision.bin ./release/NICLA_VISION/mcuboot_nicla_vision.bin
+cp ./BUILD/NICLA_VISION/GCC_ARM-RELEASE/mcuboot_nicla_vision_application.elf ./release/NICLA_VISION/mcuboot_nicla_vision.elf
+xxd -i ./release/NICLA_VISION/mcuboot_nicla_vision.bin > ./release/NICLA_VISION/mcuboot_nicla_vision.h
+sed -i "s/unsigned char __release_NICLA_VISION_mcuboot_nicla_vision_bin/const unsigned char mcuboot_nicla_vision_bin/" ./release/NICLA_VISION/mcuboot_nicla_vision.h
+sed -i "s/__release_NICLA_VISION_mcuboot_nicla_vision_bin_len/mcuboot_nicla_vision_bin_len/" ./release/NICLA_VISION/mcuboot_nicla_vision.h
+fi
diff --git a/mbed_app.json b/mbed_app.json
index b24a964..01d3766 100644
--- a/mbed_app.json
+++ b/mbed_app.json
@@ -48,6 +48,41 @@
             "mcuboot.bootloader-build": false,
             "mcuboot.encrypt-scratch": true,
             "mcuboot.swap-buf-size": 131072
+        },
+        "NICLA_VISION": {
+            "target.clock_source": "USE_PLL_HSE_EXTC",
+            "target.use-mpu": false,
+            "target.components_remove" : ["WHD", "4343W_FS", "CYW43XXX", "SE050"],
+            "target.extra_labels_remove" : ["CORDIO"],
+            "target.features_remove" : ["BLE"],
+            "target.device_has_remove": ["USBDEVICE", "EMAC", "CAN", "SPI_ASYNCH", "SPISLAVE", "SPI","SERIAL_FC", "PWMOUT", "ANALOGIN", "ANALOGOUT", "I2CSLAVE", "I2C_ASYNC", "OSPI", "TRNG", "DAC", "CRC", "WATCHDOG", "RTC", "LPTICKER", "SLEEP"],
+            "target.printf_lib": "minimal-printf",
+            "target.i2c_timing_value_algo": false,
+            "target.macros_add":["BOARD_HAS_VIDEO=0", "BOARD_HAS_ETHERNET=0"],
+            "platform.minimal-printf-enable-floating-point": false,
+            "platform.minimal-printf-enable-64-bit": false,
+            "platform.stdio-flush-at-exit": false,
+            "platform.stdio-baud-rate": 115200,
+            "fat_chan.ff_use_mkfs": 0,
+            "fat_chan.ff_use_lfn": 0,
+            "fat_chan.ff_fs_rpath": 0,
+            "mcuboot.primary-slot-address": "0x8020000",
+            "mcuboot.slot-size": "0x1E0000",
+            "mcuboot.scratch-address": "0x9000000",
+            "mcuboot.scratch-size": "0x20000",
+            "mcuboot.max-img-sectors": "0x3C0",
+            "mcuboot.max-align": 32,
+            "mcuboot.bootstrap": true,
+            "mcuboot.application-hooks": true,
+            "mcuboot.application-littlefs": true,
+            "mcuboot.application-sdcard": null,
+            "mcuboot.application-dfu": true,
+            "mcuboot.signature-algorithm": "SIGNATURE_TYPE_EC256",
+            "mcuboot.encrypt-ec256": true,
+            "mcuboot.include-keys": null,
+            "mcuboot.bootloader-build": false,
+            "mcuboot.encrypt-scratch": true,
+            "mcuboot.swap-buf-size": 131072
         }
     }
 }
diff --git a/mbed_app_bootutil.json b/mbed_app_bootutil.json
index 00fa61f..6acff71 100644
--- a/mbed_app_bootutil.json
+++ b/mbed_app_bootutil.json
@@ -15,37 +15,6 @@
             "mbed-trace.enable": false,
             "mbed-trace.fea-ipv6": false
         },
-        "NRF52840_DK": {
-            "target.features_remove": ["CRYPTOCELL310"],
-            "target.macros_remove": ["MBEDTLS_CONFIG_HW_SUPPORT"],
-            "mcuboot.primary-slot-address": "0x20000",
-            "mcuboot.slot-size": "0xC0000",
-            "mcuboot.scratch-address": "0xE0000",
-            "mcuboot.scratch-size": "0x20000",
-            "mcuboot.max-img-sectors": "0x180",
-            "mcuboot.read-granularity": 4,
-            "qspif.QSPI_MIN_PROG_SIZE": 4
-        },
-        "EP_AGORA": {
-            "target.features_remove": ["CRYPTOCELL310"],
-            "target.macros_remove": ["MBEDTLS_CONFIG_HW_SUPPORT"],
-            "mcuboot.primary-slot-address": "0x20000",
-            "mcuboot.slot-size": "0xC0000",
-            "mcuboot.scratch-address": "0xE0000",
-            "mcuboot.scratch-size": "0x20000",
-            "mcuboot.max-img-sectors": "0x180",
-            "mcuboot.read-granularity": 4,
-            "qspif.QSPI_MIN_PROG_SIZE": 4
-        },
-        "DISCO_L475VG_IOT01A": {
-            "mcuboot.primary-slot-address": "0x8020000",
-            "mcuboot.slot-size": "0xC0000",
-            "mcuboot.scratch-address": "0x80E0000",
-            "mcuboot.scratch-size": "0x20000",
-            "mcuboot.max-img-sectors": "0x180",
-            "mcuboot.read-granularity": 1,
-            "qspif.QSPI_MIN_PROG_SIZE": 1
-        },
         "PORTENTA_H7_M7": {
             "target.clock_source": "USE_PLL_HSE_EXTC",
             "target.use-mpu": false,
@@ -70,7 +39,7 @@
             "mcuboot.max-align": 32,
             "mcuboot.bootstrap": true,
             "mcuboot.application-hooks": true,
-            "mcuboot.application-littlefs": null,
+            "mcuboot.application-littlefs": true,
             "mcuboot.application-sdcard": true,
             "mcuboot.application-dfu": null,
             "mcuboot.signature-algorithm": "SIGNATURE_TYPE_EC256",