diff --git a/apps/grgsm_livemon_headless b/apps/grgsm_livemon_headless
index dc36fca..721bc11 100644
--- a/apps/grgsm_livemon_headless
+++ b/apps/grgsm_livemon_headless
@@ -1,11 +1,31 @@
 #!/usr/bin/env python2
 # -*- coding: utf-8 -*-
+# @file
+# @author (C) 2017 by Piotr Krysik <ptrkrysik@gmail.com>
+# @section LICENSE
+#
+# Gr-gsm is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# Gr-gsm is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with gr-gsm; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+#
 ##################################################
 # 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: Mon Aug 28 10:09:07 2017
+# Generated: Wed Sep  6 16:27:23 2017
 ##################################################
 
 from gnuradio import blocks
@@ -13,6 +33,7 @@
 from gnuradio import gr
 from gnuradio.eng_option import eng_option
 from gnuradio.filter import firdes
+from grgsm import arfcn
 from math import pi
 from optparse import OptionParser
 import grgsm
@@ -23,7 +44,7 @@
 
 class grgsm_livemon_headless(gr.top_block):
 
-    def __init__(self, args="", collector='localhost', collectorport='4729', fc=941.8e6, gain=30, osr=4, ppm=0, samp_rate=2000000.052982, serverport='4729', shiftoff=400e3):
+    def __init__(self, args="", collector="localhost", collectorport="4729", gain=30, osr=4, ppm=0, rec_len=1000000, samp_rate=2000000.052982, serverport="4729", shiftoff=400e3, fc=957e6):
         gr.top_block.__init__(self, "Gr-gsm Livemon")
 
         ##################################################
@@ -32,13 +53,14 @@
         self.args = args
         self.collector = collector
         self.collectorport = collectorport
-        self.fc = fc
         self.gain = gain
         self.osr = osr
         self.ppm = ppm
+        self.rec_len = rec_len
         self.samp_rate = samp_rate
         self.serverport = serverport
         self.shiftoff = shiftoff
+        self.fc = fc
 
         ##################################################
         # Blocks
@@ -53,13 +75,13 @@
         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_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_receiver_0 = grgsm.receiver(4, ([arfcn.downlink2arfcn(fc)]), ([]), False)
         self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""), False,
             False, False)
         self.gsm_input_0 = grgsm.gsm_input(
@@ -76,8 +98,9 @@
             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_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
@@ -92,9 +115,10 @@
         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_rotator_cc_0, 0))    
+        self.connect((self.rtlsdr_source_0, 0), (self.blocks_head_0, 0))    
 
     def get_args(self):
         return self.args
@@ -114,14 +138,6 @@
     def set_collectorport(self, collectorport):
         self.collectorport = collectorport
 
-    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_gain(self):
         return self.gain
 
@@ -140,17 +156,25 @@
 
     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))
+        self.rtlsdr_source_0.set_freq_corr(self.ppm, 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.gsm_input_0.set_samp_rate_in(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)
+        self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
 
     def get_serverport(self):
         return self.serverport
@@ -163,44 +187,54 @@
 
     def set_shiftoff(self, shiftoff):
         self.shiftoff = shiftoff
+        self.blocks_rotator_cc_0.set_phase_inc(-2*pi*self.shiftoff/self.samp_rate)
         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_fc(self):
+        return self.fc
+
+    def set_fc(self, fc):
+        self.fc = fc
+        self.gsm_input_0.set_fc(self.fc)
+        self.rtlsdr_source_0.set_center_freq(self.fc-self.shiftoff, 0)
 
 
 def argument_parser():
-    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)'
-    parser = OptionParser(usage="%prog: [options]", option_class=eng_option, description=description)
+    parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
     parser.add_option(
         "", "--args", dest="args", type="string", default="",
         help="Set Device Arguments [default=%default]")
     parser.add_option(
-        "", "--collector", dest="collector", type="string", default='localhost',
+        "", "--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',
+        "", "--collectorport", dest="collectorport", type="string", default="4729",
         help="Set UDP port number of collector [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(
         "-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30),
-        help="Set gain [default=%default]")
+        help="Set RF Gain [default=%default]")
     parser.add_option(
         "", "--osr", dest="osr", type="intx", default=4,
         help="Set OverSampling Ratio [default=%default]")
     parser.add_option(
         "-p", "--ppm", dest="ppm", type="eng_float", default=eng_notation.num_to_str(0),
-        help="Set ppm [default=%default]")
+        help="Set Clock frequency offset in ppms (1/1e6 parts) [default=%default]")
+    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(
-        "", "--serverport", dest="serverport", type="string", default='4729',
+        "", "--serverport", dest="serverport", type="string", default="4729",
         help="Set UDP server listening port [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(
+        "-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(957e6),
+        help="Set GSM channel's central frequency [default=%default]")
     return parser
 
 
