diff --git a/apps/grgsm_livemon_headless.py b/apps/grgsm_livemon_headless.py
deleted file mode 100755
index bcf3f8e..0000000
--- a/apps/grgsm_livemon_headless.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
-##################################################
-# GNU Radio Python Flow Graph
-# Title: Gr-gsm Livemon
-# 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: Wed Aug 30 10:38:50 2017
-##################################################
-
-from gnuradio import blocks
-from gnuradio import eng_notation
-from gnuradio import gr
-from gnuradio.eng_option import eng_option
-from gnuradio.filter import firdes
-from math import pi
-from optparse import OptionParser
-import grgsm
-import osmosdr
-import pmt
-import time
-
-
-class grgsm_livemon_headless(gr.top_block):
-
-    def __init__(self, rec_len=1000000, samp_rate=2000000.052982, fc=941.8e6, shiftoff=400e3, args="", osr=4, collector="localhost", collectorport="4729", serverport="4729", gain=30, ppm=0):
-        gr.top_block.__init__(self, "Gr-gsm Livemon")
-
-        ##################################################
-        # Parameters
-        ##################################################
-        self.rec_len = rec_len
-        self.samp_rate = samp_rate
-        self.fc = fc
-        self.shiftoff = shiftoff
-        self.args = args
-        self.osr = osr
-        self.collector = collector
-        self.collectorport = collectorport
-        self.serverport = serverport
-        self.gain = gain
-        self.ppm = ppm
-
-        ##################################################
-        # Blocks
-        ##################################################
-        self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + args )
-        self.rtlsdr_source_0.set_sample_rate(samp_rate)
-        self.rtlsdr_source_0.set_center_freq(fc-shiftoff, 0)
-        self.rtlsdr_source_0.set_freq_corr(ppm, 0)
-        self.rtlsdr_source_0.set_dc_offset_mode(2, 0)
-        self.rtlsdr_source_0.set_iq_balance_mode(2, 0)
-        self.rtlsdr_source_0.set_gain_mode(False, 0)
-        self.rtlsdr_source_0.set_gain(gain, 0)
-        self.rtlsdr_source_0.set_if_gain(20, 0)
-        self.rtlsdr_source_0.set_bb_gain(20, 0)
-        self.rtlsdr_source_0.set_antenna("", 0)
-        self.rtlsdr_source_0.set_bandwidth(250e3+abs(shiftoff), 0)
-          
-        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=ppm-int(ppm),
-            osr=4,
-            fc=fc,
-            samp_rate_in=samp_rate,
-        )
-        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, samp_rate, osr)
-        self.gsm_bcch_ccch_sdcch4_demapper_0 = grgsm.gsm_bcch_ccch_sdcch4_demapper(
-            timeslot_nr=0,
-        )
-        self.blocks_socket_pdu_0_1 = blocks.socket_pdu("UDP_CLIENT", collector, collectorport, 1500, False)
-        self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", serverport, 10000, False)
-        self.blocks_rotator_cc_0 = blocks.rotator_cc(-2*pi*shiftoff/samp_rate)
-        self.blocks_head_0 = blocks.head(gr.sizeof_gr_complex*1, int(rec_len*samp_rate))
-
-        ##################################################
-        # Connections
-        ##################################################
-        self.msg_connect((self.blocks_socket_pdu_0_0, 'pdus'), (self.gsm_message_printer_1, 'msgs'))    
-        self.msg_connect((self.gsm_bcch_ccch_sdcch4_demapper_0, 'bursts'), (self.gsm_control_channels_decoder_0, 'bursts'))    
-        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_1, 'pdus'))    
-        self.msg_connect((self.gsm_control_channels_decoder_0_0, 'msgs'), (self.blocks_socket_pdu_0_1, 'pdus'))    
-        self.msg_connect((self.gsm_decryption_0, 'bursts'), (self.gsm_control_channels_decoder_0_0, 'bursts'))    
-        self.msg_connect((self.gsm_receiver_0, 'C0'), (self.gsm_bcch_ccch_sdcch4_demapper_0, 'bursts'))    
-        self.msg_connect((self.gsm_receiver_0, 'measurements'), (self.gsm_clock_offset_control_0, 'measurements'))    
-        self.msg_connect((self.gsm_receiver_0, 'C0'), (self.gsm_sdcch8_demapper_0, 'bursts'))    
-        self.msg_connect((self.gsm_sdcch8_demapper_0, 'bursts'), (self.gsm_decryption_0, 'bursts'))    
-        self.connect((self.blocks_head_0, 0), (self.blocks_rotator_cc_0, 0))    
-        self.connect((self.blocks_rotator_cc_0, 0), (self.gsm_input_0, 0))    
-        self.connect((self.gsm_input_0, 0), (self.gsm_receiver_0, 0))    
-        self.connect((self.rtlsdr_source_0, 0), (self.blocks_head_0, 0))    
-
-    def get_rec_len(self):
-        return self.rec_len
-
-    def set_rec_len(self, rec_len):
-        self.rec_len = rec_len
-        self.blocks_head_0.set_length(int(self.rec_len*self.samp_rate))
-
-    def get_samp_rate(self):
-        return self.samp_rate
-
-    def set_samp_rate(self, samp_rate):
-        self.samp_rate = samp_rate
-        self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
-        self.blocks_head_0.set_length(int(self.rec_len*self.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)
-
-    def get_fc(self):
-        return self.fc
-
-    def set_fc(self, fc):
-        self.fc = fc
-        self.rtlsdr_source_0.set_center_freq(self.fc-self.shiftoff, 0)
-        self.gsm_input_0.set_fc(self.fc)
-
-    def get_shiftoff(self):
-        return self.shiftoff
-
-    def set_shiftoff(self, shiftoff):
-        self.shiftoff = shiftoff
-        self.rtlsdr_source_0.set_center_freq(self.fc-self.shiftoff, 0)
-        self.rtlsdr_source_0.set_bandwidth(250e3+abs(self.shiftoff), 0)
-        self.blocks_rotator_cc_0.set_phase_inc(-2*pi*self.shiftoff/self.samp_rate)
-
-    def get_args(self):
-        return self.args
-
-    def set_args(self, args):
-        self.args = args
-
-    def get_osr(self):
-        return self.osr
-
-    def set_osr(self, osr):
-        self.osr = osr
-
-    def get_collector(self):
-        return self.collector
-
-    def set_collector(self, collector):
-        self.collector = collector
-
-    def get_collectorport(self):
-        return self.collectorport
-
-    def set_collectorport(self, collectorport):
-        self.collectorport = collectorport
-
-    def get_serverport(self):
-        return self.serverport
-
-    def set_serverport(self, serverport):
-        self.serverport = serverport
-
-    def get_gain(self):
-        return self.gain
-
-    def set_gain(self, gain):
-        self.gain = gain
-        self.rtlsdr_source_0.set_gain(self.gain, 0)
-
-    def get_ppm(self):
-        return self.ppm
-
-    def set_ppm(self, ppm):
-        self.ppm = ppm
-        self.rtlsdr_source_0.set_freq_corr(self.ppm, 0)
-        self.gsm_input_0.set_ppm(self.ppm-int(self.ppm))
-
-
-def argument_parser():
-    parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
-    parser.add_option(
-        "-T", "--rec-len", dest="rec_len", type="eng_float", default=eng_notation.num_to_str(1000000),
-        help="Set Recording length in seconds [default=%default]")
-    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(
-        "-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(941.8e6),
-        help="Set GSM channel's central frequency [default=%default]")
-    parser.add_option(
-        "-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3),
-        help="Set Frequency Shiftoff [default=%default]")
-    parser.add_option(
-        "", "--args", dest="args", type="string", default="",
-        help="Set Device Arguments [default=%default]")
-    parser.add_option(
-        "", "--osr", dest="osr", type="intx", default=4,
-        help="Set OverSampling Ratio [default=%default]")
-    parser.add_option(
-        "", "--collector", dest="collector", type="string", default="localhost",
-        help="Set IP or DNS name of collector point [default=%default]")
-    parser.add_option(
-        "", "--collectorport", dest="collectorport", type="string", default="4729",
-        help="Set UDP port number of collector [default=%default]")
-    parser.add_option(
-        "", "--serverport", dest="serverport", type="string", default="4729",
-        help="Set UDP server listening port [default=%default]")
-    parser.add_option(
-        "-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30),
-        help="Set RF Gain [default=%default]")
-    parser.add_option(
-        "-p", "--ppm", dest="ppm", type="eng_float", default=eng_notation.num_to_str(0),
-        help="Set Clock frequency offset in ppms (1/1e6 parts) [default=%default]")
-    return parser
-
-
-def main(top_block_cls=grgsm_livemon_headless, options=None):
-    if options is None:
-        options, _ = argument_parser().parse_args()
-
-    tb = top_block_cls(rec_len=options.rec_len, samp_rate=options.samp_rate, fc=options.fc, shiftoff=options.shiftoff, args=options.args, osr=options.osr, collector=options.collector, collectorport=options.collectorport, serverport=options.serverport, gain=options.gain, ppm=options.ppm)
-    tb.start()
-    tb.wait()
-
-
-if __name__ == '__main__':
-    main()
