diff --git a/resources/vww/samples/adult_blur.png b/resources/vww/samples/adult_blur.png
deleted file mode 100644
index 5f2cc94..0000000
--- a/resources/vww/samples/adult_blur.png
+++ /dev/null
Binary files differ
diff --git a/resources/vww/samples/files.md b/resources/vww/samples/files.md
index 13f5de6..6aca607 100644
--- a/resources/vww/samples/files.md
+++ b/resources/vww/samples/files.md
@@ -7,4 +7,4 @@
 
 The sample images provided are under Creative Commons License. The links are documented here for traceability:
 * https://www.pexels.com/photo/man-in-red-jacket-1681010/
-* https://www.pexels.com/photo/adult-blur-camera-casual-598917/
+* https://www.pexels.com/photo/low-angle-photo-of-st-paul-s-cathedral-under-sunset-colors-1043121/
diff --git a/resources/vww/samples/st_paul_s_cathedral.png b/resources/vww/samples/st_paul_s_cathedral.png
new file mode 100644
index 0000000..a6e826a
--- /dev/null
+++ b/resources/vww/samples/st_paul_s_cathedral.png
Binary files differ
diff --git a/scripts/py/gen_rgb_cpp.py b/scripts/py/gen_rgb_cpp.py
index 957d2d0..c53fbd7 100644
--- a/scripts/py/gen_rgb_cpp.py
+++ b/scripts/py/gen_rgb_cpp.py
@@ -70,12 +70,23 @@
                                  gen_time=datetime.datetime.now(),
                                  file_name=os.path.basename(image_filename),
                                  year=datetime.datetime.now().year)
+    # IFM size
+    ifm_width = image_size[0]
+    ifm_height = image_size[1]
 
-    original_image.thumbnail(image_size)
-    delta_w = abs(image_size[0] - original_image.size[0])
-    delta_h = abs(image_size[1] - original_image.size[1])
-    resized_image = Image.new('RGB', args.image_size, (255, 255, 255, 0))
-    resized_image.paste(original_image, (int(delta_w / 2), int(delta_h / 2)))
+    # Aspect ratio resize
+    scale_ratio = (float)(max(ifm_width, ifm_height)) / (float)(min(original_image.size[0], original_image.size[1]))
+    resized_width = (int)(original_image.size[0] * scale_ratio)
+    resized_height = (int)(original_image.size[1] * scale_ratio)
+    resized_image = original_image.resize([resized_width,resized_height], Image.BILINEAR)
+
+    # Crop the center of the image
+    resized_image = resized_image.crop((
+        (resized_width - ifm_width) / 2,   # left
+        (resized_height - ifm_height) / 2, # top
+        (resized_width + ifm_width) / 2,   # right
+        (resized_height + ifm_height) / 2  # bottom
+        ))
 
     # Convert the image and write it to the cc file
     rgb_data = np.array(resized_image, dtype=np.uint8).flatten()
