diff --git a/apps/grgsm_decode b/apps/grgsm_decode
index 8f412bf..89c03d3 100755
--- a/apps/grgsm_decode
+++ b/apps/grgsm_decode
@@ -124,7 +124,7 @@
             self.connect((self.file_source, 0), (self.input_adapter, 0))
             self.connect((self.input_adapter, 0), (self.receiver, 0))
             if self.fc is not None:
-                self.msg_connect(self.offset_control, "ppm", self.input_adapter, "ppm_in")
+                self.msg_connect(self.offset_control, "ctrl", self.input_adapter, "ctrl_in")
                 self.msg_connect(self.receiver, "measurements", self.offset_control, "measurements")
             self.msg_connect(self.receiver, "C0", self.dummy_burst_filter, "in")
 
diff --git a/apps/grgsm_livemon b/apps/grgsm_livemon
index 1d37970..cb5b55c 100755
--- a/apps/grgsm_livemon
+++ b/apps/grgsm_livemon
@@ -1,8 +1,11 @@
 #!/usr/bin/env python2
+# -*- coding: utf-8 -*-
 ##################################################
 # GNU Radio Python Flow Graph
 # Title: Gr-gsm Livemon
-# Generated: Wed Sep  2 21:46:35 2015
+# Author: Piotr Krysik
+# Description: Interactive monitor of a single C0 channel with analysis performed by Wireshark (command to run wireshark: sudo wireshark -k -f udp -Y gsmtap -i lo)
+# Generated: Fri Jul 15 13:18:50 2016
 ##################################################
 
 if __name__ == '__main__':
@@ -35,14 +38,14 @@
 
 class grgsm_livemon(gr.top_block, Qt.QWidget):
 
-    def __init__(self, fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3, args=""):
+    def __init__(self, args="", fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3):
         gr.top_block.__init__(self, "Gr-gsm Livemon")
         Qt.QWidget.__init__(self)
         self.setWindowTitle("Gr-gsm Livemon")
         try:
-             self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
+            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
         except:
-             pass
+            pass
         self.top_scroll_layout = Qt.QVBoxLayout()
         self.setLayout(self.top_scroll_layout)
         self.top_scroll = Qt.QScrollArea()
@@ -61,6 +64,7 @@
         ##################################################
         # Parameters
         ##################################################
+        self.args = args
         self.fc = fc
         self.gain = gain
         self.ppm = ppm
@@ -109,40 +113,43 @@
         )
         self.qtgui_freq_sink_x_0.set_update_time(0.10)
         self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
-#        self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
-#        self.qtgui_freq_sink_x_0.enable_autoscale(False)
-#        self.qtgui_freq_sink_x_0.enable_grid(False)
-#        self.qtgui_freq_sink_x_0.set_fft_average(1.0)
-#        self.qtgui_freq_sink_x_0.enable_control_panel(False)
-#        
-#        if not True:
-#          self.qtgui_freq_sink_x_0.disable_legend()
-#        
-#        if complex == type(float()):
-#          self.qtgui_freq_sink_x_0.set_plot_pos_half(not True)
-#        
-#        labels = ["", "", "", "", "",
-#                  "", "", "", "", ""]
-#        widths = [1, 1, 1, 1, 1,
-#                  1, 1, 1, 1, 1]
-#        colors = ["blue", "red", "green", "black", "cyan",
-#                  "magenta", "yellow", "dark red", "dark green", "dark blue"]
-#        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
-#                  1.0, 1.0, 1.0, 1.0, 1.0]
-#        for i in xrange(1):
-#            if len(labels[i]) == 0:
-#                self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
-#            else:
-#                self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
-#            self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
-#            self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
-#            self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
+        self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
+        self.qtgui_freq_sink_x_0.enable_autoscale(False)
+        self.qtgui_freq_sink_x_0.enable_grid(False)
+        self.qtgui_freq_sink_x_0.set_fft_average(1.0)
+        self.qtgui_freq_sink_x_0.enable_control_panel(False)
+        
+        if not True:
+          self.qtgui_freq_sink_x_0.disable_legend()
+        
+        if "complex" == "float" or "complex" == "msg_float":
+          self.qtgui_freq_sink_x_0.set_plot_pos_half(not True)
+        
+        labels = ["", "", "", "", "",
+                  "", "", "", "", ""]
+        widths = [1, 1, 1, 1, 1,
+                  1, 1, 1, 1, 1]
+        colors = ["blue", "red", "green", "black", "cyan",
+                  "magenta", "yellow", "dark red", "dark green", "dark blue"]
+        alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+                  1.0, 1.0, 1.0, 1.0, 1.0]
+        for i in xrange(1):
+            if len(labels[i]) == 0:
+                self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
+            else:
+                self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
+            self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
+            self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
+            self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
         
         self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
         self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
