diff --git a/libvlc-sys/Cargo.toml b/libvlc-sys/Cargo.toml
index 896f131..ae445ea 100644
--- a/libvlc-sys/Cargo.toml
+++ b/libvlc-sys/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2018"
 build = "build.rs"
 
 [lib]
-name = "libvlc_sys"
+name = "vlc_sys"
 crate-type = ["rlib"]
 
 [dependencies]
diff --git a/src/audio.rs b/src/audio.rs
index 697e1c6..c39891c 100644
--- a/src/audio.rs
+++ b/src/audio.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::MediaPlayer;
 use crate::TrackDescription;
 use crate::tools::from_cstr;
diff --git a/src/core.rs b/src/core.rs
index 2cab1b6..433dbd6 100644
--- a/src/core.rs
+++ b/src/core.rs
@@ -7,8 +7,9 @@ use std::borrow::Cow;
 use std::marker::PhantomData;
 use std::ffi::CString;
 use std::i32;
+use std::convert::TryInto;
 use libc::{c_void, c_char, c_int};
-use crate::sys;
+use vlc_sys as sys;
 use crate::tools::{to_cstr, from_cstr, from_cstr_ref};
 use crate::enums::*;
 
@@ -124,7 +125,7 @@ impl Instance {
         let cb: Box<Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static>> = Box::new(Box::new(f));
 
         unsafe{
-            sys::libvlc_log_set(self.ptr, logging_cb, Box::into_raw(cb) as *mut _);
+            sys::libvlc_log_set(self.ptr, Some(logging_cb), Box::into_raw(cb) as *mut _);
         }
     }
 
@@ -142,17 +143,14 @@ impl Drop for Instance {
     }
 }
 
-extern "C" {
-    fn vsnprintf(s: *mut c_char, n: usize, fmt: *const c_char, arg: sys::va_list);
-}
 const BUF_SIZE: usize = 1024; // Write log message to the buffer by vsnprintf.
 unsafe extern "C" fn logging_cb(
-    data: *mut c_void, level: c_int, ctx: *const sys::libvlc_log_t, fmt: *const c_char, args: sys::va_list) {
+    data: *mut c_void, level: c_int, ctx: *const sys::libvlc_log_t, fmt: *const c_char, args: *mut sys::__va_list_tag) {
 
     let f: &Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static> = ::std::mem::transmute(data);
     let mut buf: [c_char; BUF_SIZE] = [0; BUF_SIZE];
 
-    vsnprintf(buf.as_mut_ptr(), BUF_SIZE, fmt, args);
+    sys::vsnprintf(buf.as_mut_ptr(), BUF_SIZE.try_into().unwrap(), fmt, args);
 
     f((level as u32).into(), Log{ptr: ctx}, from_cstr_ref(buf.as_ptr()).unwrap());
 }
