diff --git a/source/use_case/ad/usecase.cmake b/source/use_case/ad/usecase.cmake
index 46e4101..d591f98 100644
--- a/source/use_case/ad/usecase.cmake
+++ b/source/use_case/ad/usecase.cmake
@@ -15,25 +15,9 @@
 #  limitations under the License.
 #----------------------------------------------------------------------------
 
-# If the path to a directory or source file has been defined,
-# get the type here (FILEPATH or PATH):
-if (DEFINED ${use_case}_FILE_PATH)
-    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
-
-    # Set the default type if path is not a dir or file path (or undefined)
-    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
-        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
-    endif()
-else()
-    # Default is a directory path
-    set(PATH_TYPE PATH)
-endif()
-
-message(STATUS "${use_case}_FILE_PATH is of type: ${PATH_TYPE}")
-
 USER_OPTION(${use_case}_FILE_PATH "Directory with custom WAV input files, or path to a single input WAV file, to use in the evaluation application."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/samples/
-    ${PATH_TYPE})
+    PATH_OR_FILE)
 
 USER_OPTION(${use_case}_AUDIO_RATE "Specify the target sampling rate. Default is 16000."
     16000
@@ -76,19 +60,10 @@
         0x00200000
         STRING)
 
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH)
-
-    set(MODEL_RESOURCES_DIR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR})
-    set(MODEL_FILENAME          ad_med_nov11_int8.tflite)
-    set(DEFAULT_MODEL_PATH      ${MODEL_RESOURCES_DIR}/${MODEL_FILENAME})
-
-    # TODO: Download the model here for this use case when available on Model Zoo.
-    # For now we write a place holder file.
-    file(WRITE ${DEFAULT_MODEL_PATH} "Placeholder")
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/ad_medium_int8_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH  "N/A")
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/ad_medium_int8.tflite)
 endif()
 
 set(EXTRA_MODEL_CODE
diff --git a/source/use_case/asr/usecase.cmake b/source/use_case/asr/usecase.cmake
index cac1862..2b17d84 100644
--- a/source/use_case/asr/usecase.cmake
+++ b/source/use_case/asr/usecase.cmake
@@ -15,25 +15,9 @@
 #  limitations under the License.
 #----------------------------------------------------------------------------
 
-# If the path to a directory or source file has been defined,
-# get the type here (FILEPATH or PATH):
-if (DEFINED ${use_case}_FILE_PATH)
-    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
-
-    # Set the default type if path is not a dir or file path (or undefined)
-    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
-        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
-    endif()
-else()
-    # Default is a directory path
-    set(PATH_TYPE PATH)
-endif()
-
-message(STATUS "${use_case}_FILE_PATH is of type: ${PATH_TYPE}")
-
 USER_OPTION(${use_case}_FILE_PATH "Directory with custom WAV input files, or path to a single WAV file, to use in the evaluation application."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/samples/
-    ${PATH_TYPE})
+    PATH_OR_FILE)
 
 USER_OPTION(${use_case}_LABELS_TXT_FILE "Labels' txt file for the chosen model."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/labels/labels_wav2letter.txt
@@ -90,58 +74,10 @@
     0x00200000
     STRING)
 