-        self.gsm_sdcch8_demapper_0 = grgsm.gsm_sdcch8_demapper(1)
-        self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([]))
-        self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""), False)
+        self.gsm_sdcch8_demapper_0 = grgsm.gsm_sdcch8_demapper(
+            timeslot_nr=1,
+        )
+        self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([]), False)
+        self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""), False,
+            False, False)
         self.gsm_input_0 = grgsm.gsm_input(
             ppm=0,
             osr=4,
@@ -152,17 +159,19 @@
         self.gsm_decryption_0 = grgsm.decryption(([]), 1)
         self.gsm_control_channels_decoder_0_0 = grgsm.control_channels_decoder()
         self.gsm_control_channels_decoder_0 = grgsm.control_channels_decoder()
-        self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc-shiftoff)
-        self.gsm_bcch_ccch_demapper_0 = grgsm.gsm_bcch_ccch_demapper(0)
-        self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", "4729", 10000)
-        self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000)
+        self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc-shiftoff, samp_rate)
+        self.gsm_bcch_ccch_demapper_0 = grgsm.gsm_bcch_ccch_demapper(
+            timeslot_nr=0,
+        )
+        self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", "4729", 10000, False)
+        self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000, False)
         self.blocks_rotator_cc_0 = blocks.rotator_cc(-2*pi*shiftoff/samp_rate)
 
         ##################################################
         # Connections
         ##################################################
         self.msg_connect((self.gsm_bcch_ccch_demapper_0, 'bursts'), (self.gsm_control_channels_decoder_0, 'bursts'))    
-        self.msg_connect((self.gsm_clock_offset_control_0, 'ppm'), (self.gsm_input_0, 'ppm_in'))    
+        self.msg_connect((self.gsm_clock_offset_control_0, 'ctrl'), (self.gsm_input_0, 'ctrl_in'))    
         self.msg_connect((self.gsm_control_channels_decoder_0, 'msgs'), (self.blocks_socket_pdu_0, 'pdus'))    
         self.msg_connect((self.gsm_control_channels_decoder_0, 'msgs'), (self.gsm_message_printer_1, 'msgs'))    
         self.msg_connect((self.gsm_control_channels_decoder_0_0, 'msgs'), (self.blocks_socket_pdu_0, 'pdus'))    
@@ -182,6 +191,13 @@
         self.settings.setValue("geometry", self.saveGeometry())
         event.accept()
 
+
+    def get_args(self):
+        return self.args
+
+    def set_args(self, args):
+        self.args = args
+
     def get_fc(self):
         return self.fc
 
@@ -210,9 +226,9 @@
     def set_samp_rate(self, samp_rate):
         self.samp_rate = samp_rate
         self.blocks_rotator_cc_0.set_phase_inc(-2*pi*self.shiftoff/self.samp_rate)
-        self.gsm_input_0.set_samp_rate_in(self.samp_rate)
         self.qtgui_freq_sink_x_0.set_frequency_range(self.fc_slider, self.samp_rate)
         self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
+        self.gsm_input_0.set_samp_rate_in(self.samp_rate)
 
     def get_shiftoff(self):
         return self.shiftoff
@@ -246,28 +262,40 @@
         self.rtlsdr_source_0.set_center_freq(self.fc_slider-self.shiftoff, 0)
 
 
-if __name__ == '__main__':
+def argument_parser():
     parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
