diff --git a/docs/sections/timing_adapters.md b/docs/sections/timing_adapters.md
index c1a9cc0..b5d6e98 100644
--- a/docs/sections/timing_adapters.md
+++ b/docs/sections/timing_adapters.md
@@ -137,7 +137,7 @@
 ```
 ## Differences between timing adapter implementations in Arm Corstone-300 and Arm Corstone-310
 
-Corstone-300 FVP and FPGA implements timing adapters that are tied to AXI masters M0 and M1 on the Ethos-U NPU.
+Corstone-300 FVP and FPGA implements timing adapters that are tied to AXI buses M0 and M1 on the Ethos-U NPU.
 
 Corstone-310 **FPGA** implements timing adapter blocks differently and those are placed on each of the main
 memories present on FPGA: SRAM, QSPI flash, DDR and user memory.
diff --git a/release_notes.txt b/release_notes.txt
index 9b9ea93..3ea3da3 100644
--- a/release_notes.txt
+++ b/release_notes.txt
@@ -82,7 +82,7 @@
     * Added keyword spotting use case example.
     * Added person detection use case example.
 Known issues:
-    * telnet connection to FastModel environment may hang after some period of inactivity.
+    * telnet connection to FastModel environment may stop responding after some period of inactivity.
 
 Changes in 20.05 release:
     * FastModel environment was built with FastModel Tools v11.10.22.
@@ -93,4 +93,4 @@
     * Used EAC NPU software model and drivers.
     * Windows support for build scripts.
 Known issues:
-    * telnet connection to FastModel environment may hang after some period of inactivity.
+    * telnet connection to FastModel environment may stop responding after some period of inactivity.
diff --git a/resources/ad/samples/files.md b/resources/ad/samples/files.md
index e1aed1c..20c7fa4 100644
--- a/resources/ad/samples/files.md
+++ b/resources/ad/samples/files.md
@@ -1,7 +1,7 @@
 # Sample wav audio clip
 
 For this use case sample audio clips aren't provided. However, the file
-`random_id_00_000000.wav` is provided as a dummy placeholder.
+`random_id_00_000000.wav` is provided as a sample placeholder.
 
 The data used for this application sample comes from
 [https://zenodo.org/record/3384388\#.X6GILFNKiqA](https://zenodo.org/record/3384388\#.X6GILFNKiqA)
diff --git a/source/application/api/common/source/Classifier.cc b/source/application/api/common/source/Classifier.cc
index 8a335f7..9b14ffd 100644
--- a/source/application/api/common/source/Classifier.cc
+++ b/source/application/api/common/source/Classifier.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -91,7 +91,7 @@
             totalOutputSize *= outputTensor->dims->data[inputDim];
         }
 
-        /* Sanity checks. */
+        /* Health check */
         if (totalOutputSize < topNCount) {
             printf_err("Output vector is smaller than %" PRIu32 "\n", topNCount);
             return false;
diff --git a/source/application/api/use_case/asr/src/AsrClassifier.cc b/source/application/api/use_case/asr/src/AsrClassifier.cc
index a9ed678..3c9c32e 100644
--- a/source/application/api/use_case/asr/src/AsrClassifier.cc
+++ b/source/application/api/use_case/asr/src/AsrClassifier.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021,2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -89,7 +89,7 @@
 
             constexpr uint32_t outColsIdx = Wav2LetterModel::ms_outputColsIdx;
 
-            /* Sanity checks. */
+            /* Health checks. */
             if (outputTensor == nullptr) {
                 printf_err("Output vector is null pointer.\n");
                 return false;
diff --git a/source/application/api/use_case/asr/src/Wav2LetterPostprocess.cc b/source/application/api/use_case/asr/src/Wav2LetterPostprocess.cc
index f74bda6..c2cc9fd 100644
--- a/source/application/api/use_case/asr/src/Wav2LetterPostprocess.cc
+++ b/source/application/api/use_case/asr/src/Wav2LetterPostprocess.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -53,7 +53,7 @@
         auto* ptrData = tflite::GetTensorData<uint8_t>(this->m_outputTensor);
         const uint32_t elemSz = AsrPostProcess::GetTensorElementSize(this->m_outputTensor);
 
-        /* Other sanity checks. */
+        /* Other health checks. */
         if (0 == elemSz) {
             printf_err("Tensor type not supported for post processing\n");
             return false;
diff --git a/source/application/api/use_case/kws/src/KwsClassifier.cc b/source/application/api/use_case/kws/src/KwsClassifier.cc
index 420c6de..e498f06 100644
--- a/source/application/api/use_case/kws/src/KwsClassifier.cc
+++ b/source/application/api/use_case/kws/src/KwsClassifier.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -47,7 +47,7 @@
             totalOutputSize *= outputTensor->dims->data[inputDim];
         }
 
-        /* Sanity checks. */
+        /* Health check */
         if (totalOutputSize < topNCount) {
             printf_err("Output vector is smaller than %" PRIu32 "\n", topNCount);
             return false;
diff --git a/source/hal/source/components/lcd/source/glcd_mps3/glcd_mps3.c b/source/hal/source/components/lcd/source/glcd_mps3/glcd_mps3.c
index 1a10bad..cfbb386 100644
--- a/source/hal/source/components/lcd/source/glcd_mps3/glcd_mps3.c
+++ b/source/hal/source/components/lcd/source/glcd_mps3/glcd_mps3.c
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -203,7 +203,7 @@
 {
     unsigned int i, j, k, pixs;
 
-    /* Sanity check: out of bounds? */
+    /* Heatlh check: out of bounds? */
     if ((x + cw) > GLCD_WIDTH || (y + ch) > GLCD_HEIGHT) {
         return;
     }
diff --git a/source/hal/source/components/lcd/source/lcd_img.c b/source/hal/source/components/lcd/source/lcd_img.c
index d3ce260..752fe86 100644
--- a/source/hal/source/components/lcd/source/lcd_img.c
+++ b/source/hal/source/components/lcd/source/lcd_img.c
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -41,7 +41,7 @@
     const uint32_t pos_x, const uint32_t pos_y,
     const uint32_t downsample_factor)
 {
-    /* Sanity checks */
+    /* Health checks */
     assert(data);
     if ((pos_x + width/downsample_factor > GLCD_WIDTH) ||
             (pos_y + height/downsample_factor > GLCD_HEIGHT)) {
diff --git a/source/hal/source/platform/mps3/source/smm_mps3.h b/source/hal/source/platform/mps3/source/smm_mps3.h
index e455975..8354c9c 100644
--- a/source/hal/source/platform/mps3/source/smm_mps3.h
+++ b/source/hal/source/platform/mps3/source/smm_mps3.h
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -182,8 +182,8 @@
                                   */
   __IO uint32_t CR1;             /* Offset: 0x004 (R/W)  Control register 1
                                   *                         [31:4] : Reserved
-                                  *                            [3] : Slave-mode output disable
-                                  *                            [2] : Master or slave mode select
+                                  *                            [3] : Worker output disable
+                                  *                            [2] : Controller or worker mode select
                                   *                            [1] : Synchronous serial port enable
                                   *                            [0] : Loop back mode
                                   */
@@ -259,9 +259,9 @@
 #define SSP_CR1_LBM_Msk         (1UL<<SSP_CR1_LBM_Pos)
 #define SSP_CR1_SSE_Pos         1           /* Serial port enable. */
 #define SSP_CR1_SSE_Msk         (1UL<<SSP_CR1_SSE_Pos)
-#define SSP_CR1_MS_Pos          2           /* Master or Slave mode. */
+#define SSP_CR1_MS_Pos          2           /* Controller or worker mode. */
 #define SSP_CR1_MS_Msk          (1UL<<SSP_CR1_MS_Pos)
-#define SSP_CR1_SOD_Pos         3           /* Slave Output mode Disable. */
+#define SSP_CR1_SOD_Pos         3           /* Secondary Output mode Disable. */
 #define SSP_CR1_SOD_Msk         (1UL<<SSP_CR1_SOD_Pos)
 
 /* SSP_SR Status register. */
diff --git a/source/math/include/PlatformMath.hpp b/source/math/include/PlatformMath.hpp
index 26ebf37..ef02a22 100644
--- a/source/math/include/PlatformMath.hpp
+++ b/source/math/include/PlatformMath.hpp
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -150,7 +150,7 @@
          *                       array.
          * @param[in]   srcLen   Number of elements in the array/vector.
          * @param[out]  ptrDst   Output buffer to be populated.
-         * @param[in]   dstLen   Output buffer len (for sanity check only).
+         * @param[in]   dstLen   Output buffer len (for health check only).
          * @return      true if successful, false otherwise.
          */
         static bool ComplexMagnitudeSquaredF32(float* ptrSrc,
diff --git a/tests/use_case/asr/Wav2LetterPostprocessingTest.cc b/tests/use_case/asr/Wav2LetterPostprocessingTest.cc
index 513c084..bc711a6 100644
--- a/tests/use_case/asr/Wav2LetterPostprocessingTest.cc
+++ b/tests/use_case/asr/Wav2LetterPostprocessingTest.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -67,15 +67,15 @@
                     sizeof(arm::app::tensorArena),
                     arm::app::asr::GetModelPointer(),
                     arm::app::asr::GetModelLen());
-        std::vector<std::string> dummyLabels = {"a", "b", "$"};
+        std::vector<std::string> placeholderLabels = {"a", "b", "$"};
         const uint32_t blankTokenIdx = 2;
-        std::vector<arm::app::ClassificationResult> dummyResult;
+        std::vector<arm::app::ClassificationResult> placeholderResult;
         std::vector <int> tensorShape = {1, 1, 1, 13};
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
 
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         REQUIRE(!post.DoPostProcess());
@@ -90,15 +90,15 @@
                     sizeof(arm::app::tensorArena),
                     arm::app::asr::GetModelPointer(),
                     arm::app::asr::GetModelLen());
-        std::vector<std::string> dummyLabels = {"a", "b", "$"};
+        std::vector<std::string> placeholderLabels = {"a", "b", "$"};
         const uint32_t blankTokenIdx = 2;
-        std::vector<arm::app::ClassificationResult> dummyResult;
+        std::vector<arm::app::ClassificationResult> placeholderResult;
         std::vector<int> tensorShape = {1, 1, 13, 1};
         std::vector<int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
 
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -124,14 +124,14 @@
                     sizeof(arm::app::tensorArena),
                     arm::app::asr::GetModelPointer(),
                     arm::app::asr::GetModelLen());
-    std::vector<std::string> dummyLabels = {"a", "b", "$"};
-    std::vector<arm::app::ClassificationResult> dummyResult;
+    std::vector<std::string> placeholderLabels = {"a", "b", "$"};
+    std::vector<arm::app::ClassificationResult> placeholderResult;
 
     SECTION("First and last iteration")
     {
         std::vector<int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -148,7 +148,7 @@
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -186,7 +186,7 @@
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -229,7 +229,7 @@
                 tensorShape, 100, tensorVec);
 
         /* Should not be able to erase the left context if it is the first iteration. */
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
diff --git a/tests/use_case/asr/Wav2LetterPreprocessingTest.cc b/tests/use_case/asr/Wav2LetterPreprocessingTest.cc
index 5986616..273476e 100644
--- a/tests/use_case/asr/Wav2LetterPreprocessingTest.cc
+++ b/tests/use_case/asr/Wav2LetterPreprocessingTest.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -99,7 +99,7 @@
                                   (mfccWindowLen - mfccWindowStride)
                                  );
 
-    /* Populate with dummy input. */
+    /* Populate with placeholder input. */
     PopulateTestWavVector(testWav);
 
     /* Allocate mem for tensor. */
diff --git a/tests/use_case/kws_asr/Wav2LetterPostprocessingTest.cc b/tests/use_case/kws_asr/Wav2LetterPostprocessingTest.cc
index b343625..d19e0c4 100644
--- a/tests/use_case/kws_asr/Wav2LetterPostprocessingTest.cc
+++ b/tests/use_case/kws_asr/Wav2LetterPostprocessingTest.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,15 +71,15 @@
                    sizeof(arm::app::tensorArena),
                    arm::app::asr::GetModelPointer(),
                    arm::app::asr::GetModelLen());
-        std::vector<std::string> dummyLabels = {"a", "b", "$"};
+        std::vector<std::string> placeholderLabels = {"a", "b", "$"};
         const uint32_t blankTokenIdx = 2;
-        std::vector<arm::app::ClassificationResult> dummyResult;
+        std::vector<arm::app::ClassificationResult> placeholderResult;
         std::vector <int> tensorShape = {1, 1, 1, 13};
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
 
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         REQUIRE(!post.DoPostProcess());
@@ -94,15 +94,15 @@
                     sizeof(arm::app::tensorArena),
                    arm::app::asr::GetModelPointer(),
                    arm::app::asr::GetModelLen());
-        std::vector<std::string> dummyLabels = {"a", "b", "$"};
+        std::vector<std::string> placeholderLabels = {"a", "b", "$"};
         const uint32_t blankTokenIdx = 2;
-        std::vector<arm::app::ClassificationResult> dummyResult;
+        std::vector<arm::app::ClassificationResult> placeholderResult;
         std::vector<int> tensorShape = {1, 1, 13, 1};
         std::vector<int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
 
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -128,14 +128,14 @@
                     sizeof(arm::app::tensorArena),
                     arm::app::asr::GetModelPointer(),
                     arm::app::asr::GetModelLen());
-    std::vector<std::string> dummyLabels = {"a", "b", "$"};
-    std::vector<arm::app::ClassificationResult> dummyResult;
+    std::vector<std::string> placeholderLabels = {"a", "b", "$"};
+    std::vector<arm::app::ClassificationResult> placeholderResult;
 
     SECTION("First and last iteration")
     {
         std::vector<int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -152,7 +152,7 @@
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -189,7 +189,7 @@
         std::vector <int8_t> tensorVec;
         TfLiteTensor tensor = GetTestTensor<int8_t>(
                 tensorShape, 100, tensorVec);
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
@@ -232,7 +232,7 @@
                 tensorShape, 100, tensorVec);
 
         /* Should not be able to erase the left context if it is the first iteration. */
-        arm::app::AsrPostProcess post{&tensor, classifier, dummyLabels, dummyResult, outputCtxLen,
+        arm::app::AsrPostProcess post{&tensor, classifier, placeholderLabels, placeholderResult, outputCtxLen,
                                       blankTokenIdx, arm::app::Wav2LetterModel::ms_outputRowsIdx};
 
         /* Copy elements to compare later. */
diff --git a/tests/use_case/kws_asr/Wav2LetterPreprocessingTest.cc b/tests/use_case/kws_asr/Wav2LetterPreprocessingTest.cc
index e6b336e..b86556a 100644
--- a/tests/use_case/kws_asr/Wav2LetterPreprocessingTest.cc
+++ b/tests/use_case/kws_asr/Wav2LetterPreprocessingTest.cc
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ * SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -99,7 +99,7 @@
                                  (mfccWindowLen - mfccWindowStride)
     );
 
-    /* Populate with dummy input. */
+    /* Populate with placeholder input. */
     PopulateTestWavVector(testWav);
 
     /* Allocate mem for tensor. */