-
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH)
-
-    set(MODEL_FILENAME          wav2letter_int8.tflite)
-    set(MODEL_RESOURCES_DIR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR})
-    set(DEFAULT_MODEL_PATH      ${MODEL_RESOURCES_DIR}/${MODEL_FILENAME})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH      "models/speech_recognition/wav2letter/tflite_int8")
-    set(ZOO_MODEL_SUBPATH       "${ZOO_COMMON_SUBPATH}/${MODEL_FILENAME}")
-    set(ZOO_MODEL_VERSION       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_MODEL_SUBPATH} ${DEFAULT_MODEL_PATH})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH to the CMake configuration.")
-    endif()
-
-    # If the target platform is native
-    if (${TARGET_PLATFORM} STREQUAL native)
-
-        # Download test vectors
-        set(ZOO_TEST_IFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_input/input_2_int8/0.npy")
-        set(ZOO_TEST_OFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_output/Identity_int8/0.npy")
-
-        set(${use_case}_TEST_IFM    ${MODEL_RESOURCES_DIR}/ifm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}")
-        set(${use_case}_TEST_OFM    ${MODEL_RESOURCES_DIR}/ofm0.npy CACHE FILEPATH
-                                "Input test vector for ${use_case}")
-
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_IFM_SUBPATH} ${${use_case}_TEST_IFM})
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_OFM_SUBPATH} ${${use_case}_TEST_OFM})
-
-        set(TEST_SRC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/src)
-        set(TEST_INC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/include)
-        file(MAKE_DIRECTORY ${TEST_SRC_GEN_DIR} ${TEST_INC_GEN_DIR})
-
-        # Generate test data files to be included in x86 tests
-        generate_test_data_code(
-                            INPUT_DIR "${DOWNLOAD_DEP_DIR}/${use_case}"
-                            DESTINATION_SRC ${TEST_SRC_GEN_DIR}
-                            DESTINATION_HDR ${TEST_INC_GEN_DIR}
-                            USECASE  "${use_case}")
-    endif()
-
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/wav2letter_int8_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH  "N/A")
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/wav2letter_int8.tflite)
 endif()
 
 set(EXTRA_MODEL_CODE
diff --git a/source/use_case/img_class/usecase.cmake b/source/use_case/img_class/usecase.cmake
index 384c58e..0089356 100644
--- a/source/use_case/img_class/usecase.cmake
+++ b/source/use_case/img_class/usecase.cmake
@@ -15,24 +15,9 @@
 #  limitations under the License.
 #----------------------------------------------------------------------------
 
-# If the path to a directory or source file has been defined,
-# get the type here (FILEPATH or PATH):
-if (DEFINED ${use_case}_FILE_PATH)
-    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
-    # Set the default type if path is not a dir or file path (or undefined)
-    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
-        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
-    endif()
-else()
-    # Default is a directory path
-    set(PATH_TYPE PATH)
-endif()
-
-message(STATUS "${use_case}_FILE_PATH is of type: ${PATH_TYPE}")
-
 USER_OPTION(${use_case}_FILE_PATH "Directory with custom image files to use, or path to a single image, in the evaluation application"
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/samples/
-    ${PATH_TYPE})
+    PATH_OR_FILE)
 
 USER_OPTION(${use_case}_IMAGE_SIZE "Square image size in pixels. Images will be resized to this size."
     224
@@ -61,57 +46,10 @@
     0x00200000
     STRING)
 
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH)
-
-    set(MODEL_RESOURCES_DIR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR})
-    set(MODEL_FILENAME          mobilenet_v2_1.0_224_quantized_1_default_1.tflite)
-    set(DEFAULT_MODEL_PATH      ${MODEL_RESOURCES_DIR}/${MODEL_FILENAME})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH      "models/image_classification/mobilenet_v2_1.0_224/tflite_uint8")
-    set(ZOO_MODEL_SUBPATH       "${ZOO_COMMON_SUBPATH}/${MODEL_FILENAME}")
-    set(ZOO_MODEL_VERSION       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_MODEL_SUBPATH} ${DEFAULT_MODEL_PATH})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH to the CMake configuration.")
-    endif()
-
-    # If the target platform is native
-    if (${TARGET_PLATFORM} STREQUAL native)
-
-        # Download test vectors
-        set(ZOO_TEST_IFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_input/input/0.npy")
-        set(ZOO_TEST_OFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_output/output/0.npy")
-
-        set(${use_case}_TEST_IFM    ${MODEL_RESOURCES_DIR}/ifm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}")
-        set(${use_case}_TEST_OFM    ${MODEL_RESOURCES_DIR}/ofm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}")
-
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_IFM_SUBPATH} ${${use_case}_TEST_IFM})
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_OFM_SUBPATH} ${${use_case}_TEST_OFM})
-
-        set(TEST_SRC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/src)
-        set(TEST_INC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/include)
-        file(MAKE_DIRECTORY ${TEST_SRC_GEN_DIR} ${TEST_INC_GEN_DIR})
-
-        # Generate test data files to be included in x86 tests
-        generate_test_data_code(
-                            INPUT_DIR "${DOWNLOAD_DEP_DIR}/${use_case}"
-                            DESTINATION_SRC ${TEST_SRC_GEN_DIR}
-                            DESTINATION_HDR ${TEST_INC_GEN_DIR}
-                            USECASE  "${use_case}")
-    endif()
-
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/mobilenet_v2_1.0_224_quantized_1_default_1_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH  "N/A")
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/mobilenet_v2_1.0_224_quantized_1_default_1.tflite)
 endif()
 
 USER_OPTION(${use_case}_MODEL_TFLITE_PATH "NN models file to be used in the evaluation application. Model files must be in tflite format."
diff --git a/source/use_case/inference_runner/usecase.cmake b/source/use_case/inference_runner/usecase.cmake
index 0fd159f..225aaf4 100644
--- a/source/use_case/inference_runner/usecase.cmake
+++ b/source/use_case/inference_runner/usecase.cmake
@@ -21,30 +21,10 @@
 
 generate_default_input_code(${INC_GEN_DIR})
 
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH)
-
-    set(MODEL_RESOURCES_DIR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR})
-    set(MODEL_FILENAME          dnn_s_quantized.tflite)
-    set(DEFAULT_MODEL_PATH      ${MODEL_RESOURCES_DIR}/${MODEL_FILENAME})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH      "models/keyword_spotting/dnn_small/tflite_int8/")
-    set(ZOO_MODEL_SUBPATH       "${ZOO_COMMON_SUBPATH}/${MODEL_FILENAME}")
-    set(ZOO_MODEL_VERSION       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_MODEL_SUBPATH} ${DEFAULT_MODEL_PATH})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH to the CMake configuration.")
-    endif()
-
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/dnn_s_quantized_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH  "N/A")
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/dnn_s_quantized.tflite)
 endif()
 
 USER_OPTION(${use_case}_MODEL_TFLITE_PATH "NN models file to be used in the evaluation application. Model files must be in tflite format."
diff --git a/source/use_case/kws/usecase.cmake b/source/use_case/kws/usecase.cmake
index e6fbf69..23de212 100644
--- a/source/use_case/kws/usecase.cmake
+++ b/source/use_case/kws/usecase.cmake
@@ -15,24 +15,9 @@
 #  limitations under the License.
 #----------------------------------------------------------------------------
 
-# If the path to a directory or source file has been defined,
-# get the type here (FILEPATH or PATH):
-if (DEFINED ${use_case}_FILE_PATH)
-    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
-
-    # Set the default type if path is not a dir or file path (or undefined)
-    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
-        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
-    endif()
-else()
-    # Default is a directory path
-    set(PATH_TYPE PATH)
-endif()
-
-message(STATUS "${use_case}_FILE_PATH is of type: ${PATH_TYPE}")
 USER_OPTION(${use_case}_FILE_PATH "Directory with custom WAV input files, or path to a single WAV file, to use in the evaluation application."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/samples/
-    ${PATH_TYPE})
+    PATH_OR_FILE)
 
 USER_OPTION(${use_case}_LABELS_TXT_FILE "Labels' txt file for the chosen model."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/labels/ds_cnn_labels.txt
@@ -88,57 +73,10 @@
     0x00100000
     STRING)
 
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH)
-
-    set(MODEL_FILENAME          ds_cnn_clustered_int8.tflite)
-    set(MODEL_RESOURCES_DIR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR})
-    set(DEFAULT_MODEL_PATH      ${MODEL_RESOURCES_DIR}/${MODEL_FILENAME})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH      "models/keyword_spotting/ds_cnn_large/tflite_clustered_int8")
-    set(ZOO_MODEL_SUBPATH       "${ZOO_COMMON_SUBPATH}/${MODEL_FILENAME}")
-    set(ZOO_MODEL_VERSION       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_MODEL_SUBPATH} ${DEFAULT_MODEL_PATH})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH to the CMake configuration.")
-    endif()
-
-    # If the target platform is native
-    if (${TARGET_PLATFORM} STREQUAL native)
-
-        # Download test vectors
-        set(ZOO_TEST_IFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_input/input_2/0.npy")
-        set(ZOO_TEST_OFM_SUBPATH    "${ZOO_COMMON_SUBPATH}/testing_output/Identity/0.npy")
-
-        set(${use_case}_TEST_IFM    ${MODEL_RESOURCES_DIR}/ifm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}")
-        set(${use_case}_TEST_OFM    ${MODEL_RESOURCES_DIR}/ofm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}")
-
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_IFM_SUBPATH} ${${use_case}_TEST_IFM})
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION} ${ZOO_TEST_OFM_SUBPATH} ${${use_case}_TEST_OFM})
-
-        set(TEST_SRC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/src)
-        set(TEST_INC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/include)
-        file(MAKE_DIRECTORY ${TEST_SRC_GEN_DIR} ${TEST_INC_GEN_DIR})
-
-        # Generate test data files to be included in x86 tests
-        generate_test_data_code(
-                            INPUT_DIR "${DOWNLOAD_DEP_DIR}/${use_case}"
-                            DESTINATION_SRC ${TEST_SRC_GEN_DIR}
-                            DESTINATION_HDR ${TEST_INC_GEN_DIR}
-                            USECASE  "${use_case}")
-    endif()
-
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/ds_cnn_clustered_int8_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH  "N/A")
+    set(DEFAULT_MODEL_PATH      ${DEFAULT_MODEL_DIR}/ds_cnn_clustered_int8.tflite)
 endif()
 
 set(EXTRA_MODEL_CODE
diff --git a/source/use_case/kws_asr/usecase.cmake b/source/use_case/kws_asr/usecase.cmake
index 5729be2..d8ac897 100644
--- a/source/use_case/kws_asr/usecase.cmake
+++ b/source/use_case/kws_asr/usecase.cmake
@@ -17,23 +17,21 @@
 
 # If the path to a directory or source file has been defined,
 # get the type here (FILEPATH or PATH):
-if (DEFINED ${use_case}_FILE_PATH)
-    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
-
-    # Set the default type if path is not a dir or file path (or undefined)
-    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
-        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
-    endif()
-else()
-    # Default is a directory path
-    set(PATH_TYPE PATH)
-endif()
-
-message(STATUS "${use_case}_FILE_PATH is of type: ${PATH_TYPE}")
+#if (DEFINED ${use_case}_FILE_PATH)
+#    get_path_type(${${use_case}_FILE_PATH} PATH_TYPE)
+#
+#    # Set the default type if path is not a dir or file path (or undefined)
+#    if (NOT ${PATH_TYPE} STREQUAL PATH AND NOT ${PATH_TYPE} STREQUAL FILEPATH)
+#        message(FATAL_ERROR "Invalid ${use_case}_FILE_PATH. It should be a dir or file path.")
+#    endif()
+#else()
+#    # Default is a directory path
+#    set(PATH_TYPE PATH)
+#endif()
 
 USER_OPTION(${use_case}_FILE_PATH "Directory with WAV files, or path to a single WAV file, to use in the evaluation application."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/samples/
-    ${PATH_TYPE})
+    PATH_OR_FILE)
 
 USER_OPTION(${use_case}_AUDIO_RATE "Specify the target sampling rate. Default is 16000."
     16000
@@ -59,42 +57,16 @@
     16000
     STRING)
 
