diff --git a/ArmnnDriverImpl.cpp b/ArmnnDriverImpl.cpp
index eab9598..9c6d51f 100644
--- a/ArmnnDriverImpl.cpp
+++ b/ArmnnDriverImpl.cpp
@@ -8,10 +8,16 @@
 #include "ArmnnDriverImpl.hpp"
 #include "ArmnnPreparedModel.hpp"
 
-#ifdef ARMNN_ANDROID_NN_V1_2 // Using ::android::hardware::neuralnetworks::V1_2
+#if defined(ARMNN_ANDROID_NN_V1_2) || defined(ARMNN_ANDROID_NN_V1_3) // Using ::android::hardware::neuralnetworks::V1_2
 #include "ArmnnPreparedModel_1_2.hpp"
 #endif
 
+#ifdef ARMNN_ANDROID_NN_V1_3 // Using ::android::hardware::neuralnetworks::V1_2
+#include "ArmnnPreparedModel_1_3.hpp"
+#endif
+
+#include "Utils.hpp"
+
 #include "ModelToINetworkConverter.hpp"
 #include "SystemPropertiesUtils.hpp"
 #include <ValidateHal.h>
@@ -227,14 +233,14 @@
 
     if (!runtime)
     {
-        cb(V1_0::ErrorStatus::DEVICE_UNAVAILABLE, result);
+        cb(HalErrorStatus::DEVICE_UNAVAILABLE, result);
         return Void();
     }
 
     // Run general model validation, if this doesn't pass we shouldn't analyse the model anyway.
     if (!android::nn::validateModel(model))
     {
-        cb(V1_0::ErrorStatus::INVALID_ARGUMENT, result);
+        cb(HalErrorStatus::INVALID_ARGUMENT, result);
         return Void();
     }
 
@@ -246,20 +252,22 @@
     if (modelConverter.GetConversionResult() != ConversionResult::Success
             && modelConverter.GetConversionResult() != ConversionResult::UnsupportedFeature)
     {
-        cb(V1_0::ErrorStatus::GENERAL_FAILURE, result);
+        cb(HalErrorStatus::GENERAL_FAILURE, result);
         return Void();
     }
 
     // Check each operation if it was converted successfully and copy the flags
     // into the result (vector<bool>) that we need to return to Android.
-    result.reserve(model.operations.size());
-    for (uint32_t operationIdx = 0; operationIdx < model.operations.size(); operationIdx++)
+    result.reserve(getMainModel(model).operations.size());
+    for (uint32_t operationIdx = 0;
+         operationIdx < getMainModel(model).operations.size();
+         ++operationIdx)
     {
         bool operationSupported = modelConverter.IsOperationSupported(operationIdx);
         result.push_back(operationSupported);
     }
 
-    cb(V1_0::ErrorStatus::NONE, result);
+    cb(HalErrorStatus::NONE, result);
     return Void();
 }
 
@@ -286,4 +294,10 @@
 template class ArmnnDriverImpl<hal_1_2::HalPolicy>;
 #endif
 
+#ifdef ARMNN_ANDROID_NN_V1_3
+template class ArmnnDriverImpl<hal_1_1::HalPolicy>;
+template class ArmnnDriverImpl<hal_1_2::HalPolicy>;
+template class ArmnnDriverImpl<hal_1_3::HalPolicy>;
+#endif
+
 } // namespace armnn_driver
