diff --git a/profiling/server/src/timelineDecoder/TimelineDecoder.cpp b/profiling/server/src/timelineDecoder/TimelineDecoder.cpp
index df967de..6eaaff6 100644
--- a/profiling/server/src/timelineDecoder/TimelineDecoder.cpp
+++ b/profiling/server/src/timelineDecoder/TimelineDecoder.cpp
@@ -20,8 +20,9 @@
     {
         return TimelineStatus::TimelineStatus_Fail;
     }
-    m_OnNewEntityCallback(m_Model, entity);
-
+    ApplyToModel([&](Model& m){
+        m_OnNewEntityCallback(m, entity);
+    });
     return TimelineStatus::TimelineStatus_Success;
 }
 
@@ -31,7 +32,9 @@
     {
         return TimelineStatus::TimelineStatus_Fail;
     }
-    m_OnNewEventClassCallback(m_Model, eventClass);
+    ApplyToModel([&](Model& m){
+        m_OnNewEventClassCallback(m, eventClass);
+    });
 
     return TimelineStatus::TimelineStatus_Success;
 }
@@ -42,7 +45,9 @@
     {
         return TimelineStatus::TimelineStatus_Fail;
     }
-    m_OnNewEventCallback(m_Model, event);
+    ApplyToModel([&](Model& m){
+        m_OnNewEventCallback(m, event);
+    });
 
     return TimelineStatus::TimelineStatus_Success;
 }
@@ -53,7 +58,9 @@
     {
         return TimelineStatus::TimelineStatus_Fail;
     }
-    m_OnNewLabelCallback(m_Model, label);
+    ApplyToModel([&](Model& m){
+        m_OnNewLabelCallback(m, label);
+    });
 
     return TimelineStatus::TimelineStatus_Success;
 }
@@ -64,15 +71,12 @@
     {
         return TimelineStatus::TimelineStatus_Fail;
     }
-    m_OnNewRelationshipCallback(m_Model, relationship);
+    ApplyToModel([&](Model& m){
+        m_OnNewRelationshipCallback(m, relationship);
+    });
     return TimelineStatus::TimelineStatus_Success;
 }
 
-const TimelineDecoder::Model &TimelineDecoder::GetModel()
-{
-    return m_Model;
-}
-
 TimelineDecoder::TimelineStatus TimelineDecoder::SetEntityCallback(OnNewEntityCallback cb)
 {
     if (cb == nullptr)
@@ -323,4 +327,4 @@
 }
 
 } // namespace pipe
-} // namespace arm
\ No newline at end of file
+} // namespace arm
diff --git a/profiling/server/src/timelineDecoder/tests/TimelineTests.cpp b/profiling/server/src/timelineDecoder/tests/TimelineTests.cpp
index f09848f..82c16fe 100644
--- a/profiling/server/src/timelineDecoder/tests/TimelineTests.cpp
+++ b/profiling/server/src/timelineDecoder/tests/TimelineTests.cpp
@@ -154,8 +154,6 @@
     arm::pipe::PacketVersionResolver packetVersionResolver;
 
     arm::pipe::TimelineDecoder timelineDecoder;
-    const arm::pipe::TimelineDecoder::Model& model = timelineDecoder.GetModel();
-
 
     arm::pipe::TimelineCaptureCommandHandler timelineCaptureCommandHandler(
         1, 1, packetVersionResolver.ResolvePacketVersion(1, 1).GetEncodedValue(), timelineDecoder,
@@ -238,25 +236,27 @@
                                            timelineCaptureCommandHandler);
     }
 