-# Generate audio .cc files:
-generate_audio_code(${${use_case}_FILE_PATH} ${SRC_GEN_DIR} ${INC_GEN_DIR}
-        ${${use_case}_AUDIO_RATE}
-        ${${use_case}_AUDIO_MONO}
-        ${${use_case}_AUDIO_OFFSET}
-        ${${use_case}_AUDIO_DURATION}
-        ${${use_case}_AUDIO_RES_TYPE}
-        ${${use_case}_AUDIO_MIN_SAMPLES})
-
 # Generate kws labels file:
 USER_OPTION(${use_case}_LABELS_TXT_FILE_KWS "Labels' txt file for the chosen model."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/labels/ds_cnn_labels.txt
     FILEPATH)
 
-set(${use_case}_LABELS_CPP_FILE_KWS Labels_dscnn)
-generate_labels_code(
-    INPUT           "${${use_case}_LABELS_TXT_FILE_KWS}"
-    DESTINATION_SRC ${SRC_GEN_DIR}
-    DESTINATION_HDR ${INC_GEN_DIR}
-    OUTPUT_FILENAME "${${use_case}_LABELS_CPP_FILE_KWS}"
-    NAMESPACE       "arm" "app" "kws"
-)
-
 # Generate asr labels file:
 USER_OPTION(${use_case}_LABELS_TXT_FILE_ASR "Labels' txt file for the chosen model."
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/${use_case}/labels/labels_wav2letter.txt
     FILEPATH)
 
