diff --git a/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.cpp b/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.cpp
index 4562012ce0eba0c845b35fb7c4ba3cccbfbef84d..7e890eec2dd8e803ba15c0d0e848e3da17c40c95 100644
--- a/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.cpp
+++ b/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.cpp
@@ -32,7 +32,7 @@ EnterpriseRAOAlgorithm::~EnterpriseRAOAlgorithm() {
 std::vector<uint64_t> EnterpriseRAOAlgorithm::performRAO(const std::vector<std::unique_ptr<cta::RetrieveJob> >& jobs) {
   std::vector<uint64_t> raoOrder;
   uint64_t njobs = jobs.size();
-  uint32_t block_size = 262144;
+  uint32_t block_size = c_blockSize;
   std::list<castor::tape::SCSI::Structures::RAO::blockLims> files;
   for (uint32_t i = 0; i < njobs; i++) {
     cta::RetrieveJob *job = jobs.at(i).get();
diff --git a/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.hpp b/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.hpp
index 34c3a0c5bdc9c1d043f77ffa8a96841d82d0acf1..a029e5f1c371a1ef7ba49b1c97321d6cc73e4b3f 100644
--- a/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.hpp
+++ b/tapeserver/castor/tape/tapeserver/RAO/EnterpriseRAOAlgorithm.hpp
@@ -55,6 +55,8 @@ private:
   castor::tape::tapeserver::drive::DriveInterface * m_drive;
   //Maximum number of files supported by the drive to perform the RAO
   uint64_t m_maxFilesSupported;
+  
+  const uint32_t c_blockSize = 262144;
 };
 
 }}}}
diff --git a/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.cpp b/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.cpp
index 0e5809aa386febba511730846757f2531efcc663..9276c70cb551f02ae0b879de6f050890c6e97edb 100644
--- a/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.cpp
+++ b/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.cpp
@@ -33,7 +33,9 @@ FilePosition InterpolationFilePositionEstimator::getFilePosition(const cta::Retr
   uint64_t startBlock = tapeFile.blockId;
   Position startPosition = getPhysicalPosition(startBlock);
   ret.setStartPosition(startPosition);
-  
+  uint64_t endBlock = determineEndBlock(tapeFile);
+  Position endPosition = getPhysicalPosition(endBlock);
+  ret.setEndPosition(endPosition);
   return ret;
 }
 
@@ -86,5 +88,8 @@ uint64_t InterpolationFilePositionEstimator::determineLPos(const uint64_t blockI
   return fileLpos;
 }
 
+uint64_t InterpolationFilePositionEstimator::determineEndBlock(const cta::common::dataStructures::TapeFile& file) const{
+  return file.blockId + (file.fileSize / c_blockSize) + 1; 
+}
 
 }}}}
\ No newline at end of file
diff --git a/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.hpp b/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.hpp
index 54276cfb9b8cb57f53b2b336aaffb1002af2e67f..32e086d43caa60d161bcba86017b6f1cabefefc1 100644
--- a/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.hpp
+++ b/tapeserver/castor/tape/tapeserver/RAO/InterpolationFilePositionEstimator.hpp
@@ -30,10 +30,13 @@ public:
   InterpolationFilePositionEstimator(const std::vector<drive::endOfWrapPosition> & endOfWrapPositions, const cta::catalogue::MediaType & mediaType);
   FilePosition getFilePosition(const cta::RetrieveJob& job) const override;
   virtual ~InterpolationFilePositionEstimator();
+  
+  static const uint64_t c_blockSize = 256000;
 private:
   Position getPhysicalPosition(const uint64_t blockId) const;
   uint64_t determineWrapNb(const uint64_t blockId) const;
   uint64_t determineLPos(const uint64_t blockId, const uint64_t wrapNumber) const;
+  uint64_t determineEndBlock(const cta::common::dataStructures::TapeFile & file) const;
   std::vector<drive::endOfWrapPosition> m_endOfWrapPositions;
   cta::catalogue::MediaType m_mediaType;
 };