-    parser.add_option("-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(939.4e6),
+    parser.add_option(
+        "", "--args", dest="args", type="string", default="",
+        help="Set Device Arguments [default=%default]")
+    parser.add_option(
+        "-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(939.4e6),
         help="Set fc [default=%default]")
-    parser.add_option("-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30),
+    parser.add_option(
+        "-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30),
         help="Set gain [default=%default]")
-    parser.add_option("-p", "--ppm", dest="ppm", type="intx", default=0,
+    parser.add_option(
+        "-p", "--ppm", dest="ppm", type="intx", default=0,
         help="Set ppm [default=%default]")
-    parser.add_option("-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(2000000.052982),
+    parser.add_option(
+        "-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(2000000.052982),
         help="Set samp_rate [default=%default]")
-    parser.add_option("-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3),
+    parser.add_option(
+        "-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3),
         help="Set shiftoff [default=%default]")
-    parser.add_option("", "--args", dest="args", type="string", default="",
-        help="Set device arguments [default=%default]")
-                
-    (options, args) = parser.parse_args()
-#    from distutils.version import StrictVersion
-#    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
-#        Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
-    Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
+    return parser
+
+
+def main(top_block_cls=grgsm_livemon, options=None):
+    if options is None:
+        options, _ = argument_parser().parse_args()
+
+    from distutils.version import StrictVersion
+    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
+        style = gr.prefs().get_string('qtgui', 'style', 'raster')
+        Qt.QApplication.setGraphicsSystem(style)
     qapp = Qt.QApplication(sys.argv)
-    tb = grgsm_livemon(fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff, args=options.args)
+
+    tb = top_block_cls(args=options.args, fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff)
     tb.start()
     tb.show()
 
@@ -276,4 +304,7 @@
         tb.wait()
     qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
     qapp.exec_()
-    tb = None  # to clean up Qt widgets
+
+
+if __name__ == '__main__':
+    main()
diff --git a/apps/grgsm_livemon.grc b/apps/grgsm_livemon.grc
index 22c30b0..9c3945d 100644
--- a/apps/grgsm_livemon.grc
+++ b/apps/grgsm_livemon.grc
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.8'?>
+<?grc format='1' created='3.7.9'?>
 <flow_graph>
   <timestamp>Sat Dec 13 10:49:59 2014</timestamp>
   <block>
@@ -9,10 +9,6 @@
       <value>Piotr Krysik</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>window_size</key>
       <value>2280, 1024</value>
     </param>
@@ -45,6 +41,10 @@
       <value>qt_gui</value>
     </param>
     <param>
+      <key>hier_block_src_path</key>
+      <value>.:</value>
+    </param>
+    <param>
       <key>id</key>
       <value>grgsm_livemon</value>
     </param>
@@ -53,10 +53,18 @@
       <value>0</value>
     </param>
     <param>
+      <key>qt_qss_theme</key>
+      <value></value>
+    </param>
+    <param>
       <key>realtime_scheduling</key>
       <value></value>
     </param>
     <param>
+      <key>run_command</key>
+      <value>{python} -u {filename}</value>
+    </param>
+    <param>
       <key>run_options</key>
       <value>prompt</value>
     </param>
@@ -594,14 +602,6 @@
       <key>timeslot_nr</key>
       <value>0</value>
     </param>
-    <param>
-      <key>channel_types</key>
-      <value>[1,2,2,2,2,2,2,2,2,2]</value>
-    </param>
-    <param>
-      <key>starts_fn_mod51</key>
-      <value>[2,6,12,16,22,26,32,36,42,46]</value>
-    </param>
   </block>
   <block>
     <key>gsm_clock_offset_control</key>
@@ -645,6 +645,10 @@
       <key>fc</key>
       <value>fc-shiftoff</value>
     </param>
+    <param>
+      <key>samp_rate</key>
+      <value>samp_rate</value>
+    </param>
   </block>
   <block>
     <key>gsm_control_channels_decoder</key>
@@ -970,14 +974,6 @@
       <key>timeslot_nr</key>
       <value>1</value>
     </param>
-    <param>
-      <key>channel_types</key>
-      <value>[8,8,8,8,8,8,8,8,136,136,136,136]</value>
-    </param>
-    <param>
-      <key>starts_fn_mod51</key>
-      <value>[0,4,8,12,16,20,24,28,32,36,40,44]</value>
-    </param>
   </block>
   <block>
     <key>import</key>
@@ -2854,8 +2850,8 @@
   <connection>
     <source_block_id>gsm_clock_offset_control_0</source_block_id>
     <sink_block_id>gsm_input_0</sink_block_id>
-    <source_key>ppm</source_key>
-    <sink_key>ppm_in</sink_key>
+    <source_key>ctrl</source_key>
+    <sink_key>ctrl_in</sink_key>
   </connection>
   <connection>
     <source_block_id>gsm_control_channels_decoder_0</source_block_id>
diff --git a/apps/grgsm_scanner b/apps/grgsm_scanner
index ebfdb7a..2524a63 100755
--- a/apps/grgsm_scanner
+++ b/apps/grgsm_scanner
@@ -84,7 +84,7 @@
         ##################################################
         self.msg_connect(self.gsm_bcch_ccch_demapper_0, 'bursts', self, 'bursts')
         self.msg_connect(self.gsm_bcch_ccch_demapper_0, 'bursts', self.gsm_control_channels_decoder_0, 'bursts')
-        self.msg_connect(self.gsm_clock_offset_control_0, 'ppm', self.gsm_input_0, 'ppm_in')
+        self.msg_connect(self.gsm_clock_offset_control_0, 'ctrl', self.gsm_input_0, 'ctrl_in')
         self.msg_connect(self.gsm_control_channels_decoder_0, 'msgs', self, 'msgs')
         self.msg_connect(self.gsm_receiver_0, 'C0', self.gsm_bcch_ccch_demapper_0, 'bursts')
         self.msg_connect(self.gsm_receiver_0, 'measurements', self.gsm_clock_offset_control_0, 'measurements')