-set(${use_case}_LABELS_CPP_FILE_ASR Labels_wav2letter)
-generate_labels_code(
-    INPUT           "${${use_case}_LABELS_TXT_FILE_ASR}"
-    DESTINATION_SRC ${SRC_GEN_DIR}
-    DESTINATION_HDR ${INC_GEN_DIR}
-    OUTPUT_FILENAME "${${use_case}_LABELS_CPP_FILE_ASR}"
-    NAMESPACE       "arm" "app" "asr"
-)
 
 USER_OPTION(${use_case}_ACTIVATION_BUF_SZ "Activation buffer size for the chosen model"
     0x00200000
@@ -108,132 +80,14 @@
     0.5
     STRING)
 
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH_KWS)
-
-    set(SUB_USECASE_KWS                 "kws")
-    set(MODEL_FILENAME_KWS          ds_cnn_clustered_int8.tflite)
-    set(MODEL_RESOURCES_DIR_KWS     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY             ${MODEL_RESOURCES_DIR_KWS})
-    set(DEFAULT_MODEL_PATH_KWS      ${MODEL_RESOURCES_DIR_KWS}/${MODEL_FILENAME_KWS})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH_KWS      "models/keyword_spotting/ds_cnn_large/tflite_clustered_int8")
-    set(ZOO_MODEL_SUBPATH_KWS       "${ZOO_COMMON_SUBPATH_KWS}/${MODEL_FILENAME_KWS}")
-    set(ZOO_MODEL_VERSION_KWS       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION_KWS} ${ZOO_MODEL_SUBPATH_KWS} ${DEFAULT_MODEL_PATH_KWS})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH_KWS to the CMake configuration.")
-    endif()
-
-    if (${TARGET_PLATFORM} STREQUAL native)
-
-        # Download test vectors
-        set(ZOO_TEST_IFM_SUBPATH_KWS    "${ZOO_COMMON_SUBPATH_KWS}/testing_input/input_2/0.npy")
-        set(ZOO_TEST_OFM_SUBPATH_KWS    "${ZOO_COMMON_SUBPATH_KWS}/testing_output/Identity/0.npy")
-
-        file(MAKE_DIRECTORY         ${MODEL_RESOURCES_DIR_KWS}/${SUB_USECASE_KWS})
-        set(${use_case}_TEST_IFM    ${MODEL_RESOURCES_DIR_KWS}/${SUB_USECASE_KWS}/ifm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}-${SUB_USECASE_KWS}")
-        set(${use_case}_TEST_OFM    ${MODEL_RESOURCES_DIR_KWS}/${SUB_USECASE_KWS}/ofm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}-${SUB_USECASE_KWS}.")
-
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION_KWS} ${ZOO_TEST_IFM_SUBPATH_KWS} ${${use_case}_TEST_IFM})
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION_KWS} ${ZOO_TEST_OFM_SUBPATH_KWS} ${${use_case}_TEST_OFM})
-        set(TEST_SRC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/src)
-        set(TEST_INC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/include)
-        file(MAKE_DIRECTORY ${TEST_SRC_GEN_DIR} ${TEST_INC_GEN_DIR})
-
-        generate_test_data_code(
-                            INPUT_DIR "${DOWNLOAD_DEP_DIR}/${use_case}/${SUB_USECASE_KWS}"
-                            DESTINATION_SRC ${TEST_SRC_GEN_DIR}
-                            DESTINATION_HDR ${TEST_INC_GEN_DIR}
-                            USECASE ${SUB_USECASE_KWS}
-                            NAMESPACE   "arm" "app" ${SUB_USECASE_KWS})
-    endif()
-
+if (ETHOS_U55_ENABLED)
+    set(DEFAULT_MODEL_PATH_KWS      ${DEFAULT_MODEL_DIR}/ds_cnn_clustered_int8_vela.tflite)
+    set(DEFAULT_MODEL_PATH_ASR      ${DEFAULT_MODEL_DIR}/wav2letter_int8_vela.tflite)
 else()