diff --git a/source/application/main/UseCaseCommonUtils.cc b/source/application/main/UseCaseCommonUtils.cc
index a99e05d..e48e308 100644
--- a/source/application/main/UseCaseCommonUtils.cc
+++ b/source/application/main/UseCaseCommonUtils.cc
@@ -35,8 +35,8 @@
 
 void image::ConvertImgToInt8(void* data, const size_t kMaxImageSize)
 {
-    auto* tmp_req_data = (uint8_t*) data;
-    auto* tmp_signed_req_data = (int8_t*) data;
+    auto* tmp_req_data = static_cast<uint8_t *>(data);
+    auto* tmp_signed_req_data = static_cast<int8_t *>(data);
 
     for (size_t i = 0; i < kMaxImageSize; i++) {
         tmp_signed_req_data[i] = (int8_t) (
diff --git a/source/use_case/ad/src/MainLoop.cc b/source/use_case/ad/src/MainLoop.cc
index 3c2f9cc..a323610 100644
--- a/source/use_case/ad/src/MainLoop.cc
+++ b/source/use_case/ad/src/MainLoop.cc
@@ -90,6 +90,7 @@
             case MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the data index [0, %d]: ",
                        NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto audioIndex = static_cast<uint32_t>(
                         arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyVibrationHandler(caseContext,
diff --git a/source/use_case/asr/src/MainLoop.cc b/source/use_case/asr/src/MainLoop.cc
index 42bb08e..87145f4 100644
--- a/source/use_case/asr/src/MainLoop.cc
+++ b/source/use_case/asr/src/MainLoop.cc
@@ -133,6 +133,7 @@
             case MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the audio clip index [0, %d]: ",
                        NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto clipIndex = static_cast<uint32_t>(
                                     arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyAudioHandler(caseContext,
diff --git a/source/use_case/img_class/src/MainLoop.cc b/source/use_case/img_class/src/MainLoop.cc
index 79f6018..ea9f14a 100644
--- a/source/use_case/img_class/src/MainLoop.cc
+++ b/source/use_case/img_class/src/MainLoop.cc
@@ -68,6 +68,7 @@
                 break;
             case common::MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the image index [0, %d]: ", NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto imgIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyImageHandler(caseContext, imgIndex, false);
                 break;
diff --git a/source/use_case/img_class/src/UseCaseHandler.cc b/source/use_case/img_class/src/UseCaseHandler.cc
index 66df1da..effc06f 100644
--- a/source/use_case/img_class/src/UseCaseHandler.cc
+++ b/source/use_case/img_class/src/UseCaseHandler.cc
@@ -97,7 +97,7 @@
 
             /* Display this image on the LCD. */
             platform.data_psn->present_data_image(
-                (uint8_t*) inputTensor->data.data,
+                static_cast<uint8_t *>(inputTensor->data.data),
                 nCols, nRows, nChannels,
                 dataPsnImgStartX, dataPsnImgStartY, dataPsnImgDownscaleFactor);
 
diff --git a/source/use_case/kws/src/MainLoop.cc b/source/use_case/kws/src/MainLoop.cc
index 80254d0..c683e71 100644
--- a/source/use_case/kws/src/MainLoop.cc
+++ b/source/use_case/kws/src/MainLoop.cc
@@ -95,6 +95,7 @@
                 break;
             case MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the audio clip index [0, %d]: ", NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto clipIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyAudioHandler(caseContext, clipIndex, false);
                 break;
diff --git a/source/use_case/kws_asr/src/MainLoop.cc b/source/use_case/kws_asr/src/MainLoop.cc
index ed9034f..d5a2c2b 100644
--- a/source/use_case/kws_asr/src/MainLoop.cc
+++ b/source/use_case/kws_asr/src/MainLoop.cc
@@ -161,6 +161,7 @@
             case MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the audio clip index [0, %d]: ",
                        NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto clipIndex = static_cast<uint32_t>(
                         arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyAudioHandler(caseContext,
diff --git a/source/use_case/vww/src/MainLoop.cc b/source/use_case/vww/src/MainLoop.cc
index f026cc2..b29238c 100644
--- a/source/use_case/vww/src/MainLoop.cc
+++ b/source/use_case/vww/src/MainLoop.cc
@@ -67,6 +67,7 @@
                 break;
             case common::MENU_OPT_RUN_INF_CHOSEN: {
                 printf("    Enter the image index [0, %d]: ", NUMBER_OF_FILES-1);
+                fflush(stdout);
                 auto imgIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
                 executionSuccessful = ClassifyImageHandler(caseContext, imgIndex, false);
                 break;
diff --git a/source/use_case/vww/src/UseCaseHandler.cc b/source/use_case/vww/src/UseCaseHandler.cc
index fb2e837..d384032 100644
--- a/source/use_case/vww/src/UseCaseHandler.cc
+++ b/source/use_case/vww/src/UseCaseHandler.cc
@@ -21,6 +21,8 @@
 #include "UseCaseCommonUtils.hpp"
 #include "hal.h"
 
+#include <algorithm>
+
 namespace arm {
 namespace app {
 
@@ -94,13 +96,19 @@
 
             /* Display this image on the LCD. */
             platform.data_psn->present_data_image(
-                (uint8_t *) inputTensor->data.data,
+                static_cast<uint8_t *>(inputTensor->data.data),
                 nCols, nRows, nChannels,
                 dataPsnImgStartX, dataPsnImgStartY, dataPsnImgDownscaleFactor);
 
-            /* If the data is signed. */
-            if (model.IsDataSigned()) {
-                image::ConvertImgToInt8(inputTensor->data.data, inputTensor->bytes);
+            /* Vww model preprocessing is image conversion from uint8 to [0,1] float values,
+             * then quantize them with input quantization info. */
+            QuantParams inQuantParams = GetTensorQuantParams(inputTensor);
+
+            auto* req_data = static_cast<uint8_t *>(inputTensor->data.data);
+            auto* signed_req_data = static_cast<int8_t *>(inputTensor->data.data);
+            for (size_t i = 0; i < inputTensor->bytes; i++) {
+                auto i_data_int8 = static_cast<int8_t>(((static_cast<float>(req_data[i]) / 255.0f) / inQuantParams.scale) + inQuantParams.offset);
+                signed_req_data[i] = std::min<int8_t>(INT8_MAX, std::max<int8_t>(i_data_int8, INT8_MIN));
             }
 
             /* Display message on the LCD - inference running. */
@@ -159,7 +167,7 @@
         const uint32_t nChannels = (inputTensor->dims->size == 4) ? inputTensor->dims->data[3] : 1;
 
         const uint8_t* srcPtr = get_img_array(imIdx);
-        auto* dstPtr = (uint8_t*)inputTensor->data.data;
+        auto* dstPtr = static_cast<uint8_t *>(inputTensor->data.data);
         if (1 == nChannels) {
             /**
              * Visual Wake Word model accepts only one channel =>
diff --git a/tests/use_case/ad/InferenceTestAD.cc b/tests/use_case/ad/InferenceTestAD.cc
index d5e21c2..ad785e8 100644
--- a/tests/use_case/ad/InferenceTestAD.cc
+++ b/tests/use_case/ad/InferenceTestAD.cc
@@ -64,7 +64,7 @@
 template <typename T>
 void TestInference(const T *input_goldenFV, const T *output_goldenFV, arm::app::Model& model)
 {
-    REQUIRE(RunInference(model, (int8_t*)input_goldenFV));
+    REQUIRE(RunInference(model, static_cast<const T*>(input_goldenFV)));
 
     TfLiteTensor *outputTensor = model.GetOutputTensor(0);
 
@@ -75,7 +75,7 @@
 
     for (size_t i = 0; i < outputTensor->bytes; i++)
     {
-        REQUIRE((int)tensorData[i] == (int)((T)output_goldenFV[i]));
+        REQUIRE(static_cast<int>(tensorData[i]) == static_cast<int>(((T)output_goldenFV[i])));
     }
 }
 
diff --git a/tests/use_case/asr/InferenceTestWav2Letter.cc b/tests/use_case/asr/InferenceTestWav2Letter.cc
index d5e6c35..1f9cb80 100644
--- a/tests/use_case/asr/InferenceTestWav2Letter.cc
+++ b/tests/use_case/asr/InferenceTestWav2Letter.cc
@@ -81,7 +81,7 @@
     REQUIRE(tensorData);
 
     for (size_t i = 0; i < outputTensor->bytes; i++) {
-        REQUIRE((int)tensorData[i] == (int)((T)output_goldenFV[i]));
+        REQUIRE(static_cast<int>(tensorData[i]) == static_cast<int>(((T)output_goldenFV[i])));
     }
 }
 
diff --git a/tests/use_case/img_class/InferenceTestMobilenetV2.cc b/tests/use_case/img_class/InferenceTestMobilenetV2.cc
index 6fbf374..bb89c99 100644
--- a/tests/use_case/img_class/InferenceTestMobilenetV2.cc
+++ b/tests/use_case/img_class/InferenceTestMobilenetV2.cc
@@ -56,7 +56,7 @@
     REQUIRE(tensorData);
 
     for (size_t i = 0; i < outputTensor->bytes; i++) {
-        REQUIRE((int)tensorData[i] == Approx((int)((T)goldenFV[i])).epsilon(tolerance));
+        REQUIRE(static_cast<int>(tensorData[i]) == Approx(static_cast<int>((T)goldenFV[i])).epsilon(tolerance));
     }
 }
 
diff --git a/tests/use_case/kws/InferenceTestDSCNN.cc b/tests/use_case/kws/InferenceTestDSCNN.cc
index d02e33c..7ce55dd 100644
--- a/tests/use_case/kws/InferenceTestDSCNN.cc
+++ b/tests/use_case/kws/InferenceTestDSCNN.cc
@@ -70,7 +70,7 @@
     REQUIRE(tensorData);
 
     for (size_t i = 0; i < outputTensor->bytes; i++) {
-        REQUIRE((int)tensorData[i] == (int)((T)output_goldenFV[i]));
+        REQUIRE(static_cast<int>(tensorData[i]) == static_cast<int>(((T)output_goldenFV[i])));
     }
 }
 
diff --git a/tests/use_case/kws_asr/InferenceTestDSCNN.cc b/tests/use_case/kws_asr/InferenceTestDSCNN.cc
index e210c33..134003d 100644
--- a/tests/use_case/kws_asr/InferenceTestDSCNN.cc
+++ b/tests/use_case/kws_asr/InferenceTestDSCNN.cc
@@ -68,7 +68,7 @@
     REQUIRE(tensorData);
 
     for (size_t i = 0; i < outputTensor->bytes; i++) {
-        REQUIRE((int) tensorData[i] == (int) ((T) output_goldenFV[i]));
+        REQUIRE(static_cast<int>(tensorData[i]) == static_cast<int>((T) output_goldenFV[i]));
     }
 }
 
diff --git a/tests/use_case/kws_asr/InferenceTestWav2Letter.cc b/tests/use_case/kws_asr/InferenceTestWav2Letter.cc
index 5f5ad98..1b14a42 100644
--- a/tests/use_case/kws_asr/InferenceTestWav2Letter.cc
+++ b/tests/use_case/kws_asr/InferenceTestWav2Letter.cc
@@ -83,7 +83,7 @@
     REQUIRE(tensorData);
 
     for (size_t i = 0; i < outputTensor->bytes; i++) {
-        REQUIRE((int)tensorData[i] == (int)((T)output_goldenFV[i]));
+        REQUIRE(static_cast<int>(tensorData[i]) == static_cast<int>(((T)output_goldenFV[i])));
     }
 }
 
diff --git a/tests/use_case/vww/VisualWakeWordUCTests.cc b/tests/use_case/vww/VisualWakeWordUCTests.cc
index 891423b..700a6bb 100644
--- a/tests/use_case/vww/VisualWakeWordUCTests.cc
+++ b/tests/use_case/vww/VisualWakeWordUCTests.cc
@@ -73,7 +73,7 @@
 
     auto results = caseContext.Get<std::vector<arm::app::ClassificationResult>>("results");
 
-    REQUIRE(results[0].m_labelIdx == 0);
+    REQUIRE(results[0].m_labelIdx == 1);
 }
 
 TEST_CASE("Inference run all images")
diff --git a/tests/utils/ImageUtils.cc b/tests/utils/ImageUtils.cc
index f77ce1e..506040f 100644
--- a/tests/utils/ImageUtils.cc
+++ b/tests/utils/ImageUtils.cc
@@ -18,12 +18,12 @@
 
 void convertImgIoInt8(void * data, const size_t sz)
 {
-    uint8_t * tmp_req_data          = (uint8_t *)data;
-    int8_t * tmp_signed_req_data    = (int8_t *) data;
+    uint8_t * tmp_req_data          = static_cast<uint8_t *>(data);
+    int8_t * tmp_signed_req_data    = static_cast<int8_t *>(data);
 
     for (size_t i = 0; i < sz; ++i) {
-        tmp_signed_req_data[i] = (int8_t)(
-                (int32_t)(tmp_req_data[i]) - 128);
+        tmp_signed_req_data[i] = static_cast<int8_t>(
+                static_cast<int32_t>(tmp_req_data[i]) - 128);
     }
 }
 
