diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1aa0d661febbb5dcc578ce7e3354894117344784..a92c0b596ec916a3de2d1d80f27cfa11680b3e0f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added
 
-*
+* Support for Python 3 API - [#36](https://gitlab.stage.hive.pt/joamag/boytacean/-/issues/36)
+* `next_frame()` method for frame by frame navigation
 
 ### Changed
 
diff --git a/examples/python/pocket.py b/examples/python/pocket.py
index 9fdb09df3f725ae89c66e2ba2ea0daccd0bc1ee7..3ec7a284cf0e63972fc132453bb24a5c21a3766a 100644
--- a/examples/python/pocket.py
+++ b/examples/python/pocket.py
@@ -3,5 +3,6 @@ import boytacean
 gb = boytacean.GameBoy()
 gb.load()
 gb.load_rom("../../res/roms/demo/pocket.gb")
-gb.clocks(10000000)
+for _ in range(6000):
+    gb.next_frame()
 gb.save_image("pocket.png")
diff --git a/src/gb.rs b/src/gb.rs
index eba016573fe51f7f6c62eb049a6cdb5349d325e9..e58c612fd96bd65956569c61208576db67d7d1b5 100644
--- a/src/gb.rs
+++ b/src/gb.rs
@@ -487,6 +487,18 @@ impl GameBoy {
         cycles
     }
 
+    pub fn next_frame(&mut self) -> u32 {
+        let mut cycles = 0u32;
+        let current_frame = self.ppu_frame();
+        loop {
+            cycles += self.clock() as u32;
+            if self.ppu_frame() != current_frame {
+                break;
+            }
+        }
+        cycles
+    }
+
     pub fn key_press(&mut self, key: PadKey) {
         self.pad().key_press(key);
     }
diff --git a/src/py.rs b/src/py.rs
index d71cab0ebbbacf1bfa44467496776b20fc6e8549..9222bd627d3f7dad53d884a6dd7e705532562c48 100644
--- a/src/py.rs
+++ b/src/py.rs
@@ -43,6 +43,10 @@ impl GameBoy {
         self.system.clocks(count)
     }
 
+    pub fn next_frame(&mut self) -> u32 {
+        self.system.next_frame()
+    }
+
     pub fn frame_buffer(&mut self, py: Python) -> PyObject {
         let pybytes = PyBytes::new(py, self.system.frame_buffer());
         pybytes.into()
diff --git a/src/python/boytacean/__init__.py b/src/python/boytacean/__init__.py
index 04e22e062ec85d3a498edf08c161223e58dc9f55..eab8e19457ab106b34d9991691182a60a0f4024e 100644
--- a/src/python/boytacean/__init__.py
+++ b/src/python/boytacean/__init__.py
@@ -23,6 +23,9 @@ class GameBoy:
     def clocks(self, count: int) -> int:
         return self._system.clocks(count)
 
+    def next_frame(self) -> int:
+        return self._system.next_frame()
+
     def frame_buffer(self):
         return self._system.frame_buffer()