diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c
index 4b41d6daa31de62d91d2d061879c3a47092df2ec..fb0d56f9802dfa2ef967922ffec18263040a54eb 100644
--- a/libavcodec/pgssubdec.c
+++ b/libavcodec/pgssubdec.c
@@ -46,6 +46,7 @@ typedef struct PGSSubPresentation {
     int x;
     int y;
     int id_number;
+    int object_number;
 } PGSSubPresentation;
 
 typedef struct PGSSubPicture {
@@ -255,7 +256,6 @@ static void parse_palette_segment(AVCodecContext *avctx,
  * @param buf_size size of packet to process
  * @todo TODO: Implement cropping
  * @todo TODO: Implement forcing of subtitles
- * @todo TODO: Blanking of subtitle
  */
 static void parse_presentation_segment(AVCodecContext *avctx,
                                        const uint8_t *buf, int buf_size)
@@ -263,7 +263,6 @@ static void parse_presentation_segment(AVCodecContext *avctx,
     PGSSubContext *ctx = avctx->priv_data;
 
     int x, y;
-    uint8_t block;
 
     int w = bytestream_get_be16(&buf);
     int h = bytestream_get_be16(&buf);
@@ -278,19 +277,25 @@ static void parse_presentation_segment(AVCodecContext *avctx,
 
     ctx->presentation.id_number = bytestream_get_be16(&buf);
 
-    /* Next byte is the state. */
-    block = bytestream_get_byte(&buf);;
-    if (block == 0x80) {
         /*
-         * Skip 7 bytes of unknown:
+         * Skip 3 bytes of unknown:
+         *     state
          *     palette_update_flag (0x80),
          *     palette_id_to_use,
-         *     Object Number (if > 0 determines if more data to process),
+         */
+        buf += 3;
+
+        ctx->presentation.object_number = bytestream_get_byte(&buf);
+        if (!ctx->presentation.object_number)
+            return;
+
+        /*
+         * Skip 4 bytes of unknown:
          *     object_id_ref (2 bytes),
          *     window_id_ref,
          *     composition_flag (0x80 - object cropped, 0x40 - object forced)
          */
-        buf += 7;
+        buf += 4;
 
         x = bytestream_get_be16(&buf);
         y = bytestream_get_be16(&buf);
@@ -308,13 +313,6 @@ static void parse_presentation_segment(AVCodecContext *avctx,
         /* Fill in dimensions */
         ctx->presentation.x = x;
         ctx->presentation.y = y;
-    } else if (block == 0x00) {
-        /* TODO: Blank context as subtitle should not be displayed.
-         *       If the subtitle is blanked now the subtitle is not
-         *       on screen long enough to read, due to a delay in
-         *       initial display timing.
-         */
-    }
 }
 
 /**
@@ -345,6 +343,10 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
      */
 
     memset(sub, 0, sizeof(*sub));
+    // Blank if last object_number was 0.
+    // Note that this may be wrong for more complex subtitles.
+    if (!ctx->presentation.object_number)
+        return 1;
     sub->start_display_time = 0;
     sub->end_display_time   = 20000;
     sub->format             = 0;