diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/ICaloGeometry.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/ICaloGeometry.h
index ac2693f7c0d473396f76791862ffe3e98da2d2a0..235f8006cd4e993bf9d38d93302f1842de66671e 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/ICaloGeometry.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/ICaloGeometry.h
@@ -18,7 +18,7 @@ public :
 
    virtual const CaloDetDescrElement* getDDE(Identifier identify) = 0;
    virtual const CaloDetDescrElement* getDDE(int sampling,float eta,float phi,float* distance=0,int* steps=0) = 0;
-   virtual const CaloDetDescrElement* getFCalDDE(int sampling,float x,float y,float z) = 0;
+   virtual const CaloDetDescrElement* getFCalDDE(int sampling,float x,float y,float z,float* distance=0,int* steps=0) = 0;
    
    virtual double deta(int sample,double eta) const = 0;
    virtual void   minmaxeta(int sample,double eta,double& mineta,double& maxeta) const = 0;
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
index 4954e049a5ee3b3fac33f8235ba60f2532cdeada..395ef4b984541a6fbc70967a992739443cd0c032 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/ISF_FastCaloSimParametrization/CaloGeometry.h
@@ -40,8 +40,8 @@ class CaloGeometry : virtual public ICaloGeometry {
     virtual const CaloDetDescrElement* getDDE(int sampling, Identifier identify);
 
     virtual const CaloDetDescrElement* getDDE(int sampling,float eta,float phi,float* distance=0,int* steps=0);
-    virtual const CaloDetDescrElement* getFCalDDE(int sampling,float x,float y,float z);
-    bool getClosestFCalCellIndex(int sampling,float x,float y,int& ieta, int& iphi);
+    virtual const CaloDetDescrElement* getFCalDDE(int sampling,float x,float y,float z,float* distance=0,int* steps=0);
+    bool getClosestFCalCellIndex(int sampling,float x,float y,int& ieta, int& iphi,int* steps=0);
 
     double deta(int sample,double eta) const;
     void   minmaxeta(int sample,double eta,double& mineta,double& maxeta) const;
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
index 62d5a6bb6c5b4bbd01dd681519d7d3c9a53e5ed1..9d9078132e0779ae4f3cbf2b8093657ebbd08664 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/src/CaloGeometry.cxx
@@ -549,41 +549,45 @@ const CaloDetDescrElement* CaloGeometry::getDDE(int sampling,float eta,float phi
   return bestDDE;
 }
 
-const CaloDetDescrElement* CaloGeometry::getFCalDDE(int sampling,float x,float y,float z){
-		int isam = sampling - 20;
-		int iphi(-100000),ieta(-100000);
-		Long64_t mask1[]{0x34,0x34,0x35};
-		Long64_t mask2[]{0x36,0x36,0x37};
-		bool found = m_FCal_ChannelMap.getTileID(isam, x, y, ieta, iphi);
-		if(!found) {
-		  cout << "Warning: Hit is not matched with any FCal cell! Looking for the closest cell" << endl;
-		  found = getClosestFCalCellIndex(sampling, x, y, ieta, iphi);
-		}
-		if(!found) {
-		  cout << "Error: Unable to find the closest FCal cell!" << endl;
-		  return nullptr;
-		}
-		
-		
-		//cout << "CaloGeometry::getFCalDDE: x:" << x << " y: " << y << " ieta: " << ieta << " iphi: " << iphi << " cmap->x(): " << m_FCal_ChannelMap.x(isam,ieta,iphi) << " cmap->y(): " << m_FCal_ChannelMap.y(isam,ieta,iphi) << endl;
-		Long64_t id = (ieta << 5) + 2*iphi;
-		if(isam==2)id+= (8<<8);
-		
-		
-		
-		if(z>0) id+=(mask2[isam-1] << 12);
-		else id+=(mask1[isam-1] << 12);
-		
-		id = id << 44; 
-		Identifier identify((unsigned long long)id);
-		
-		const CaloDetDescrElement* foundcell=m_cells[identify];
-
-		return foundcell;
+const CaloDetDescrElement* CaloGeometry::getFCalDDE(int sampling,float x,float y,float z,float* distance,int* steps){
+  int isam = sampling - 20;
+  int iphi(-100000),ieta(-100000);
+  Long64_t mask1[]{0x34,0x34,0x35};
+  Long64_t mask2[]{0x36,0x36,0x37};
+  bool found = m_FCal_ChannelMap.getTileID(isam, x, y, ieta, iphi);
+  if(steps && found) *steps=0;
+  if(!found) {
+    cout << "Warning: Hit is not matched with any FCal cell! Looking for the closest cell" << endl;
+    found = getClosestFCalCellIndex(sampling, x, y, ieta, iphi,steps);
+  }
+  if(!found) {
+    cout << "Error: Unable to find the closest FCal cell!" << endl;
+    return nullptr;
+  }
+  
+  
+  //cout << "CaloGeometry::getFCalDDE: x:" << x << " y: " << y << " ieta: " << ieta << " iphi: " << iphi << " cmap->x(): " << m_FCal_ChannelMap.x(isam,ieta,iphi) << " cmap->y(): " << m_FCal_ChannelMap.y(isam,ieta,iphi) << endl;
+  Long64_t id = (ieta << 5) + 2*iphi;
+  if(isam==2)id+= (8<<8);
+  
+  
+  
+  if(z>0) id+=(mask2[isam-1] << 12);
+  else id+=(mask1[isam-1] << 12);
+  
+  id = id << 44; 
+  Identifier identify((unsigned long long)id);
+  
+  const CaloDetDescrElement* foundcell=m_cells[identify];
+  if(distance) {
+    *distance=sqrt(pow(foundcell->x() - x,2) +  pow(foundcell->y() - y,2)  );
+  }
+  
+  return foundcell;
 }
 
 
-bool CaloGeometry::getClosestFCalCellIndex(int sampling,float x,float y,int& ieta, int& iphi){
+bool CaloGeometry::getClosestFCalCellIndex(int sampling,float x,float y,int& ieta, int& iphi,int* steps){
   
   double rmin = m_FCal_rmin[sampling-21];
   double rmax = m_FCal_rmax[sampling-21];
@@ -615,6 +619,7 @@ bool CaloGeometry::getClosestFCalCellIndex(int sampling,float x,float y,int& iet
     }
     
   }
+  if(steps)*steps=i+1;
   return i<nmax ? true : false;
 }
 
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/run_geo.C b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/run_geo.C
index dd24730ed5fdc9b96d3e1a1d506b2fff23c5c5fe..dce677cfa8c844a291ea685fe2cda6fdc83c85ad 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/run_geo.C
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/run_geo.C
@@ -166,10 +166,10 @@ void run_geo()
   Long64_t eta_index64,phi_index64;
   //double x=423.755;
   //double y=123.41;
-  //double x=431.821;
-  //double y=116.694;
-  double x=21;
-  double y=27;
+  double x=431.821;
+  double y=116.694;
+  //double x=21;
+  //double y=27;
   
   
   //double x=436.892; 
@@ -182,6 +182,9 @@ void run_geo()
   cout << endl;
   cout << "Looking for tile corresponding to [x,y] = [" <<  x << "," << y << "]" << endl;
   
+  float* distance = new float(-99.);
+  int* steps = new int(-99);
+  
   for(int imap=1;imap<=3;imap++){
   
 		cout << "Looking for tile in module " << imap << endl;
@@ -197,11 +200,15 @@ void run_geo()
 	    cmap->tileSize(imap, eta_index, phi_index, dx, dy);
 	    cout << "Tile position: [x,y] = [" <<  cmap->x(imap,eta_index,phi_index) << "," << cmap->y(imap,eta_index,phi_index) << "]" << " [dx,dy] = [" << dx << "," << dy << "] " << endl;
 	  }
-	  mcell=geo->getFCalDDE(imap+20,x,y,+1);
+	  mcell=geo->getFCalDDE(imap+20,x,y,+1,distance,steps);
 	  cout << "Original hit position: [x,y] = [" <<  x << "," << y << "]" << endl;
 	  cout << "Tile position from CaloGeometry: [x,y] = [" <<  mcell->x() << "," << mcell->y() << "]" << " [dx,dy] = [" << mcell->dx() << "," << mcell->dy() << "] " << " Identifier: " << mcell->identify() << endl;
+	  cout << "Distance: " << *distance << endl;
+	  cout << "Steps: " << *steps << endl;
 		
 	  Identifier identifier= mcell->identify();
+	  
+	
 		/*eta_index64=eta_index;
 		phi_index64=phi_index;
 		if (imap==2) eta_index64+=100;
@@ -217,6 +224,9 @@ void run_geo()
 	
 	}
 
+  delete distance;
+  delete steps;
+  
   bool makeFCalCellPlots=false;
 
   if(makeFCalCellPlots){