-    set(DEFAULT_MODEL_PATH_KWS  "N/A")
+    set(DEFAULT_MODEL_PATH_KWS      ${DEFAULT_MODEL_DIR}/ds_cnn_clustered_int8.tflite)
+    set(DEFAULT_MODEL_PATH_ASR      ${DEFAULT_MODEL_DIR}/wav2letter_int8.tflite)
 endif()
 
-set(EXTRA_MODEL_CODE_KWS
-    "/* Model parameters for ${use_case} */"
-    "extern const uint32_t   g_NumMfcc = 10"
-    "extern const uint32_t   g_NumAudioWins = 49"
-    "extern const int        g_FrameLength = 640"
-    "extern const int        g_FrameStride = 320"
-    "extern const float      g_ScoreThreshold = ${${use_case}_MODEL_SCORE_THRESHOLD_KWS}"
-    )
-
-# If there is no tflite file pointed to
-if (NOT DEFINED ${use_case}_MODEL_TFLITE_PATH_ASR)
-
-    set(SUB_USECASE_ASR             "asr")
-    set(MODEL_FILENAME_ASR          wav2letter_int8.tflite)
-    set(MODEL_RESOURCES_DIR_ASR     ${DOWNLOAD_DEP_DIR}/${use_case})
-    file(MAKE_DIRECTORY             ${MODEL_RESOURCES_DIR_ASR})
-    set(DEFAULT_MODEL_PATH_ASR      ${MODEL_RESOURCES_DIR_ASR}/${MODEL_FILENAME_ASR})
-
-    # Download the default model
-    set(ZOO_COMMON_SUBPATH_ASR      "models/speech_recognition/wav2letter/tflite_int8")
-    set(ZOO_MODEL_SUBPATH_ASR       "${ZOO_COMMON_SUBPATH_ASR}/${MODEL_FILENAME_ASR}")
-    set(ZOO_MODEL_VERSION_ASR       "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
-
-    download_file_from_modelzoo(${ZOO_MODEL_VERSION_ASR} ${ZOO_MODEL_SUBPATH_ASR}    ${DEFAULT_MODEL_PATH_ASR})
-
-    if (ETHOS_U55_ENABLED)
-        message(STATUS
-            "Ethos-U55 is enabled, but the model downloaded is not optimized by vela. "
-            "To use Ethos-U55 acceleration, optimise the downloaded model and pass it "
-            "as ${use_case}_MODEL_TFLITE_PATH to the CMake configuration.")
-    endif()
-
-    # If the target platform is native
-    if (${TARGET_PLATFORM} STREQUAL native)
-
-        # Download test vectors
-        set(ZOO_TEST_IFM_SUBPATH_ASR    "${ZOO_COMMON_SUBPATH_ASR}/testing_input/input_2_int8/0.npy")
-        set(ZOO_TEST_OFM_SUBPATH_ASR    "${ZOO_COMMON_SUBPATH_ASR}/testing_output/Identity_int8/0.npy")
-
-        file(MAKE_DIRECTORY             ${MODEL_RESOURCES_DIR_ASR}/${SUB_USECASE_ASR})
-        set(${use_case}_TEST_IFM_ASR    ${MODEL_RESOURCES_DIR_ASR}/${SUB_USECASE_ASR}/ifm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}-${SUB_USECASE_ASR}")
-        set(${use_case}_TEST_OFM_ASR    ${MODEL_RESOURCES_DIR_ASR}/${SUB_USECASE_ASR}/ofm0.npy CACHE FILEPATH
-                                    "Input test vector for ${use_case}-${SUB_USECASE_ASR}")
-
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION_ASR} ${ZOO_TEST_IFM_SUBPATH_KWS} ${${use_case}_TEST_IFM_ASR})
-        download_file_from_modelzoo(${ZOO_MODEL_VERSION_ASR} ${ZOO_TEST_OFM_SUBPATH_KWS} ${${use_case}_TEST_OFM_ASR})
-
-        set(TEST_SRC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/src)
-        set(TEST_INC_GEN_DIR ${CMAKE_BINARY_DIR}/generated/${use_case}/tests/include)
-        file(MAKE_DIRECTORY ${TEST_SRC_GEN_DIR} ${TEST_INC_GEN_DIR})
-
-        # Generate test data files to be included in x86 tests
-        generate_test_data_code(
-                            INPUT_DIR "${DOWNLOAD_DEP_DIR}/${use_case}/${SUB_USECASE_ASR}"
-                            DESTINATION_SRC ${TEST_SRC_GEN_DIR}
-                            DESTINATION_HDR ${TEST_INC_GEN_DIR}
-                            USECASE ${SUB_USECASE_ASR}
-                            NAMESPACE   "arm" "app" ${SUB_USECASE_ASR})
-    endif()
-
-else()
-    set(DEFAULT_MODEL_PATH_ASR  "N/A")
-endif()
-
-set(EXTRA_MODEL_CODE_ASR
-    "/* Model parameters for ${use_case} */"
-    "extern const int   g_FrameLength    = 512"
-    "extern const int   g_FrameStride    = 160"
-    "extern const int   g_ctxLen         =  98"
-    "extern const float g_ScoreThreshold = ${${use_case}_MODEL_SCORE_THRESHOLD_ASR}"
-    )
-
 USER_OPTION(${use_case}_MODEL_TFLITE_PATH_KWS "NN models file to be used for KWS in the evaluation application. Model files must be in tflite format."
     ${DEFAULT_MODEL_PATH_KWS}
     FILEPATH
@@ -244,6 +98,28 @@
     FILEPATH
     )
 
