diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimInput/src/FPGATrackSimReadRawRandomHitsTool.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimInput/src/FPGATrackSimReadRawRandomHitsTool.cxx
index b4e07b1d7d6a87e226bd4f504c76b4aaa749053e..0e685aba78dd3bca6bdcdfeb5fded6f3c5cb319a 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimInput/src/FPGATrackSimReadRawRandomHitsTool.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimInput/src/FPGATrackSimReadRawRandomHitsTool.cxx
@@ -59,7 +59,7 @@ StatusCode FPGATrackSimReadRawRandomHitsTool::readData(FPGATrackSimEventInputHea
 
   // Truth Info
   FPGATrackSimOptionalEventInfo optional;
-  unsigned long int mbc = 0; // to scale up barcodes!
+  int mbc = 0; // to scale up barcodes!
 
   // --- Copy old data
   if (doReset)
@@ -70,7 +70,7 @@ StatusCode FPGATrackSimReadRawRandomHitsTool::readData(FPGATrackSimEventInputHea
     {
       for (const auto& truthtrack : header->optional().getTruthTracks())
         {
-	  if (truthtrack.getBarcode() > mbc) mbc = truthtrack.getBarcode();
+	        if (truthtrack.getBarcode() > mbc) mbc = truthtrack.getBarcode();
       	  optional.addTruthTrack(truthtrack);
         }
 
@@ -98,12 +98,15 @@ StatusCode FPGATrackSimReadRawRandomHitsTool::readData(FPGATrackSimEventInputHea
   // copy Hits
   for (auto rawhit : m_eventHeader->hits())
     {
-      FPGATrackSimMultiTruth origtruth = rawhit.getTruth();
-      FPGATrackSimMultiTruth mt;
-      FPGATrackSimMultiTruth::Barcode uniquecode(rawhit.getEventIndex(),rawhit.getBarcode()+mbc);
-      mt.maximize(uniquecode, rawhit.getBarcodePt());
-      rawhit.setBarcode(rawhit.getBarcode() + mbc);
-      rawhit.setTruth(mt);
+      if (rawhit.getBarcode() >= 0)
+        {
+           FPGATrackSimMultiTruth origtruth = rawhit.getTruth();
+           FPGATrackSimMultiTruth mt;
+           FPGATrackSimMultiTruth::Barcode uniquecode(rawhit.getEventIndex(),rawhit.getBarcode()+mbc);
+           mt.maximize(uniquecode, rawhit.getBarcodePt());
+           rawhit.setBarcode(rawhit.getBarcode() + mbc);
+           rawhit.setTruth(mt);
+        }
       header->addHit(rawhit);
     }
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimHit.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimHit.h
index 7e525f2c18f9d91662a5ff0ecb5fec61bf10785d..d09b2eb0299b1ade02705adbe80af924023dc5e3 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimHit.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimHit.h
@@ -129,12 +129,12 @@ public:
 
     // --- Truth and Other ---
     void setToT(unsigned v) { m_ToT = v; }
-    void setBarcode(unsigned long v) { m_barcode = v; }
+    void setBarcode(long v) { m_barcode = v; }
     void setBarcodePt(float v) { m_barcode_pt = v; }
     void setEventIndex(long v) { m_eventindex = v; }
     void setParentageMask(unsigned long v) { m_parentage_mask = v; }
     void setTruth(const FPGATrackSimMultiTruth& v) { m_truth = v; }
-    unsigned long getBarcode() const { return m_barcode; }
+    long getBarcode() const { return m_barcode; }
     long getEventIndex() const { return m_eventindex; }
     float getBarcodePt() const { return m_barcode_pt; }
     unsigned long getParentageMask() const { return m_parentage_mask; }
@@ -193,7 +193,7 @@ protected:
     unsigned m_hw_word = 0; // store Strip and Pixel cluster positions as integers using the same FPGATrackSim_IM HW definition
     unsigned m_ToT = 0; // time over Threshold
     long m_eventindex = 0; // athena event index assigned to this channel
-    unsigned long m_barcode = 0; // geant particle barcode assigned to this channel
+    long m_barcode = 0; // geant particle barcode assigned to this channel
     float m_barcode_pt = 0; // maximum 'pt' for any 'good' geant particle contributing to the channel.
                             // corresponds to the particle with m_barcode
     unsigned long m_parentage_mask = 0; // ancestor information of this channel
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMatchInfo.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMatchInfo.h
index 50ee238c605bfc6a79ade96dc2ae5dd1772f938c..b50b59abc0f533a7413b5d5476a1f03632d674db 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMatchInfo.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMatchInfo.h
@@ -12,7 +12,7 @@ public:
   FPGATrackSimMatchInfo() : m_barcode(0), m_evtindex(-1) { ; }
   FPGATrackSimMatchInfo(int v1, int v2) : m_barcode(v1), m_evtindex(v2) { ; }
 
-  unsigned long barcode() const { return m_barcode; }
+  int barcode() const { return m_barcode; }
   int evtindex() const { return m_evtindex; }
 
   bool operator==(const FPGATrackSimMatchInfo& o) const { return (m_barcode == o.m_barcode) && (m_evtindex == o.m_evtindex); }
@@ -20,7 +20,7 @@ public:
 
 
 private:
-  unsigned long m_barcode;
+  int m_barcode;
   int m_evtindex;
 
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMultiTruth.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMultiTruth.h
index a2b3f549a5f133db72a8188275ce26ede9c422c8..fbda01e1ab357f90d8328010da21eaf4fa7dabe3 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMultiTruth.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimMultiTruth.h
@@ -46,7 +46,7 @@
 class FPGATrackSimMultiTruth : public TObject {
 public:
 
-  typedef std::pair<unsigned long, unsigned long> Barcode; // = (event index, barcode)
+  typedef std::pair<long, long> Barcode; // = (event index, barcode)
   typedef float Weight;
   typedef std::map<Barcode, Weight> TruthMap;
 
@@ -69,7 +69,7 @@ public:
 
   bool isEmpty() const { return m_truth.empty(); }
 
-  unsigned long best_barcode() const;
+  long best_barcode() const;
 
   void add(const FPGATrackSimMultiTruth::Barcode& code, const FPGATrackSimMultiTruth::Weight& weight);
   void add(const FPGATrackSimMultiTruth& rval);
@@ -100,10 +100,9 @@ private:
   };
 
   struct TruthMapWeightLt {
-    unsigned long int bad = -1; /// Use value of -1 here
     bool operator()(const TruthMap::value_type& a, const TruthMap::value_type& b) const {
-      const bool a_info = (a.first.first != bad) && (a.first.second != bad);
-      const bool b_info = (b.first.first != bad) && (b.first.second != bad);
+      const bool a_info = (a.first.first != -1) && (a.first.second != -1);
+      const bool b_info = (b.first.first != -1) && (b.first.second != -1);
       return a_info && b_info ? a.second < b.second : b_info;
     }
   };
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimOfflineTrack.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimOfflineTrack.h
index 17e32ff6042f18efe43bd25322b19bc30004ca10..714ccb350209e4cfc4cb641db50bd2bf25abb87a 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimOfflineTrack.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimOfflineTrack.h
@@ -18,7 +18,7 @@ public:
   void setPhi(double v) { m_phi = v; }
   void setD0(double v) { m_d0 = v; }
   void setZ0(double v) { m_z0 = v; }
-  void setBarcode(unsigned long v) { m_barcode = v; }
+  void setBarcode(long v) { m_barcode = v; }
   void setBarcodeFrac(float v) { m_barcode_frac = v; }
 
   double getPt() const { return m_qoverpt != 0 ? std::abs(sin(2 * std::atan(std::exp(-m_eta))) / m_qoverpt) : 99999999.; }
@@ -27,7 +27,7 @@ public:
   double getD0() const { return m_d0; }
   double getZ0() const { return m_z0; }
   double getQOverPt() const { return m_qoverpt / sin(2 * std::atan(std::exp(-m_eta))); }
-  unsigned long   getBarcode() const { return m_barcode; }
+  long   getBarcode() const { return m_barcode; }
   double getBarcodeFrac() const { return m_barcode_frac; }
 
   //  handling hits
@@ -46,7 +46,7 @@ private:
   double m_d0;
   double m_z0;
 
-  unsigned long   m_barcode; // matched geant particle barcode
+  long   m_barcode; // matched geant particle barcode
   double m_barcode_frac;  // largest "matching fraction" with any "good"
                           // geant particle, corresponding to the
                           // particle with m_barcode
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTrack.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTrack.h
index e6984cfb0193e4c01afdf3ad85fa94dcdd3f11c4..b1286361a5a17cb546ef6ea10e909c439d6b6189 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTrack.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTrack.h
@@ -45,8 +45,8 @@ class FPGATrackSimTrack : public TObject {
   //write a detmap
   int getNCoords() const;
   signed long getEventIndex() const { return m_eventindex; }
-  unsigned long getBarcode() const { return m_barcode; }
-  unsigned long barcode() const { return getBarcode(); }
+  signed long getBarcode() const { return m_barcode; }
+  signed long barcode() const { return getBarcode(); }
   float getBarcodeFrac() const { return m_barcode_frac; }
   //Should be passed as const ref to avoid excessive copying.
   const std::vector <FPGATrackSimHit>& getFPGATrackSimHits() const { return m_hits; }
@@ -89,7 +89,7 @@ class FPGATrackSimTrack : public TObject {
   void setTypeMask(unsigned int v) { m_typemask = v; }
   void setHitMap(unsigned int v) { m_hitmap = v; }
   void setEventIndex(const signed long& v) { m_eventindex = v; }
-  void setBarcode(const unsigned long& v) { m_barcode = v; }
+  void setBarcode(const signed long& v) { m_barcode = v; }
   void setBarcodeFrac(const float& v) { m_barcode_frac = v; }
 
   void setValidCand(bool v)   { m_isValidCand = v; }
@@ -145,7 +145,7 @@ class FPGATrackSimTrack : public TObject {
   std::vector<FPGATrackSimHit> m_hits; //[m_nlayers] hits associated to the track
 
   signed long m_eventindex = -1; // matched particle event index
-  unsigned long m_barcode = -1; // matched geant particle barcode
+  signed long m_barcode = -1; // matched geant particle barcode
   float m_barcode_frac = 0.0F; // largest "matching fraction" with any "good"
   // geant particle, corresponding to the
   // particle with m_barcode
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTruthTrack.h b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTruthTrack.h
index 7bd941d8eb4162dbcb9f7ddc577a6be723e332dc..d5f0992c9acd34d2ca3ae7f8e0f4135911b271fa 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTruthTrack.h
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/FPGATrackSimObjects/FPGATrackSimTruthTrack.h
@@ -28,7 +28,7 @@ public:
 
   void setPDGCode(int v) { m_pdgcode = v; }
   void setStatus(int v) { m_status = v; }
-  void setBarcode(unsigned long v) { m_barcode = v; }
+  void setBarcode(int v) { m_barcode = v; }
   void setEventIndex(int v) { m_evtindex = v; }
   void setBarcodeFracOffline(double v) { m_barcode_frac_offline = v; }
 
@@ -54,8 +54,8 @@ public:
   int getPDGCode() const { return m_pdgcode; }
   int getStatus() const { return m_status; }
   int status() const { return m_status; }
-  unsigned long getBarcode() const { return m_barcode; }
-  unsigned long barcode() const { return m_barcode; }
+  int getBarcode() const { return m_barcode; }
+  int barcode() const { return m_barcode; }
   
   int getEventIndex() const { return m_evtindex; }
   double getBarcodeFracOffline() const { return m_barcode_frac_offline; }
@@ -88,7 +88,7 @@ private:
 
   int m_pdgcode;
   int m_status;
-  unsigned long m_barcode;
+  int m_barcode;
   int m_evtindex;
   double m_barcode_frac_offline; // largest "matching fraction" with any "good"
                                 // xAOD::TruthParticle, corresponding to the
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/src/FPGATrackSimMultiTruth.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/src/FPGATrackSimMultiTruth.cxx
index fa26af647dba8d2704a1e827a812541e93e9cb39..d5ba8d8206a63c31abff9f02627864b959f0a435 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/src/FPGATrackSimMultiTruth.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimObjects/src/FPGATrackSimMultiTruth.cxx
@@ -14,7 +14,7 @@ ClassImp(FPGATrackSimMultiTruth)
 // ================================================================
 //   20-04-2009 Antonio Boveia (boveia@hep.uchicago.edu)
 
-unsigned long FPGATrackSimMultiTruth::best_barcode() const {
+long FPGATrackSimMultiTruth::best_barcode() const {
   Barcode code;
   Weight weight;
   return !best(code, weight) ? -999 : code.second;
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimSGInput/src/FPGATrackSimSGToRawHitsTool.cxx b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimSGInput/src/FPGATrackSimSGToRawHitsTool.cxx
index 2672e813b3a77848f232512a30c77425f06856fa..57847bde352b4dc58e0da3838682ccce8e0a0040 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimSGInput/src/FPGATrackSimSGToRawHitsTool.cxx
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimSGInput/src/FPGATrackSimSGToRawHitsTool.cxx
@@ -150,8 +150,6 @@ StatusCode FPGATrackSimSGToRawHitsTool::readOfflineTracks(std::vector<FPGATrackS
     tmpOfflineTrack.setQOverPt(trackParticle->pt() > 0 ? trackParticle->charge() / trackParticle->pt() : 0);
     tmpOfflineTrack.setEta(trackParticle->eta());
     tmpOfflineTrack.setPhi(trackParticle->phi());
-    tmpOfflineTrack.setD0(trackParticle->d0());
-    tmpOfflineTrack.setZ0(trackParticle->z0());
 
     const Trk::TrackStates* trackStates = trackParticle->track()->trackStateOnSurfaces();
     if (trackStates == nullptr) {
@@ -294,16 +292,7 @@ FPGATrackSimSGToRawHitsTool::readPixelSimulation(HitIndexMap& hitIndexMap, unsig
         tmpSGhit.setEventIndex(index);
       else
         tmpSGhit.setEventIndex(std::numeric_limits<long>::max());
-
-      if (bestParent) {
-	unsigned int id2, barcode2;
-	bestExtcode.uniqueID(id2, barcode2);
-	tmpSGhit.setBarcode(id2);
-      }
-      else {
-	tmpSGhit.setBarcode(std::numeric_limits<unsigned long>::max());
-      }
-
+      tmpSGhit.setBarcode((long)(bestParent ? bestExtcode.uid() : std::numeric_limits<long>::max())); // FIXME
       tmpSGhit.setBarcodePt(static_cast<unsigned long>(std::ceil(bestParent ? bestParent->momentum().perp() : 0.)));
       tmpSGhit.setParentageMask(parentMask.to_ulong());
 
@@ -376,16 +365,8 @@ FPGATrackSimSGToRawHitsTool::readStripSimulation(HitIndexMap& hitIndexMap, unsig
         tmpSGhit.setEventIndex(index);
       else
         tmpSGhit.setEventIndex(std::numeric_limits<long>::max());
-      
-      if (bestParent) {
-	unsigned int id2, barcode2;
-	bestExtcode.uniqueID(id2, barcode2);
-	tmpSGhit.setBarcode(id2);
-      }
-      else {
-	tmpSGhit.setBarcode(std::numeric_limits<unsigned long>::max());
-      }
-      
+
+      tmpSGhit.setBarcode((long)(bestParent ? bestExtcode.uid() : std::numeric_limits<long>::max())); // FIXME
       tmpSGhit.setBarcodePt(static_cast<unsigned long>(std::ceil(bestParent ? bestParent->momentum().perp() : 0.)));
       tmpSGhit.setParentageMask(parentMask.to_ulong());
       tmpSGhit.setX(0.5 * (endsOfStrip.first.x() + endsOfStrip.second.x()));
@@ -533,17 +514,7 @@ FPGATrackSimSGToRawHitsTool::readOfflineClusters(std::vector <FPGATrackSimCluste
         clusterEquiv.setEventIndex(index);
       else
         clusterEquiv.setEventIndex(std::numeric_limits<long>::max());
-
-      if (bestParent) {
-	unsigned int id2, barcode2;
-	bestExtcode.uniqueID(id2, barcode2);
-	clusterEquiv.setBarcode(id2);
-      }
-      else {
-	clusterEquiv.setBarcode(std::numeric_limits<unsigned long>::max());
-      }
-
-
+      clusterEquiv.setBarcode((long)(bestParent ? bestExtcode.uid() : std::numeric_limits<long>::max())); // FIXME
       clusterEquiv.setBarcodePt(static_cast<unsigned long>(std::ceil(bestParent ? bestParent->momentum().perp() : 0.)));
       clusterEquiv.setParentageMask(parentMask.to_ulong());
       clusterOut.setClusterEquiv(clusterEquiv);
@@ -612,15 +583,8 @@ FPGATrackSimSGToRawHitsTool::readOfflineClusters(std::vector <FPGATrackSimCluste
       else
         clusterEquiv.setEventIndex(std::numeric_limits<long>::max());
 
-      if (bestParent) {
-	unsigned int id2, barcode2;
-	bestExtcode.uniqueID(id2, barcode2);
-	clusterEquiv.setBarcode(id2);
-      }
-      else {
-	clusterEquiv.setBarcode(std::numeric_limits<unsigned long>::max());
-      }
 
+      clusterEquiv.setBarcode((long)(bestParent ? bestExtcode.uid() : std::numeric_limits<long>::max())); // FIXME
       clusterEquiv.setBarcodePt(static_cast<unsigned long>(std::ceil(bestParent ? bestParent->momentum().perp() : 0.)));
       clusterEquiv.setParentageMask(parentMask.to_ulong());
       clusterOut.setClusterEquiv(clusterEquiv);
@@ -735,11 +699,7 @@ FPGATrackSimSGToRawHitsTool::readTruthTracks(std::vector <FPGATrackSimTruthTrack
       tmpSGTrack.setPZ(track_truth_p * track_truth_costheta);
       tmpSGTrack.setPDGCode(pdgcode);
       tmpSGTrack.setStatus(particle->status());
-
-      unsigned int id2, barcode2;
-      extBarcode2.uniqueID(id2, barcode2);
-      tmpSGTrack.setBarcode(id2);
-
+      tmpSGTrack.setBarcode(extBarcode2.uid()); // FIXME
       index_type index2, position2;
       extBarcode2.eventIndex(index2, position2);
       tmpSGTrack.setEventIndex(index2);