diff --git a/src/pe/amr/InfoCollection.cpp b/src/pe/amr/InfoCollection.cpp
index f568a3cca62eada47d72be977d834ca8d98532d6..4a725d32da757211f4716ee2cf7ab5690942d628 100644
--- a/src/pe/amr/InfoCollection.cpp
+++ b/src/pe/amr/InfoCollection.cpp
@@ -41,11 +41,34 @@ void createWithNeighborhood(const BlockForest& bf, const BlockDataID storageID,
       BodyStorage const & localStorage  = (*storage)[StorageType::LOCAL];
       BodyStorage const & shadowStorage = (*storage)[StorageType::SHADOW];
       ic.insert( InfoCollection::value_type(block->getId(), BlockInfo(localStorage.size(), shadowStorage.size())) );
-
       for( uint_t nb = uint_t(0); nb < block->getNeighborhoodSize(); ++nb )
       {
          bs.sendBuffer( block->getNeighborProcess(nb) ) << InfoCollection::value_type(block->getId(), BlockInfo(localStorage.size(), shadowStorage.size()));
       }
+
+      for (uint_t branchID = 0; branchID < 8; ++branchID)
+      {
+         const auto childID   = BlockID(block->getId(), branchID);
+         const auto childAABB = bf.getAABBFromBlockId(childID);
+         uint_t local  = 0;
+         for (auto bodyIt = localStorage.begin(); bodyIt != localStorage.end(); ++bodyIt)
+         {
+            if (childAABB.contains(bodyIt->getPosition()))
+               ++local;
+         }
+         uint_t shadow  = 0;
+         for (auto bodyIt = shadowStorage.begin(); bodyIt != shadowStorage.end(); ++bodyIt)
+         {
+            if (childAABB.contains(bodyIt->getPosition()))
+               ++shadow;
+         }
+         ic.insert( InfoCollection::value_type(childID, BlockInfo(local, shadow)) );
+
+         for( uint_t nb = uint_t(0); nb < block->getNeighborhoodSize(); ++nb )
+         {
+            bs.sendBuffer( block->getNeighborProcess(nb) ) << InfoCollection::value_type(childID, BlockInfo(local, shadow));
+         }
+      }
    }
 
    // size of buffer is unknown and changes with each send
diff --git a/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h b/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
index 4f5b897e80e0053677bfe42e880165f71635880c..3a6b5d9b2ad34969bbdcfcd0e021ff42bcd33f60 100644
--- a/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
+++ b/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
@@ -50,9 +50,9 @@ public:
 
          if (block->sourceBlockIsLarger())
          {
-            auto infoIt = ic_->find( block->getId().getFatherId() );
+            auto infoIt = ic_->find( block->getId()/*.getFatherId()*/ );
             WALBERLA_ASSERT_UNEQUAL( infoIt, ic_->end() );
-            it->second = PhantomBlockWeight( double_c(infoIt->second.numberOfLocalBodies) / double_c(8) + baseWeight );
+            it->second = PhantomBlockWeight( double_c(infoIt->second.numberOfLocalBodies) + baseWeight );
             continue;
          }