diff -Naur xbmc-10.1.orig/configure.in xbmc-10.1/configure.in
--- xbmc-10.1.orig/configure.in	2011-12-14 21:34:38.000000000 +0100
+++ xbmc-10.1/configure.in	2011-12-14 21:36:57.000000000 +0100
@@ -56,6 +56,17 @@
   fi
 ])
 
+# Function to push and pop libs and includes for a command
+AC_DEFUN([XB_PUSH_FLAGS], [
+  SAVE_LIBS="$LIBS"
+  SAVE_INCLUDES="$INCLUDES"
+  LIBS="[$2]"
+  INCLUDES="[$1]"
+  [$3]
+  LIBS="$SAVE_LIBS"
+  INCLUDES="$SAVE_INCLUDES"
+])
+
 # General message strings
 configure_debug="ERROR: this is a configure debug statement"
 missing_library="Could not find a required library. Please see the README for your platform."
@@ -614,6 +625,32 @@
     fi;
     AC_DEFINE([HAVE_LIBBLURAY], 1, [System has libbluray library])
     AC_SUBST([HAVE_LIBBLURAY], 1)
+
+	XB_PUSH_FLAGS(
+        [$LIBBLURAY_CFLAGS]
+      , [$LIBBLURAY_LIBS]
+
+      , AC_MSG_CHECKING([libbluray version])
+        AC_COMPILE_IFELSE(
+            AC_LANG_PROGRAM(
+                [#include <libbluray/bluray.h>]
+               ,[bd_get_playlist_info(0, 0)])
+          ,[AC_MSG_RESULT(version has old angle api)
+            AC_DEFINE([HAVE_LIBBLURAY_NOANGLE],[],[System has an old api libbluray without angle support])]
+          ,[AC_MSG_RESULT(normal)]
+        )
+
+        AC_MSG_CHECKING([for libbluray log control])
+        AC_LINK_IFELSE(
+            AC_LANG_PROGRAM(
+               [#include <libbluray/bluray.h>
+                #include <libbluray/log_control.h>]
+              ,[bd_set_debug_mask(0)])
+          , AC_MSG_RESULT(yes)
+          ,[AC_MSG_RESULT(no)
+            AC_DEFINE([HAVE_LIBBLURAY_NOLOGCONTROL],[],[System has an old api libbluray without log support])]
+        )
+    )
   ],[
 #    AC_DEFINE([HAVE_LIBBLURAY], 0, [System has libbluray library])
     AC_SUBST([HAVE_LIBBLURAY], 0)
diff -Naur xbmc-10.1.orig/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp xbmc-10.1/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp
--- xbmc-10.1.orig/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp	2011-03-05 04:33:37.000000000 +0100
+++ xbmc-10.1/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.cpp	2011-12-14 21:36:49.000000000 +0100
@@ -34,15 +34,18 @@
 {
 #include <libbluray/bluray.h>
 #include <libbluray/filesystem.h>
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+#include <libbluray/log_control.h>
+#endif
 }
 
 class DllLibblurayInterface
 {
 public:
   virtual ~DllLibblurayInterface() {};
-  virtual uint32_t bd_get_titles(BLURAY *bd, uint8_t flags)=0;
-  virtual BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx)=0;
-  virtual BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist)=0;
+  virtual uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)=0;
+  virtual BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)=0;
+  virtual BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)=0;
   virtual void bd_free_title_info(BLURAY_TITLE_INFO *title_info)=0;
   virtual BLURAY *bd_open(const char* device_path, const char* keyfile_path)=0;
   virtual void bd_close(BLURAY *bd)=0;
@@ -64,15 +67,26 @@
   virtual uint64_t bd_tell_time(BLURAY *bd)=0;
   virtual BD_FILE_OPEN bd_register_file(BD_FILE_OPEN p)=0;
   virtual BD_DIR_OPEN bd_register_dir(BD_DIR_OPEN p)=0;
+
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+  virtual void     bd_set_debug_handler(BD_LOG_FUNC)=0;
+  virtual void     bd_set_debug_mask(uint32_t mask)=0;
+  virtual uint32_t bd_get_debug_mask(void)=0;
+#endif
 };
 
 class DllLibbluray : public DllDynamic, DllLibblurayInterface
 {
   DECLARE_DLL_WRAPPER(DllLibbluray, DLL_PATH_LIBBLURAY)
-
-  DEFINE_METHOD2(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2))
-  DEFINE_METHOD2(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2))
-  DEFINE_METHOD2(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2))
+#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
+  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2))
+#else
+  DEFINE_METHOD3(uint32_t,            bd_get_titles,          (BLURAY *p1, uint8_t p2, uint32_t p3))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_title_info,      (BLURAY *p1, uint32_t p2, unsigned p3))
+  DEFINE_METHOD3(BLURAY_TITLE_INFO*,  bd_get_playlist_info,   (BLURAY *p1, uint32_t p2, unsigned p3))
+#endif
   DEFINE_METHOD1(void,                bd_free_title_info,     (BLURAY_TITLE_INFO *p1))
   DEFINE_METHOD2(BLURAY*,             bd_open,                (const char* p1, const char* p2))
   DEFINE_METHOD1(void,                bd_close,               (BLURAY *p1))