@@ -324,7 +322,7 @@ impl<'a> EventManager<'a> {
 
         let result = unsafe{
             sys::libvlc_event_attach(
-                self.ptr, event_type as i32, event_manager_callback,
+                self.ptr, event_type as i32, Some(event_manager_callback),
                 Box::into_raw(callback) as *mut c_void)
         };
 
@@ -349,12 +347,12 @@ unsafe extern "C" fn event_manager_callback(pe: *const sys::libvlc_event_t, data
 
 // Convert c-style libvlc_event_t to Event
 fn conv_event(pe: *const sys::libvlc_event_t) -> Event {
-    let event_type: EventType = (unsafe{ (*pe)._type } as u32).into();
+    let event_type: EventType = (unsafe{ (*pe).type_ } as u32).into();
 
     match event_type {
         EventType::MediaMetaChanged => {
             unsafe{
-                Event::MediaMetaChanged((*pe).u.media_meta_changed.meta_type)
+                Event::MediaMetaChanged((*pe).u.media_meta_changed.meta_type.into())
             }
         },
         EventType::MediaSubItemAdded => {
@@ -375,7 +373,8 @@ fn conv_event(pe: *const sys::libvlc_event_t) -> Event {
         },
         EventType::MediaStateChanged => {
             unsafe{
-                Event::MediaStateChanged((*pe).u.media_state_changed.new_state)
+                let new_state: sys::libvlc_state_t = (*pe).u.media_state_changed.new_state.try_into().unwrap();
+                Event::MediaStateChanged(new_state.into())
             }
         },
         EventType::MediaSubItemTreeAdded => {
diff --git a/src/enums.rs b/src/enums.rs
index 1522532..93675f7 100644
--- a/src/enums.rs
+++ b/src/enums.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use libvlc_sys as sys;
+use vlc_sys as sys;
 
 macro_rules! define_enum {
     ($enum_name:ident, $original_type:ident; $($value:ident = $c_value:ident,)*) => {
diff --git a/src/media.rs b/src/media.rs
index 4c4a44f..1805d8c 100644
--- a/src/media.rs
+++ b/src/media.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::{Instance, EventManager};
 use crate::enums::{State, Meta, TrackType};
 use crate::tools::{to_cstr, from_cstr, path_to_cstr};
@@ -76,7 +76,7 @@ impl Media {
     /// If the media has not yet been parsed this will return None.
     pub fn get_meta(&self, meta: Meta) -> Option<String> {
         unsafe{
-            let p_str = sys::libvlc_media_get_meta(self.ptr, meta);
+            let p_str = sys::libvlc_media_get_meta(self.ptr, meta as u32);
             let s = from_cstr(p_str);
             sys::libvlc_free(p_str as *mut ::libc::c_void);
             s
@@ -87,7 +87,7 @@ impl Media {
     /// (This function will not save the meta, call save_meta in order to save the meta)
     pub fn set_meta(&self, meta: Meta, value: &str) {
         unsafe{
-            sys::libvlc_media_set_meta(self.ptr, meta, to_cstr(value).as_ptr());
+            sys::libvlc_media_set_meta(self.ptr, meta as u32, to_cstr(value).as_ptr());
         }
     }
 
@@ -98,7 +98,7 @@ impl Media {
 
     /// Get current state of media descriptor object.
     pub fn state(&self) -> State {
-        unsafe{ sys::libvlc_media_get_state(self.ptr) }
+        unsafe{ sys::libvlc_media_get_state(self.ptr).into() }
     }
 
     /// Get duration (in ms) of media descriptor object item.
@@ -136,16 +136,17 @@ impl Media {
 
             for i in 0..n {
                 let p = p_track.offset(i as isize);
-                let type_specific_data = match (**p).i_type {
+                let i_type: TrackType = (**p).i_type.into();
+                let type_specific_data = match i_type {
                     TrackType::Audio => {
-                        let audio = (**p).audio();
+                        let audio = (**p).__bindgen_anon_1.audio;
                         MediaTrackUnion::Audio(AudioTrack{
                             channels: (*audio).i_channels,
                             rate:     (*audio).i_rate,
                         })
                     },
                     TrackType::Video => {
-                        let video = (**p).video();
+                        let video = (**p).__bindgen_anon_1.video;
                         MediaTrackUnion::Video(VideoTrack{
                             height:         (*video).i_height,
                             width:          (*video).i_width,
@@ -156,7 +157,7 @@ impl Media {
                         })
                     },
                     TrackType::Text => {
-                        let subtitle = (**p).subtitle();
+                        let subtitle = (**p).__bindgen_anon_1.subtitle;
                         MediaTrackUnion::Subtitle(SubtitleTrack{
                             encoding: from_cstr((*subtitle).psz_encoding)
                         })
@@ -167,7 +168,7 @@ impl Media {
                     codec:              (**p).i_codec,
                     original_fourcc:    (**p).i_original_fourcc,
                     id:                 (**p).i_id,
-                    track_type:         (**p).i_type,
+                    track_type:         (**p).i_type.into(),
                     profile:            (**p).i_profile,
                     level:              (**p).i_level,
                     bitrate:            (**p).i_bitrate,
diff --git a/src/media_library.rs b/src/media_library.rs
index e8e5551..3abf357 100644
--- a/src/media_library.rs
+++ b/src/media_library.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::{Instance, MediaList};
 
 pub struct MediaLibrary {
diff --git a/src/media_list.rs b/src/media_list.rs
index c6e2f5b..048d821 100644
--- a/src/media_list.rs
+++ b/src/media_list.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::{Instance, Media, EventManager};
 
 pub struct MediaList {
diff --git a/src/media_player.rs b/src/media_player.rs
index 8bbcc6f..0f9e5fd 100644
--- a/src/media_player.rs
+++ b/src/media_player.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::Instance;
 use crate::Media;
 use crate::EventManager;
@@ -265,7 +265,7 @@ impl MediaPlayer {
 
     /// Get current movie state.
     pub fn state(&self) -> State {
-        unsafe{ sys::libvlc_media_player_get_state(self.ptr) }
+        unsafe{ sys::libvlc_media_player_get_state(self.ptr) }.into()
     }
 
     /// How many video outputs does this media player have?
@@ -309,7 +309,7 @@ impl MediaPlayer {
 
     /// Set if, and how, the video title will be shown when media is played.
     pub fn set_video_title_display(&self, position: Position, timeout: u32) {
-        unsafe{ sys::libvlc_media_player_set_video_title_display(self.ptr, position, timeout); }
+        unsafe{ sys::libvlc_media_player_set_video_title_display(self.ptr, position as i32, timeout); }
     }
 
     /// Returns raw pointer
diff --git a/src/video.rs b/src/video.rs
index a71bd82..e9ca4fc 100644
--- a/src/video.rs
+++ b/src/video.rs
@@ -2,7 +2,7 @@
 // This file is part of vlc-rs.
 // Licensed under the MIT license, see the LICENSE file.
 
-use crate::sys;
+use vlc_sys as sys;
 use crate::MediaPlayer;
 use crate::TrackDescription;
 use crate::enums::VideoAdjustOption;