+# If the target platform is native
+if (${TARGET_PLATFORM} STREQUAL native)
+    set(DEFAULT_TEST_DATA_DIR ${DEFAULT_TEST_DATA_DIR}/asr ${DEFAULT_TEST_DATA_DIR}/kws)
+endif()
+
+set(EXTRA_MODEL_CODE_KWS
+        "/* Model parameters for ${use_case} */"
+        "extern const uint32_t   g_NumMfcc = 10"
+        "extern const uint32_t   g_NumAudioWins = 49"
+        "extern const int        g_FrameLength = 640"
+        "extern const int        g_FrameStride = 320"
+        "extern const float      g_ScoreThreshold = ${${use_case}_MODEL_SCORE_THRESHOLD_KWS}"
+        )
+
+set(EXTRA_MODEL_CODE_ASR
+        "/* Model parameters for ${use_case} */"
+        "extern const int   g_FrameLength    = 512"
+        "extern const int   g_FrameStride    = 160"
+        "extern const int   g_ctxLen         =  98"
+        "extern const float g_ScoreThreshold = ${${use_case}_MODEL_SCORE_THRESHOLD_ASR}"
+        )
+
 # Generate model file for KWS
 generate_tflite_code(
     MODEL_PATH ${${use_case}_MODEL_TFLITE_PATH_KWS}
@@ -259,3 +135,28 @@
     EXPRESSIONS ${EXTRA_MODEL_CODE_ASR}
     NAMESPACE   "arm" "app" "asr"
 )