@@ -95,10 +109,22 @@
   DEFINE_METHOD1(BD_FILE_OPEN,        bd_register_file,       (BD_FILE_OPEN p1))
   DEFINE_METHOD1(BD_DIR_OPEN,         bd_register_dir,        (BD_DIR_OPEN p1))
 
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+  DEFINE_METHOD1(void,                bd_set_debug_handler,   (BD_LOG_FUNC p1))
+  DEFINE_METHOD1(void,                bd_set_debug_mask,      (uint32_t p1))
+  DEFINE_METHOD0(uint32_t,            bd_get_debug_mask)
+#endif
+
   BEGIN_METHOD_RESOLVE()
-    RESOLVE_METHOD_RENAME(bd_get_titles,        bd_get_titles)
-    RESOLVE_METHOD_RENAME(bd_get_title_info,    bd_get_title_info)
-    RESOLVE_METHOD_RENAME(bd_get_playlist_info, bd_get_playlist_info)
+#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
+    RESOLVE_METHOD_RENAME(bd_get_titles,        bd_get_titles_noangle)
+    RESOLVE_METHOD_RENAME(bd_get_title_info,    bd_get_title_info_noangle)
+    RESOLVE_METHOD_RENAME(bd_get_playlist_info, bd_get_playlist_info_noangle)
+#else
+    RESOLVE_METHOD(bd_get_titles)
+    RESOLVE_METHOD(bd_get_title_info)
+    RESOLVE_METHOD(bd_get_playlist_info)
+#endif
     RESOLVE_METHOD_RENAME(bd_free_title_info,   bd_free_title_info)
     RESOLVE_METHOD_RENAME(bd_open,              bd_open)
     RESOLVE_METHOD_RENAME(bd_close,             bd_close)
@@ -120,7 +146,21 @@
     RESOLVE_METHOD_RENAME(bd_tell_time,         bd_tell_time)
     RESOLVE_METHOD_RENAME(bd_register_file,     bd_register_file)
     RESOLVE_METHOD_RENAME(bd_register_dir,      bd_register_dir)
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+    RESOLVE_METHOD(bd_set_debug_handler)
+    RESOLVE_METHOD(bd_set_debug_mask)
+    RESOLVE_METHOD(bd_get_debug_mask)
+#endif
   END_METHOD_RESOLVE()
+
+#ifdef HAVE_LIBBBLURAY_HAVE_LIBBLURAY_NOANGLE
+  uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length)
+      {return bd_get_titles_noangle(bd, flags);           }
+  BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle)
+      {return bd_get_title_info_noangle(bd, title_idx);   }
+  BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle)
+      {return bd_get_playlist_info_noangle(bd, playlist); }
+#endif
 };
 
 
@@ -250,6 +290,14 @@
     return dir;
 }
 
+
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+static void bluray_logger(const char* msg)
+{
+  CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::Logger - %s", msg);
+}
+#endif
+
 CDVDInputStreamBluray::CDVDInputStreamBluray() :
   CDVDInputStream(DVDSTREAM_TYPE_BLURAY)
 {
@@ -290,6 +338,10 @@
 
   m_dll->bd_register_dir(dir_open);
   m_dll->bd_register_file(file_open);
+#ifndef HAVE_LIBBLURAY_NOLOGCONTROL
+  m_dll->bd_set_debug_handler(bluray_logger);
+  m_dll->bd_set_debug_mask(DBG_CRIT);
+#endif
 
   CLog::Log(LOGDEBUG, "CDVDInputStreamBluray::Open - opening %s", strPath.c_str());
   m_bd = m_dll->bd_open(strPath.c_str(), NULL);
@@ -303,12 +355,12 @@
   CStdString filename = CUtil::GetFileName(strFile);
   if(filename.Equals("index.bdmv"))
   {
-    int titles = m_dll->bd_get_titles(m_bd, TITLES_RELEVANT);
+    int titles = m_dll->bd_get_titles(m_bd, TITLES_RELEVANT, 0);
 
     BLURAY_TITLE_INFO *t, *s = NULL;
     for(int i=0; i < titles; i++)
     {
-      t = m_dll->bd_get_title_info(m_bd, i);;
+      t = m_dll->bd_get_title_info(m_bd, i, 0);
       if(!t)
       {
         CLog::Log(LOGDEBUG, "get_main_title - unable to get title %d", i);
@@ -324,7 +376,7 @@
   }
   else if(CUtil::GetExtension(filename).Equals(".mpls"))
   {
-    int titles = m_dll->bd_get_titles(m_bd, TITLES_ALL);
+    int titles = m_dll->bd_get_titles(m_bd, TITLES_ALL, 0);
     do
     {
       if(titles < 0)
@@ -345,7 +397,7 @@
       BLURAY_TITLE_INFO *t;
       for(int i=0; i < titles; i++)
       {
-        t = m_dll->bd_get_title_info(m_bd, i);;
+        t = m_dll->bd_get_title_info(m_bd, i, 0);
         if(!t)
         {
           CLog::Log(LOGDEBUG, "get_playlist_title - unable to get title %d", i);        
