 src/libbluray/register.c |   23 ++++++++++++-----------
 1 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/libbluray/register.c b/src/libbluray/register.c
index aa469d3..0dc0373 100644
--- a/src/libbluray/register.c
+++ b/src/libbluray/register.c
@@ -42,8 +42,8 @@ static const uint32_t bd_psr_init[BD_PSR_COUNT] = {
     1,           /*     PSR3:  Angle number */
     0xffff,      /*     PSR4:  Title number */
     0xffff,      /*     PSR5:  Chapter number */
-    0,           /*     PSR6:  PlayList ID */
-    0,           /*     PSR7:  PlayItem ID */
+    0xffff,      /*     PSR6:  PlayList ID */
+    0xffff,      /*     PSR7:  PlayItem ID */
     0,           /*     PSR8:  Presentation time */
     0,           /*     PSR9:  Navigation timer */
     0xffff,      /*     PSR10: Selected button ID */
@@ -262,7 +262,9 @@ void bd_psr_restore_state(BD_REGISTERS *p)
     bd_psr_lock(p);
 
     if (p->num_cb)
+	{
         memcpy(old_psr, p->psr, sizeof(old_psr));
+	}
 
     /* restore backup registers */
     memcpy(p->psr + 4,  p->psr + 36, sizeof(uint32_t) * 5);
@@ -280,15 +282,14 @@ void bd_psr_restore_state(BD_REGISTERS *p)
         ev.ev_type = BD_PSR_RESTORE;
 
         for (i = 4; i < 13; i++) {
-            if (i != 9 && old_psr[i] != p->psr[i]) {
-
-                ev.psr_idx = i;
-                ev.old_val = old_psr[i];
-                ev.new_val = p->psr[i];
-
-                for (j = 0; j < p->num_cb; j++) {
-                    p->cb[j].cb(p->cb[j].handle, &ev);
-                }
+            if (i != 9 && old_psr[i] != p->psr[i] && (p->psr[i] != bd_psr_init[i] /* dont send initial values */)) {
+				ev.psr_idx = i;
+				ev.old_val = old_psr[i];
+				ev.new_val = p->psr[i];
+
+				for (j = 0; j < p->num_cb; j++) {
+					p->cb[j].cb(p->cb[j].handle, &ev);
+				}
             }
         }
     }
