diff --git a/include/window.h b/include/window.h
index 7818c05..63ebb16 100644
--- a/include/window.h
+++ b/include/window.h
@@ -37,6 +37,8 @@ struct rect {
 
 struct window {
   u32 id;
+  u64 x;
+  u64 y;
   u64 width;
   u64 height;
   const char *title;
@@ -52,7 +54,8 @@ struct colour {
   };
 };
 
-bool init_window(window_t *wnd, const char *title, u64 width, u64 height);
+bool init_window(window_t *wnd, const char *title, u32 width, u32 height, i32 x,
+                 i32 y);
 void cleanup_window(window_t *wnd);
 void clear_window(const window_t *wnd, colour_t colour);
 void swap_buffers(const window_t *wnd);
diff --git a/src/window.c b/src/window.c
index f265dd3..5602fb0 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5,10 +5,13 @@
 #include <SDL2/SDL_video.h>
 #include <stdbool.h>
 
-bool init_window(window_t *wnd, const char *title, u64 width, u64 height) {
+bool init_window(window_t *wnd, const char *title, u32 width, u32 height, i32 x,
+                 i32 y) {
+  i32 pos_x = x >= 0 ? x : SDL_WINDOWPOS_CENTERED;
+  i32 pos_y = y >= 0 ? y : SDL_WINDOWPOS_CENTERED;
+
   wnd->window =
-      SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
-                       width, height, SDL_WINDOW_SHOWN);
+      SDL_CreateWindow(title, pos_x, pos_y, width, height, SDL_WINDOW_SHOWN);
   if (!(wnd->window)) {
     return false;
   }
@@ -22,8 +25,20 @@ bool init_window(window_t *wnd, const char *title, u64 width, u64 height) {
 
   wnd->id = SDL_GetWindowID(wnd->window);
   wnd->title = title;
-  wnd->width = width;
-  wnd->height = height;
+
+  i32 x_tmp = -1;
+  i32 y_tmp = -1;
+  SDL_GetWindowPosition(wnd->window, &x_tmp, &y_tmp);
+
+  wnd->x = x_tmp;
+  wnd->y = y_tmp;
+
+  i32 w_tmp = -1;
+  i32 h_tmp = -1;
+  SDL_GetWindowSize(wnd->window, &w_tmp, &h_tmp);
+
+  wnd->width = w_tmp;
+  wnd->height = h_tmp;
 
   return true;
 }