-    for (unsigned long i = 0; i < 10; ++i)
-    {
-        CHECK(model.m_Entities[i].m_Guid == entityGuid);
+    timelineDecoder.ApplyToModel([&](const arm::pipe::TimelineDecoder::Model& model){
+        for (unsigned long i = 0; i < 10; ++i)
+        {
+            CHECK(model.m_Entities[i].m_Guid == entityGuid);
 
-        CHECK(model.m_EventClasses[i].m_Guid == eventClassGuid);
+            CHECK(model.m_EventClasses[i].m_Guid == eventClassGuid);
 
-        CHECK(model.m_Events[i].m_TimeStamp == timestamp);
-        CHECK(model.m_Events[i].m_ThreadId == uint64ThreadId);
-        CHECK(model.m_Events[i].m_Guid == eventGuid);
+            CHECK(model.m_Events[i].m_TimeStamp == timestamp);
+            CHECK(model.m_Events[i].m_ThreadId == uint64ThreadId);
+            CHECK(model.m_Events[i].m_Guid == eventGuid);
 
-        CHECK(model.m_Labels[i].m_Guid == labelGuid);
-        CHECK(model.m_Labels[i].m_Name == labelName);
+            CHECK(model.m_Labels[i].m_Guid == labelGuid);
+            CHECK(model.m_Labels[i].m_Name == labelName);
 
-        CHECK(model.m_Relationships[i].m_RelationshipType ==
-            arm::pipe::ITimelineDecoder::RelationshipType::DataLink);
-        CHECK(model.m_Relationships[i].m_Guid == relationshipGuid);
-        CHECK(model.m_Relationships[i].m_HeadGuid == headGuid);
-        CHECK(model.m_Relationships[i].m_TailGuid == tailGuid);
-    }
+            CHECK(model.m_Relationships[i].m_RelationshipType ==
+                arm::pipe::ITimelineDecoder::RelationshipType::DataLink);
+            CHECK(model.m_Relationships[i].m_Guid == relationshipGuid);
+            CHECK(model.m_Relationships[i].m_HeadGuid == headGuid);
+            CHECK(model.m_Relationships[i].m_TailGuid == tailGuid);
+        }
+    });
 }
 
 TEST_CASE("TimelineCaptureTestMultipleStringsInBuffer")
@@ -270,7 +270,6 @@
     arm::pipe::PacketVersionResolver packetVersionResolver;
 
     arm::pipe::TimelineDecoder timelineDecoder;
-    const arm::pipe::TimelineDecoder::Model& model = timelineDecoder.GetModel();
 
     arm::pipe::TimelineCaptureCommandHandler timelineCaptureCommandHandler(
         1, 1, packetVersionResolver.ResolvePacketVersion(1, 1).GetEncodedValue(), timelineDecoder,
@@ -343,30 +342,32 @@
     SendTimelinePacketToCommandHandler(bufferManager.GetReadableBuffer()->GetReadableData(),
                                        timelineCaptureCommandHandler);
 
-    for ( unsigned long i = 0; i < 9; ++i )
-    {
-        CHECK(model.m_Entities[i].m_Guid == entityGuid);
+    timelineDecoder.ApplyToModel([&](const arm::pipe::TimelineDecoder::Model& model){
+        for ( unsigned long i = 0; i < 9; ++i )
+        {
+            CHECK(model.m_Entities[i].m_Guid == entityGuid);
 
-        CHECK(model.m_EventClasses[i].m_Guid == eventClassGuid);
+            CHECK(model.m_EventClasses[i].m_Guid == eventClassGuid);
 
-        CHECK(model.m_Labels[i].m_Guid == labelGuid);
+            CHECK(model.m_Labels[i].m_Guid == labelGuid);
 
-        CHECK(model.m_Events[i].m_TimeStamp == timestamp);
-        CHECK(model.m_Events[i].m_ThreadId == uint64ThreadId);
-        CHECK(model.m_Events[i].m_Guid == eventGuid);
+            CHECK(model.m_Events[i].m_TimeStamp == timestamp);
+            CHECK(model.m_Events[i].m_ThreadId == uint64ThreadId);
+            CHECK(model.m_Events[i].m_Guid == eventGuid);
 
-        CHECK(model.m_Relationships[i].m_RelationshipType ==
-            arm::pipe::ITimelineDecoder::RelationshipType::DataLink);
-        CHECK(model.m_Relationships[i].m_Guid == relationshipGuid);
-        CHECK(model.m_Relationships[i].m_HeadGuid == headGuid);
-        CHECK(model.m_Relationships[i].m_TailGuid == tailGuid);
-    }
-    for ( unsigned long i = 0; i < 9; i += 3 )
-    {
-        CHECK(model.m_Labels[i].m_Name == labelName);
-        CHECK(model.m_Labels[i+1].m_Name == labelName2);
-        CHECK(model.m_Labels[i+2].m_Name == labelName3);
-    }
+            CHECK(model.m_Relationships[i].m_RelationshipType ==
+                arm::pipe::ITimelineDecoder::RelationshipType::DataLink);
+            CHECK(model.m_Relationships[i].m_Guid == relationshipGuid);
+            CHECK(model.m_Relationships[i].m_HeadGuid == headGuid);
+            CHECK(model.m_Relationships[i].m_TailGuid == tailGuid);
+        }
+        for ( unsigned long i = 0; i < 9; i += 3 )
+        {
+            CHECK(model.m_Labels[i].m_Name == labelName);
+            CHECK(model.m_Labels[i+1].m_Name == labelName2);
+            CHECK(model.m_Labels[i+2].m_Name == labelName3);
+        }
+    });
 }
 
 }
