diff --git a/DDCore/include/DD4hep/Volumes.h b/DDCore/include/DD4hep/Volumes.h
index ae70060aa2bafeed7e5e81bc84e53a6a31c6ce31..11d043750fafefb9a676d3a3fe4227c13ab0fea2 100644
--- a/DDCore/include/DD4hep/Volumes.h
+++ b/DDCore/include/DD4hep/Volumes.h
@@ -126,7 +126,8 @@ namespace DD4hep {
         m_element = v.m_element;
         return *this;
       }
-
+      /// Check if placement is properly instrumented
+      Object* data() const;
       /// Add identifier
       PlacedVolume& addPhysVolID(const std::string& name, int value);
       /// Volume material
diff --git a/DDCore/src/VolumeManager.cpp b/DDCore/src/VolumeManager.cpp
index e03801478e1aafc41bce83b4fdf65102c09e9523..7e2fae6db35a91e67f715f44ac80195da9adcb54 100644
--- a/DDCore/src/VolumeManager.cpp
+++ b/DDCore/src/VolumeManager.cpp
@@ -98,7 +98,8 @@ namespace {
         }
         for (Int_t idau = 0, ndau = node->GetNdaughters(); idau < ndau; ++idau) {
           TGeoNode* daughter = node->GetDaughter(idau);
-          if (dynamic_cast<const PlacedVolume::Object*>(daughter)) {
+	  PlacedVolume placement(daughter);
+          if ( placement.data() ) {
             size_t cnt;
             PlacedVolume pv_dau = Ref_t(daughter);
             DetElement de_dau = findElt(e, daughter);
@@ -114,6 +115,9 @@ namespace {
             }
             count += cnt;
           }
+	  else  {
+	    throw runtime_error("Invalid not instrumented placement:"+string(daughter->GetName())+" [Internal error -- bad detector constructor]");
+	  }
         }
         chain.pop_back();
       }
diff --git a/DDCore/src/Volumes.cpp b/DDCore/src/Volumes.cpp
index 3ab070da8063b559e4c8f7c5832de022a793a143..14cd37c092331112204d5668d454a825712aabb6 100644
--- a/DDCore/src/Volumes.cpp
+++ b/DDCore/src/Volumes.cpp
@@ -353,6 +353,12 @@ static PlacedVolume::Object* _data(const PlacedVolume& v) {
   throw runtime_error("DD4hep: Attempt to access invalid handle of type: PlacedVolume");
 }
 
+/// Check if placement is properly instrumented
+PlacedVolume::Object* PlacedVolume::data() const   {
+  PlacedVolume::Object* o = _userExtension(*this);
+  return o;
+}
+
 /// Add identifier
 PlacedVolume& PlacedVolume::addPhysVolID(const string& name, int value) {
   Object* obj = _data(*this);