diff --git a/src/layers/group.rs b/src/layers/group.rs
index b0f9edededa72dea7a325dfbc14078c66580b284..f13de1dc21666ef0eba064db987b3ed708f2a233 100644
--- a/src/layers/group.rs
+++ b/src/layers/group.rs
@@ -90,10 +90,34 @@ map_wrapper!(
 
 impl<'map> GroupLayer<'map> {
     /// Returns an iterator over the layers present in this group in display order.
-    pub fn layers(&self) -> impl ExactSizeIterator<Item = Layer> {
-        self.layers
+    /// ## Example
+    /// ```
+    /// use tiled::Layer;
+    /// # use tiled::Loader;
+    ///
+    /// # fn main() {
+    /// # let map = Loader::new()
+    /// #     .load_tmx_map("assets/tiled_group_layers.tmx")
+    /// #     .unwrap();
+    /// #
+    /// let nested_layers: Vec<Layer> = map
+    ///     .layers()
+    ///     .filter_map(|layer| match layer.layer_type() {
+    ///         tiled::LayerType::GroupLayer(layer) => Some(layer),
+    ///         _ => None,
+    ///     })
+    ///     .flat_map(|layer| layer.layers())
+    ///     .collect();
+    ///
+    /// dbg!(nested_layers);
+    /// # }
+    /// ```
+    pub fn layers(&self) -> impl ExactSizeIterator<Item = Layer<'map>> + 'map {
+        let map: &'map crate::Map = self.map;
+        self.data
+            .layers
             .iter()
-            .map(move |layer| Layer::new(self.map, layer))
+            .map(move |layer| Layer::new(map, layer))
     }
     /// Gets a specific layer from the group by index.
     pub fn get_layer(&self, index: usize) -> Option<Layer> {
diff --git a/src/layers/object.rs b/src/layers/object.rs
index 55aca6613b9df68c76ef1d4ca5e4fd13753025a0..391d7d48f71cf2e3fc30fc95560c6cf9f51546e9 100644
--- a/src/layers/object.rs
+++ b/src/layers/object.rs
@@ -68,10 +68,36 @@ impl<'map> ObjectLayer<'map> {
 
     /// Returns an iterator over the objects present in this layer, in the order they were declared
     /// in in the TMX file.
+    /// 
+    /// ## Example
+    /// ```
+    /// # use tiled::Loader;
+    /// use tiled::Object;
+    ///
+    /// # fn main() {
+    /// # let map = Loader::new()
+    /// #     .load_tmx_map("assets/tiled_group_layers.tmx")
+    /// #     .unwrap();
+    /// # 
+    /// let spawnpoints: Vec<Object> = map
+    ///     .layers()
+    ///     .filter_map(|layer| match layer.layer_type() {
+    ///         tiled::LayerType::ObjectLayer(layer) => Some(layer),
+    ///         _ => None,
+    ///     })
+    ///     .flat_map(|layer| layer.objects())
+    ///     .filter(|object| object.obj_type == "spawn")
+    ///     .collect();
+    ///
+    /// dbg!(spawnpoints);
+    /// # }
+    /// ```
     #[inline]
-    pub fn objects(&self) -> impl ExactSizeIterator<Item = Object> {
-        self.objects
+    pub fn objects(&self) -> impl ExactSizeIterator<Item = Object<'map>> + 'map {
+        let map: &'map crate::Map = self.map;
+        self.data
+            .objects
             .iter()
-            .map(move |object| Object::new(self.map, object))
+            .map(move |object| Object::new(map, object))
     }
 }
diff --git a/src/map.rs b/src/map.rs
index a8903ee86b9a8ebbe73285eebb275769eb679d81..2dba8fc1139101666f313ca364f0217c7e6ec52d 100644
--- a/src/map.rs
+++ b/src/map.rs
@@ -114,6 +114,31 @@ impl Map {
     }
 
     /// Get an iterator over all the layers in the map in ascending order of their layer index.
+    /// 
+    /// ## Example
+    /// ```
+    /// # use tiled::Loader;
+    /// # 
+    /// # fn main() {
+    /// # struct Renderer;
+    /// # impl Renderer {
+    /// #     fn render(&self, _: tiled::TileLayer) {}
+    /// # }
+    /// # let my_renderer = Renderer;
+    /// # let map = Loader::new()
+    /// #     .load_tmx_map("assets/tiled_group_layers.tmx")
+    /// #     .unwrap();
+    /// #
+    /// let tile_layers = map.layers().filter_map(|layer| match layer.layer_type() {
+    ///     tiled::LayerType::TileLayer(layer) => Some(layer),
+    ///     _ => None,
+    /// });
+    ///
+    /// for layer in tile_layers {
+    ///     my_renderer.render(layer);
+    /// }
+    /// # }
+    /// ```
     #[inline]
     pub fn layers(&self) -> impl ExactSizeIterator<Item = Layer> {
         self.layers.iter().map(move |layer| Layer::new(self, layer))