diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 6aa8a5429d21c4dccd5737aa3a726af266da0aa6..2e25fda8d4e00cb5ddd7ab7ac4d041f3ea104eac 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -3726,51 +3726,19 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
   }
 
   // raster scan slices
+  uint32_t sliceAddr = 0;
   if(pps->getRectSliceFlag() == 0)
   {
-    uint32_t sliceAddr, numTilesInSlice;
-
     // slice address is the raster scan tile index of first tile in slice
     if( pps->getNumTiles() > 1 )
     {
       int bitsSliceAddress = ceilLog2(pps->getNumTiles());
       READ_CODE(bitsSliceAddress, uiCode, "slice_address");  sliceAddr = uiCode;
-      if (((int)pps->getNumTiles() - (int)sliceAddr) > 1)
-      {
-        READ_UVLC(uiCode, "num_tiles_in_slice_minus1");        numTilesInSlice = uiCode + 1;
-      }
-      else
-      {
-        numTilesInSlice = 1;
-      }
-      if (!pps->getRectSliceFlag() && sps->getProfileTierLevel()->getConstraintInfo()->getOneSlicePerPicConstraintFlag())
-      {
-        CHECK(pps->getNumTiles() != uiCode + 1, "When rect_slice_flag is equal to 0 and one_slice_per_pic_constraint_flag equal to 1, the value of num_tiles_in_slice_minus1 present in each slice header shall be equal to NumTilesInPic - 1");
-      }
     }
-    else {
-      sliceAddr = 0;
-      numTilesInSlice = 1;
-    }
-    CHECK(sliceAddr >= pps->getNumTiles(), "Invalid slice address");
-    pcSlice->initSliceMap();
-    pcSlice->setSliceID(sliceAddr);
-
-    for( uint32_t tileIdx = sliceAddr; tileIdx < sliceAddr + numTilesInSlice; tileIdx++ )
-    {
-      uint32_t tileX = tileIdx % pps->getNumTileColumns();
-      uint32_t tileY = tileIdx / pps->getNumTileColumns();
-      CHECK(tileY >= pps->getNumTileRows(), "Number of tiles in slice exceeds the remaining number of tiles in picture");
-
-      pcSlice->addCtusToSlice(pps->getTileColumnBd(tileX), pps->getTileColumnBd(tileX + 1),
-                              pps->getTileRowBd(tileY), pps->getTileRowBd(tileY + 1), pps->getPicWidthInCtu());
-   }
   }
   // rectangular slices
   else
   {
-    uint32_t sliceAddr;
-
     // slice address is the index of the slice within the current sub-picture
     uint32_t currSubPicIdx = pps->getSubPicIdxFromSubPicId( pcSlice->getSliceSubPicId() );
     SubPic currSubPic = pps->getSubPic(currSubPicIdx);
@@ -3780,10 +3748,6 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
       READ_CODE(bitsSliceAddress, uiCode, "slice_address");  sliceAddr = uiCode;
       CHECK(sliceAddr >= currSubPic.getNumSlicesInSubPic(), "Invalid slice address");
     }
-    else
-    {
-      sliceAddr = 0;
-    }
     uint32_t picLevelSliceIdx = sliceAddr;
     for(int subpic = 0; subpic < currSubPicIdx; subpic++)
     {
@@ -3803,6 +3767,35 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
     }
   }
 
+  if(pps->getRectSliceFlag() == 0)
+  {
+    uint32_t numTilesInSlice = 1;
+    if( pps->getNumTiles() > 1 )
+    {
+      if (((int)pps->getNumTiles() - (int)sliceAddr) > 1)
+      {
+        READ_UVLC(uiCode, "num_tiles_in_slice_minus1");        numTilesInSlice = uiCode + 1;
+      }
+      if (!pps->getRectSliceFlag() && sps->getProfileTierLevel()->getConstraintInfo()->getOneSlicePerPicConstraintFlag())
+      {
+        CHECK(pps->getNumTiles() != uiCode + 1, "When rect_slice_flag is equal to 0 and one_slice_per_pic_constraint_flag equal to 1, the value of num_tiles_in_slice_minus1 present in each slice header shall be equal to NumTilesInPic - 1");
+      }
+    }
+    CHECK(sliceAddr >= pps->getNumTiles(), "Invalid slice address");
+    pcSlice->initSliceMap();
+    pcSlice->setSliceID(sliceAddr);
+
+    for( uint32_t tileIdx = sliceAddr; tileIdx < sliceAddr + numTilesInSlice; tileIdx++ )
+    {
+      uint32_t tileX = tileIdx % pps->getNumTileColumns();
+      uint32_t tileY = tileIdx / pps->getNumTileColumns();
+      CHECK(tileY >= pps->getNumTileRows(), "Number of tiles in slice exceeds the remaining number of tiles in picture");
+
+      pcSlice->addCtusToSlice(pps->getTileColumnBd(tileX), pps->getTileColumnBd(tileX + 1),
+                              pps->getTileRowBd(tileY), pps->getTileRowBd(tileY + 1), pps->getPicWidthInCtu());
+   }
+  }
+
   if (picHeader->getPicInterSliceAllowedFlag())
   {
     READ_UVLC (    uiCode, "slice_type" );            pcSlice->setSliceType((SliceType)uiCode);