diff --git a/tapeserver/castor/tape/tapeserver/RAO/RAOTest.cpp b/tapeserver/castor/tape/tapeserver/RAO/RAOTest.cpp
index 5307fc116369f32dff52118acf27833d4e97245a..9a2fa11fef2fa67f759091c2faed1759e9cf5782 100644
--- a/tapeserver/castor/tape/tapeserver/RAO/RAOTest.cpp
+++ b/tapeserver/castor/tape/tapeserver/RAO/RAOTest.cpp
@@ -56,7 +56,7 @@ namespace unitTests {
       tapeFile.fSeq = fseq;
       tapeFile.fileSize = fileSize;
       archiveFile.tapeFiles.push_back(tapeFile);
-       cta::common::dataStructures::RetrieveRequest retrieveRequest;
+      cta::common::dataStructures::RetrieveRequest retrieveRequest;
       ret.reset(new cta::RetrieveJob(nullptr,retrieveRequest,archiveFile,1,cta::PositioningMethod::ByBlock));
       return ret;
     }
@@ -92,21 +92,29 @@ namespace unitTests {
     
     rao::InterpolationFilePositionEstimator estimator(eowPositions,mediaType);
     {
-      cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(0,1,1,10);
-      rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
+      std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(0,1,1,10);
+      rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
       //The LPOS start position of the file should be equal to the minLPos of the LTO7 media type
       rao::Position startPositionFile = positionFile.getStartPosition();
       ASSERT_EQ(0,startPositionFile.getWrap());
       ASSERT_EQ(mediaType.minLPos.value(), startPositionFile.getLPos());
+      
+      rao::Position endPositionFile = positionFile.getEndPosition();
+      ASSERT_EQ(0,endPositionFile.getWrap());
+      
+      /*TODO : TO BE CONTINUED
+       * auto jobTapeFile = retrieveJob->selectedTapeFile();
+      uint64_t endPositionBlockId = mediaType.minLPos.value() + (jobTapeFile.blockId / rao::InterpolationFilePositionEstimator::c_blockSize) + 1;
+      ASSERT_EQ(mediaType.minLPos.value() + endPositionBlockId,endPositionFile.getLPos());*/
     }
     
     {
-      cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(11,1,2,25);
-      rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
+      std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(2,1,2,25);
+      rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
       rao::Position startPositionFile = positionFile.getStartPosition();
       ASSERT_EQ(0,startPositionFile.getWrap());
       double b_max = (double) eowPositions.at(0).blockId;
-      uint64_t expectedLPos = mediaType.minLPos.value() + retrieveJob.selectedTapeFile().blockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
+      uint64_t expectedLPos = mediaType.minLPos.value() + retrieveJob->selectedTapeFile().blockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
       ASSERT_EQ(expectedLPos,positionFile.getStartPosition().getLPos());
     }
   }
@@ -119,10 +127,10 @@ namespace unitTests {
     
     {
       //Now create a retrieve job that has a blockId greater than the first wrap end of wrap position
-      cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(210000,1,1,10);
-      rao::FilePosition positionFile = estimator.getFilePosition(retrieveJob);
+     std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(210000,1,1,10);
+      rao::FilePosition positionFile = estimator.getFilePosition(*retrieveJob);
       double b_max = (double) eowPositions.at(1).blockId - (double) eowPositions.at(0).blockId; 
-      uint64_t fileBlockId = retrieveJob.selectedTapeFile().blockId - eowPositions.at(0).blockId;
+      uint64_t fileBlockId = retrieveJob->selectedTapeFile().blockId - eowPositions.at(0).blockId;
       uint64_t expectedLPos = mediaType.maxLPos.value() - fileBlockId * (mediaType.maxLPos.value() - mediaType.minLPos.value()) / b_max;
       ASSERT_EQ(1,positionFile.getStartPosition().getWrap());
       ASSERT_EQ(expectedLPos,positionFile.getStartPosition().getLPos());
@@ -136,8 +144,8 @@ namespace unitTests {
     rao::InterpolationFilePositionEstimator estimator(eowPositions,mediaType);
     
     {
-      cta::RetrieveJob & retrieveJob = *RAOTestEnvironment::createRetrieveJobForRAOTests(100000000,1,3,30);
-      ASSERT_THROW(estimator.getFilePosition(retrieveJob),cta::exception::Exception);
+      std::unique_ptr<cta::RetrieveJob> retrieveJob = RAOTestEnvironment::createRetrieveJobForRAOTests(100000000,1,3,30);
+      ASSERT_THROW(estimator.getFilePosition(*retrieveJob),cta::exception::Exception);
     }
   }
   
@@ -147,7 +155,6 @@ namespace unitTests {
     rao::RAOHelpers::improveEndOfLastWrapPositionIfPossible(eowPositions);
     drive::endOfWrapPosition eowpAfterImprovement = eowPositions.at(eowPositions.size()-1);
     ASSERT_LT(eowpBeforeImprovement.blockId,eowpAfterImprovement.blockId);
-    
   }
   
 }