glm::ivec3 reference = s.pos.chunk;
        glm::mat4 M = s.Transform(reference);
 
+       ExactLocation::Coarse begin(reference - 1);
+       ExactLocation::Coarse end(reference + 2);
+
        bool any = false;
-       for (Chunk &cur_chunk : chunks) {
-               if (manhattan_radius(cur_chunk.Position() - reference) > 1) {
-                       // chunk is not one of the 3x3x3 surrounding the entity
-                       // since there's no entity which can extent over 16 blocks, they can be skipped
-                       continue;
-               }
-               if (cur_chunk.Intersection(e, M, cur_chunk.Transform(reference), col)) {
-                       any = true;
+       for (ExactLocation::Coarse pos(begin); pos.z < end.y; ++pos.z) {
+               for (pos.y = begin.y; pos.y < end.y; ++pos.y) {
+                       for (pos.x = begin.x; pos.x < end.x; ++pos.x) {
+                               Chunk *chunk = chunks.Get(pos);
+                               if (chunk && chunk->Intersection(e, M, chunk->Transform(reference), col)) {
+                                       any = true;
+                               }
+                       }
                }
        }
        return any;