diff --git a/source/Lib/CommonLib/ProfileLevelTier.cpp b/source/Lib/CommonLib/ProfileLevelTier.cpp
index d224cbe79eaa65ef364c1dd984122ce8a7a247f6..26655578ad64ea1023375a8be58eaa8cbabe678f 100644
--- a/source/Lib/CommonLib/ProfileLevelTier.cpp
+++ b/source/Lib/CommonLib/ProfileLevelTier.cpp
@@ -142,6 +142,8 @@ ProfileLevelTierFeatures::extractPTLInformation(const SPS &sps)
 {
   const ProfileTierLevel &spsPtl =*(sps.getProfileTierLevel());
 
+  m_pProfile = nullptr;
+  m_pLevelTier = nullptr;
   m_tier = spsPtl.getTierFlag();
 
   // Identify the profile from the profile Idc, and possibly other constraints.
@@ -161,7 +163,7 @@ ProfileLevelTierFeatures::extractPTLInformation(const SPS &sps)
     }
   }
 
-  if (m_pProfile != 0)
+  if (m_pProfile != nullptr)
   {
     // Now identify the level:
     const LevelTierFeatures *pLTF = m_pProfile->pLevelTiersListInfo;
diff --git a/source/Lib/CommonLib/ProfileLevelTier.h b/source/Lib/CommonLib/ProfileLevelTier.h
index a7ca27730c9eb82bb2aaf283c7a908c884186940..907a9f3d1be6885a8cec915ef88076acfb4effdd 100644
--- a/source/Lib/CommonLib/ProfileLevelTier.h
+++ b/source/Lib/CommonLib/ProfileLevelTier.h
@@ -96,7 +96,7 @@ class ProfileLevelTierFeatures
     const LevelTierFeatures *m_pLevelTier;
     Level::Tier              m_tier;
   public:
-    ProfileLevelTierFeatures() : m_pProfile(0), m_pLevelTier(0), m_tier(Level::MAIN) { }
+    ProfileLevelTierFeatures() : m_pProfile(nullptr), m_pLevelTier(nullptr), m_tier(Level::MAIN) {}
 
     void extractPTLInformation(const SPS &sps);
 
diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp
index f6ad8a5df2ef5dc4b4de7e53840117ee6c520ceb..dd7ab375548a5d48f6de093f97e3de1f091e0ecd 100644
--- a/source/Lib/DecoderLib/DecLib.cpp
+++ b/source/Lib/DecoderLib/DecLib.cpp
@@ -1936,16 +1936,34 @@ void DecLib::xCheckParameterSetConstraints(const int layerId)
   }
 
 #if JVET_S0156_LEVEL_DEFINITION
-  ProfileLevelTierFeatures ptlFeature;
-  ptlFeature.extractPTLInformation(*sps);
-  CHECK(pps->getNumTileColumns() > ptlFeature.getLevelTierFeatures()->maxTileCols, "Num tile columns signaled in PPS exceed level limits");
-  CHECK(pps->getNumTiles() > ptlFeature.getLevelTierFeatures()->maxTilesPerAu, "Num tiles signaled in PPS exceed level limits");
+  ProfileLevelTierFeatures ptlFeatures;
+  ptlFeatures.extractPTLInformation(*sps);
 #if JVET_S_PROFILES
-  CHECK(sps->getBitDepth(CHANNEL_TYPE_LUMA) > ptlFeature.getProfileFeatures()->maxBitDepth,
-        "Bit depth exceed profile limit");
-  CHECK(sps->getChromaFormatIdc() > ptlFeature.getProfileFeatures()->maxChromaFormat,
-        "Chroma format exceed profile limit");
+  const ProfileFeatures *profileFeatures = ptlFeatures.getProfileFeatures();
+  if (profileFeatures != nullptr)
+  {
+    CHECK(sps->getBitDepth(CHANNEL_TYPE_LUMA) > profileFeatures->maxBitDepth, "Bit depth exceeds profile limit");
+    CHECK(sps->getChromaFormatIdc() > profileFeatures->maxChromaFormat, "Chroma format exceeds profile limit");
+  }
+  else
+  {
+    CHECK(sps->getProfileTierLevel()->getProfileIdc() != Profile::NONE, "Unknown profile");
+    msg(WARNING, "Warning: Profile set to none or unknown value\n");
+  }
 #endif
+  const LevelTierFeatures *levelTierFeatures = ptlFeatures.getLevelTierFeatures();
+  if (levelTierFeatures != nullptr)
+  {
+    CHECK(pps->getNumTileColumns() > levelTierFeatures->maxTileCols,
+          "Number of tile columns signaled in PPS exceeds level limit");
+    CHECK(pps->getNumTiles() > levelTierFeatures->maxTilesPerAu, "Number of tiles signaled in PPS exceeds level limit");
+  }
+  else if (profileFeatures != nullptr)
+  {
+    CHECK(sps->getProfileTierLevel()->getLevelIdc() == Level::LEVEL15_5, "Cannot use level 15.5 with given profile");
+    CHECK(sps->getProfileTierLevel()->getLevelIdc() != Level::NONE, "Unknown level");
+    msg(WARNING, "Warning: Level set to none, invalid or unknown value\n");
+  }
 #endif
 }