@@ -208,7 +242,7 @@
     if options is None:
         options, _ = argument_parser().parse_args()
 
-    tb = top_block_cls(args=options.args, collector=options.collector, collectorport=options.collectorport, fc=options.fc, gain=options.gain, osr=options.osr, ppm=options.ppm, samp_rate=options.samp_rate, serverport=options.serverport, shiftoff=options.shiftoff)
+    tb = top_block_cls(args=options.args, collector=options.collector, collectorport=options.collectorport, gain=options.gain, osr=options.osr, ppm=options.ppm, rec_len=options.rec_len, samp_rate=options.samp_rate, serverport=options.serverport, shiftoff=options.shiftoff, fc=options.fc)
     tb.start()
     tb.wait()
 
diff --git a/apps/grgsm_livemon_headless.grc b/apps/grgsm_livemon_headless.grc
index caa8e28..f130d71 100644
--- a/apps/grgsm_livemon_headless.grc
+++ b/apps/grgsm_livemon_headless.grc
@@ -462,7 +462,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>941.8e6</value>
+      <value>957e6</value>
     </param>
   </block>
   <block>
@@ -837,7 +837,7 @@
     </param>
     <param>
       <key>cell_allocation</key>
-      <value>[0]</value>
+      <value>[arfcn.downlink2arfcn(fc)]</value>
     </param>
     <param>
       <key>comment</key>
@@ -959,6 +959,37 @@
     </param>
   </block>
   <block>
+    <key>import</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(200, 60)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>import_1</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>from grgsm import arfcn</value>
+    </param>
+  </block>
+  <block>
     <key>parameter</key>
     <param>
       <key>alias</key>
diff --git a/apps/grgsm_scanner b/apps/grgsm_scanner
index 6547b2c..1bff63a 100755
--- a/apps/grgsm_scanner
+++ b/apps/grgsm_scanner
@@ -305,8 +305,8 @@
         last_arfcn = arfcn_range[1]
         last_center_arfcn = last_arfcn - int((channels_num / 2) - 1)
 
-        current_freq = grgsm.arfcn.arfcn2downlink(first_arfcn + int(channels_num / 2) - 1, band)
-        last_freq = grgsm.arfcn.arfcn2downlink(last_center_arfcn, band)
+        current_freq = grgsm.arfcn.arfcn2downlink(first_arfcn + int(channels_num / 2) - 1)
+        last_freq = grgsm.arfcn.arfcn2downlink(last_center_arfcn)
         stop_freq = last_freq + 0.2e6 * channels_num
 
         while current_freq < stop_freq:
@@ -352,7 +352,7 @@
                     cell_arfcn_list = scanner.gsm_extract_system_info.get_cell_arfcns(chans[i])
                     neighbour_list = scanner.gsm_extract_system_info.get_neighbours(chans[i])
 
-                    info = channel_info(grgsm.arfcn.downlink2arfcn(found_freqs[i], band), found_freqs[i],
+                    info = channel_info(grgsm.arfcn.downlink2arfcn(found_freqs[i]), found_freqs[i],
                                         cell_ids[i], lacs[i], mccs[i], mncs[i], ccch_confs[i], powers[i],
                                         neighbour_list, cell_arfcn_list)
                     found_list.append(info)
@@ -375,7 +375,7 @@
 def argument_parser():
     parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
     bands_list = ", ".join(grgsm.arfcn.get_bands())
-    parser.add_option("-b", "--band", dest="band", default="P-GSM",
+    parser.add_option("-b", "--band", dest="band", default="GSM900",
                       help="Specify the GSM band for the frequency.\nAvailable bands are: " + bands_list)
     parser.add_option("-s", "--samp-rate", dest="samp_rate", type="float", default=2e6,
                       help="Set sample rate [default=%default] - allowed values even_number*0.2e6")
