diff --git a/grc/misc_utils/gsm_bursts_printer.xml b/grc/misc_utils/gsm_bursts_printer.xml
index 6407571..abdb532 100644
--- a/grc/misc_utils/gsm_bursts_printer.xml
+++ b/grc/misc_utils/gsm_bursts_printer.xml
@@ -4,7 +4,7 @@
   <key>gsm_bursts_printer</key>
   <import>import grgsm</import>
   <import>import pmt</import>
-  <make>grgsm.bursts_printer(pmt.intern($prepend_string), $prepend_fnr)</make>
+  <make>grgsm.bursts_printer(pmt.intern($prepend_string), $prepend_fnr, $prepend_frame_count, $print_payload_only)</make>
 
   <param>
     <name>Prepend String</name>
@@ -27,9 +27,49 @@
       <key>True</key>
     </option>
   </param>
+  <param>
+    <name>Prepend Frame Count</name>
+    <key>prepend_frame_count</key>
+    <value>False</value>
+    <type>bool</type>
+    <option>
+      <name>False</name>
+      <key>False</key>
+    </option>
+    <option>
+      <name>True</name>
+      <key>True</key>
+    </option>
+  </param>
+  <param>
+    <name>Print payload only</name>
+    <key>print_payload_only</key>
+    <value>False</value>
+    <type>bool</type>
+    <option>
+      <name>False</name>
+      <key>False</key>
+    </option>
+    <option>
+      <name>True</name>
+      <key>True</key>
+    </option>
+  </param>
 
   <sink>
     <name>bursts</name>
     <type>message</type>
   </sink>
+
+  <doc>
+This block prints bursts to output. By default the whole burst including tail bits, stealing bits and training sequence is printed.
+
+If "Prepend Frame Number" is enabled, then the framenumber is prepended to each burst.
+
+If "Prepend Frame Count" is enabled, then the frame count for A5 is prependend to each burst.
+
+If "Print payload only" is enabled, then only the two data blocks of a burst are printed, tail bits, stealing bits and training sequence are omitted.
+
+Enabling all three options results in an output that is similar to the output of airprobe, i.e. the format is "frame_nr frame_count: databits"
+  </doc>
 </block>
diff --git a/include/grgsm/misc_utils/bursts_printer.h b/include/grgsm/misc_utils/bursts_printer.h
index b2dd1d1..099bf08 100644
--- a/include/grgsm/misc_utils/bursts_printer.h
+++ b/include/grgsm/misc_utils/bursts_printer.h
@@ -50,7 +50,8 @@
        * class. gsm::bursts_printer::make is the public interface for
        * creating new instances.
        */
-      static sptr make(pmt::pmt_t prepend_string, bool prepend_fnr=false);
+      static sptr make(pmt::pmt_t prepend_string, bool prepend_fnr=false,
+        bool prepend_frame_count=false, bool print_payload_only=false);
     };
 
   } // namespace gsm
diff --git a/lib/misc_utils/bursts_printer_impl.cc b/lib/misc_utils/bursts_printer_impl.cc
index a22e85f..3b4f026 100644
--- a/lib/misc_utils/bursts_printer_impl.cc
+++ b/lib/misc_utils/bursts_printer_impl.cc
@@ -44,39 +44,77 @@
         gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst);
         int8_t * burst = (int8_t *)(pmt::blob_data(header_plus_burst))+sizeof(gsmtap_hdr);
         size_t burst_len=pmt::blob_length(header_plus_burst)-sizeof(gsmtap_hdr);
-        uint32_t frame_nr;
+        uint32_t frame_nr = be32toh(header->frame_number);
 
         std::cout << d_prepend_string;
         if (d_prepend_fnr)
         {
-            frame_nr = be32toh(header->frame_number);
-            std::cout << frame_nr << ":";
+            std::cout << frame_nr;
         }
 
-        for(int ii=0; ii<burst_len; ii++)
+        if (d_prepend_fnr && d_prepend_frame_count)
         {
-          std::cout << std::setprecision(1) << static_cast<int>(burst[ii]) << "";
+            std::cout << " ";
         }
+
+        if (d_prepend_frame_count)
+        {
+            // calculate frame count for A5
+            uint16_t t1 = frame_nr/1326;
+            uint8_t t2 = frame_nr % 26;
+            uint8_t t3 = frame_nr % 51;
+            uint32_t frame_count = (t1<<11)|(t3<<5)|t2;
+            std::cout << frame_count;
+        }
+
+        if (d_prepend_fnr || d_prepend_frame_count)
+        {
+            std::cout << ": ";
+        }
+
+        if (d_print_payload_only)
+        {
+            for (int ii=0; ii<57; ii++)
+            {
+                std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 3]);
+            }
+            for (int ii=0; ii<57; ii++)
+            {
+                std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 88]);
+            }
+        }
+        else
+        {
+            for(int ii=0; ii<burst_len; ii++)
+            {
+              std::cout << std::setprecision(1) << static_cast<int>(burst[ii]);
+            }
+        }
+
         std::cout << std::endl;
     }
 
     bursts_printer::sptr
-    bursts_printer::make(pmt::pmt_t prepend_string, bool prepend_fnr)
+    bursts_printer::make(pmt::pmt_t prepend_string, bool prepend_fnr,
+        bool prepend_frame_count, bool print_payload_only)
     {
       return gnuradio::get_initial_sptr
-        (new bursts_printer_impl(prepend_string, prepend_fnr));
+        (new bursts_printer_impl(prepend_string, prepend_fnr, prepend_frame_count, print_payload_only));
     }
 
     /*
      * The private constructor
      */
-    bursts_printer_impl::bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr)
+    bursts_printer_impl::bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr,
+        bool prepend_frame_count, bool print_payload_only)
       : gr::block("bursts_printer",
               gr::io_signature::make(0, 0, 0),
               gr::io_signature::make(0, 0, 0))
     {
         d_prepend_string = prepend_string;
         d_prepend_fnr = prepend_fnr;
+        d_prepend_frame_count = prepend_frame_count;
+        d_print_payload_only = print_payload_only;
         message_port_register_in(pmt::mp("bursts"));
         set_msg_handler(pmt::mp("bursts"), boost::bind(&bursts_printer_impl::bursts_print, this, _1));
     }
diff --git a/lib/misc_utils/bursts_printer_impl.h b/lib/misc_utils/bursts_printer_impl.h
index 5655920..5a8a7ed 100644
--- a/lib/misc_utils/bursts_printer_impl.h
+++ b/lib/misc_utils/bursts_printer_impl.h
@@ -35,8 +35,11 @@
       void bursts_print(pmt::pmt_t burst);
       pmt::pmt_t d_prepend_string;
       bool d_prepend_fnr;
+      bool d_prepend_frame_count;
+      bool d_print_payload_only;
      public:
-      bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr=false);
+      bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr=false,
+        bool prepend_frame_count=false, bool print_payload_only=false);
       ~bursts_printer_impl();
     };
 
