diff --git a/Src/Model/BioTrackerTrackingAlgorithm.cpp b/Src/Model/BioTrackerTrackingAlgorithm.cpp
index 419c1a614a14a106da5fdca59b72e71cae018623..24939cc4d8de934a154afe0f0ba1d64913de8dfa 100644
--- a/Src/Model/BioTrackerTrackingAlgorithm.cpp
+++ b/Src/Model/BioTrackerTrackingAlgorithm.cpp
@@ -66,7 +66,7 @@ void BioTrackerTrackingAlgorithm::request_shared_memory() {
 }
 
 void BioTrackerTrackingAlgorithm::receiveAreaDescriptorUpdate(IModelAreaDescriptor *areaDescr) {
-	_AreaInfo = areaDescr;
+	_areaInfo = areaDescr;
 }
 
 BioTrackerTrackingAlgorithm::~BioTrackerTrackingAlgorithm()
@@ -119,19 +119,21 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u
     auto res = _sock.recv(_zmq_msg, zmq::recv_flags::none);
     auto msg = json::parse(_zmq_msg.to_string_view());
 
-    std::vector<FishPose> poses;
+    std::vector<std::tuple<int, FishPose>> poses;
     for (auto pos : msg["data"]) {
-        auto pose = FishPose(
-                cv::Point2f(1.0, 1.0), // FIXME: Calculate cm
-                cv::Point2f(pos["x"].get<int>(), pos["y"].get<int>()),
-                pos["orientation"].get<float>(),
-                pos["orientation"].get<float>() * (180.0 / CV_PI),
-                1.0, // FIXME: width
-                1.0, // FIXME: height
-                1.0 // FIXME: score
-		);
-		poses.push_back(pose);
+        auto pose = std::make_tuple(
+                pos["id"].get<int>(),
+                FishPose(
+                    _areaInfo,
+                    cv::Point2f(pos["x"].get<int>(), pos["y"].get<int>()),
+                    pos["orientation"].get<float>(),
+                    1.0)); // FIXME: score
+        poses.push_back(pose);
     }
+    std::sort(poses.begin(), poses.end(),
+            [](std::tuple<int, FishPose> a, std::tuple<int, FishPose> b) {
+                return std::get<0>(a) < std::get<0>(b);
+            });
 
 	//Insert new poses into data structure
 	int trajNumber = 0;
@@ -140,7 +142,7 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u
 		if (t && t->getValid() && !t->getFixed()) {
 			BST::TrackedElement *e = new BST::TrackedElement(t, "n.a.", t->getId());
 
-			e->setFishPose(poses[trajNumber]);
+			e->setFishPose(std::get<1>(poses[trajNumber]));
 			e->setTime(start);
 			t->add(e, framenumber);
 			trajNumber++;
diff --git a/Src/Model/BioTrackerTrackingAlgorithm.h b/Src/Model/BioTrackerTrackingAlgorithm.h
index 583ebedffbfe39858c7715f00e5e7f69e0410296..87e62c6581d9e19e47252018ba083127c2815301 100644
--- a/Src/Model/BioTrackerTrackingAlgorithm.h
+++ b/Src/Model/BioTrackerTrackingAlgorithm.h
@@ -58,6 +58,7 @@ private:
     zmq::socket_t _sock;
     zmq::message_t _zmq_msg;
     float *_shm_img;
+	IModelAreaDescriptor* _areaInfo;
 };
 
 #endif // BIOTRACKERTRACKINGALGORITHM_H
diff --git a/Src/Model/TrackedComponents/pose/FishPose.cpp b/Src/Model/TrackedComponents/pose/FishPose.cpp
index 6fd36b115e3cb2a9f717bcfb4ebf9ba77eb75017..8c8e6102932f29df45ab594bb3948e24d72debae 100644
--- a/Src/Model/TrackedComponents/pose/FishPose.cpp
+++ b/Src/Model/TrackedComponents/pose/FishPose.cpp
@@ -13,6 +13,18 @@ FishPose::FishPose(cv::Point2f pos_cm , cv::Point pos_px, float rad, float deg,
 	time(&_timev);
 }
 
+FishPose::FishPose(IModelAreaDescriptor *_areaInfo, cv::Point pos_px, float rad, float score) :
+	_position_px(pos_px),
+	_radAngle(rad),
+	_width(1.0),
+	_height(1.0),
+	_score(score)
+{
+	assert(_degAngle >= -360.0f && _degAngle <= 360.0f);
+	time(&_timev);
+    _position_cm = _areaInfo->pxToCm(_position_px);
+    _degAngle = _radAngle * (180.0 / CV_PI);
+}
 
 std::string FishPose::toString(bool rectified)
 {
diff --git a/Src/Model/TrackedComponents/pose/FishPose.h b/Src/Model/TrackedComponents/pose/FishPose.h
index 30c569061fefb20d37d04e2957ae89754a5cb104..5dee8a27b1175c79d0b6c1f8d4124c773b03c285 100644
--- a/Src/Model/TrackedComponents/pose/FishPose.h
+++ b/Src/Model/TrackedComponents/pose/FishPose.h
@@ -2,6 +2,7 @@
 
 #include <time.h>
 #include <opencv2/opencv.hpp>
+#include "Interfaces/IModel/IModelAreaDescriptor.h"
 
 class FishPose
 {
@@ -11,6 +12,11 @@ public:
 	 */
 	FishPose(cv::Point2f pos_cm = cv::Point2f(-1,-1), cv::Point pos_px = cv::Point(-1,-1), float rad = 0, float deg = 0, float width = 0, float height = 0, float score = 0.0);
 
+	/**
+	 * Simplified constructor using unit conversion.
+	 */
+    FishPose(IModelAreaDescriptor *_areaInfo, cv::Point pos_px, float rad, float score);
+
 	/**
 	* Copy constructor.
 	*/
@@ -114,6 +120,8 @@ public:
 	std::string toString(bool rectified = false);
 
 private:
+	IModelAreaDescriptor* _areaDescr;
+
 	cv::Point2f _position_cm;
 	cv::Point _position_px;
 	float _radAngle;