diff --git a/src/tilemap.c b/src/tilemap.c
index f14b526..03b29d8 100644
--- a/src/tilemap.c
+++ b/src/tilemap.c
@@ -12,6 +12,8 @@
 struct TileInstance {
     Transform transform;
     TileDef* tiledef;
+
+    Tilemap* parent_map;
 };
 
 struct Tilemap {
@@ -22,6 +24,8 @@ struct Tilemap {
     TileInstance* map;
     size_t map_num;
     IVector map_size;
+
+    RigidBody* rigidbody;
 };
 
 Tilemap* tilemap_from_autolayer(cJSON* json) {
@@ -69,13 +73,7 @@ Tilemap* tilemap_from_autolayer(cJSON* json) {
         writer->transform = IdentityTransform;
         cJSON* px = cJSON_GetObjectItem(tile, "px");
         writer->transform.position = vmulff(json_array_to_vector(px), px_to_ws);
-        // sprite_get_spritesheet(tiledef_get_sprite(writer->tiledef));
-
-        // LOG_INFO("Loading tile");
-        // LOG_INFO("tid = %d", t->valueint);
-        // LOG_INFO("transform =");
-        // LOG_INFO(".position = %f %f", writer->transform.position.x, writer->transform.position.y);
-        // LOG_INFO(".scale = %f %f", writer->transform.scale.x, writer->transform.scale.y);
+        writer->parent_map = self;
         ++writer;
     }
 
@@ -90,12 +88,42 @@ void tilemap_draw(Tilemap* self, Transform transform) {
         tile = self->map + i;
         tiletrans = transform_apply(self->transform, tile->transform);
         Sprite* sprite = tiledef_get_sprite(tile->tiledef);
-        // LOG_INFO("sprite: %p", sprite);
-        // LOG_INFO("trans: %f %f ; %f %f ; %f",
-        //     tiletrans.position.x, tiletrans.position.y, tiletrans.scale.x, tiletrans.scale.y, tiletrans.rotation);
-        // LOG_INFO("self->transform: %f %f ; %f %f ; %f",
-        //     self->transform.position.x, self->transform.position.y, self->transform.scale.x, self->transform.scale.y, self->transform.rotation);
+
         if(sprite != NULL)
             sprite_draw(sprite, tiletrans);
     }
 }
+
+size_t tilemap_get_tile_count(Tilemap* self) {
+    return self->map_num;
+}
+
+TileInstance* tilemap_get_tile(Tilemap* self, size_t at) {
+    return &self->map[at];
+}
+
+RigidBody* tile_instance_get_rigidbody(TileInstance* self) {
+    return self->parent_map->rigidbody;
+}
+
+Transform* tile_instance_get_transform(TileInstance* self) {
+    return &self->transform;
+}
+
+Shape* tile_instance_get_shape(TileInstance* self) {
+    return tiledef_get_shape(self->tiledef);
+}
+
+void tile_instance_on_collision(TileInstance* self, Collision collision) {}
+
+Vector* tile_instance_get_position(TileInstance* self) {
+    return &self->transform.position;
+}
+
+Vector* tile_instance_get_scale(TileInstance* self) {
+    return &self->transform.scale;
+}
+
+float* tile_instance_get_rotation(TileInstance* self) {
+    return &self->transform.rotation;
+}
diff --git a/src/tilemap.h b/src/tilemap.h
index 1956f33..6cb8fa1 100644
--- a/src/tilemap.h
+++ b/src/tilemap.h
@@ -1,9 +1,12 @@
 #ifndef _fencer_tilemap_h
 #define _fencer_tilemap_h
 
+#include "physics_entity.h"
 #include "spritesheet.h"
 #include "tileset.h"
+#include "rigidbody.h"
 #include "level.h"
+#include "collision.h"
 
 typedef struct TileInstance TileInstance;
 typedef struct Tilemap Tilemap;
@@ -14,6 +17,30 @@ extern void tilemap_destroy(Tilemap* self);
 
 extern void tilemap_set_tileset(Tilemap* self, Tileset* set);
 
-extern void tilemap_draw(Tilemap* tilemap, Transform transform);
+extern void tilemap_draw(Tilemap* self, Transform transform);
+
+extern size_t tilemap_get_tile_count(Tilemap* self);
+extern TileInstance* tilemap_get_tile(Tilemap* self, size_t at);
+
+extern RigidBody* tile_instance_get_rigidbody(TileInstance* self);
+extern Transform* tile_instance_get_transform(TileInstance* self);
+extern Shape* tile_instance_get_shape(TileInstance* self);
+extern void tile_instance_on_collision(TileInstance* self, Collision collision);
+
+extern Vector* tile_instance_get_position(TileInstance* self);
+extern Vector* tile_instance_get_scale(TileInstance* self);
+extern float* tile_instance_get_rotation(TileInstance* self);
+
+impl_Transformable_for(TileInstance,
+    tile_instance_get_transform,
+    tile_instance_get_position,
+    tile_instance_get_scale,
+    tile_instance_get_rotation
+)
+impl_PhysicsEntity_for(TileInstance,
+    tile_instance_get_rigidbody,
+    tile_instance_get_shape,
+    tile_instance_on_collision
+)
 
 #endif // !_fencer_tilemap_h