diff --git a/src/core_api.rs b/src/core_api.rs
index a529a85..6e389da 100644
--- a/src/core_api.rs
+++ b/src/core_api.rs
@@ -36,30 +36,18 @@ pub enum MpvCommand {
         option: PlaylistAddOptions,
     },
     PlaylistClear,
-    PlaylistMove {
-        from: usize,
-        to: usize,
-    },
-    Observe {
-        id: usize,
-        property: String,
-    },
+    PlaylistMove { from: usize, to: usize },
+    Observe { id: u64, property: String },
     PlaylistNext,
     PlaylistPrev,
     PlaylistRemove(usize),
     PlaylistShuffle,
     Quit,
     ScriptMessage(Vec<String>),
-    ScriptMessageTo {
-        target: String,
-        args: Vec<String>,
-    },
-    Seek {
-        seconds: f64,
-        option: SeekOptions,
-    },
+    ScriptMessageTo { target: String, args: Vec<String> },
+    Seek { seconds: f64, option: SeekOptions },
     Stop,
-    Unobserve(usize),
+    Unobserve(u64),
 }
 
 /// Helper trait to keep track of the string literals that mpv expects.
diff --git a/src/event_parser.rs b/src/event_parser.rs
index 62feacc..84f2b89 100644
--- a/src/event_parser.rs
+++ b/src/event_parser.rs
@@ -109,7 +109,7 @@ pub enum Event {
     VideoReconfig,
     AudioReconfig,
     PropertyChange {
-        id: usize,
+        id: u64,
         name: String,
         data: Option<MpvDataType>,
     },
@@ -296,7 +296,7 @@ fn parse_client_message(event: &Map<String, Value>) -> Result<Event, MpvError> {
 }
 
 fn parse_property_change(event: &Map<String, Value>) -> Result<Event, MpvError> {
-    let id = get_key_as!(as_u64, "id", event) as usize;
+    let id = get_key_as!(as_u64, "id", event);
     let property_name = get_key_as!(as_str, "name", event);
     let data = event.get("data").map(json_to_value).transpose()?;
 
diff --git a/src/highlevel_api_extension.rs b/src/highlevel_api_extension.rs
index badef0c..29d564b 100644
--- a/src/highlevel_api_extension.rs
+++ b/src/highlevel_api_extension.rs
@@ -88,11 +88,11 @@ pub trait MpvExt {
 
     /// Notify mpv to send events whenever a property changes.
     /// See [`Mpv::get_event_stream`] and [`Property`](crate::Property) for more information.
-    async fn observe_property(&self, id: usize, property: &str) -> Result<(), MpvError>;
+    async fn observe_property(&self, id: u64, property: &str) -> Result<(), MpvError>;
 
     /// Stop observing a property.
     /// See [`Mpv::get_event_stream`] and [`Property`](crate::Property) for more information.
-    async fn unobserve_property(&self, id: usize) -> Result<(), MpvError>;
+    async fn unobserve_property(&self, id: u64) -> Result<(), MpvError>;
 
     /// Skip to the next entry in the playlist.
     async fn next(&self) -> Result<(), MpvError>;
@@ -259,7 +259,7 @@ impl MpvExt for Mpv {
         self.run_command(MpvCommand::PlaylistPrev).await
     }
 
-    async fn observe_property(&self, id: usize, property: &str) -> Result<(), MpvError> {
+    async fn observe_property(&self, id: u64, property: &str) -> Result<(), MpvError> {
         self.run_command(MpvCommand::Observe {
             id,
             property: property.to_string(),
@@ -267,7 +267,7 @@ impl MpvExt for Mpv {
         .await
     }
 
-    async fn unobserve_property(&self, id: usize) -> Result<(), MpvError> {
+    async fn unobserve_property(&self, id: u64) -> Result<(), MpvError> {
         self.run_command(MpvCommand::Unobserve(id)).await
     }
 
diff --git a/src/ipc.rs b/src/ipc.rs
index 83087f9..60d5b4c 100644
--- a/src/ipc.rs
+++ b/src/ipc.rs
@@ -24,8 +24,8 @@ pub(crate) enum MpvIpcCommand {
     Command(Vec<String>),
     GetProperty(String),
     SetProperty(String, Value),
-    ObserveProperty(usize, String),
-    UnobserveProperty(usize),
+    ObserveProperty(u64, String),
+    UnobserveProperty(u64),
     Exit,
 }
 
@@ -114,17 +114,14 @@ impl MpvIpc {
 
     pub(crate) async fn observe_property(
         &mut self,
-        id: usize,
+        id: u64,
         property: &str,
     ) -> Result<Option<Value>, MpvError> {
         self.send_command(&[json!("observe_property"), json!(id), json!(property)])
             .await
     }
 
-    pub(crate) async fn unobserve_property(
-        &mut self,
-        id: usize,
-    ) -> Result<Option<Value>, MpvError> {
+    pub(crate) async fn unobserve_property(&mut self, id: u64) -> Result<Option<Value>, MpvError> {
         self.send_command(&[json!("unobserve_property"), json!(id)])
             .await
     }
diff --git a/tests/integration_tests/event_property_parser.rs b/tests/integration_tests/event_property_parser.rs
index 13c013d..9eb296c 100644
--- a/tests/integration_tests/event_property_parser.rs
+++ b/tests/integration_tests/event_property_parser.rs
@@ -8,7 +8,7 @@ use test_log::test;
 
 use super::*;
 
-const MPV_CHANNEL_ID: usize = 1337;
+const MPV_CHANNEL_ID: u64 = 1337;
 
 #[derive(Error, Debug)]
 enum PropertyCheckingThreadError {