diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h
index 8aa41d8..0097f3a 100644
--- a/include/vlc/libvlc_events.h
+++ b/include/vlc/libvlc_events.h
@@ -71,6 +71,7 @@ enum libvlc_event_e {
     libvlc_MediaPlayerTitleChanged,
     libvlc_MediaPlayerSnapshotTaken,
     libvlc_MediaPlayerLengthChanged,
+    libvlc_MediaPlayerStatisticsUpdated,
 
     libvlc_MediaListItemAdded=0x200,
     libvlc_MediaListWillAddItem,
diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index f593599..a2eef66 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -80,6 +80,43 @@ typedef struct libvlc_rectangle_t
 } libvlc_rectangle_t;
 
 /**
+ * Description for statistics data
+ */
+typedef struct libvlc_statistics_t
+{
+    /* Input */
+    int i_read_packets;
+    int i_read_bytes;
+    float f_input_bitrate;
+    float f_average_input_bitrate;
+
+    /* Demux */
+    int i_demux_read_packets;
+    int i_demux_read_bytes;
+    float f_demux_bitrate;
+    float f_average_demux_bitrate;
+    int i_demux_corrupted;
+    int i_demux_discontinuity;
+
+    /* Decoders */
+    int i_decoded_audio;
+    int i_decoded_video;
+
+    /* Vout */
+    int i_displayed_pictures;
+    int i_lost_pictures;
+
+    /* Sout */
+    int i_sent_packets;
+    int i_sent_bytes;
+    float f_send_bitrate;
+
+    /* Aout */
+    int i_played_abuffers;
+    int i_lost_abuffers;
+} libvlc_statistics_t;
+
+/**
  * Marq options definition
  */
 typedef enum libvlc_video_marquee_option_t {
@@ -169,6 +206,16 @@ VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_player_event_manager ( libv
 VLC_PUBLIC_API int libvlc_media_player_is_playing ( libvlc_media_player_t *p_mi );
 
 /**
+ * Fill the supplied libvlc_statistics_t structure with with the current
+ * playback statistics.
+ *
+ * \param p_mi the Media Player
+ * \param p_stats pointer to memory of type libvlc_statistics_t
+ * \return 1 if the structure has been filled, 0 otherwise
+ */
+VLC_PUBLIC_API int libvlc_media_player_get_statistics( libvlc_media_player_t *p_mi, libvlc_statistics_t *p_stats );
+
+/**
  * Play
  *
  * \param p_mi the Media Player
diff --git a/src/control/event.c b/src/control/event.c
index 2ce0a23..7b5ba3c 100644
--- a/src/control/event.c
+++ b/src/control/event.c
@@ -274,6 +274,7 @@ static const event_name_t event_list[] = {
     DEF(MediaPlayerTitleChanged)
     DEF(MediaPlayerSnapshotTaken)
     DEF(MediaPlayerLengthChanged)
+    DEF(MediaPlayerStatisticsUpdated)
 
     DEF(MediaListItemAdded)
     DEF(MediaListWillAddItem)
diff --git a/src/control/media_player.c b/src/control/media_player.c
index cf54fcd..8106f20 100644
--- a/src/control/media_player.c
+++ b/src/control/media_player.c
@@ -299,6 +299,11 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd,
            from_mtime(var_GetTime( p_input, "length" ));
         libvlc_event_send( p_mi->p_event_manager, &event );
     }
+    else if( newval.i_int == INPUT_EVENT_STATISTICS )
+    {
+        event.type = libvlc_MediaPlayerStatisticsUpdated;
+        libvlc_event_send( p_mi->p_event_manager, &event );
+    }
 
     return VLC_SUCCESS;
 
@@ -465,6 +470,7 @@ libvlc_media_player_new( libvlc_instance_t *instance )
     register_event(mp, PositionChanged);
     register_event(mp, TimeChanged);
     register_event(mp, LengthChanged);
+    register_event(mp, StatisticsUpdated);
     register_event(mp, TitleChanged);
     register_event(mp, PausableChanged);
 
@@ -749,6 +755,64 @@ int libvlc_media_player_is_playing( libvlc_media_player_t *p_mi )
 }
 
 /**************************************************************************
+ * Returns the statistics
+ **************************************************************************/
+int libvlc_media_player_get_statistics( libvlc_media_player_t *p_mi, libvlc_statistics_t *p_stats )
+{
+    assert( p_mi != NULL && p_stats != NULL );
+
+    input_thread_t * p_input_thread = libvlc_get_input_thread( p_mi );
+    if( !p_input_thread )
+        return 0;
+
+    input_item_t *p_item = input_GetItem( p_input_thread );
+    if( !p_item )
+    {
+        vlc_object_release( p_input_thread );
+        return 0;
+    }
+
+    vlc_mutex_lock( &p_item->p_stats->lock );
+
+    /* Input */
+    p_stats->i_read_packets = p_item->p_stats->i_read_packets;
+    p_stats->i_read_bytes = p_item->p_stats->i_read_bytes;
+    p_stats->f_input_bitrate = p_item->p_stats->f_input_bitrate;
+    p_stats->f_average_input_bitrate = p_item->p_stats->f_average_input_bitrate;
+
+    /* Demux */
+    p_stats->i_demux_read_packets = p_item->p_stats->i_demux_read_packets;
+    p_stats->i_demux_read_bytes = p_item->p_stats->i_demux_read_bytes;
+    p_stats->f_demux_bitrate = p_item->p_stats->f_demux_bitrate;
+    p_stats->f_average_demux_bitrate = p_item->p_stats->f_average_demux_bitrate;
+    p_stats->i_demux_corrupted = p_item->p_stats->i_demux_corrupted;
+    p_stats->i_demux_discontinuity = p_item->p_stats->i_demux_discontinuity;
+
+    /* Decoders */
+    p_stats->i_decoded_audio = p_item->p_stats->i_decoded_audio;
+    p_stats->i_decoded_video = p_item->p_stats->i_decoded_video;
+
+    /* Vout */
+    p_stats->i_displayed_pictures = p_item->p_stats->i_displayed_pictures;
+    p_stats->i_lost_pictures = p_item->p_stats->i_lost_pictures;
+
+    /* Sout */
+    p_stats->i_sent_packets = p_item->p_stats->i_sent_packets;
+    p_stats->i_sent_bytes = p_item->p_stats->i_sent_bytes;
+    p_stats->f_send_bitrate = p_item->p_stats->f_send_bitrate;
+
+    /* Aout */
+    p_stats->i_played_abuffers = p_item->p_stats->i_played_abuffers;
+    p_stats->i_lost_abuffers = p_item->p_stats->i_lost_abuffers;
+
+    vlc_mutex_unlock( &p_item->p_stats->lock );
+
+    vlc_object_release( p_input_thread );
+
+    return 1;
+}
+
+/**************************************************************************
  * Stop playing.
  **************************************************************************/
 void libvlc_media_player_stop( libvlc_media_player_t *p_mi )
diff --git a/src/libvlc.sym b/src/libvlc.sym
index afaf901..dc9cdfd 100644
--- a/src/libvlc.sym
+++ b/src/libvlc.sym
@@ -128,6 +128,7 @@ libvlc_media_player_get_xwindow
 libvlc_media_player_has_vout
 libvlc_media_player_is_seekable
 libvlc_media_player_is_playing
+libvlc_media_player_get_statistics
 libvlc_media_player_new
 libvlc_media_player_new_from_media
 libvlc_media_player_next_chapter
