diff --git a/docs/sections/customizing.md b/docs/sections/customizing.md
index 8781855..841923b 100644
--- a/docs/sections/customizing.md
+++ b/docs/sections/customizing.md
@@ -16,7 +16,7 @@
 - [Building custom use case](#building-custom-use-case)
 
 This section describes how to implement a custom Machine Learning
-application running on Fast Model FVP or on the Arm MPS3 FPGA prototyping board.
+application running on `Arm® Corstone™-300` based FVP or on the Arm® MPS3 FPGA prototyping board.
 
 Arm® Ethos™-U55 code sample software project offers a simple way to incorporate
 additional use-case code into the existing infrastructure and provides a build
@@ -27,7 +27,7 @@
 The following sign will indicate the important conventions to apply:
 
 > **Convention:** The code is developed using C++11 and C99 standards.
-This is governed by TensorFlow Lite for Microcontrollers framework.
+> This is governed by TensorFlow Lite for Microcontrollers framework.
 
 ## Software project description
 
@@ -55,15 +55,15 @@
 
 Where `source` contains C/C++ sources for the platform and ML applications.
 Common code related to the Ethos-U55 code samples software
-framework resides in the *application* sub-folder and ML application specific logic (use-cases)
-sources are in the *use-case* subfolder.
+framework resides in the `application` sub-folder and ML application specific logic (use-cases)
+sources are in the `use-case` subfolder.
 
 > **Convention**: Separate use-cases must be organized in sub-folders under the use-case folder.
-The name of the directory is used as a name for this use-case and could be provided
-as a `USE_CASE_BUILD` parameter value.
-It is expected by the build system that sources for the use-case are structured as follows:
-headers in an include directory, C/C++ sources in a src directory.
-For example:
+> The name of the directory is used as a name for this use-case and could be provided
+> as a `USE_CASE_BUILD` parameter value.
+> It is expected by the build system that sources for the use-case are structured as follows:
+> headers in an `include` directory, C/C++ sources in a `src` directory.
+> For example:
 >
 >```tree
 >use_case
@@ -77,61 +77,60 @@
 ## HAL API
 
 Hardware abstraction layer is represented by the following interfaces.
-To access them, include hal.h header.
+To access them, include `hal.h` header.
 
-- *hal_platfrom* structure:\
+- `hal_platform` structure:
     Structure that defines a platform context to be used by the application
 
-  |  Attribute name    | Description                                                                                                                                                         |
-  |--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-  |  inited            |  Initialization flag. Is set after the platfrom_init() function is called.                                                                                          |
-  |  plat_name         |  Platform name. it is set to "mps3-bare" for MPS3 build and "FVP" for Fast Model build.                                                                             |
-  |  data_acq          |  Pointer to data acquisition module responsible for user interaction and other data collection for the application logic.                                           |
+  |  Attribute name    | Description |
+  |--------------------|----------------------------------------------------------------------------------------------|
+  |  inited            |  Initialization flag. Is set after the platform_init() function is called.                   |
+  |  plat_name         |  Platform name. it is set to "mps3-bare" for MPS3 build and "FVP" for Fast Model build.      |
+  |  data_acq          |  Pointer to data acquisition module responsible for user interaction and other data collection for the application logic.               |
   |  data_psn          |  Pointer to data presentation module responsible for data output through components available in the selected platform: LCD -- for MPS3, console -- for Fast Model. |
-  |  timer             |  Pointer to platform timer implementation (see platform_timer)                                                                                                      |
-  |  platform_init     |  Pointer to platform initialization function.                                                                                                                       |
-  |  platform_release  |  Pointer to platform release function                                                                                                                               |
+  |  timer             |  Pointer to platform timer implementation (see platform_timer)                               |
+  |  platform_init     |  Pointer to platform initialization function.                                                |
+  |  platform_release  |  Pointer to platform release function                                                        |
 
-- *hal_init* function:\
+- `hal_init` function:
     Initializes the HAL structure based on compile time config. This
     should be called before any other function in this API.
 
   |  Parameter name  | Description|
   |------------------|-----------------------------------------------------|
-  |  platform        | Pointer to a pre-allocated *hal_platfrom* struct.   |
+  |  platform        | Pointer to a pre-allocated `hal_platform` struct.   |
   |  data_acq        | Pointer to a pre-allocated data acquisition module  |
   |  data_psn        | Pointer to a pre-allocated data presentation module |
   |  timer           | Pointer to a pre-allocated timer module             |
   |  return          | zero if successful, error code otherwise            |
 
-- *hal_platform_init* function:\
+- `hal_platform_init` function:
   Initializes the HAL platform and all the modules on the platform the
   application requires to run.
 
   | Parameter name  | Description                                                         |
   | ----------------| ------------------------------------------------------------------- |
-  | platform        | Pointer to a pre-allocated and initialized *hal_platfrom* struct.   |
+  | platform        | Pointer to a pre-allocated and initialized `hal_platform` struct.   |
   | return          | zero if successful, error code otherwise.                           |
 
-- *hal_platform_release* function\
+- `hal_platform_release` function
   Releases the HAL platform. This should release resources acquired.
 
   | Parameter name  | Description                                                         |
   | ----------------| ------------------------------------------------------------------- |
-  |  platform       | Pointer to a pre-allocated and initialized *hal_platfrom* struct.   |
+  |  platform       | Pointer to a pre-allocated and initialized `hal_platform` struct.   |
 
-- *data_acq_module* structure:\
-  Structure to encompass the data acquisition module and it's
-  methods.
+- `data_acq_module` structure:
+  Structure to encompass the data acquisition module and it's methods.
 
   | Attribute name | Description                                        |
   |----------------|----------------------------------------------------|
   | inited         | Initialization flag. Is set after the system_init () function is called. |
-  | system_name  | Channel name. It is set to "UART" for MPS3 build and fastmodel builds. |
-  | system_init    | Pointer to data acquisition module initialization function. The pointer is set according to the platform selected during the build. This function is called by the platforminitialization routines.                           |
+  | system_name    | Channel name. It is set to "UART" for MPS3 build and fastmodel builds.   |
+  | system_init    | Pointer to data acquisition module initialization function. The pointer is set according to the platform selected during the build. This function is called by the platforminitialization routines. |
   | get_input      | Pointer to a function reading user input. The pointer is set according to the selected platform during the build. For MPS3 and fastmodel environments, the function reads data from UART.   |
 
-- *data_psn_module* structure:\
+- `data_psn_module` structure:
   Structure to encompass the data presentation module and its methods.
 
   | Attribute name     | Description                                    |
@@ -144,19 +143,21 @@
   | present_box        | Pointer to a function to draw a rectangle. The pointer is set according to the selected platform during the build. For MPS3, the image will be drawn on the LCD; for fastmodel  image summary will be printed in the UART. |
   | clear              | Pointer to a function to clear the output. The pointer is set according to the selected platform during the build. For MPS3, the function will clear the LCD; for fastmodel will do nothing. |
   | set_text_color     | Pointer to a function to set text color for the next call of present_data_text() function. The pointer is set according to the selected platform during the build. For MPS3, the function will set the color for the text printed on the LCD; for fastmodel -- will do nothing. |
-  | set_led            | Pointer to a function controlling an LED (led_num) with on/off  |
 
-- *platform_timer* structure:\
+- `platform_timer` structure:
     Structure to hold a platform specific timer implementation.
 
-  | Attribute name     | Description                                    |
-  |--------------------|------------------------------------------------|
-  |  inited            |  Initialization flag. It is set after the timer is initialized by the *hal_platform_init* function. |
-  |  reset             |   Pointer to a function to reset a timer. |
-  |  get_time_counter  |   Pointer to a function to get current time counter. |
-  |  get_duration_ms   |   Pointer to a function to calculate duration between two time-counters in milliseconds. |
-  |  get_duration_us   |   Pointer to a function to calculate duration between two time-counters in microseconds |
+  | Attribute name      | Description                                    |
+  |---------------------|------------------------------------------------|
+  |  inited             |  Initialization flag. It is set after the timer is initialized by the `hal_platform_init` function. |
+  |  reset              |  Pointer to a function to reset a timer. |
+  |  get_time_counter   |  Pointer to a function to get current time counter. |
+  |  get_duration_ms    |  Pointer to a function to calculate duration between two time-counters in milliseconds. |
+  |  get_duration_us    |  Pointer to a function to calculate duration between two time-counters in microseconds |
+  |  get_cpu_cycle_diff |  Pointer to a function to calculate duration between two time-counters in Cortex-M55 cycles. |
   |  get_npu_cycle_diff |  Pointer to a function to calculate duration between two time-counters in Ethos-U55 cycles. Available only when project is configured with ETHOS_U55_ENABLED set. |
+  |  start_profiling    |  Wraps `get_time_counter` function with additional profiling initialisation, if required. |
+  |  stop_profiling     |  Wraps `get_time_counter` function along with additional instructions when profiling ends, if required. |
 
 Example of the API initialization in the main function:
 
@@ -211,10 +212,10 @@
 Application context could be used as a holder for a state between main
 loop iterations. Include AppContext.hpp to use ApplicationContext class.
 
-| Method name  | Description                                                     |
-|--------------|-----------------------------------------------------------------|
-|  Set         |  Saves given value as a named attribute in the context.         |
-|  Get         |  Gets the saved attribute from the context by the given name.   |
+| Method name  | Description                                                      |
+|--------------|------------------------------------------------------------------|
+|  Set         |  Saves given value as a named attribute in the context.          |
+|  Get         |  Gets the saved attribute from the context by the given name.    |
 |  Has         |  Checks if an attribute with a given name exists in the context. |
 
 For example:
@@ -249,7 +250,8 @@
 |  StopProfiling          | Stops profiling and records the ending timing data.            |
 |  StopProfilingAndReset  | Stops the profiling and internally resets the platform timers. |
 |  Reset                  | Resets the profiler and clears all collected data.             |
-|  GetAllResultsAndReset  | Gets the results as string and resets the profiler.            |
+|  GetAllResultsAndReset  | Gets all the results as string and resets the profiler.            |
+|  PrintProfilingResult   | Prints collected profiling results and resets the profiler.    |
 |  SetName                | Set the profiler name.                                         |
 
 Usage example:
@@ -276,38 +278,45 @@
 
 | Method name              | Description                                                                  |
 |--------------------------|------------------------------------------------------------------------------|
-|  GetInputTensor          |   Returns the pointer to the model\'s input tensor.                          |
-|  GetOutputTensor         |   Returns the pointer to the model\'s output tensor                          |
-|  GetType                 |   Returns the model's data type                                              |
-|  GetInputShape           |   Return the pointer to the model\'s input shape                             |
-|  GetOutputShape          |   Return the pointer to the model\'s output shape                            |
-|  LogTensorInfo           |   Logs the tensor information to stdout for the given tensor pointer: tensor name, tensor address, tensor type, tensor memory size and quantization params.  |
-|  LogInterpreterInfo      |   Logs the interpreter information to stdout.                                |
-|  Init                    |   Initializes the TensorFlow Lite Micro framework, allocates require memory for the model. |
+|  GetInputTensor          |  Returns the pointer to the model's input tensor.                            |
+|  GetOutputTensor         |  Returns the pointer to the model's output tensor                            |
+|  GetType                 |  Returns the model's data type                                               |
+|  GetInputShape           |  Return the pointer to the model's input shape                               |
+|  GetOutputShape          |  Return the pointer to the model's output shape.                             |
+|  GetNumInputs            |  Return the number of input tensors the model has.                           |
+|  GetNumOutputs           |  Return the number of output tensors the model has.                          |
+|  LogTensorInfo           |  Logs the tensor information to stdout for the given tensor pointer: tensor name, tensor address, tensor type, tensor memory size and quantization params.  |
+|  LogInterpreterInfo      |  Logs the interpreter information to stdout.                                 |
+|  Init                    |  Initializes the TensorFlow Lite Micro framework, allocates require memory for the model. |
+|  GetAllocator            |  Gets the allocator pointer for the instance.                                |
 |  IsInited                |  Checks if this model object has been initialized.                           |
 |  IsDataSigned            |  Checks if the model uses signed data type.                                  |
 |  RunInference            |  Runs the inference (invokes the interpreter).                               |
-|  GetOpResolver()         |  Returns the reference to the TensorFlow Lite Micro operator resolver.       |
-|  EnlistOperations        |  Registers required operators with TensorFlow Lite Micro operator resolver.  |
+|  ShowModelInfoHandler    |  Model information handler common to all models.                             |
 |  GetTensorArena          |  Returns pointer to memory region to be used for tensors allocations.        |
+|  ModelPointer            |  Returns the pointer to the NN model data array.                             |
+|  ModelSize               |  Returns the model size.                                                     |
+|  GetOpResolver           |  Returns the reference to the TensorFlow Lite Micro operator resolver.       |
+|  EnlistOperations        |  Registers required operators with TensorFlow Lite Micro operator resolver.  |
 |  GetActivationBufferSize |  Returns the size of the tensor arena memory region.                         |
 
-> **Convention**:  Each ML use-case must have extension of this class and implementation of the protected virtual methods:
+> **Convention:**  Each ML use-case must have extension of this class and implementation of the protected virtual methods:
 >
 >```c++
->virtual const tflite::MicroOpResolver& GetOpResolver() = 0;
->virtual bool EnlistOperations() = 0;
->virtual uint8_t* GetTensorArena() = 0;
->virtual size_t GetActivationBufferSize() = 0;
+> virtual const uint8_t* ModelPointer() = 0;
+> virtual size_t ModelSize() = 0;
+> virtual const tflite::MicroOpResolver& GetOpResolver() = 0;
+> virtual bool EnlistOperations() = 0;
+> virtual size_t GetActivationBufferSize() = 0;
 >```
 >
->Network models have different set of operators that must be registered with
-tflite::MicroMutableOpResolver object in the EnlistOperations method.
-Network models could require different size of activation buffer that is returned as
-tensor arena memory for TensorFlow Lite Micro framework by the GetTensorArena
-and GetActivationBufferSize methods.
+> Network models have different set of operators that must be registered with
+> tflite::MicroMutableOpResolver object in the EnlistOperations method.
+> Network models could require different size of activation buffer that is returned as
+> tensor arena memory for TensorFlow Lite Micro framework by the GetTensorArena
+> and GetActivationBufferSize methods.
 
-Please see MobileNetModel.hpp and MobileNetModel.cc files from image
+Please see `MobileNetModel.hpp` and `MobileNetModel.cc` files from image
 classification ML application use-case as an example of the model base
 class extension.
 
@@ -328,8 +337,8 @@
       └── src
 ```
 
-Start with creation of a sub-directory under the *use_case* directory and
-two other directories *src* and *include* as described in
+Start with creation of a sub-directory under the `use_case` directory and
+two other directories `src` and `include` as described in
 [Software project description](#software-project-description) section:
 
 ## Implementing main loop
@@ -343,9 +352,9 @@
 Main loop has knowledge about the platform and has access to the
 platform components through the hardware abstraction layer (referred to as HAL).
 
-Create a *MainLoop.cc* file in the *src* directory (the one created under
+Create a `MainLoop.cc` file in the `src` directory (the one created under
 [Adding custom ML use case](#adding-custom-ml-use-case)), the name is not
-important. Define *main_loop* function with the signature described in
+important. Define `main_loop` function with the signature described in
 [Main loop function](#main-loop-function):
 
 ```c++
@@ -366,17 +375,20 @@
 
 Before inference could be run with a custom NN model, TensorFlow Lite
 Micro framework must learn about the operators/layers included in the
-model. Developer must register operators using *MicroMutableOpResolver*
+model. Developer must register operators using `MicroMutableOpResolver`
 API.
 
 Ethos-U55 code samples project has an abstraction around TensorFlow
-Lite Micro API (see [NN model API](#nn-model-api)). Create *HelloWorld.hpp* in
+Lite Micro API (see [NN model API](#nn-model-api)). Create `HelloWorldModel.hpp` in
 the use-case include sub-directory, extend Model abstract class and
 declare required methods.
 
 For example:
 
 ```c++
+#ifndef HELLOWORLDMODEL_HPP
+#define HELLOWORLDMODEL_HPP
+
 #include "Model.hpp"
 
 namespace arm {
@@ -396,22 +408,24 @@
 
   private:
     /* Maximum number of individual operations that can be enlisted. */
-    static constexpr int _m_maxOpCnt = 5;
+    static constexpr int _ms_maxOpCnt = 5;
 
     /* A mutable op resolver instance. */
-    tflite::MicroMutableOpResolver<_maxOpCnt> _m_opResolver;
+    tflite::MicroMutableOpResolver<_ms_maxOpCnt> _m_opResolver;
   };
 } /* namespace app */
 } /* namespace arm */
+
+#endif /* HELLOWORLDMODEL_HPP */
 ```
 
-Create `HelloWorld.cc` file in the `src` sub-directory and define the methods
+Create `HelloWorldModel.cc` file in the `src` sub-directory and define the methods
 there. Include `HelloWorldModel.hpp` created earlier. Note that `Model.hpp`
 included in the header provides access to TensorFlow Lite Micro's operation
 resolver API.
 
-Please, see `use_case/image_classifiaction/src/MobileNetModel.cc` for
-code examples.\
+Please, see `use_case/img_class/src/MobileNetModel.cc` for
+code examples.
 If you are using a TensorFlow Lite model compiled with Vela, it is important to add
 custom Ethos-U55 operator to the operators list.
 
@@ -424,15 +438,15 @@
 
 bool arm::app::HelloWorldModel::EnlistOperations() {
 
-  #if defined(ARM_NPU)
-    if (kTfLiteOk == this->_opResolver.AddEthosU()) {
+#if defined(ARM_NPU)
+    if (kTfLiteOk == this->_m_opResolver.AddEthosU()) {
         info("Added %s support to op resolver\n",
             tflite::GetString_ETHOSU());
     } else {
         printf_err("Failed to add Arm NPU support to op resolver.");
         return false;
     }
-  #endif /* ARM_NPU */
+#endif /* ARM_NPU */
 
     return true;
 }
@@ -449,15 +463,15 @@
 For more details on `usecase.cmake`, see [Building custom use case](#building-custom-use-case).
 For details on code generation flow in general, see [Automatic file generation](./building.md#Automatic-file-generation)
 
-The TensorFlow Lite model data is read during Model::init() method execution, see
-*application/tensorflow-lite-micro/Model.cc* for more details. Model invokes
+The TensorFlow Lite model data is read during Model::Init() method execution, see
+`application/tensorflow-lite-micro/Model.cc` for more details. Model invokes
 `ModelPointer()` function which calls the `GetModelPointer()` function to get
 neural network model data memory address. The `GetModelPointer()` function
 will be generated during the build and could be found in the
 file `build/generated/hello_world/src/<model_file_name>.cc`. Generated
 file is added to the compilation automatically.
 
-Use \${use-case}_MODEL_TFLITE_PATH build parameter to include custom
+Use `${use-case}_MODEL_TFLITE_PATH` build parameter to include custom
 model to the generation/compilation process (see [Build options](./building.md/#build-options)).
 
 ## Executing inference
@@ -477,15 +491,14 @@
 
 For example, the image classification application has extra build steps
 to generate C++ sources from the provided images with
-*generate_images_code* CMake function.
+`generate_images_code` CMake function.
 
-> **Note:**
-Check the input data type for your NN model and input array data type are  the same.
-For example, generated C++ sources for images store image data as uint8 array. For models that were
-quantized to int8 data type, it is important to convert image data to int8 correctly before inference execution.
-Asymmetric data type to symmetric data type conversion involves positioning zero value, i.e. subtracting an
-offset for uint8 values. Please check image classification application source for the code example
-(ConvertImgToInt8 function).
+> **Note:** Check the input data type for your NN model and input array data type are  the same.
+> For example, generated C++ sources for images store image data as uint8 array. For models that were
+> quantized to int8 data type, it is important to convert image data to int8 correctly before inference execution.
+> Asymmetric data type to symmetric data type conversion involves positioning zero value, i.e. subtracting an
+> offset for uint8 values. Please check image classification application source for the code example
+> (ConvertImgToInt8 function).
 
 The following code adds inference invocation to the main loop function:
 
