diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack.h
new file mode 100644
index 0000000000000000000000000000000000000000..7257c29ec45cc20b9061123e6a30d3c3245463a8
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack.h
@@ -0,0 +1,118 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGFTKSIM_FTKATHTRACK_H
+#define TRIGFTKSIM_FTKATHTRACK_H
+
+#include <vector>
+
+class FTKAthTrack {
+private:
+  int m_bankID; // Bank ID of the road related to this track
+  int m_roadID; // Road identifier
+  int m_patternID; // TODO add documentation
+  int m_sectorID; // Sector identifier
+  int m_trackID; // Unique track ID in this bank
+
+  float m_invpt; // 1/(2*Pt)
+  float m_d0; // impact paramter
+  float m_phi; // phi of the track
+  float m_z0; // z0
+  float m_ctheta; // cot(theta)
+  float m_chi2; // chi2 of the track
+  float m_origchi2; // In the case of majority recovery, this is the chi2 of 
+                    // the full fit. In all other cases m_chi2 == m_origchi2
+
+  int m_nmissing; // number of missing coordinates
+  unsigned int m_typemask; // set on in bits related to the step recovery were used, ex.: 0 no recovery, 01, rec 1st step, 11, recovery in the 1st and the 2nd stage
+  unsigned int m_bitmask;
+  int m_ncoords; // number of coordinates for the track
+  float *m_coord; //[m_ncoords] coordinates used in the fit
+
+  int m_HF_rejected; /* 0 if the track is accepted, >0 if rejected by hit filter
+			if negative, belongs to a HF rejected road
+		     */
+  int m_HW_rejected; /* The flag has 3 digit: [Q][RW][HW]:
+		      Q : 1 if has a bad chi2, 0 if not
+		      RW: is the RW level rejected the road, 0 if not rejected
+		      HW: 1 if rejected by HW, 0 if not */
+  int m_HW_track; // ID of the track excluded this track
+
+  signed long m_eventindex; // matched particle event index
+  signed long m_barcode; // matched geant particle barcode
+  float m_barcode_frac; // largest "matching fraction" with any "good"
+                        // geant particle, corresponding to the
+                        // particle with m_barcode
+
+public:
+  FTKAthTrack();
+  FTKAthTrack(int);
+  FTKAthTrack(const FTKAthTrack &);
+  virtual ~FTKAthTrack();
+
+  const int& getBankID() const { return m_bankID; }
+  int getRegion() const { return m_bankID%100; }
+  int getSubRegion() const { return m_bankID/100; }
+  const int& getRoadID() const { return m_roadID; }
+  const int& getPatternID() const { return m_patternID; }
+  const int& getSectorID() const { return m_sectorID; }
+  const int& getTrackID() const { return m_trackID; }
+  float getParameter(int) const;
+  const float& getInvPt() const { return m_invpt; }
+  float getPt() const { return .5/m_invpt; }
+  const float& getIP() const { return m_d0; }
+  const float& getPhi() const { return m_phi; }
+  const float& getZ0() const { return m_z0; }
+  const float& getCotTheta() const { return m_ctheta; }
+  float getEta() const;
+  const float& getChi2() const { return m_chi2; }
+  float getChi2ndof() const { return m_chi2/(m_ncoords-m_nmissing-5); }
+  const float& getOrigChi2() const { return m_origchi2; }
+  float getOrigChi2ndof() const { return m_origchi2/(m_ncoords-m_nmissing-5); }
+  const int&   getNMissing() const { return m_nmissing; }
+  const unsigned int& getTypeMask() const { return m_typemask; }
+  const unsigned int& getBitmask() const { return m_bitmask; }
+  const int&   getNCoords() const { return m_ncoords; }
+  const float& getCoord(int i) const { return m_coord[i]; }
+  float *getCoords() { return m_coord; };
+  const int& getHFRejected() const { return m_HF_rejected; }
+  const int& getHWRejected() const { return m_HW_rejected; }
+  const int& getHWTrackID() const { return m_HW_track; }
+  const signed long& getEventIndex() const { return m_eventindex; }
+  const signed long& getBarcode() const { return m_barcode; }
+  const float& getBarcodeFrac() const { return m_barcode_frac; }
+  
+  void setBankID(int v) { m_bankID = v; }
+  void setRoadID(int v) { m_roadID = v; }
+  void setPatternID(int v) { m_patternID = v; }
+  void setSectorID(int v) { m_sectorID = v; }
+  void setTrackID(int v) { m_trackID = v; }
+  void setParameter(int,float);
+  void setInvPt(float v) { m_invpt = v; }
+  void setIP(float v) { m_d0 = v; }
+  void setPhi(float v,bool ForceRange=true);
+  void setZ0(float v) {m_z0 = v;}
+  void setCotTheta(float v) { m_ctheta = v; }
+  void setChi2(float v) { m_chi2 = v; }
+  void setOrigChi2(float v) { m_origchi2 = v; }
+  void setNMissing(int v) { m_nmissing = v; }
+  void setTypeMask(unsigned int v) { m_typemask = v; }
+  void setBitmask(unsigned int v) { m_bitmask = v; }
+  void setNCoords(int);
+  void setCoord(int i, float v) { m_coord[i] = v; }
+  void setEventIndex( const signed long& v ) { m_eventindex = v; }
+  void setBarcode( const signed long& v ) { m_barcode = v; }
+  void setBarcodeFrac(const float& v ) { m_barcode_frac = v; }
+  void setHFRejected(int v) { m_HF_rejected = v; }
+  void setHWRejected(int v) { m_HW_rejected = v; }
+  void setHWTrackID(int v) { m_HW_track = v; }
+
+  // Function used by the HW to compare similar combinations
+  unsigned int getNCommonHits(const FTKAthTrack &, const float*) const;
+  int HWChoice(const FTKAthTrack&,const float*,const unsigned int,int);
+
+  FTKAthTrack& operator=(const FTKAthTrack&);
+};
+
+#endif // TRIGFTKSIM_FTKATHTRACK_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer.h
new file mode 100644
index 0000000000000000000000000000000000000000..54fcb32fe3e51f4521ac6efb22318bf5898a5586
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKATHTRACKCONTAINER_H
+#define FTKATHTRACKCONTAINER_H
+
+#include "DataModel/DataVector.h"
+#include "TrigFTKPool/FTKAthTrack.h"
+
+class FTKAthTrackContainer : public DataVector<FTKAthTrack> {
+public :
+  FTKAthTrackContainer(SG::OwnershipPolicy ownPolicy = SG::OWN_ELEMENTS) :
+    DataVector<FTKAthTrack>(ownPolicy) {};
+  virtual ~FTKAthTrackContainer() {};
+};
+
+#include "CLIDSvc/CLASS_DEF.h"
+CLASS_DEF(FTKAthTrackContainer,67458,1)
+
+#endif // FTKATHTRACKCONTAINER_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer_p1.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..4ea92dd4ddae566bd1a8342f835a7df37b738505
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrackContainer_p1.h
@@ -0,0 +1,14 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKATHTRACKCONTAINER_P1_H
+#define FTKATHTRACKCONTAINER_P1_H
+
+#include <vector>
+#include "TrigFTKPool/FTKAthTrack_p1.h"
+
+class FTKAthTrackContainer_p1 : public std::vector<FTKAthTrack_p1> {
+};
+
+#endif // FTKATHTRACKCONTAINER_P1_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack_p1.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..94de2cf760340cc353298e687e187fd14d94c8bb
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKAthTrack_p1.h
@@ -0,0 +1,53 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRIGFTKSIM_FTKATHTRACK_P1_H
+#define TRIGFTKSIM_FTKATHTRACK_P1_H
+
+#include <vector>
+
+class FTKAthTrack_p1 {
+private:
+  int m_bankID; // Bank ID of the road related to this track
+  int m_roadID; // Road identifier
+  int m_patternID; // TODO add documentation
+  int m_sectorID; // Sector identifier
+  int m_trackID; // Unique track ID in this bank
+
+  float m_invpt; // 1/(2*Pt)
+  float m_d0; // impact paramter
+  float m_phi; // phi of the track
+  float m_z0; // z0
+  float m_ctheta; // cot(theta)
+  float m_chi2; // chi2 of the track
+  float m_origchi2; // In the case of majority recovery, this is the chi2 of 
+                    // the full fit. In all other cases m_chi2 == m_origchi2
+
+  int m_nmissing; // number of missing coordinates
+  unsigned int m_typemask; // set on in bits related to the step recovery were used, ex.: 0 no recovery, 01, rec 1st step, 11, recovery in the 1st and the 2nd stage
+  unsigned int m_bitmask;
+  std::vector<float> m_coord; // coordinates used in the fit
+
+  int m_HF_rejected; /* 0 if the track is accepted, >0 if rejected by hit filter
+			if negative, belongs to a HF rejected road
+		     */
+  int m_HW_rejected; /* The flag has 3 digit: [Q][RW][HW]:
+		      Q : 1 if has a bad chi2, 0 if not
+		      RW: is the RW level rejected the road, 0 if not rejected
+		      HW: 1 if rejected by HW, 0 if not */
+  int m_HW_track; // ID of the track excluded this track
+
+  signed long m_eventindex; // matched particle event index
+  signed long m_barcode; // matched geant particle barcode
+  float m_barcode_frac; // largest "matching fraction" with any "good"
+                        // geant particle, corresponding to the
+                        // particle with m_barcode
+
+public:
+  FTKAthTrack_p1();
+
+  friend class FTKAthTrackCnv_p1;
+};
+
+#endif // TRIGFTKSIM_FTKATHTRACK_P1_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData.h
new file mode 100644
index 0000000000000000000000000000000000000000..dbd3d9355a2cebfdf4b15fdad5301ea43a0b19a1
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData.h
@@ -0,0 +1,22 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTestData_h
+#define FTKTestData_h
+
+class FTKTestData {
+private:
+  int m_ival;
+
+public:
+  FTKTestData() : m_ival(0) {;}
+  FTKTestData(int ival) : m_ival(ival) {;}
+
+  void setValue(int);
+  int getValue() const;
+};
+
+#include "CLIDSvc/CLASS_DEF.h"
+CLASS_DEF(FTKTestData,827647585,1)
+#endif // FTKTestData_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData_p0.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData_p0.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e16714f566478140a3add1540efd529fd2525c2
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTestData_p0.h
@@ -0,0 +1,17 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTestData_POOL_h
+#define FTKTestData_POOL_h
+
+class FTKTestData_p0 {
+private:
+  int m_ival;
+
+public:
+
+  friend class FTKTestDataCnv_p0;
+};
+
+#endif // FTKTestData_POOL_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats.h
new file mode 100644
index 0000000000000000000000000000000000000000..04df72f8599b3d39c95eaf6d05bbf7d33c3c283d
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats.h
@@ -0,0 +1,58 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTRACKFITTERSTATS_H
+#define FTKTRACKFITTERSTATS_H
+
+class FTKTrackFitterStats {
+private:
+  unsigned int m_ncombs; // number of combinations
+  unsigned int m_nfits; // number of fitted combinations
+  unsigned int m_nfits_maj; // number of fitted combinations in majority roads
+  unsigned int m_nfits_rec; // number of full fits attempted to recover
+  unsigned int m_nfits_addrec; // additional fits performed because the recovery
+  unsigned int m_nfits_bad; // # fits with a bad chi^2
+  unsigned int m_nfits_rej; // # of fits rejected because the HW
+  unsigned int m_nfits_badmaj; // # fits with a bad chi^2
+  unsigned int m_nfits_rejmaj; // # of fits rejected because the HW
+
+public:
+  FTKTrackFitterStats();
+
+  void setNCombs(int v) { m_ncombs = v; }
+  void setNFits(int v) { m_nfits = v; }
+  void setNFitsMajority(int v) { m_nfits_maj = v; }
+  void setNFitsRecovery(int v) { m_nfits_rec = v; }
+  void setNAddFitsRecovery(int v) { m_nfits_addrec = v; }
+  void setNFitsBad(int v) { m_nfits_bad = v; }
+  void setNFitsHWRejected(int v) { m_nfits_rej = v; }
+  void setNFitsBadMajority(int v) { m_nfits_badmaj = v; }
+  void setNFitsHWRejectedMajority(int v) { m_nfits_rejmaj = v; }
+
+  void addNCombs(int v) { m_ncombs += v; }
+  void addNFits(int v) { m_nfits += v; }
+  void addNFitsMajority(int v) { m_nfits_maj += v; }
+  void addNFitsRecovery(int v) { m_nfits_rec += v; }
+  void addNAddFitsRecovery(int v) { m_nfits_addrec += v; }
+  void addNFitsBad(int v) { m_nfits_bad += v; }
+  void addNFitsHWRejected(int v) { m_nfits_rej += v; }
+  void addNFitsBadMajority(int v) { m_nfits_badmaj += v; }
+  void addNFitsHWRejectedMajority(int v) { m_nfits_rejmaj += v; }
+
+  unsigned int getNCombs() const { return m_ncombs; }
+  unsigned int getNFits() const { return m_nfits; }
+  unsigned int getNFitsMajority() const { return m_nfits_maj; }
+  unsigned int getNFitsRecovery() const { return m_nfits_rec; }
+  unsigned int getNAddFitsRecovery() const { return m_nfits_addrec; }
+  unsigned int getNFitsBad() const { return m_nfits_bad; }
+  unsigned int getNFitsHWRejected() const { return m_nfits_rej; }
+  unsigned int getNFitsBadMajority() const { return m_nfits_badmaj; }
+  unsigned int getNFitsHWRejectedMajority() const { return m_nfits_rejmaj; }
+
+};
+
+#include "CLIDSvc/CLASS_DEF.h"
+CLASS_DEF(FTKTrackFitterStats,764785,1)
+
+#endif // FTKTRACKFITTERSTATS_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats_p1.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..56680efdd7bf192408d70aafb0c0f2f60aa2b08c
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/FTKTrackFitterStats_p1.h
@@ -0,0 +1,26 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTRACKFITTERSTATS_P1_H
+#define FTKTRACKFITTERSTATS_P1_H
+
+class FTKTrackFitterStats_p1 {
+private:
+  friend class FTKTrackFitterStatsCnv_p1;
+
+  unsigned int m_ncombs; // number of combinations
+  unsigned int m_nfits; // number of fitted combinations
+  unsigned int m_nfits_maj; // number of fitted combinations in majority roads
+  unsigned int m_nfits_rec; // number of full fits attempted to recover
+  unsigned int m_nfits_addrec; // additional fits performed because the recovery
+  unsigned int m_nfits_bad; // # fits with a bad chi^2
+  unsigned int m_nfits_rej; // # of fits rejected because the HW
+  unsigned int m_nfits_badmaj; // # fits with a bad chi^2
+  unsigned int m_nfits_rejmaj; // # of fits rejected because the HW
+
+public:
+  FTKTrackFitterStats_p1();
+
+};
+#endif // FTKTRACKFITTERSTATS_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/TrigFTKPoolDict.h b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/TrigFTKPoolDict.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e0763a88d6b771f83074d08903e82313a7a3cdb
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/TrigFTKPoolDict.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrigFTKPoolDict_h
+#define TrigFTKPoolDict_h
+
+#include "TrigFTKPool/FTKTestData.h"
+#include "TrigFTKPool/FTKTestData_p0.h"
+
+#include "TrigFTKPool/FTKAthTrack.h"
+#include "TrigFTKPool/FTKAthTrackContainer.h"
+#include "TrigFTKPool/FTKAthTrack_p1.h"
+#include "TrigFTKPool/FTKAthTrackContainer_p1.h"
+
+#include "TrigFTKPool/FTKTrackFitterStats.h"
+#include "TrigFTKPool/FTKTrackFitterStats_p1.h"
+
+#endif // TrigFTKEventPoolDict_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/selection.xml b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/selection.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfdeeee50acc4b7303150b182ee77897b99cae8d
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/TrigFTKPool/selection.xml
@@ -0,0 +1,13 @@
+<lcgdict>
+<class name="FTKTestData" id="1F22CE79-5D49-4DDB-B282-CB894C10CFFD" />
+<class name="FTKTestData_p0" id="1F22CE79-5D39-4DDB-B882-CA894B26CFFD" />
+
+<class name="FTKAthTrack" />
+<class name="FTKAthTrackContainer" id="A04672DA-185E-4363-B41E-06B55E4AF9AA" />
+<class name="FTKAthTrack_p1" />
+<class name="FTKAthTrackContainer_p1" id="94372D90-D05F-44B0-8E12-2E795342EAFC" />
+
+<class name="FTKTrackFitterStats" id="09065382-0AA9-4926-A2A8-7FFC5ED7BAA7" />
+<class name="FTKTrackFitterStats_p1" id="09056832-AA09-9426-A2A8-7FC5ED7BFAA7" />
+
+</lcgdict>'
diff --git a/Trigger/TrigFTK/TrigFTKPool/cmt/requirements b/Trigger/TrigFTK/TrigFTKPool/cmt/requirements
new file mode 100644
index 0000000000000000000000000000000000000000..627b40f36e27483b3d68b5f7247faa375b1bbc7b
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/cmt/requirements
@@ -0,0 +1,26 @@
+package TrigFTKPool
+
+author Guido Volpi <guido.volpi@cern.ch>
+
+use AtlasPolicy           AtlasPolicy-*
+use CLIDSvc               CLIDSvc-*               Control
+use DataModel             DataModel-*             Control
+
+private
+use AthenaPoolCnvSvc      AthenaPoolCnvSvc-*         Database/AthenaPOOL
+use AthenaPoolUtilities   AthenaPoolUtilities-*      Database/AthenaPOOL
+use AtlasROOT             AtlasROOT-*                External
+end_private
+
+library TrigFTKPool *.cxx
+apply_pattern installed_library
+
+macro_append TrigFTKPoolPoolCnv_dependencies " TrigFTKPool "
+
+private
+use AtlasReflex             AtlasReflex-*            External -no_auto_imports
+
+#apply_pattern lcgdict dict=TrigFTKEventPool selectionfile=selection.xml navigables="ExampleHitContainer" headerfiles="-s=${TrigFTKEventPool_root}/TrigFTKEventPool TrigFTKEventPoolDict.h"
+apply_pattern lcgdict dict=TrigFTKPool selectionfile=selection.xml headerfiles="-s=${TrigFTKPool_root}/TrigFTKPool TrigFTKPoolDict.h"
+
+apply_pattern poolcnv files="-s=${TrigFTKPool_root}/TrigFTKPool FTKTestData.h FTKAthTrackContainer.h FTKTrackFitterStats.h"
\ No newline at end of file
diff --git a/Trigger/TrigFTK/TrigFTKPool/doc/mainpage.h b/Trigger/TrigFTK/TrigFTKPool/doc/mainpage.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8f40a45f6476164fed0e9eea370dd79f87fcd2a
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/doc/mainpage.h
@@ -0,0 +1,20 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+@mainpage TrigFTKEventPool Package
+
+>> Please enter an overview of the created package here: What does it contain?
+
+@author Guido Volpi <guido.volpi@cern.ch>
+
+@section TrigFTKEventPoolIntro Introduction
+
+>> Please enter a brief description of the package here.
+
+@section TrigFTKEventPoolReq Requirements
+
+@include requirements
+
+*/
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..d124b7b525fbc5fec4d81bf5dcc4ce464021a4f7
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack.cxx
@@ -0,0 +1,286 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKAthTrack.h"
+
+#include <iostream>
+using namespace std;
+
+#include <TMath.h>
+
+FTKAthTrack::FTKAthTrack() :
+   m_bankID(-1), m_roadID(-1), m_sectorID(-1), m_trackID(-1),
+   m_invpt(0), m_d0(0), m_phi(0), m_z0(0),
+   m_ctheta(0), m_chi2(0), m_origchi2(0), m_nmissing(0), 
+   m_typemask(0), m_bitmask(0), m_ncoords(0), m_coord(0),
+   m_HF_rejected(0),m_HW_rejected(0),m_HW_track(-1),
+   m_eventindex(-1), m_barcode(-1), m_barcode_frac(0.)
+{
+   // nothing to do
+}
+
+FTKAthTrack::FTKAthTrack(int ncoords) :
+   m_bankID(-1), m_roadID(-1), m_sectorID(-1), m_trackID(-1),
+   m_invpt(0), m_d0(0), m_phi(0), m_z0(0),
+   m_ctheta(0), m_chi2(0), m_origchi2(0), m_nmissing(0), 
+   m_typemask(0), m_bitmask(0), m_ncoords(ncoords),
+   m_HF_rejected(0),m_HW_rejected(0),m_HW_track(-1),
+   m_eventindex(-1), m_barcode(-1), m_barcode_frac(0.)
+{
+  m_coord = new float[m_ncoords];
+  for (int ix=0;ix!=m_ncoords;++ix) m_coord[ix] = 0.f;
+}
+
+
+FTKAthTrack::FTKAthTrack(const FTKAthTrack &cpy)
+{
+   m_bankID   = cpy.m_bankID;
+   m_roadID   = cpy.m_roadID;
+   m_sectorID = cpy.m_sectorID;
+   m_trackID  = cpy.m_trackID;
+   m_invpt    = cpy.m_invpt;
+   m_d0       = cpy.m_d0;
+   m_phi      = cpy.m_phi;
+   m_ctheta   = cpy.m_ctheta;
+   m_z0       = cpy.m_z0;
+   m_chi2     = cpy.m_chi2;
+   m_origchi2 = cpy.m_origchi2;
+   m_nmissing = cpy.m_nmissing;
+   m_typemask = cpy.m_typemask;
+   m_bitmask  = cpy.m_bitmask;
+   m_ncoords  = cpy.m_ncoords;
+
+   m_eventindex   = cpy.m_eventindex;
+   m_eventindex   = cpy.m_eventindex;
+   m_barcode      = cpy.m_barcode;
+   m_barcode_frac = cpy.m_barcode_frac;
+
+   m_HF_rejected = cpy.m_HF_rejected;
+   
+   m_HW_rejected = cpy.m_HW_rejected;
+   m_HW_track    = cpy.m_HW_track;
+
+   m_coord = new float[m_ncoords];
+   for (int i=0;i<m_ncoords;++i)
+      m_coord[i] = cpy.m_coord[i];
+}
+
+
+
+FTKAthTrack::~FTKAthTrack()
+{
+   if (m_ncoords>0) delete [] m_coord;
+}
+
+// if ForceRange==true, then phi = [-pi..pi)
+void FTKAthTrack::setPhi(float phi, bool ForceRange) {
+  if (ForceRange) {
+    // when phi is ridiculously large, there is no point in adjusting it
+    if(fabs(phi)>100) {
+      if(m_chi2<100) { // this is a BAD track, so fail it if chi2 hasn't done so already
+	std::cout << "FTKAthTrack warning: fitted phi = " << phi << ", but chi2 = " << m_chi2 
+		  << ". Adjusting to chi2+=100!" << std::endl;
+	m_chi2+=100; // we want to fail this event anyway
+      }
+    }
+    else {
+      while (phi>= TMath::Pi()) phi -= TMath::TwoPi(); 
+      while (phi< -TMath::Pi()) phi += TMath::TwoPi();
+    }
+  }
+  m_phi = phi;
+}
+
+
+/** set the number of coordinates connected with this track,
+    a dim=0 is used to cleanup array content */
+void FTKAthTrack::setNCoords(int dim)
+{
+  if (m_ncoords>0) delete [] m_coord;
+
+  m_ncoords = dim;
+  m_coord = new float[m_ncoords];
+  for (int i=0;i<m_ncoords;++i)
+    m_coord[i] = 0;
+}
+
+float FTKAthTrack::getParameter(int ipar) const
+{
+  switch (ipar) {
+  case 0:
+    return m_invpt;
+    break;
+  case 1:
+    return m_d0;
+    break;
+  case 2:
+    return m_phi;
+    break;
+  case 3:
+    return m_z0;
+    break;
+  case 4:
+    return m_ctheta;
+    break;
+  }
+
+  return 0.;
+}
+
+
+/** return the number of the common hits */
+unsigned int FTKAthTrack::getNCommonHits(const FTKAthTrack &track, const float *HWdev) const
+{
+  unsigned int ncommon_hits(0);
+
+  // match over the hits list
+  for (int ix=0;ix!=m_ncoords;++ix) {
+    if ( !((m_bitmask & track.m_bitmask) & (1<<ix)) ) {
+      // majority hits are always common
+      ncommon_hits += 1;
+      continue;
+    }
+
+    double dist = TMath::Abs(getCoord(ix)-track.getCoord(ix));
+    if ( dist < HWdev[ix] ) {
+      ++ncommon_hits; // a common hit
+    }
+  } // end loop over hits
+
+  return ncommon_hits;
+}
+
+
+/** this function compare this track with a different tracks and returns:
+     0 if according HW setup the two tracks are different
+     1 are similar and the other has a worse quality parameter
+     -1 are similar and the other has a better quality parameter */
+int FTKAthTrack::HWChoice(const FTKAthTrack &other, const float *HW_dev,
+		       const unsigned int HW_ndiff, int HW_level)
+{
+  int accepted(0);
+
+  // Choose hitwarrior severity level: 1=in-road, 2=global
+  if(HW_level<2) {
+    if(getBankID()!=other.getBankID()) return accepted;
+    if(getRoadID()!=other.getRoadID()) return accepted;
+  }
+
+  unsigned int ncommon_hits = getNCommonHits(other,HW_dev);
+
+  // FlagAK - simplistic hitwarrior. Makes no distinction between 1D and 2D
+  // If this doesn't work, we'll need to come up with something smarter
+  // check the criteria for considering two tracks the same
+  if ( m_ncoords-ncommon_hits<=HW_ndiff) { 
+    // the track matches
+    if ( ( getHWRejected() && !other.getHWRejected()) ||
+	 (!getHWRejected() &&  other.getHWRejected()) ) {
+	    
+      // keep the track in the accepted road
+      if (getHWRejected()) {
+	accepted = -1;
+      }
+      else {
+	accepted = 1;
+      }
+	    
+    }
+    else if (other.getNMissing()==getNMissing()) {
+      // keep the track with the best chi2
+      if (other.getChi2() > getChi2()) {
+	accepted = 1;
+      }
+      else {
+	accepted = -1;
+      }
+    }
+    else if (other.getNMissing() < getNMissing()) {
+      // keep the track using more real points
+      accepted = -1;
+    }
+    else if (other.getNMissing() > getNMissing()) {
+      accepted = 1;
+    }
+  }
+
+  return accepted;
+}
+
+
+void  FTKAthTrack::setParameter(int ipar, float val)
+{
+  switch (ipar) {
+  case 0:
+    m_invpt = val;
+    break;
+  case 1:
+    m_d0 = val;
+    break;
+  case 2:
+    m_phi = val;
+    break;
+  case 3:
+    m_z0 = val;
+    break;
+  case 4:
+    m_ctheta = val;
+    break;
+  }
+}
+
+
+float FTKAthTrack::getEta() const
+{
+  return TMath::ASinH(m_ctheta);
+}
+
+
+
+FTKAthTrack& FTKAthTrack::operator=(const FTKAthTrack &tocpy)
+{
+#ifdef PROTECT_SA // speedup
+  if (this != &tocpy) 
+#endif
+    {
+      m_bankID   = tocpy.m_bankID;
+      m_roadID   = tocpy.m_roadID;
+      m_sectorID = tocpy.m_sectorID;
+      m_trackID  = tocpy.m_trackID;
+      m_invpt    = tocpy.m_invpt;
+      m_d0       = tocpy.m_d0;
+      m_phi      = tocpy.m_phi;
+      m_z0       = tocpy.m_z0;
+      m_ctheta   = tocpy.m_ctheta;
+      m_chi2     = tocpy.m_chi2;
+      m_origchi2 = tocpy.m_origchi2;
+      m_nmissing = tocpy.m_nmissing;
+      m_typemask = tocpy.m_typemask;
+      m_bitmask  = tocpy.m_bitmask;
+
+      m_eventindex   = tocpy.m_eventindex;
+      m_barcode      = tocpy.m_barcode;
+      m_barcode_frac = tocpy.m_barcode_frac;
+      
+      m_HF_rejected = tocpy.m_HF_rejected;
+      
+      m_HW_rejected = tocpy.m_HW_rejected;
+      m_HW_track    = tocpy.m_HW_track;
+      
+      if (m_ncoords!=tocpy.m_ncoords) {    
+	m_ncoords  = tocpy.m_ncoords;   
+	if (m_coord) delete [] m_coord;
+	m_coord = new float[m_ncoords];
+      }
+      
+      for (int i=0;i<m_ncoords;++i) {
+	m_coord[i] = tocpy.m_coord[i];
+      }
+      
+      m_eventindex   = tocpy.m_eventindex;
+      m_barcode      = tocpy.m_barcode;
+      m_barcode_frac = tocpy.m_barcode_frac;
+    }
+  
+  return *this;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..80f92a15f292faac606eb37fce7d9950c8656dd3
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.cxx
@@ -0,0 +1,71 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKAthTrack.h"
+#undef private
+#undef protected
+
+#include "FTKAthTrackCnv_p1.h"
+
+void FTKAthTrackCnv_p1::persToTrans(const FTKAthTrack_p1 *persObj, 
+				    FTKAthTrack *transObj, MsgStream&)
+{
+  transObj->m_bankID = persObj->m_bankID;
+  transObj->m_roadID = persObj->m_roadID;
+  transObj->m_patternID = persObj->m_patternID;
+  transObj->m_sectorID = persObj->m_sectorID;
+  transObj->m_trackID = persObj->m_trackID;
+  transObj->m_invpt = persObj->m_invpt;
+  transObj->m_d0 = persObj->m_d0;
+  transObj->m_phi = persObj->m_phi;
+  transObj->m_z0 = persObj->m_z0;
+  transObj->m_ctheta = persObj->m_ctheta;
+  transObj->m_chi2 = persObj->m_chi2;
+  transObj->m_origchi2 = persObj->m_origchi2;
+  transObj->m_nmissing = persObj->m_nmissing;
+  transObj->m_typemask = persObj->m_typemask;
+  transObj->m_bitmask = persObj->m_bitmask;
+  transObj->m_ncoords = persObj->m_coord.size();
+  transObj->m_coord = new float[transObj->m_ncoords];
+  for (int ic=0;ic!=transObj->m_ncoords;++ic) 
+    transObj->m_coord[ic] = persObj->m_coord[ic];
+  transObj->m_HF_rejected = persObj->m_HF_rejected;
+  transObj->m_HW_rejected = persObj->m_HW_rejected;
+  transObj->m_HW_track = persObj->m_HW_track;
+  transObj->m_eventindex = persObj->m_eventindex;
+  transObj->m_barcode = persObj->m_barcode;
+  transObj->m_barcode_frac = persObj->m_barcode_frac;
+}
+
+
+void FTKAthTrackCnv_p1::transToPers(const FTKAthTrack *transObj,
+				    FTKAthTrack_p1 *persObj, MsgStream&)
+{
+  persObj->m_bankID = transObj->m_bankID;
+  persObj->m_roadID = transObj->m_roadID;
+  persObj->m_patternID = transObj->m_patternID;
+  persObj->m_sectorID = transObj->m_sectorID;
+  persObj->m_trackID = transObj->m_trackID;
+  persObj->m_invpt = transObj->m_invpt;
+  persObj->m_d0 = transObj->m_d0;
+  persObj->m_phi = transObj->m_phi;
+  persObj->m_z0 = transObj->m_z0;
+  persObj->m_ctheta = transObj->m_ctheta;
+  persObj->m_chi2 = transObj->m_chi2;
+  persObj->m_origchi2 = transObj->m_origchi2;
+  persObj->m_nmissing = transObj->m_nmissing;
+  persObj->m_typemask = transObj->m_typemask;
+  persObj->m_bitmask = transObj->m_bitmask;
+  persObj->m_coord.resize(transObj->m_ncoords);
+  for (int ic=0;ic!=transObj->m_ncoords;++ic) 
+    persObj->m_coord[ic] = transObj->m_coord[ic];
+  persObj->m_HF_rejected = transObj->m_HF_rejected;
+  persObj->m_HW_rejected = transObj->m_HW_rejected;
+  persObj->m_HW_track = transObj->m_HW_track;
+  persObj->m_eventindex = transObj->m_eventindex;
+  persObj->m_barcode = transObj->m_barcode;
+  persObj->m_barcode_frac = transObj->m_barcode_frac;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..dd3c7ea6a83ae755be221dd39749dc68c9630bad
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackCnv_p1.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKAthTrackCnv_p1_h
+#define FTKAthTrackCnv_p1_h
+
+#include "TrigFTKPool/FTKAthTrack_p1.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+
+class MsgStream;
+class FTKAthTrack;
+
+class FTKAthTrackCnv_p1 : public T_AthenaPoolTPCnvBase<FTKAthTrack, FTKAthTrack_p1> {
+public:
+  FTKAthTrackCnv_p1() {;}
+
+  virtual void persToTrans(const FTKAthTrack_p1 *persObj, FTKAthTrack *transObj, MsgStream&);
+  virtual void transToPers(const FTKAthTrack *transObj, FTKAthTrack_p1 *persObj, MsgStream&);
+};
+#endif // FTKAthTrackCnv_p1_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..7b4a965d3f501c1fbce4e53481eceb583f103267
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.cxx
@@ -0,0 +1,25 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FTKAthTrackContainerCnv.h"
+
+FTKAthTrackContainer_p1* FTKAthTrackContainerCnv::createPersistent(FTKAthTrackContainer *transObj) {
+  MsgStream log(messageService(),"FTKAthTrackContainerCnv");
+  FTKAthTrackContainer_p1 *persObj = m_TPconverter.createPersistent(transObj,log);
+  return persObj;
+}
+
+
+
+FTKAthTrackContainer* FTKAthTrackContainerCnv::createTransient() {
+  static pool::Guid p1_guid("94372D90-D05F-44B0-8E12-2E795342EAFC");
+
+  if (compareClassGuid(p1_guid)) {
+    MsgStream log(messageService(),"FTKAthTrackContainerCnv");
+    std::auto_ptr<FTKAthTrackContainer_p1> cont_p1(this->poolReadObject<FTKAthTrackContainer_p1>());
+    return m_TPconverter.createTransient(cont_p1.get(),log);
+  }
+
+  return 0x0;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.h
new file mode 100644
index 0000000000000000000000000000000000000000..2425efaeeeaa5441f39ef7132cdf3bb5d55fe2c7
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv.h
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKATHTRACKCONTAINERCNV_H
+#define FTKATHTRACKCONTAINERCNV_H
+
+#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h"
+#include "FTKAthTrackContainerCnv_p1.h" // last persistency version
+
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKAthTrackContainer_p1.h"
+#include "TrigFTKPool/FTKAthTrackContainer.h"
+#undef public
+#undef protected
+
+#include <memory>
+
+class FTKAthTrackContainerCnv : public T_AthenaPoolCustomCnv<FTKAthTrackContainer,FTKAthTrackContainer_p1> {
+private:
+  friend class CnvFactory<FTKAthTrackContainerCnv>;
+
+  FTKAthTrackContainerCnv_p1 m_TPconverter;
+
+public:
+  FTKAthTrackContainerCnv(ISvcLocator *svcloc) :
+    T_AthenaPoolCustomCnv<FTKAthTrackContainer,FTKAthTrackContainer_p1>::T_AthenaPoolCustomCnv(svcloc) {}
+
+  virtual FTKAthTrackContainer_p1* createPersistent(FTKAthTrackContainer *transObj);
+  virtual FTKAthTrackContainer* createTransient();
+
+};
+#endif // FTKATHTRACKCONTAINERCNV_H
+
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv_p1.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..f5eaed3b4ed28f24b88c7993e914f9f1ba7ba5ff
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrackContainerCnv_p1.h
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKATHTRACKCONTAINERCNV_P1_H
+#define FTKATHTRACKCONTAINERCNV_P1_H
+
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKAthTrackContainer.h"
+#include "TrigFTKPool/FTKAthTrackContainer_p1.h"
+#undef private
+#undef protected
+#include "FTKAthTrackCnv_p1.h"
+
+typedef T_AthenaPoolTPCnvVector<FTKAthTrackContainer, FTKAthTrackContainer_p1, FTKAthTrackCnv_p1> FTKAthTrackContainerCnv_p1;
+
+template<>
+class T_TPCnv<FTKAthTrackContainer, FTKAthTrackContainer_p1> : public FTKAthTrackContainerCnv_p1 {
+public:
+};
+
+#endif // FTKATHTRACKCONTAINERCNV_P1_H
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack_p1.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack_p1.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..a2b9c79c3b32df924bb85963738ad5ebbe079619
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKAthTrack_p1.cxx
@@ -0,0 +1,11 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKAthTrack_p1.h"
+
+
+FTKAthTrack_p1::FTKAthTrack_p1() :
+  m_bankID(-1)
+{
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..cad877c37442ac4e2adc23718e834fed3edb836b
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData.cxx
@@ -0,0 +1,16 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKTestData.h"
+
+void FTKTestData::setValue(int ival)
+{
+  m_ival = ival;
+}
+
+
+int FTKTestData::getValue() const
+{
+  return m_ival;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..962f0532b591dc3e6c441821d5194c129d3f7f7f
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.cxx
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKTestData.h"
+#undef private
+#undef protected
+
+#include "FTKTestDataCnv_p0.h"
+
+void FTKTestDataCnv_p0::persToTrans(const FTKTestData_p0 *persObj, 
+				    FTKTestData *transObj, MsgStream&)
+{
+  transObj->m_ival = persObj->m_ival;
+}
+
+
+void FTKTestDataCnv_p0::transToPers(const FTKTestData *transObj,
+				    FTKTestData_p0 *persObj, MsgStream&)
+{
+   persObj->m_ival = transObj->m_ival;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.h
new file mode 100644
index 0000000000000000000000000000000000000000..96bb2dcd661be4c3edd20211e7c60b418a5f4f47
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestDataCnv_p0.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTestDataCnv_p0_h
+#define FTKTestDataCnv_p0_h
+
+#include "TrigFTKPool/FTKTestData_p0.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+
+class MsgStream;
+class FTKTestData;
+
+class FTKTestDataCnv_p0 : public T_AthenaPoolTPCnvBase<FTKTestData, FTKTestData_p0> {
+public:
+  FTKTestDataCnv_p0() {;}
+
+  virtual void persToTrans(const FTKTestData_p0 *persObj, FTKTestData *transObj, MsgStream&);
+  virtual void transToPers(const FTKTestData *transObj, FTKTestData_p0 *persObj, MsgStream&);
+};
+#endif // FTKTestDataCnv_p0_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData_p0.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData_p0.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..58cf6573ee425a4695649ed759de2293df4f06d5
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTestData_p0.cxx
@@ -0,0 +1,6 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKTestData_p0.h"
+
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..0f91f495b11a6156535c6aca65ff60ed136924ea
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats.cxx
@@ -0,0 +1,10 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKTrackFitterStats.h"
+
+FTKTrackFitterStats::FTKTrackFitterStats() :
+  m_ncombs(0), m_nfits(0), m_nfits_maj(0), m_nfits_rec(0), m_nfits_addrec(0),
+  m_nfits_bad(0), m_nfits_rej(0), m_nfits_badmaj(0), m_nfits_rejmaj(0)
+{}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..70858006ad39e337c50d72cdbe8db1c1e4b4b016
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.cxx
@@ -0,0 +1,25 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FTKTrackFitterStatsCnv.h"
+
+FTKTrackFitterStats_p1* FTKTrackFitterStatsCnv::createPersistent(FTKTrackFitterStats *transObj) {
+  MsgStream log(messageService(),"FTKTrackFitterStatsCnv");
+  FTKTrackFitterStats_p1 *persObj = m_TPconverter.createPersistent(transObj,log);
+  return persObj;
+}
+
+
+
+FTKTrackFitterStats* FTKTrackFitterStatsCnv::createTransient() {
+  static pool::Guid p1_guid("09056832-AA09-9426-A2A8-7FC5ED7BFAA7");
+
+  if (compareClassGuid(p1_guid)) {
+    MsgStream log(messageService(),"FTKTrackFitterStatsCnv");
+    std::auto_ptr<FTKTrackFitterStats_p1> cont_p1(this->poolReadObject<FTKTrackFitterStats_p1>());
+    return m_TPconverter.createTransient(cont_p1.get(),log);
+  }
+
+  return 0x0;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1739fa9ddfc7d0be88ec4391284f12113fb843b
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv.h
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTRACKFITTERSTATSCNV_H
+#define FTKTRACKFITTERSTATSCNV_H
+
+#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h"
+#include "FTKTrackFitterStatsCnv_p1.h" // last persistency version
+
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKTrackFitterStats_p1.h"
+#include "TrigFTKPool/FTKTrackFitterStats.h"
+#undef public
+#undef protected
+
+#include <memory>
+
+class FTKTrackFitterStatsCnv : public T_AthenaPoolCustomCnv<FTKTrackFitterStats,FTKTrackFitterStats_p1> {
+private:
+  friend class CnvFactory<FTKTrackFitterStatsCnv>;
+
+  FTKTrackFitterStatsCnv_p1 m_TPconverter;
+
+public:
+  FTKTrackFitterStatsCnv(ISvcLocator *svcloc) :
+    T_AthenaPoolCustomCnv<FTKTrackFitterStats,FTKTrackFitterStats_p1>::T_AthenaPoolCustomCnv(svcloc) {}
+
+  virtual FTKTrackFitterStats_p1* createPersistent(FTKTrackFitterStats *transObj);
+  virtual FTKTrackFitterStats* createTransient();
+
+};
+#endif // FTKTRACKFITTERSTATSCNV_H
+
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..973df31735b440fb06e9b176008487b8720ba43c
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.cxx
@@ -0,0 +1,40 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#define private public
+#define protected public
+#include "TrigFTKPool/FTKTrackFitterStats.h"
+#undef private
+#undef protected
+
+#include "FTKTrackFitterStatsCnv_p1.h"
+
+void FTKTrackFitterStatsCnv_p1::persToTrans(const FTKTrackFitterStats_p1 *persObj, 
+				    FTKTrackFitterStats *transObj, MsgStream&)
+{
+  transObj->m_ncombs = persObj->m_ncombs;
+  transObj->m_nfits = persObj->m_nfits;
+  transObj->m_nfits_maj = persObj->m_nfits_maj;
+  transObj->m_nfits_rec = persObj->m_nfits_rec;
+  transObj->m_nfits_addrec = persObj->m_nfits_addrec;
+  transObj->m_nfits_bad = persObj->m_nfits_bad;
+  transObj->m_nfits_rej = persObj->m_nfits_rej;
+  transObj->m_nfits_badmaj = persObj->m_nfits_badmaj;
+  transObj->m_nfits_rejmaj = persObj->m_nfits_rejmaj;
+}
+
+
+void FTKTrackFitterStatsCnv_p1::transToPers(const FTKTrackFitterStats *transObj,
+				    FTKTrackFitterStats_p1 *persObj, MsgStream&)
+{
+  persObj->m_ncombs = transObj->m_ncombs;
+  persObj->m_nfits = transObj->m_nfits;
+  persObj->m_nfits_maj = transObj->m_nfits_maj;
+  persObj->m_nfits_rec = transObj->m_nfits_rec;
+  persObj->m_nfits_addrec = transObj->m_nfits_addrec;
+  persObj->m_nfits_bad = transObj->m_nfits_bad;
+  persObj->m_nfits_rej = transObj->m_nfits_rej;
+  persObj->m_nfits_badmaj = transObj->m_nfits_badmaj;
+  persObj->m_nfits_rejmaj = transObj->m_nfits_rejmaj;
+}
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.h b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..701552f5334e2ca2f18983e68cc6ef6e5f591c47
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStatsCnv_p1.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FTKTrackFitterStatsCnv_p1_h
+#define FTKTrackFitterStatsCnv_p1_h
+
+#include "TrigFTKPool/FTKTrackFitterStats_p1.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+
+class MsgStream;
+class FTKTrackFitterStats;
+
+class FTKTrackFitterStatsCnv_p1 : public T_AthenaPoolTPCnvBase<FTKTrackFitterStats, FTKTrackFitterStats_p1> {
+public:
+  FTKTrackFitterStatsCnv_p1() {;}
+
+  virtual void persToTrans(const FTKTrackFitterStats_p1 *persObj, FTKTrackFitterStats *transObj, MsgStream&);
+  virtual void transToPers(const FTKTrackFitterStats *transObj, FTKTrackFitterStats_p1 *persObj, MsgStream&);
+};
+#endif // FTKTrackFitterStatsCnv_p1_h
diff --git a/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats_p1.cxx b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats_p1.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..bb0d2aa37513f70a8b34831b1208cbbe7a13d75c
--- /dev/null
+++ b/Trigger/TrigFTK/TrigFTKPool/src/FTKTrackFitterStats_p1.cxx
@@ -0,0 +1,10 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigFTKPool/FTKTrackFitterStats_p1.h"
+
+FTKTrackFitterStats_p1::FTKTrackFitterStats_p1() :
+  m_ncombs(0), m_nfits(0), m_nfits_maj(0), m_nfits_rec(0), m_nfits_addrec(0),
+  m_nfits_bad(0), m_nfits_rej(0), m_nfits_badmaj(0), m_nfits_rejmaj(0)
+{}