diff --git a/Application/CMakeLists.txt b/Application/CMakeLists.txt
index 56080dd7b871e1c696b2199e599dd12df9100412..930489d1816b6e775c440c0f2e51e11d240115eb 100644
--- a/Application/CMakeLists.txt
+++ b/Application/CMakeLists.txt
@@ -151,9 +151,9 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
 	set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++98-compat-pedantic -fvisibility=hidden")
 	
-    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g")
+    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
     set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
-	set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -g")
+	set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3")
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c++98-compat-pedantic -fvisibility=hidden")
     message(STATUS "hidden visibility in main project ${CMAKE_CXX_FLAGS}")
     
diff --git a/Application/src/tracker/gui/GUICache.h b/Application/src/tracker/gui/GUICache.h
index 21a673ed66827b67b0708be1f75bb84506581fd7..8e565c116a903465977216309b7c4dd97fb28d57 100644
--- a/Application/src/tracker/gui/GUICache.h
+++ b/Application/src/tracker/gui/GUICache.h
@@ -83,7 +83,7 @@ namespace gui {
         std::set<idx_t> checked_probs;
         
     public:
-        std::map<Individual*, gui::Fish*> _fish_map;
+        std::map<Individual*, std::unique_ptr<gui::Fish>> _fish_map;
         std::map<long_t, track::Tracker::Statistics> _statistics;
         
         long_t connectivity_last_frame;
diff --git a/Application/src/tracker/gui/RecognitionSummary.cpp b/Application/src/tracker/gui/RecognitionSummary.cpp
index efc477819fc08174df47b1034c675f8e2d582f8b..f26a190eeb4db12b8d4a674a0d901e1078c28f4a 100644
--- a/Application/src/tracker/gui/RecognitionSummary.cpp
+++ b/Application/src/tracker/gui/RecognitionSummary.cpp
@@ -16,8 +16,9 @@ namespace gui {
         Font side_font(0.8 / interface_scale, Align::Right);
         Font bottom_font(0.8 / interface_scale, Align::Center);
         
-        std::set<idx_t> sorted(FAST_SETTINGS(manual_identities).begin(), FAST_SETTINGS(manual_identities).end());
-        for(auto id : FAST_SETTINGS(manual_identities)) {
+        auto manual_identities = FAST_SETTINGS(manual_identities);
+        std::set<idx_t> sorted(manual_identities.begin(), manual_identities.end());
+        for(auto id : manual_identities) {
             if(cache.individuals.find(id) == cache.individuals.end())
                 sorted.erase(id);
         }
@@ -95,8 +96,9 @@ namespace gui {
                 }
                 
                 auto pos = Vec2(margin + sidebar_width, margin + title_height);
+                auto bounds = Bounds(pos, image->bounds().size());
                 base.advance(new ExternalImage(std::move(image), pos));
-                base.advance(new Rect(Bounds(pos, image->bounds().size()), Transparent, White.alpha(200)));
+                base.advance(new Rect(bounds, Transparent, White.alpha(200)));
                 
                 // draw vertical bar (active fish)
                 pos = Vec2(margin) + Vec2(sidebar_width - 10 / interface_scale, bar_width * 0.5 - Base::default_line_spacing(font) * 0.5 + title_height);
@@ -109,7 +111,7 @@ namespace gui {
                 }
                 
                 // draw horizontal bar (matched fish from network)
-                pos = Vec2(margin) + Vec2(sidebar_width + bar_width * 0.5, image->bounds().height + margin + Base::default_line_spacing(font) * 0.5 + title_height);
+                pos = Vec2(margin) + Vec2(sidebar_width + bar_width * 0.5, bounds.height + margin + Base::default_line_spacing(font) * 0.5 + title_height);
                 for(size_t idx = 0; idx < output_size; ++idx) {
                     base.advance(new Text(Meta::toStr(idx), pos, White, bottom_font));
                     pos += Vec2(bar_width, 0);
diff --git a/Application/src/tracker/gui/gui.cpp b/Application/src/tracker/gui/gui.cpp
index a562ae64f49a5bc2e30c2777564aef82d60c4c3a..97b040bb3a23d164068f6eb1a7d07748ab28f6ca 100644
--- a/Application/src/tracker/gui/gui.cpp
+++ b/Application/src/tracker/gui/gui.cpp
@@ -2037,8 +2037,8 @@ void GUI::draw_tracking(DrawStructure& base, long_t frameNr, bool draw_graph) {
                         empty_map = NULL;
                     
                     if(_cache._fish_map.find(fish) == _cache._fish_map.end()) {
-                        _cache._fish_map[fish] = new gui::Fish(*fish);
-                        fish->register_delete_callback(_cache._fish_map[fish], [this](Individual *f) {
+                        _cache._fish_map[fish] = std::make_unique<gui::Fish>(*fish);
+                        fish->register_delete_callback(_cache._fish_map[fish].get(), [this](Individual *f) {
                             //std::lock_guard<std::mutex> lock(_individuals_frame._mutex);
                             if(!GUI::instance())
                                 return;
@@ -2047,7 +2047,6 @@ void GUI::draw_tracking(DrawStructure& base, long_t frameNr, bool draw_graph) {
                             
                             auto it = _cache._fish_map.find(f);
                             if(it != _cache._fish_map.end()) {
-                                delete it->second;
                                 _cache._fish_map.erase(f);
                             }
                         });
@@ -2105,8 +2104,7 @@ void GUI::draw_tracking(DrawStructure& base, long_t frameNr, bool draw_graph) {
                 
                 for(auto it = _cache._fish_map.cbegin(); it != _cache._fish_map.cend();) {
                     if(!it->second->enabled()) {
-                        it->first->unregister_delete_callback(it->second);
-                        delete it->second;
+                        it->first->unregister_delete_callback(it->second.get());
                         _cache._fish_map.erase(it++);
                     } else
                         it++;
diff --git a/Application/src/tracker/tracking/Accumulation.cpp b/Application/src/tracker/tracking/Accumulation.cpp
index eafcde5eacd78f1184ff822bd98a15b21d4374fd..c3dfcd4e29abb07722049a0532ad9e956df3a089 100644
--- a/Application/src/tracker/tracking/Accumulation.cpp
+++ b/Application/src/tracker/tracking/Accumulation.cpp
@@ -1491,7 +1491,7 @@ bool Accumulation::start() {
                     video_file.read_frame(video_frame.frame(), frame);
                     Tracker::instance()->preprocess_frame(video_frame, active, NULL);
                     
-                    std::map<long_t, pv::BlobPtr> blob_to_id;
+                    std::map<uint32_t, pv::BlobPtr> blob_to_id;
                     for (auto b : video_frame.blobs)
                         blob_to_id[b->blob_id()] = b;
                     
diff --git a/Application/src/tracker/tracking/Individual.cpp b/Application/src/tracker/tracking/Individual.cpp
index 66e30a0217ecb3bb497fd599ffdfd1d57bd7301e..c0d24f12fec17eaba1baadabbe4433608b26c547 100644
--- a/Application/src/tracker/tracking/Individual.cpp
+++ b/Application/src/tracker/tracking/Individual.cpp
@@ -2355,7 +2355,7 @@ std::unique_ptr<Image> Individual::calculate_normalized_diff_image(const gui::Tr
     return std::make_unique<Image>(padded);
 }
 
-std::tuple<Image::Ptr, Vec2> Individual::calculate_diff_image(pv::BlobPtr blob, const Size2& output_size) {
+std::tuple<std::unique_ptr<Image>, Vec2> Individual::calculate_diff_image(pv::BlobPtr blob, const Size2& output_size) {
     cv::Mat mask, image;
     cv::Mat padded;
     
@@ -2421,7 +2421,7 @@ std::tuple<Image::Ptr, Vec2> Individual::calculate_diff_image(pv::BlobPtr blob,
     
     //Debug("Came in with %fx%f -> %fx%f", blob->bounds().pos().x, blob->bounds().pos().y, bounds.x, bounds.y);
     
-    return { std::make_shared<Image>(padded), bounds.pos() };
+    return { std::make_unique<Image>(padded), bounds.pos() };
 }
 
 bool Individual::evaluate_fitness() const {
diff --git a/Application/src/tracker/tracking/Individual.h b/Application/src/tracker/tracking/Individual.h
index 2530800954cd8c3395d5091b74ce37b1931f0298..d4dc64f9c77b09bbe397d87cff2b4230acd0c7a3 100644
--- a/Application/src/tracker/tracking/Individual.h
+++ b/Application/src/tracker/tracking/Individual.h
@@ -463,7 +463,7 @@ namespace track {
          * @return an image pointer to a one-channel 8-bit greyscale image containing the difference image
          */
         
-        static std::tuple<Image::Ptr, Vec2> calculate_diff_image(pv::BlobPtr blob, const Size2& output_size);
+        static std::tuple<std::unique_ptr<Image>, Vec2> calculate_diff_image(pv::BlobPtr blob, const Size2& output_size);
         
         static std::unique_ptr<Image> calculate_normalized_diff_image(const gui::Transform& midline_transform, const pv::BlobPtr& blob, float midline_length, const Size2& output_size, bool use_legacy);
         
diff --git a/Application/src/tracker/tracking/Recognition.cpp b/Application/src/tracker/tracking/Recognition.cpp
index 3d596949c8d46c878f78c3fc9b29df88dabe746c..cba834681bf70453d6a11bffdd7c8e42ee027452 100644
--- a/Application/src/tracker/tracking/Recognition.cpp
+++ b/Application/src/tracker/tracking/Recognition.cpp
@@ -39,7 +39,7 @@ Recognition::FishInfo::operator MetaObject() const {
     return MetaObject("FishInfo<frame:"+Meta::toStr(last_frame)+" N:"+Meta::toStr(number_frames)+">", "FishInfo");
 }
 
-Image::Ptr Recognition::calculate_diff_image_with_settings(const default_config::recognition_normalization_t::Class &normalize, const pv::BlobPtr& blob, const Recognition::ImageData& data, const Size2& output_shape) {
+std::unique_ptr<Image> Recognition::calculate_diff_image_with_settings(const default_config::recognition_normalization_t::Class &normalize, const pv::BlobPtr& blob, const Recognition::ImageData& data, const Size2& output_shape) {
     if(normalize == default_config::recognition_normalization_t::posture)
         return Individual::calculate_normalized_diff_image(data.midline_transform, blob, data.filters ? data.filters->median_midline_length_px : 0, output_shape, false);
     else if(normalize == default_config::recognition_normalization_t::legacy)
@@ -57,7 +57,7 @@ Image::Ptr Recognition::calculate_diff_image_with_settings(const default_config:
     }
     else {
         auto && [img, pos] = Individual::calculate_diff_image(blob, output_shape);
-        return img;
+        return std::move(img);
     }
 }
 
@@ -631,7 +631,9 @@ Image::Ptr Recognition::calculate_diff_image_with_settings(const default_config:
                     
                     if(!blob || ((normalize == default_config::recognition_normalization_t::posture || normalize == default_config::recognition_normalization_t::legacy) && !midline))
                     {
+#ifndef NDEBUG
                         Warning("Blob or midline of fish %d is nullptr, which is not supposed to happen.", fdx);
+#endif
                         continue;
                     }
                     
@@ -921,7 +923,9 @@ Image::Ptr Recognition::calculate_diff_image_with_settings(const default_config:
                 }
             }
             
-            std::map<long_t, pv::BlobPtr> blob_to_id;
+            std::map<uint32_t, pv::BlobPtr> blob_to_id;
+            for (auto b : frame.original_blobs)
+                blob_to_id[b->blob_id()] = b;
             for (auto b : frame.blobs)
                 blob_to_id[b->blob_id()] = b;
             for (auto b : frame.filtered_out)
@@ -965,7 +969,7 @@ Image::Ptr Recognition::calculate_diff_image_with_settings(const default_config:
                 assert(blob->pixels());
                 e.filters = std::make_shared<TrainingFilterConstraints>(custom_len);
                 e.image = calculate_diff_image_with_settings(normalize, blob, e, output_shape);
-                    
+                
                 if(e.image != nullptr) {
                     _detail.add_frame(e.frame, e.fdx);
                     waiting.push_back(e);
diff --git a/Application/src/tracker/tracking/Recognition.h b/Application/src/tracker/tracking/Recognition.h
index 224422d5b905f31f8be0c782d1f4a341efb1b3a2..cd587780716420328049625ea5e7f64144ccaaa2 100644
--- a/Application/src/tracker/tracking/Recognition.h
+++ b/Application/src/tracker/tracking/Recognition.h
@@ -75,14 +75,14 @@ namespace track {
         
     public:
         struct ImageData {
-            Image::Ptr image;
+            std::shared_ptr<Image> image;
             std::shared_ptr<TrainingFilterConstraints> filters;
             //pv::BlobPtr blob;
             struct Blob {
                 uint64_t num_pixels;
                 uint32_t blob_id;
-                long_t org_id;
-                long_t parent_id;
+                int64_t org_id;
+                int64_t parent_id;
                 Bounds bounds;
             } blob;
             long_t frame;
@@ -216,7 +216,7 @@ namespace track {
         static bool python_available();
         static void check_learning_module(bool force_reload_variables = false);
         
-        static Image::Ptr calculate_diff_image_with_settings(const default_config::recognition_normalization_t::Class &normalize, const pv::BlobPtr& blob, const Recognition::ImageData& data, const Size2& output_shape);
+        static std::unique_ptr<Image> calculate_diff_image_with_settings(const default_config::recognition_normalization_t::Class &normalize, const pv::BlobPtr& blob, const Recognition::ImageData& data, const Size2& output_shape);
 
         //float available_weights_accuracy(std::shared_ptr<TrainingData> data);
         void load_weights(std::string postfix = "");
diff --git a/Application/src/tracker/tracking/Tracker.cpp b/Application/src/tracker/tracking/Tracker.cpp
index 3d1f784b07044be10e2779706a6c8a3010312730..eb50678d772978f38682cd895d954eb8955e20f1 100644
--- a/Application/src/tracker/tracking/Tracker.cpp
+++ b/Application/src/tracker/tracking/Tracker.cpp
@@ -964,7 +964,7 @@ bool operator<(long_t frame, const FrameProperties& props) {
         static Timing timing("filter_blobs", 20);
         TakeTiming take(timing);
         
-        const BlobSizeRange& fish_size = FAST_SETTINGS(blob_size_ranges);
+        const BlobSizeRange fish_size = FAST_SETTINGS(blob_size_ranges);
         const uint32_t num_blobs = (uint32_t)frame.blobs.size();
         const int threshold = FAST_SETTINGS(track_threshold);
         
@@ -1033,7 +1033,7 @@ bool operator<(long_t frame, const FrameProperties& props) {
     {
         std::vector<pv::BlobPtr> result;
         const int threshold = FAST_SETTINGS(track_threshold);
-        const BlobSizeRange& fish_size = FAST_SETTINGS(blob_size_ranges);
+        const BlobSizeRange fish_size = FAST_SETTINGS(blob_size_ranges);
         const float cm_sq = SQR(FAST_SETTINGS(cm_per_pixel));
         auto blacklist = FAST_SETTINGS(track_ignore);
         std::mutex _mutex;
@@ -1832,7 +1832,7 @@ void Tracker::clear_properties() {
         std::unordered_map<Individual*, bool> fish_assigned;
         
         const uint32_t number_fish = (uint32_t)FAST_SETTINGS(track_max_individuals);
-        const BlobSizeRange& minmax = FAST_SETTINGS(blob_size_ranges);
+        const BlobSizeRange minmax = FAST_SETTINGS(blob_size_ranges);
         
         size_t assigned_count = 0;
         
@@ -1910,17 +1910,11 @@ void Tracker::clear_properties() {
         static grid::ProximityGrid blob_grid(_average->bounds().size());
         blob_grid.clear();
         
-        const auto& manual_identities = FAST_SETTINGS(manual_identities);
+        const auto manual_identities = FAST_SETTINGS(manual_identities);
         if(!number_fish && !manual_identities.empty()) {
             SETTING(manual_identities) = Settings::manual_identities_t();
         }
         
-        //std::set<idx_t> manual_identities(FAST_SETTINGS(manual_identities).begin(), FAST_SETTINGS(manual_identities).end());
-        
-        //bool huge_jump = frameIndex != _startFrame && frame.time - properties(frameIndex-1).time >= FAST_SETTINGS(track_max_reassign_time);
-        //if(huge_jump)
-        //    Warning("Huge tdelta in frame %d: %fs", frameIndex, frame.time - properties(frameIndex-1).time);
-        
         for(auto b : frame.blobs) {
             id_to_blob[b->blob_id()] = b;
             blob_grid.insert(b->bounds().x + b->bounds().width * 0.5, b->bounds().y + b->bounds().height * 0.5, b->blob_id());
@@ -3234,8 +3228,9 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
         }
         
         if(!manual) {*/
+        auto manual_identities = FAST_SETTINGS(manual_identities);
             for(auto fish : active) {
-                if(FAST_SETTINGS(manual_identities).empty() || FAST_SETTINGS(manual_identities).count(fish->identity().ID())) {
+                if(manual_identities.empty() || manual_identities.count(fish->identity().ID())) {
                     if(!fish->has(frameIndex) /*|| fish->centroid_weighted(frameIndex)->speed() >= FAST_SETTINGS(track_max_speed) * 0.25*/) {
                         all_good = false;
                         break;
@@ -3330,12 +3325,13 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
             }
         }
         
+        auto manual_identities = FAST_SETTINGS(manual_identities);
         std::vector<idx_t> to_delete;
         std::vector<Individual*> ptrs;
         for(auto && [fdx, fish] : _individuals) {
             fish->remove_frame(frameIndex);
             
-            if(FAST_SETTINGS(track_max_individuals) == 0 || FAST_SETTINGS(manual_identities).find(fdx) == FAST_SETTINGS(manual_identities).end()) {
+            if(FAST_SETTINGS(track_max_individuals) == 0 || manual_identities.find(fdx) == manual_identities.end()) {
                 if(fish->empty()) {
                     to_delete.push_back(fdx);
                     ptrs.push_back(fish);
@@ -3467,7 +3463,8 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
         LockGuard guard("Tracker::max_range()");
         if(_global_segment_order.empty()) {
             std::set<Rangel> manuals;
-            for(auto && [from, to] : FAST_SETTINGS(manually_approved))
+            auto manually_approved = FAST_SETTINGS(manually_approved);
+            for(auto && [from, to] : manually_approved)
                 manuals.insert(Rangel(from, to));
             
             std::set<Rangel, std::function<bool(Rangel, Rangel)>> ordered([&manuals](Rangel A, Rangel B) -> bool {
@@ -3478,10 +3475,10 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
                 return (recognition() && recognition()->dataset_quality() ? ((recognition()->dataset_quality()->has(A) ? recognition()->dataset_quality()->quality(A) : DatasetQuality::Quality()) > (recognition()->dataset_quality()->has(B) ? recognition()->dataset_quality()->quality(B) : DatasetQuality::Quality())) : (A.length() > B.length()));
             });
             
-            if(!FAST_SETTINGS(manually_approved).empty()) {
-                auto str = Meta::toStr(FAST_SETTINGS(manually_approved));
+            if(!manually_approved.empty()) {
+                auto str = Meta::toStr(manually_approved);
                 //Debug("Inserting %S", &str);
-                for(auto && [from, to] : FAST_SETTINGS(manually_approved)) {
+                for(auto && [from, to] : manually_approved) {
                     ordered.insert(Rangel(from, to));
                 }
             }
@@ -3587,8 +3584,7 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
         LockGuard guard("check_segments_identities");
         Debug("Updating automatic ranges starting from %d", after_frame == -1 ? 0 : after_frame);
         
-        const auto& manual_identities = FAST_SETTINGS(manual_identities);
-        //std::set<idx_t> manual_identities(FAST_SETTINGS(manual_identities).begin(), FAST_SETTINGS(manual_identities).end());
+        const auto manual_identities = FAST_SETTINGS(manual_identities);
         size_t count=0;
         
         recognition_pool.wait();
@@ -3858,9 +3854,9 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
         log(f, "----");
         
         decltype(unassigned_ranges) still_unassigned;
-        
+        //auto manual_identities = FAST_SETTINGS(manual_identities);
         for(auto && [fdx, fish] : _individuals) {
-            if(!FAST_SETTINGS(manual_identities).count(fdx))
+            if(!manual_identities.count(fdx))
                 continue;
             
             for(auto && [start, segment] : fish->recognition_segments()) {
@@ -4090,16 +4086,16 @@ void Tracker::update_iterator_maps(long_t frame, const Tracker::set_of_individua
             fclose(f);
     }
 
-pv::BlobPtr Tracker::find_blob_noisy(std::map<long_t, pv::BlobPtr>& blob_to_id, long_t bid, long_t pid, const Bounds& bounds, long_t frame)
+pv::BlobPtr Tracker::find_blob_noisy(std::map<uint32_t, pv::BlobPtr>& blob_to_id, uint32_t bid, int64_t pid, const Bounds& bounds, long_t frame)
 {
     if(blob_to_id.count(bid) == 0) {
         if(pid != -1) {
-            if(blob_to_id.count(pid) != 0) {
-                auto b = blob_to_id.at(pid);
+            if(blob_to_id.count((uint32_t)pid) != 0) {
+                auto b = blob_to_id.at((uint32_t)pid);
                 auto blobs = pixel::threshold_blob(b, FAST_SETTINGS(track_threshold), Tracker::instance()->background());
                 
                 for(auto & sub : blobs) {
-                    if((long_t)sub->blob_id() == bid) {
+                    if(sub->blob_id() == bid) {
                         //Debug("Found perfect match for %d in blob %d", bid, b->blob_id());
                         blob_to_id[bid] = sub;
                         break;
diff --git a/Application/src/tracker/tracking/Tracker.h b/Application/src/tracker/tracking/Tracker.h
index b01b3da5bc5e50542037bb1ee2f488652ee003d9..b1447f65f5c88bcaeb4daadef8e39cdb55ed5d95 100644
--- a/Application/src/tracker/tracking/Tracker.h
+++ b/Application/src/tracker/tracking/Tracker.h
@@ -271,7 +271,7 @@ CREATE_STRUCT(Settings,
         void prepare_shutdown();
         void wait();
         
-        static pv::BlobPtr find_blob_noisy(std::map<long_t, pv::BlobPtr>& blob_to_id, long_t bid, long_t pid, const Bounds& bounds, long_t frame);
+        static pv::BlobPtr find_blob_noisy(std::map<uint32_t, pv::BlobPtr>& blob_to_id, uint32_t bid, int64_t pid, const Bounds& bounds, long_t frame);
         
         //static bool generate_training_images(pv::File&, std::map<long_t, std::set<long_t>> individuals_per_frame, TrainingData&, const std::function<void(float)>& = [](float){}, const TrainingData* source = nullptr);
         //static bool generate_training_images(pv::File&, const std::set<long_t>& frames, TrainingData&, const std::function<void(float)>& = [](float){});
diff --git a/Application/src/tracker/tracking/TrainingData.cpp b/Application/src/tracker/tracking/TrainingData.cpp
index 8b8544eea6ec453356331e9f12c052bb6d94f216..e8d8c9cf2206bc56f29554bf6cb8e8ff13616ac5 100644
--- a/Application/src/tracker/tracking/TrainingData.cpp
+++ b/Application/src/tracker/tracking/TrainingData.cpp
@@ -1099,7 +1099,7 @@ bool TrainingData::generate(const std::string& step_description, pv::File & vide
         video_file.read_frame(video_frame.frame(), frame);
         Tracker::instance()->preprocess_frame(video_frame, active, NULL);
         
-        std::map<long_t, pv::BlobPtr> blob_to_id;
+        std::map<uint32_t, pv::BlobPtr> blob_to_id;
         for (auto b : video_frame.blobs)
             blob_to_id[b->blob_id()] = b;