+
+generate_labels_code(
+        INPUT           "${${use_case}_LABELS_TXT_FILE_ASR}"
+        DESTINATION_SRC ${SRC_GEN_DIR}
+        DESTINATION_HDR ${INC_GEN_DIR}
+        OUTPUT_FILENAME "Labels_wav2letter"
+        NAMESPACE       "arm" "app" "asr"
+)
+
+generate_labels_code(
+        INPUT           "${${use_case}_LABELS_TXT_FILE_KWS}"
+        DESTINATION_SRC ${SRC_GEN_DIR}
+        DESTINATION_HDR ${INC_GEN_DIR}
+        OUTPUT_FILENAME "Labels_dscnn"
+        NAMESPACE       "arm" "app" "kws"
+)
+
+# Generate audio .cc files:
+generate_audio_code(${${use_case}_FILE_PATH} ${SRC_GEN_DIR} ${INC_GEN_DIR}
+        ${${use_case}_AUDIO_RATE}
+        ${${use_case}_AUDIO_MONO}
+        ${${use_case}_AUDIO_OFFSET}
+        ${${use_case}_AUDIO_DURATION}
+        ${${use_case}_AUDIO_RES_TYPE}
+        ${${use_case}_AUDIO_MIN_SAMPLES})
\ No newline at end of file
