[hamradio-commits] [gnss-sdr] 202/236: several receiver configuration mechanism simplifications and several bug fixes. Work in progress

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Tue Apr 26 16:02:54 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 0a5573f666340294a0e079f2ff1465fe10c0f129
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Thu Apr 21 18:54:08 2016 +0200

    several receiver configuration mechanism simplifications and several bug fixes. Work in progress
---
 conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf       | 105 ++--
 conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf           | 263 +--------
 ...ltime_new.conf => gnss-sdr_Hybrid_nsr_bak.conf} | 282 +++++-----
 ...tichannel_GPS_L1_Flexiband_bin_file_III_1a.conf |  66 +--
 ...ltichannel_GPS_L1_Flexiband_realtime_II_3b.conf |  50 +-
 ...1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf |  70 +--
 ...channel_GPS_L2_M_Flexiband_bin_file_III_1a.conf |  21 +-
 ...channel_GPS_L2_M_Flexiband_bin_file_III_1b.conf | 241 ++-------
 ...alileo_e5a_noncoherent_iq_acquisition_caf_cc.cc |   1 +
 .../galileo_pcps_8ms_acquisition_cc.cc             |   1 +
 .../gnuradio_blocks/pcps_acquisition_cc.cc         |   5 -
 .../pcps_acquisition_fine_doppler_cc.cc            |   1 +
 .../gnuradio_blocks/pcps_acquisition_sc.cc         |   1 +
 .../pcps_assisted_acquisition_cc.cc                |   1 +
 .../gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc  |   1 +
 .../pcps_multithread_acquisition_cc.cc             |   1 +
 .../gnuradio_blocks/pcps_opencl_acquisition_cc.cc  |   1 +
 .../pcps_quicksync_acquisition_cc.cc               |   3 +-
 .../gnuradio_blocks/pcps_tong_acquisition_cc.cc    |   1 +
 src/algorithms/channel/adapters/channel.cc         |   3 +-
 src/algorithms/channel/libs/CMakeLists.txt         |   3 +
 src/algorithms/channel/libs/channel_fsm.cc         |  15 +-
 src/algorithms/observables/adapters/CMakeLists.txt |   1 -
 .../observables/adapters/mixed_observables.cc      |  89 ----
 .../observables/adapters/mixed_observables.h       |  88 ---
 .../observables/gnuradio_blocks/CMakeLists.txt     |   1 -
 .../gnuradio_blocks/mixed_observables_cc.cc        | 221 --------
 .../gnuradio_blocks/mixed_observables_cc.h         |  70 ---
 .../galileo_e1b_telemetry_decoder_cc.cc            |   2 -
 .../gps_l1_ca_telemetry_decoder_cc.cc              | 425 +++++++--------
 .../gps_l1_ca_telemetry_decoder_cc.h               |   2 +-
 .../galileo_e1_dll_pll_veml_tracking_cc.cc         |   9 +-
 .../galileo_e1_tcp_connector_tracking_cc.cc        |   9 +-
 .../galileo_e5a_dll_pll_tracking_cc.cc             |  14 +-
 .../gps_l1_ca_dll_pll_c_aid_tracking_cc.cc         |   9 +-
 .../gps_l1_ca_dll_pll_c_aid_tracking_sc.cc         |   7 +-
 .../gps_l1_ca_dll_pll_tracking_cc.cc               |   9 +-
 .../gps_l1_ca_dll_pll_tracking_gpu_cc.cc           |   7 +-
 .../gps_l1_ca_tcp_connector_tracking_cc.cc         |   6 +-
 .../gps_l2_m_dll_pll_tracking_cc.cc                |   7 +-
 src/core/receiver/gnss_block_factory.cc            | 590 ++++-----------------
 src/core/receiver/gnss_block_factory.h             |   9 -
 src/core/receiver/gnss_flowgraph.cc                |  67 +--
 src/core/system_parameters/gnss_signal.cc          |   4 +
 src/core/system_parameters/gnss_signal.h           |   1 +
 src/tests/CMakeLists.txt                           |   1 +
 src/utils/front-end-cal/CMakeLists.txt             |  34 +-
 47 files changed, 775 insertions(+), 2043 deletions(-)

diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
index 02b1485..c8030fb 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
@@ -1,7 +1,7 @@
 ; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals.
 ; Set SignalSource.device_address to the IP address of your device
 ; and run:
-; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
+; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
 ;
 
 [GNSS-SDR]
@@ -29,11 +29,12 @@ GNSS-SDR.SUPL_CI=0x31b0
 ; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
 SignalSource.implementation=UHD_Signal_Source
 
-; # When left empty, the device discovery routines will search all available transports on the system (ethernet, usb...)
+; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
 SignalSource.device_address=192.168.40.2
 
 ; # item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-SignalSource.item_type=gr_complex
+;SignalSource.item_type=gr_complex
+SignalSource.item_type=cshort
 
 ; # sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
@@ -42,7 +43,7 @@ SignalSource.sampling_frequency=4000000
 SignalSource.freq=1575420000
 
 ; # gain: Front-end Gain in [dB]
-SignalSource.gain=50
+SignalSource.gain=40
 
 ; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
 SignalSource.subdevice=A:0
@@ -69,13 +70,15 @@ SignalSource.enable_throttle_control=false
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
 ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;SignalConditioner.implementation=Signal_Conditioner
-SignalConditioner.implementation=Pass_Through
+SignalConditioner.implementation=Signal_Conditioner
+;SignalConditioner.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER CONFIG ############
 ;## Changes the type of input data. Please disable it in this version.
 ;#implementation: [Pass_Through] disables this block
 DataTypeAdapter.implementation=Pass_Through
+DataTypeAdapter.item_type=cshort
+;DataTypeAdapter.item_type=cbyte
 
 ;######### INPUT_FILTER CONFIG ############
 ;## Filter the input data. Can be combined with frequency translation for IF signals
@@ -85,9 +88,9 @@ DataTypeAdapter.implementation=Pass_Through
 ;#[Fir_Filter] enables a FIR Filter
 ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
 
-;InputFilter.implementation=Fir_Filter
+InputFilter.implementation=Fir_Filter
 ;InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.implementation=Pass_Through
+;InputFilter.implementation=Pass_Through
 
 ;#dump: Dump the filtered data to a file.
 InputFilter.dump=false
@@ -100,7 +103,7 @@ InputFilter.dump_filename=../data/input_filter.dat
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
+InputFilter.input_item_type=cshort
 
 ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
 InputFilter.output_item_type=gr_complex
@@ -109,7 +112,7 @@ InputFilter.output_item_type=gr_complex
 InputFilter.taps_item_type=float
 
 ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
+InputFilter.number_of_taps=11
 
 ;#number_of _bands: Number of frequency bands in the filter.
 InputFilter.number_of_bands=2
@@ -119,8 +122,8 @@ InputFilter.number_of_bands=2
 ;#The number of band_begin and band_end elements must match the number of bands
 
 InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
+InputFilter.band1_end=0.48
+InputFilter.band2_begin=0.52
 InputFilter.band2_end=1.0
 
 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
@@ -177,17 +180,29 @@ Resampler.sample_freq_out=4000000
 
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
-Channels_GPS.count=12
+Channels_1C.count=8
 ;#count: Number of available Galileo satellite channels.
-Channels_Galileo.count=0
+Channels_1B.count=0
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
 ;#if the option is disabled by default is assigned GPS
-Channel.system=GPS
-
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
+;Channel.system=GPS
 Channel.signal=1C
+;#if the option is disabled by default is assigned "1C" GPS L1 C/A
+
+;Channel0.signal=1C
+;Channel1.signal=1C
+;Channel2.signal=1C
+;Channel3.signal=1C
+;Channel4.signal=1C
+;Channel5.signal=1C
+;Channel6.signal=1C
+;Channel7.signal=1C
+;Channel8.signal=1C
+;Channel9.signal=1C
+;Channel10.signal=1C
+;Channel11.signal=1C
 
 ;######### SPECIFIC CHANNELS CONFIG ######
 ;#The following options are specific to each channel and overwrite the generic options
@@ -210,30 +225,30 @@ Channel.signal=1C
 ;######### ACQUISITION GLOBAL CONFIG ############
 
 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
+Acquisition_1C.dump=false
 ;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
+Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
+Acquisition_1C.item_type=gr_complex
 ;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
+Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.coherent_integration_time_ms=1
+Acquisition_1C.coherent_integration_time_ms=1
 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
-;Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Tong_Acquisition
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.005
+Acquisition_1C.threshold=0.01
 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.001
+;Acquisition_1C.pfa=0.00001
 ;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=6000
+Acquisition_1C.doppler_max=8000
 ;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=500
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
-Acquisition_GPS.bit_transition_flag=false
+Acquisition_1C.doppler_step=500
+;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
+maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
+Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
-Acquisition_GPS.max_dwells=1
+Acquisition_1C.max_dwells=1
 
 
 ;######### ACQUISITION CHANNELS CONFIG ######
@@ -243,37 +258,37 @@ Acquisition_GPS.max_dwells=1
 ;######### TRACKING GLOBAL CONFIG ############
 
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples.
-Tracking_GPS.item_type=gr_complex
+Tracking_1C.item_type=gr_complex
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
+Tracking_1C.if=0
 
 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=false
+Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=./tracking_ch_
+Tracking_1C.dump_filename=./tracking_ch_
 
 ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=30.0;
+Tracking_1C.pll_bw_hz=30.0;
 
 ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=4.0;
+Tracking_1C.dll_bw_hz=4.0;
 
 ;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
+Tracking_1C.order=3;
 
 ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_GPS.early_late_space_chips=0.5;
+Tracking_1C.early_late_space_chips=0.5;
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
 ;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=1;
+TelemetryDecoder_1C.decimation_factor=1;
 
 ;######### OBSERVABLES CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
@@ -302,7 +317,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -316,7 +331,7 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
-PVT.flag_rtcm_server=false
+PVT.flag_rtcm_server=true
 PVT.flag_rtcm_tty_port=false
 PVT.rtcm_dump_devname=/dev/pts/1
 
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
index 9de6726..c171bd1 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
@@ -1,4 +1,3 @@
-; Default configuration file
 ; You can define your own receiver and invoke it by doing
 ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
 ;
@@ -13,281 +12,73 @@ GNSS-SDR.internal_fs_hz=4000000
 ControlThread.wait_for_flowgraph=false
 
 ;######### SIGNAL_SOURCE CONFIG ############
-;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
 SignalSource.implementation=File_Signal_Source
-
-;#filename: path to file with the captured GNSS signal samples to be processed
-SignalSource.filename=/home/javier/ClionProjects/gnss-sim/build/signal_out.bin
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-SignalSource.item_type=byte
-
-;#sampling_frequency: Original Signal sampling frequency in [Hz]
+SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat
+SignalSource.item_type=gr_complex
 SignalSource.sampling_frequency=4000000
-
-;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
-
-;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
-SignalSource.samples=0
-
-;#repeat: Repeat the processing file. Disable this option in this version
+SignalSource.samples=250000000
 SignalSource.repeat=false
-
-;#dump: Dump the Signal source data to a file. Disable this option in this version
 SignalSource.dump=false
-
 SignalSource.dump_filename=../data/signal_source.dat
-
-
-;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data.
-
-;#implementation: Use [Pass_Through] or [Signal_Conditioner]
-;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
-;SignalConditioner.implementation=Signal_Conditioner
-SignalConditioner.implementation=Signal_Conditioner
-
-;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
-;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Ibyte_To_Complex
-
-;######### INPUT_FILTER CONFIG ############
-;## Filter the input data. Can be combined with frequency translation for IF signals
-
-;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
-
-;InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-InputFilter.implementation=Pass_Through
-
-;#dump: Dump the filtered data to a file.
-InputFilter.dump=false
-
-;#dump_filename: Log path and filename.
-InputFilter.dump_filename=../data/input_filter.dat
-
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
-;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
-
-;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
-
-;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
-
-;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
-InputFilter.taps_item_type=float
-
-;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=5
-
-;#number_of _bands: Number of frequency bands in the filter.
-InputFilter.number_of_bands=2
-
-;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
-;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
-;#The number of band_begin and band_end elements must match the number of bands
-
-InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.45
-InputFilter.band2_begin=0.55
-InputFilter.band2_end=1.0
-
-;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
-;#The number of ampl_begin and ampl_end elements must match the number of bands
-
-InputFilter.ampl1_begin=1.0
-InputFilter.ampl1_end=1.0
-InputFilter.ampl2_begin=0.0
-InputFilter.ampl2_end=0.0
-
-;#band_error: weighting applied to each band (usually 1).
-;#The number of band_error elements must match the number of bands
-InputFilter.band1_error=1.0
-InputFilter.band2_error=1.0
-
-;#filter_type: one of "bandpass", "hilbert" or "differentiator"
-InputFilter.filter_type=bandpass
-
-;#grid_density: determines how accurately the filter will be constructed.
-;The minimum value is 16; higher values are slower to compute the filter.
-InputFilter.grid_density=16
-
-;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
-;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
-
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
-
-
-
-;######### RESAMPLER CONFIG ############
-;## Resamples the input data.
-
-;#implementation: Use [Pass_Through] or [Direct_Resampler]
-;#[Pass_Through] disables this block
-;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
-Resampler.implementation=Pass_Through
-
-;#dump: Dump the resamplered data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=8000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
+SignalConditioner.implementation=Pass_Through
 
 
 ;######### CHANNELS GLOBAL CONFIG ############
-;#count: Number of available GPS satellite channels.
-Channels_GPS.count=12
-;#count: Number of available Galileo satellite channels.
-Channels_Galileo.count=0
-;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels_1C.count=8
 Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-Channel.system=GPS
-
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel.signal=1C
 
 
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-;######### CHANNEL 0 CONFIG ############
-
-;Channel0.system=GPS
-;Channel0.signal=1C
-
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
-;Channel0.satellite=11
-
-;######### CHANNEL 1 CONFIG ############
-
-;Channel1.system=GPS
-;Channel1.signal=1C
-;Channel1.satellite=18
-
 ;######### ACQUISITION GLOBAL CONFIG ############
-
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
-;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
-;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.sampled_ms=1
-;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold
-Acquisition_GPS.threshold=0.01
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.01
-;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=6000
-;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=100
+Acquisition_1C.dump=false
+Acquisition_1C.dump_filename=./acq_dump.dat
+Acquisition_1C.item_type=gr_complex
+Acquisition_1C.if=0
+Acquisition_1C.sampled_ms=1
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.threshold=0.005
+;Acquisition_1C.pfa=0.01
+Acquisition_1C.doppler_max=10000
+Acquisition_1C.doppler_step=500
 
 ;######### TRACKING GLOBAL CONFIG ############
-
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
-;#item_type: Type and resolution for each of the signal samples.
-Tracking_GPS.item_type=gr_complex
-
-;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
-
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=true
-
-;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=../data/epl_tracking_ch_
-
-;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=15.0;
-
-;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=1.5
-
-;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
+Tracking_1C.item_type=gr_complex
+Tracking_1C.if=0
+Tracking_1C.dump=false
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+Tracking_1C.pll_bw_hz=45.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.order=3;
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
-;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
-;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=1;
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
+TelemetryDecoder_1C.decimation_factor=1;
 
 ;######### OBSERVABLES CONFIG ############
-;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
-
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
-
-;#dump_filename: Log path and filename.
 Observables.dump_filename=./observables.dat
 
 
 ;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
 PVT.implementation=GPS_L1_CA_PVT
-
-;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=100
-
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
-
-;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
 PVT.output_rate_ms=10
-
-;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
 PVT.flag_nmea_tty_port=false;
-
-;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
-
 PVT.flag_rtcm_server=false
 PVT.flag_rtcm_tty_port=false
 PVT.rtcm_dump_devname=/dev/pts/1
-
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
+
diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf b/conf/gnss-sdr_Hybrid_nsr_bak.conf
similarity index 57%
rename from conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
rename to conf/gnss-sdr_Hybrid_nsr_bak.conf
index c8030fb..d800508 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
+++ b/conf/gnss-sdr_Hybrid_nsr_bak.conf
@@ -1,20 +1,22 @@
-; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals.
-; Set SignalSource.device_address to the IP address of your device
-; and run:
-; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
+; Default configuration file
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
 ;
 
 [GNSS-SDR]
 
 ;######### GLOBAL OPTIONS ##################
 ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=4000000
+;GNSS-SDR.internal_fs_hz=6826700
+GNSS-SDR.internal_fs_hz=2560000
+;GNSS-SDR.internal_fs_hz=4096000
+;GNSS-SDR.internal_fs_hz=5120000
 
 ;######### CONTROL_THREAD CONFIG ############
 ControlThread.wait_for_flowgraph=false
 
 ;######### SUPL RRLP GPS assistance configuration #####
-GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_gps_enabled=true
 GNSS-SDR.SUPL_read_gps_assistance_xml=true
 GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com
 GNSS-SDR.SUPL_gps_ephemeris_port=7275
@@ -26,36 +28,30 @@ GNSS-SDR.SUPL_LAC=0x59e2
 GNSS-SDR.SUPL_CI=0x31b0
 
 ;######### SIGNAL_SOURCE CONFIG ############
-; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
-SignalSource.implementation=UHD_Signal_Source
+;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+SignalSource.implementation=Nsr_File_Signal_Source
 
-; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
-SignalSource.device_address=192.168.40.2
+;#filename: path to file with the captured GNSS signal samples to be processed
+SignalSource.filename=/media/javier/SISTEMA/signals/ifen/E1L1_FE0_Band0.stream
 
-; # item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-;SignalSource.item_type=gr_complex
-SignalSource.item_type=cshort
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.item_type=byte
 
-; # sampling_frequency: Original Signal sampling frequency in [Hz]
-SignalSource.sampling_frequency=4000000
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
+SignalSource.sampling_frequency=20480000
 
-; # freq: RF front-end center frequency in [Hz]
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
-; # gain: Front-end Gain in [dB]
-SignalSource.gain=40
-
-; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
-SignalSource.subdevice=A:0
-
-; # samples: Number of samples to be processed. Notice that 0 indicates the entire file.
+;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
 SignalSource.samples=0
 
-; # repeat: Repeat the processing file. Disable this option in this version
+;#repeat: Repeat the processing file. Disable this option in this version
 SignalSource.repeat=false
 
-; # dump: Dump the Signal source data to a file. Disable this option in this version
+;#dump: Dump the Signal source data to a file. Disable this option in this version
 SignalSource.dump=false
+
 SignalSource.dump_filename=../data/signal_source.dat
 
 
@@ -71,26 +67,21 @@ SignalSource.enable_throttle_control=false
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
 ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
 SignalConditioner.implementation=Signal_Conditioner
-;SignalConditioner.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER CONFIG ############
-;## Changes the type of input data. Please disable it in this version.
+;## Changes the type of input data.
 ;#implementation: [Pass_Through] disables this block
 DataTypeAdapter.implementation=Pass_Through
-DataTypeAdapter.item_type=cshort
-;DataTypeAdapter.item_type=cbyte
+DataTypeAdapter.item_type=float
 
 ;######### INPUT_FILTER CONFIG ############
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Pass_Through] disables this block
-;#[Fir_Filter] enables a FIR Filter
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
+;# that shifts IF down to zero Hz.
 
-InputFilter.implementation=Fir_Filter
-;InputFilter.implementation=Freq_Xlating_Fir_Filter
-;InputFilter.implementation=Pass_Through
+InputFilter.implementation=Freq_Xlating_Fir_Filter
 
 ;#dump: Dump the filtered data to a file.
 InputFilter.dump=false
@@ -100,10 +91,12 @@ InputFilter.dump_filename=../data/input_filter.dat
 
 ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
+;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=cshort
+InputFilter.input_item_type=float
 
 ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
 InputFilter.output_item_type=gr_complex
@@ -112,7 +105,7 @@ InputFilter.output_item_type=gr_complex
 InputFilter.taps_item_type=float
 
 ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
-InputFilter.number_of_taps=11
+InputFilter.number_of_taps=5
 
 ;#number_of _bands: Number of frequency bands in the filter.
 InputFilter.number_of_bands=2
@@ -122,8 +115,8 @@ InputFilter.number_of_bands=2
 ;#The number of band_begin and band_end elements must match the number of bands
 
 InputFilter.band1_begin=0.0
-InputFilter.band1_end=0.48
-InputFilter.band2_begin=0.52
+InputFilter.band1_end=0.45
+InputFilter.band2_begin=0.55
 InputFilter.band2_end=1.0
 
 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
@@ -146,12 +139,16 @@ InputFilter.filter_type=bandpass
 ;The minimum value is 16; higher values are slower to compute the filter.
 InputFilter.grid_density=16
 
+;# Original sampling frequency stored in the signal file
+InputFilter.sampling_frequency=20480000
+
 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
 ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
 
-InputFilter.sampling_frequency=4000000
-InputFilter.IF=0
+InputFilter.IF=5499998.47412109
 
+;# Decimation factor after the frequency tranaslating block
+InputFilter.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG ############
@@ -160,69 +157,25 @@ InputFilter.IF=0
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
 ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
-;Resampler.implementation=Direct_Resampler
 Resampler.implementation=Pass_Through
 
-;#dump: Dump the resampled data to a file.
-Resampler.dump=false
-;#dump_filename: Log path and filename.
-Resampler.dump_filename=../data/resampler.dat
-
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Resampler.item_type=gr_complex
-
-;#sample_freq_in: the sample frequency of the input signal
-Resampler.sample_freq_in=4000000
-
-;#sample_freq_out: the desired sample frequency of the output signal
-Resampler.sample_freq_out=4000000
-
-
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
 Channels_1C.count=8
 ;#count: Number of available Galileo satellite channels.
-Channels_1B.count=0
+Channels_1B.count=8
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-;Channel.system=GPS
-Channel.signal=1C
-;#if the option is disabled by default is assigned "1C" GPS L1 C/A
-
-;Channel0.signal=1C
-;Channel1.signal=1C
-;Channel2.signal=1C
-;Channel3.signal=1C
-;Channel4.signal=1C
-;Channel5.signal=1C
-;Channel6.signal=1C
-;Channel7.signal=1C
-;Channel8.signal=1C
-;Channel9.signal=1C
-;Channel10.signal=1C
-;Channel11.signal=1C
-
-;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
-
-;######### CHANNEL 0 CONFIG ############
 
-;Channel0.system=GPS
-;Channel0.signal=1C
+;#signal:
+;# "1C" GPS L1 C/A
+;# "2S" GPS L2 L2C (M)
+;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
+;# "5X" GALILEO E5a I+Q
 
-;#satellite: Satellite PRN ID for this channel. Disable this option to random search
-;Channel0.satellite=11
 
-;######### CHANNEL 1 CONFIG ############
 
-;Channel1.system=GPS
-;Channel1.signal=1C
-;Channel1.satellite=18
-
-
-;######### ACQUISITION GLOBAL CONFIG ############
+;######### GPS ACQUISITION CONFIG ############
 
 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
@@ -233,33 +186,47 @@ Acquisition_1C.item_type=gr_complex
 ;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_1C.coherent_integration_time_ms=1
+Acquisition_1C.sampled_ms=1
 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
-;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_1C.threshold=0.01
+;#threshold: Acquisition threshold
+Acquisition_1C.threshold=0.0075
 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_1C.pfa=0.00001
+;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_1C.doppler_max=8000
+Acquisition_1C.doppler_max=5000
 ;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_1C.doppler_step=500
-;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
-Acquisition_1C.bit_transition_flag=false
-;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
-Acquisition_1C.max_dwells=1
+Acquisition_1C.doppler_step=250
 
 
-;######### ACQUISITION CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options
+;######### GALILEO ACQUISITION CONFIG ############
 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+Acquisition_1B.dump=false
+;#filename: Log path and filename
+Acquisition_1B.dump_filename=./acq_dump.dat
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+Acquisition_1B.item_type=gr_complex
+;#if: Signal intermediate frequency in [Hz]
+Acquisition_1B.if=0
+;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
+Acquisition_1B.sampled_ms=4
+;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
+;#threshold: Acquisition threshold
+;Acquisition_1B.threshold=0
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+Acquisition_1B.pfa=0.0000002
+;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_1B.doppler_max=15000
+;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_1B.doppler_step=125
 
-;######### TRACKING GLOBAL CONFIG ############
+;######### TRACKING GPS CONFIG ############
 
-;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
+;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
 Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
-;#item_type: Type and resolution for each of the signal samples.
+;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
@@ -269,30 +236,80 @@ Tracking_1C.if=0
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_1C.dump_filename=./tracking_ch_
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+;# Extended correlation after telemetry bit synchronization
+;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
+;# Longer integration period require more stable front-end LO
+
+Tracking_1C.extend_correlation_ms=10
 
 ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_1C.pll_bw_hz=30.0;
+
+Tracking_1C.pll_bw_hz=45;
+Tracking_1C.pll_bw_narrow_hz=40;
 
 ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_1C.dll_bw_hz=4.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dll_bw_narrow_hz=2.0;
+
+;#fll_bw_hz: FLL loop filter bandwidth [Hz]
+Tracking_1C.fll_bw_hz=10.0;
 
 ;#order: PLL/DLL loop filter order [2] or [3]
 Tracking_1C.order=3;
 
-;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_1C.early_late_space_chips=0.5;
+;######### TRACKING GALILEO CONFIG ############
+
+;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
+Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
+;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
+Tracking_1B.item_type=gr_complex
+
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
+Tracking_1B.if=0
+
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
+Tracking_1B.dump=false
+
+;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
+Tracking_1B.dump_filename=../data/veml_tracking_ch_
+
+;#pll_bw_hz: PLL loop filter bandwidth [Hz]
+Tracking_1B.pll_bw_hz=15.0;
+
+;#dll_bw_hz: DLL loop filter bandwidth [Hz]
+Tracking_1B.dll_bw_hz=2.0;
+
+;#fll_bw_hz: FLL loop filter bandwidth [Hz]
+Tracking_1B.fll_bw_hz=10.0;
+
+;#order: PLL/DLL loop filter order [2] or [3]
+Tracking_1B.order=3;
+
+;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
+Tracking_1B.early_late_space_chips=0.15;
+
+;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
+Tracking_1B.very_early_late_space_chips=0.6;
+
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
 TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
 TelemetryDecoder_1C.dump=false
 ;#decimation factor
-TelemetryDecoder_1C.decimation_factor=1;
+TelemetryDecoder_1C.decimation_factor=4;
+
+;######### TELEMETRY DECODER GALILEO CONFIG ############
+;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
+TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
+TelemetryDecoder_1B.dump=false
+TelemetryDecoder_1B_factor=4;
 
 ;######### OBSERVABLES CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=GPS_L1_CA_Observables
+Observables.implementation=Hybrid_Observables
 
 ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
@@ -302,38 +319,27 @@ Observables.dump_filename=./observables.dat
 
 
 ;######### PVT CONFIG ############
-;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
-
+;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT Hybrid_PVT GALILEO_E1_PVT] in this version.
+PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
+PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
-PVT.output_rate_ms=100
+PVT.output_rate_ms=10;
 
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
-PVT.display_rate_ms=500
-
-;# KML, GeoJSON, NMEA and RTCM output configuration
-
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
-PVT.dump_filename=./PVT
-
-;#nmea_dump_filename: NMEA log path and filename
-PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
-PVT.flag_nmea_tty_port=false;
+PVT.display_rate_ms=500;
 
-;#nmea_dump_devname: serial device descriptor for NMEA logging
-PVT.nmea_dump_devname=/dev/pts/4
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
+PVT.dump=false
 
-PVT.flag_rtcm_server=true
+PVT.flag_rtcm_server=false
 PVT.flag_rtcm_tty_port=false
 PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
-PVT.dump=false
+;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump_filename=./PVT
+
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
index 1464d2a..7b382d9 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
@@ -29,7 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0
 SignalSource.implementation=Flexiband_Signal_Source
 
 SignalSource.flag_read_file=true
-SignalSource.signal_file=/datalogger/L125_III1b_210s.usb
+SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
 
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=gr_complex
@@ -130,7 +130,8 @@ InputFilter0.grid_density=16
 ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
 InputFilter0.sampling_frequency=20000000
 ;# IF deviation due to front-end LO inaccuracies [HZ]
-InputFilter0.IF=-205000
+InputFilter0.IF=0;
+;#-205000
 
 ;# Decimation factor after the frequency tranaslating block
 InputFilter0.decimation_factor=8
@@ -195,14 +196,10 @@ Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
-Channels_GPS.count=8
-;#count: Number of available Galileo satellite channels.
-Channels_Galileo.count=0
+Channels_1C.count=8
+
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
-;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
-;#if the option is disabled by default is assigned GPS
-Channel.system=GPS
 
 ;# CHANNEL CONNECTION
 Channel0.RF_channel_ID=0
@@ -225,31 +222,32 @@ Channel.signal=1C
 ;######### ACQUISITION GLOBAL CONFIG ############
 
 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
+Acquisition_1C.dump=false
 ;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
+Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
+Acquisition_1C.item_type=gr_complex
 ;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
+Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.coherent_integration_time_ms=1
+Acquisition_1C.coherent_integration_time_ms=1
 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.use_CFAR_algorithm=false;
 ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.012
+Acquisition_1C.threshold=15
 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.0001
+;Acquisition_1C.pfa=0.0001
 ;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
+Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=250
+Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
 ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
-Acquisition_GPS.bit_transition_flag=false
+Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
-Acquisition_GPS.max_dwells=1
+Acquisition_1C.max_dwells=1
 
 
 ;######### ACQUISITION CHANNELS CONFIG ######
@@ -259,37 +257,41 @@ Acquisition_GPS.max_dwells=1
 ;######### TRACKING GLOBAL CONFIG ############
 
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_GPS.item_type=gr_complex
+Tracking_1C.item_type=gr_complex
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
+Tracking_1C.if=0
 
 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=false
+Tracking_1C.dump=true
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=./tracking_ch_
+Tracking_1C.dump_filename=../data/epl_tracking_ch_
+
+Tracking_1C.extend_correlation_ms=10
 
 ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=40.0;
+Tracking_1C.pll_bw_hz=40.0;
+Tracking_1C.pll_bw_narrow_hz=35;
 
 ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=3.0;
+Tracking_1C.dll_bw_hz=2.0;
+Tracking_1C.dll_bw_narrow_hz=2.0;
 
 ;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
+Tracking_1C.order=3;
 
 ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_GPS.early_late_space_chips=0.5;
+Tracking_1C.early_late_space_chips=0.5;
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
 ;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=1;
+TelemetryDecoder_1C.decimation_factor=1;
 
 ;######### OBSERVABLES CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
index 3072fce..450eee3 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
@@ -192,7 +192,7 @@ Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
-Channels_GPS.count=8
+Channels_1C.count=8
 
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
@@ -232,31 +232,31 @@ Channel7.signal=1C
 ;######### ACQUISITION GLOBAL CONFIG ############
 
 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
-Acquisition_GPS.dump=false
+Acquisition_1C.dump=false
 ;#filename: Log path and filename
-Acquisition_GPS.dump_filename=./acq_dump.dat
+Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_GPS.item_type=gr_complex
+Acquisition_1C.item_type=gr_complex
 ;#if: Signal intermediate frequency in [Hz]
-Acquisition_GPS.if=0
+Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
-Acquisition_GPS.coherent_integration_time_ms=1
+Acquisition_1C.coherent_integration_time_ms=1
 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
+Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
-Acquisition_GPS.threshold=0.012
+Acquisition_1C.threshold=0.012
 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
-;Acquisition_GPS.pfa=0.0001
+;Acquisition_1C.pfa=0.0001
 ;#doppler_max: Maximum expected Doppler shift [Hz]
-Acquisition_GPS.doppler_max=10000
+Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
-Acquisition_GPS.doppler_step=250
+Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
 ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
-Acquisition_GPS.bit_transition_flag=false
+Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
-Acquisition_GPS.max_dwells=1
+Acquisition_1C.max_dwells=1
 
 
 ;######### ACQUISITION CHANNELS CONFIG ######
@@ -266,37 +266,37 @@ Acquisition_GPS.max_dwells=1
 ;######### TRACKING GLOBAL CONFIG ############
 
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
-Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples.
-Tracking_GPS.item_type=gr_complex
+Tracking_1C.item_type=gr_complex
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
-Tracking_GPS.if=0
+Tracking_1C.if=0
 
 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_GPS.dump=false
+Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
-Tracking_GPS.dump_filename=./tracking_ch_
+Tracking_1C.dump_filename=./tracking_ch_
 
 ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
-Tracking_GPS.pll_bw_hz=40.0;
+Tracking_1C.pll_bw_hz=40.0;
 
 ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
-Tracking_GPS.dll_bw_hz=3.0;
+Tracking_1C.dll_bw_hz=3.0;
 
 ;#order: PLL/DLL loop filter order [2] or [3]
-Tracking_GPS.order=3;
+Tracking_1C.order=3;
 
 ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
-Tracking_GPS.early_late_space_chips=0.5;
+Tracking_1C.early_late_space_chips=0.5;
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
-TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
-TelemetryDecoder_GPS.dump=false
+TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_1C.dump=false
 ;#decimation factor
-TelemetryDecoder_GPS.decimation_factor=1;
+TelemetryDecoder_1C.decimation_factor=1;
 
 ;######### OBSERVABLES CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
index 68e5a0b..e0641d0 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
@@ -29,8 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0
 SignalSource.implementation=Flexiband_Signal_Source
 
 SignalSource.flag_read_file=true
-SignalSource.signal_file=/datalogger/L125_III1b_210s.usb
-#SignalSource.signal_file=/datalogger/captures/flexiband_III_1b_cap1.usb
+SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
 
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=gr_complex
@@ -270,15 +269,13 @@ Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
-Channels_1C.count=8
-Channels_1B.count=1
-Channels_2S.count=1
-;#count: Number of available Galileo satellite channels.
-;Channels_Galileo.count=0
+Channels_1C.count=2
+Channels_1B.count=4
+Channels_2S.count=4
+
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-
 ;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
@@ -288,55 +285,22 @@ Channels.in_acquisition=1
 
 ;# CHANNEL CONNECTION
 Channel0.RF_channel_ID=0
-Channel0.signal=1C
-
 Channel1.RF_channel_ID=0
-Channel1.signal=1C
-
-Channel2.RF_channel_ID=0
-Channel2.signal=1C
-
-Channel3.RF_channel_ID=0
-Channel3.signal=1C
-
-Channel4.RF_channel_ID=0
-Channel4.signal=1C
-
-Channel5.RF_channel_ID=0
-Channel5.signal=1C
-
+Channel2.RF_channel_ID=1
+Channel3.RF_channel_ID=1
+Channel4.RF_channel_ID=1
+Channel5.RF_channel_ID=1
 Channel6.RF_channel_ID=0
-Channel6.signal=1C
-
 Channel7.RF_channel_ID=0
-Channel7.signal=1C
-
 Channel8.RF_channel_ID=0
-Channel8.signal=1B
-
-Channel9.RF_channel_ID=1
-Channel9.signal=2S
-
+Channel9.RF_channel_ID=0
 Channel10.RF_channel_ID=1
-Channel10.signal=2S
-
 Channel11.RF_channel_ID=1
-Channel11.signal=2S
-
 Channel12.RF_channel_ID=1
-Channel12.signal=2S
-
 Channel13.RF_channel_ID=1
-Channel13.signal=2S
-
 Channel14.RF_channel_ID=1
-Channel14.signal=2S
-
 Channel15.RF_channel_ID=1
-Channel15.signal=2S
 
-Channel16.RF_channel_ID=1
-Channel16.signal=2S
 
 ;######### SPECIFIC CHANNELS CONFIG ######
 ;#The following options are specific to each channel and overwrite the generic options
@@ -378,7 +342,7 @@ Acquisition_1C.max_dwells=1
 
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
 
-Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 Tracking_1C.item_type=gr_complex
 Tracking_1C.if=0
 Tracking_1C.dump=false
@@ -404,8 +368,8 @@ Acquisition_2S.max_dwells=1
 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
 Tracking_2S.item_type=gr_complex
 Tracking_2S.if=0
-Tracking_2S.dump=false
-Tracking_2S.dump_filename=./tracking_ch_
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=../data/epl_tracking_ch_
 Tracking_2S.pll_bw_hz=1.5;
 Tracking_2S.dll_bw_hz=0.3;
 Tracking_2S.order=3;
@@ -489,7 +453,7 @@ TelemetryDecoder_1B.decimation_factor=5;
 
 ;######### OBSERVABLES CONFIG ############
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
-Observables.implementation=Mixed_Observables
+Observables.implementation=Hybrid_Observables
 
 ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
@@ -500,19 +464,19 @@ Observables.dump_filename=./observables.dat
 
 ;######### PVT CONFIG ############
 ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
-PVT.implementation=GPS_L1_CA_PVT
+PVT.implementation=Hybrid_PVT
 
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
-PVT.flag_averaging=true
+PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
 PVT.output_rate_ms=100
 
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
-PVT.display_rate_ms=500
+PVT.display_rate_ms=100
 
 ;# KML, GeoJSON, NMEA and RTCM output configuration
 
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
index 1525d8f..ad7cd61 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
@@ -28,9 +28,9 @@ GNSS-SDR.SUPL_CI=0x31b0
 ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
 SignalSource.implementation=Flexiband_Signal_Source
 
-SignalSource.flag_read_file=false
+SignalSource.flag_read_file=true
 ;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin
-SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb
+SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
 
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=gr_complex
@@ -269,7 +269,7 @@ Resampler2.implementation=Pass_Through
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
 Channels_1C.count=1
-Channels_2S.count=1
+Channels_2S.count=7
 
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
@@ -282,17 +282,14 @@ Channels.in_acquisition=1
 
 ;# CHANNEL CONNECTION
 Channel0.RF_channel_ID=0
-Channel0.signal=1C
 
 Channel1.RF_channel_ID=1
-Channel1.signal=2S
-
-;Channel2.RF_channel_ID=0
-;Channel3.RF_channel_ID=0
-;Channel4.RF_channel_ID=0
-;Channel5.RF_channel_ID=0
-;Channel6.RF_channel_ID=0
-;Channel7.RF_channel_ID=0
+Channel2.RF_channel_ID=0
+Channel3.RF_channel_ID=0
+Channel4.RF_channel_ID=0
+Channel5.RF_channel_ID=0
+Channel6.RF_channel_ID=0
+Channel7.RF_channel_ID=0
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
index 36c3b6f..ef46f32 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
@@ -29,8 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0
 SignalSource.implementation=Flexiband_Signal_Source
 
 SignalSource.flag_read_file=true
-#SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb
-SignalSource.signal_file=/datalogger/captures/test.dat
+SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
 
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=gr_complex
@@ -269,13 +268,11 @@ Resampler2.implementation=Pass_Through
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
 Channels_1C.count=1
-Channels_2S.count=1
+Channels_2S.count=5
 ;#count: Number of available Galileo satellite channels.
-;Channels_Galileo.count=0
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-
 ;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
@@ -285,53 +282,21 @@ Channels.in_acquisition=1
 
 ;# CHANNEL CONNECTION
 Channel0.RF_channel_ID=0
-Channel0.signal=1C
-
 Channel1.RF_channel_ID=1
-Channel1.signal=2S
-
 Channel2.RF_channel_ID=1
-Channel2.signal=2S
-
 Channel3.RF_channel_ID=1
-Channel3.signal=2S
-
 Channel4.RF_channel_ID=1
-Channel4.signal=2S
-
 Channel5.RF_channel_ID=1
-Channel5.signal=2S
-
 Channel6.RF_channel_ID=1
-Channel6.signal=2S
-
 Channel7.RF_channel_ID=1
-Channel7.signal=2S
-
-
 Channel8.RF_channel_ID=1
-Channel8.signal=2S
-
 Channel9.RF_channel_ID=1
-Channel9.signal=2S
-
 Channel10.RF_channel_ID=1
-Channel10.signal=2S
-
 Channel11.RF_channel_ID=1
-Channel11.signal=2S
-
 Channel12.RF_channel_ID=1
-Channel12.signal=2S
-
 Channel13.RF_channel_ID=1
-Channel13.signal=2S
-
 Channel14.RF_channel_ID=1
-Channel14.signal=2S
-
 Channel15.RF_channel_ID=1
-Channel15.signal=2S
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
@@ -371,102 +336,40 @@ Acquisition_1C.max_dwells=1
 ;#The following options are specific to each channel and overwrite the generic options
 
 ;# GPS L2C M
+
+Acquisition_2S.dump=false
+Acquisition_2S.dump_filename=./acq_dump.dat
+Acquisition_2S.item_type=gr_complex
+Acquisition_2S.if=0
+Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S.threshold=0.0001
+Acquisition_2S.doppler_max=5000
+Acquisition_2S.doppler_min=-5000
+Acquisition_2S.doppler_step=30
+Acquisition_2S.max_dwells=1
+
+Acquisition_2S0.dump=false
+Acquisition_2S0.dump_filename=./acq_dump.dat
+Acquisition_2S0.item_type=gr_complex
+Acquisition_2S0.if=0
+Acquisition_2S0.implementation=GPS_L2_M_PCPS_Acquisition
+Acquisition_2S0.threshold=0.0001
+Acquisition_2S0.doppler_max=5000
+Acquisition_2S0.doppler_min=-5000
+Acquisition_2S0.doppler_step=30
+Acquisition_2S0.max_dwells=1
+
 Acquisition_2S1.dump=false
 Acquisition_2S1.dump_filename=./acq_dump.dat
 Acquisition_2S1.item_type=gr_complex
 Acquisition_2S1.if=0
 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition
 Acquisition_2S1.threshold=0.0001
-;Acquisition_2S1.pfa=0.001
 Acquisition_2S1.doppler_max=5000
 Acquisition_2S1.doppler_min=-5000
 Acquisition_2S1.doppler_step=30
 Acquisition_2S1.max_dwells=1
 
-Acquisition_2S2.dump=false
-Acquisition_2S2.dump_filename=./acq_dump.dat
-Acquisition_2S2.item_type=gr_complex
-Acquisition_2S2.if=0
-Acquisition_2S2.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S2.threshold=0.0003
-;Acquisition_2S2.pfa=0.001
-Acquisition_2S2.doppler_max=5000
-Acquisition_2S2.doppler_min=-5000
-Acquisition_2S2.doppler_step=30
-Acquisition_2S2.max_dwells=1
-
-Acquisition_2S3.dump=false
-Acquisition_2S3.dump_filename=./acq_dump.dat
-Acquisition_2S3.item_type=gr_complex
-Acquisition_2S3.if=0
-Acquisition_2S3.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S3.threshold=0.0003
-;Acquisition_2S3.pfa=0.001
-Acquisition_2S3.doppler_max=5000
-Acquisition_2S3.doppler_min=-5000
-Acquisition_2S3.doppler_step=30
-Acquisition_2S3.max_dwells=1
-
-Acquisition_2S4.dump=false
-Acquisition_2S4.dump_filename=./acq_dump.dat
-Acquisition_2S4.item_type=gr_complex
-Acquisition_2S4.if=0
-Acquisition_2S4.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S4.threshold=0.0003
-;Acquisition_2S4.pfa=0.001
-Acquisition_2S4.doppler_max=5000
-Acquisition_2S4.doppler_min=-5000
-Acquisition_2S4.doppler_step=30
-Acquisition_2S4.max_dwells=1
-
-Acquisition_2S5.dump=false
-Acquisition_2S5.dump_filename=./acq_dump.dat
-Acquisition_2S5.item_type=gr_complex
-Acquisition_2S5.if=0
-Acquisition_2S5.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S5.threshold=0.0003
-;Acquisition_2S5.pfa=0.001
-Acquisition_2S5.doppler_max=5000
-Acquisition_2S5.doppler_min=-5000
-Acquisition_2S5.doppler_step=30
-Acquisition_2S5.max_dwells=1
-
-Acquisition_2S6.dump=false
-Acquisition_2S6.dump_filename=./acq_dump.dat
-Acquisition_2S6.item_type=gr_complex
-Acquisition_2S6.if=0
-Acquisition_2S6.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S6.threshold=0.0003
-;Acquisition_2S6.pfa=0.001
-Acquisition_2S6.doppler_max=5000
-Acquisition_2S6.doppler_min=-5000
-Acquisition_2S6.doppler_step=30
-Acquisition_2S6.max_dwells=1
-
-Acquisition_2S7.dump=false
-Acquisition_2S7.dump_filename=./acq_dump.dat
-Acquisition_2S7.item_type=gr_complex
-Acquisition_2S7.if=0
-Acquisition_2S7.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S7.threshold=0.0003
-;Acquisition_2S7.pfa=0.001
-Acquisition_2S7.doppler_max=5000
-Acquisition_2S7.doppler_min=-5000
-Acquisition_2S7.doppler_step=100
-Acquisition_2S7.max_dwells=1
-
-Acquisition_2S8.dump=false
-Acquisition_2S8.dump_filename=./acq_dump.dat
-Acquisition_2S8.item_type=gr_complex
-Acquisition_2S8.if=0
-Acquisition_2S8.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S8.threshold=0.0003
-;Acquisition_2S8.pfa=0.001
-Acquisition_2S8.doppler_max=5000
-Acquisition_2S8.doppler_min=-5000
-Acquisition_2S8.doppler_step=100
-Acquisition_2S8.max_dwells=1
-
 
 ;######### TRACKING GLOBAL CONFIG ############
 
@@ -497,7 +400,28 @@ Tracking_1C.order=3;
 Tracking_1C.early_late_space_chips=0.5;
 
 
-;######### TRACKING CHANNEL 8 CONFIG ############
+;######### TRACKING GENERAL CHANNEL CONFIG ############
+Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S.item_type=gr_complex
+Tracking_2S.if=0
+Tracking_2S.dump=true
+Tracking_2S.dump_filename=./tracking_ch_
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.5;
+Tracking_2S.order=3;
+Tracking_2S.early_late_space_chips=0.5;
+
+;######### TRACKING CHANNEL SPECIFIC CONFIG ############
+Tracking_2S0.implementation=GPS_L2_M_DLL_PLL_Tracking
+Tracking_2S0.item_type=gr_complex
+Tracking_2S0.if=0
+Tracking_2S0.dump=true
+Tracking_2S0.dump_filename=./tracking_ch_
+Tracking_2S0.pll_bw_hz=2.0;
+Tracking_2S0.dll_bw_hz=0.5;
+Tracking_2S0.order=3;
+Tracking_2S0.early_late_space_chips=0.5;
+
 Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking
 Tracking_2S1.item_type=gr_complex
 Tracking_2S1.if=0
@@ -507,77 +431,6 @@ Tracking_2S1.pll_bw_hz=2.0;
 Tracking_2S1.dll_bw_hz=0.5;
 Tracking_2S1.order=3;
 Tracking_2S1.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 9 CONFIG ############
-Tracking_2S2.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S2.item_type=gr_complex
-Tracking_2S2.if=0
-Tracking_2S2.dump=true
-Tracking_2S2.dump_filename=./tracking_ch_
-Tracking_2S2.pll_bw_hz=2.0;
-Tracking_2S2.dll_bw_hz=0.5;
-Tracking_2S2.order=3;
-Tracking_2S2.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 10 CONFIG ############
-Tracking_2S3.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S3.item_type=gr_complex
-Tracking_2S3.if=0
-Tracking_2S3.dump=true
-Tracking_2S3.dump_filename=./tracking_ch_
-Tracking_2S3.pll_bw_hz=2.0;
-Tracking_2S3.dll_bw_hz=0.5;
-Tracking_2S3.order=3;
-Tracking_2S3.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 11 CONFIG ############
-Tracking_2S4.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S4.item_type=gr_complex
-Tracking_2S4.if=0
-Tracking_2S4.dump=true
-Tracking_2S4.dump_filename=./tracking_ch_
-Tracking_2S4.pll_bw_hz=2.0;
-Tracking_2S4.dll_bw_hz=0.3;
-Tracking_2S4.order=3;
-Tracking_2S4.early_late_space_chips=0.5;
-
-;######### TRACKING CHANNEL 12 CONFIG ############
-Tracking_2S5.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S5.item_type=gr_complex
-Tracking_2S5.if=0
-Tracking_2S5.dump=true
-Tracking_2S5.dump_filename=./tracking_ch_
-Tracking_2S5.pll_bw_hz=2.0;
-Tracking_2S5.dll_bw_hz=0.3;
-Tracking_2S5.order=3;
-Tracking_2S5.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 13 CONFIG ############
-Tracking_2S6.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S6.item_type=gr_complex
-Tracking_2S6.if=0
-Tracking_2S6.dump=true
-Tracking_2S6.dump_filename=./tracking_ch_
-Tracking_2S6.pll_bw_hz=2.0;
-Tracking_2S6.dll_bw_hz=0.3;
-Tracking_2S6.order=3;
-Tracking_2S6.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 14 CONFIG ############
-Tracking_2S7.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S7.item_type=gr_complex
-Tracking_2S7.if=0
-Tracking_2S7.dump=true
-Tracking_2S7.dump_filename=./tracking_ch_
-Tracking_2S7.pll_bw_hz=2.0;
-Tracking_2S7.dll_bw_hz=0.3;
-Tracking_2S7.order=3;
-Tracking_2S7.early_late_space_chips=0.5;
-;######### TRACKING CHANNEL 15 CONFIG ############
-Tracking_2S8.implementation=GPS_L2_M_DLL_PLL_Tracking
-Tracking_2S8.item_type=gr_complex
-Tracking_2S8.if=0
-Tracking_2S8.dump=true
-Tracking_2S8.dump_filename=./tracking_ch_
-Tracking_2S8.pll_bw_hz=2.0;
-Tracking_2S8.dll_bw_hz=0.3;
-Tracking_2S8.order=3;
-Tracking_2S8.early_late_space_chips=0.5;
 
 
 ;######### TELEMETRY DECODER GPS L1 CONFIG ############
diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
index 48457fa..0ce0fd4 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
@@ -78,6 +78,7 @@ galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisit
                     gr::io_signature::make(1, 1, sizeof(gr_complex)),
                     gr::io_signature::make(0, 0, sizeof(gr_complex)))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc
index 3baa46b..c024937 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc
@@ -62,6 +62,7 @@ galileo_pcps_8ms_acquisition_cc::galileo_pcps_8ms_acquisition_cc(
     gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
     gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
index 5120759..091958a 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
@@ -76,7 +76,6 @@ pcps_acquisition_cc::pcps_acquisition_cc(
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
-    //d_queue = queue;
     d_freq = freq;
     d_fs_in = fs_in;
     d_samples_per_ms = samples_per_ms;
@@ -447,15 +446,12 @@ int pcps_acquisition_cc::general_work(int noutput_items,
 
             d_active = false;
             d_state = 0;
-
             d_sample_counter += d_fft_size * ninput_items[0]; // sample counter
             consume_each(ninput_items[0]);
 
             acquisition_message = 1;
-
             this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message));
 
-
             break;
         }
 
@@ -478,7 +474,6 @@ int pcps_acquisition_cc::general_work(int noutput_items,
             d_sample_counter += d_fft_size * ninput_items[0]; // sample counter
             consume_each(ninput_items[0]);
             acquisition_message = 2;
-
             this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message));
 
             break;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc
index ce0b951..79dc4c2 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc
@@ -65,6 +65,7 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(
 		                gr::io_signature::make(1, 1, sizeof(gr_complex)),
 		                gr::io_signature::make(0, 0, sizeof(gr_complex)))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_queue = queue;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc
index 610a5ad..50a0c93 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc
@@ -69,6 +69,7 @@ pcps_acquisition_sc::pcps_acquisition_sc(
     gr::io_signature::make(1, 1, sizeof(lv_16sc_t) * sampled_ms * samples_per_ms * ( bit_transition_flag ? 2 : 1 )),
     gr::io_signature::make(0, 0, 0))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc
index d3d6d1b..d581ab6 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc
@@ -66,6 +66,7 @@ pcps_assisted_acquisition_cc::pcps_assisted_acquisition_cc(
 		                gr::io_signature::make(1, 1, sizeof(gr_complex)),
 		                gr::io_signature::make(0, 0, sizeof(gr_complex)))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_queue = queue;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc
index dbd2c65..9ba128c 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc
@@ -70,6 +70,7 @@ pcps_cccwsr_acquisition_cc::pcps_cccwsr_acquisition_cc(
     gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
     gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc
index c6c662c..3912c39 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc
@@ -70,6 +70,7 @@ pcps_multithread_acquisition_cc::pcps_multithread_acquisition_cc(
     gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
     gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc
index 22f82a6..63f1632 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc
@@ -90,6 +90,7 @@ pcps_opencl_acquisition_cc::pcps_opencl_acquisition_cc(
     gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
     gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc
index 9078a78..cd2fe70 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc
@@ -73,8 +73,7 @@ pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc(
                gr::io_signature::make(1, 1, (sizeof(gr_complex)*sampled_ms * samples_per_ms )),
                gr::io_signature::make(0, 0, (sizeof(gr_complex)*sampled_ms * samples_per_ms )))
 {
-    //DLOG(INFO) << "START CONSTRUCTOR";
-
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc
index 7af96e3..cc9eb97 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc
@@ -81,6 +81,7 @@ pcps_tong_acquisition_cc::pcps_tong_acquisition_cc(
     gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
     gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
 {
+    this->message_port_register_out(pmt::mp("events"));
     d_sample_counter = 0;    // SAMPLE COUNTER
     d_active = false;
     d_state = 0;
diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc
index 9928566..104421a 100644
--- a/src/algorithms/channel/adapters/channel.cc
+++ b/src/algorithms/channel/adapters/channel.cc
@@ -94,7 +94,8 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
     channel_fsm_.set_queue(queue_);
 
     connected_ = false;
-    gnss_signal_ = Gnss_Signal();
+
+    gnss_signal_ = Gnss_Signal(implementation_);
 
     chennel_msg_rx= channel_msg_receiver_make_cc(&channel_fsm_, repeat_);
 
diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt
index e169fd4..cbb2966 100644
--- a/src/algorithms/channel/libs/CMakeLists.txt
+++ b/src/algorithms/channel/libs/CMakeLists.txt
@@ -37,3 +37,6 @@ file(GLOB CHANNEL_FSM_HEADERS "*.h")
 add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS})
 source_group(Headers FILES ${CHANNEL_FSM_HEADERS})
 add_dependencies(channel_fsm glog-${glog_RELEASE})
+
+target_link_libraries(channel_fsm gnss_rx)
+
diff --git a/src/algorithms/channel/libs/channel_fsm.cc b/src/algorithms/channel/libs/channel_fsm.cc
index a03da50..be55bbf 100644
--- a/src/algorithms/channel/libs/channel_fsm.cc
+++ b/src/algorithms/channel/libs/channel_fsm.cc
@@ -81,6 +81,10 @@ public:
         //std::cout << "Enter Channel_Acq_S1 " << std::endl;
         context<ChannelFsm> ().start_acquisition();
     }
+    ~channel_acquiring_fsm_S1()
+    {
+        //std::cout << "Exit Channel_Acq_S1 " << std::endl;
+    }
 };
 
 
@@ -145,6 +149,7 @@ ChannelFsm::ChannelFsm(AcquisitionInterface *acquisition) :
 void ChannelFsm::Event_start_acquisition()
 {
     this->process_event(Ev_channel_start_acquisition());
+    //std::cout<<"Ev_channel_start_acquisition launched"<<std::endl;
 }
 
 
@@ -202,16 +207,6 @@ void ChannelFsm::start_acquisition()
 
 void ChannelFsm::start_tracking()
 {
-    //LOG_AT_LEVEL(INFO) << "Channel " << channel_
-    //<< " passing prn code phase " << acq_->prn_code_phase();
-    //LOG_AT_LEVEL(INFO) << "Channel " << channel_
-    //<< " passing doppler freq shift " << acq_->doppler_freq_shift();
-    //LOG_AT_LEVEL(INFO) << "Channel " << channel_
-    //<< " passing acquisition sample stamp "
-    //<< acq_->get_sample_stamp();
-    //trk_->set_prn_code_phase(acq_->prn_code_phase());
-    //trk_->set_doppler_freq_shift(acq_->doppler_freq_shift());
-    //trk_->set_acq_sample_stamp(acq_->get_sample_stamp());
     trk_->start_tracking();
     std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
     if (queue_ != gr::msg_queue::make())
diff --git a/src/algorithms/observables/adapters/CMakeLists.txt b/src/algorithms/observables/adapters/CMakeLists.txt
index 6f526dc..0969dc2 100644
--- a/src/algorithms/observables/adapters/CMakeLists.txt
+++ b/src/algorithms/observables/adapters/CMakeLists.txt
@@ -20,7 +20,6 @@ set(OBS_ADAPTER_SOURCES
 	gps_l1_ca_observables.cc
 	galileo_e1_observables.cc
 	hybrid_observables.cc
-	mixed_observables.cc
 )
 
 include_directories(
diff --git a/src/algorithms/observables/adapters/mixed_observables.cc b/src/algorithms/observables/adapters/mixed_observables.cc
deleted file mode 100644
index 22fc1c7..0000000
--- a/src/algorithms/observables/adapters/mixed_observables.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-/*!
- * \file mixed_observables.cc
- * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
- * to a ObservablesInterface
- * \author Javier Arribas, 2015. jarribas(at)cttc.es
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR 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 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-
-#include "mixed_observables.h"
-#include "configuration_interface.h"
-#include <glog/logging.h>
-
-using google::LogMessage;
-
-MixedObservables::MixedObservables(ConfigurationInterface* configuration,
-        std::string role,
-        unsigned int in_streams,
-        unsigned int out_streams) :
-                    role_(role),
-                    in_streams_(in_streams),
-                    out_streams_(out_streams)
-{
-    int output_rate_ms;
-    output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
-    std::string default_dump_filename = "./observables.dat";
-    DLOG(INFO) << "role " << role;
-    bool flag_averaging;
-    flag_averaging = configuration->property(role + ".flag_averaging", false);
-    dump_ = configuration->property(role + ".dump", false);
-    dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
-    observables_ = mixed_make_observables_cc(in_streams_, dump_, dump_filename_, output_rate_ms, flag_averaging);
-    DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")";
-}
-
-
-MixedObservables::~MixedObservables()
-{}
-
-void MixedObservables::connect(gr::top_block_sptr top_block)
-{
-    if(top_block) { /* top_block is not null */};
-    // Nothing to connect internally
-    DLOG(INFO) << "nothing to connect internally";
-}
-
-
-
-void MixedObservables::disconnect(gr::top_block_sptr top_block)
-{
-    if(top_block) { /* top_block is not null */};
-    // Nothing to disconnect
-}
-
-
-gr::basic_block_sptr MixedObservables::get_left_block()
-{
-    return observables_;
-}
-
-
-gr::basic_block_sptr MixedObservables::get_right_block()
-{
-    return observables_;
-}
-
diff --git a/src/algorithms/observables/adapters/mixed_observables.h b/src/algorithms/observables/adapters/mixed_observables.h
deleted file mode 100644
index 661f630..0000000
--- a/src/algorithms/observables/adapters/mixed_observables.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*!
- * \file mixed_observables.h
- * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
- * to a ObservablesInterface
- * \author Javier Arribas, 2015. jarribas(at)cttc.es
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR 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 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-#ifndef GNSS_SDR_MIXED_OBSERVABLES_H_
-#define GNSS_SDR_MIXED_OBSERVABLES_H_
-
-#include <string>
-#include "observables_interface.h"
-#include "mixed_observables_cc.h"
-
-
-class ConfigurationInterface;
-
-/*!
- * \brief This class implements an ObservablesInterface for mixed observables block (muti-frequency and multi-system)
- */
-class MixedObservables : public ObservablesInterface
-{
-public:
-    MixedObservables(ConfigurationInterface* configuration,
-                       std::string role,
-                       unsigned int in_streams,
-                       unsigned int out_streams);
-    virtual ~MixedObservables();
-    std::string role()
-    {
-        return role_;
-    }
-
-    //!  Returns "Mixed_Observables"
-    std::string implementation()
-    {
-        return "Mixed_Observables";
-    }
-    void connect(gr::top_block_sptr top_block);
-    void disconnect(gr::top_block_sptr top_block);
-    gr::basic_block_sptr get_left_block();
-    gr::basic_block_sptr get_right_block();
-    void reset()
-    {
-        return;
-    }
-
-    //! All blocks must have an item_size() function implementation
-    size_t item_size()
-    {
-        return sizeof(gr_complex);
-    }
-
-private:
-    mixed_observables_cc_sptr observables_;
-    bool dump_;
-    //unsigned int fs_in_;
-    std::string dump_filename_;
-    std::string role_;
-    unsigned int in_streams_;
-    unsigned int out_streams_;
-};
-
-#endif
diff --git a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt
index 6f4b25f..f879f93 100644
--- a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt
@@ -20,7 +20,6 @@ set(OBS_GR_BLOCKS_SOURCES
 	gps_l1_ca_observables_cc.cc 
 	galileo_e1_observables_cc.cc
 	hybrid_observables_cc.cc
-	mixed_observables_cc.cc
 )
 
 include_directories(
diff --git a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc
deleted file mode 100644
index b4d0f9b..0000000
--- a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc
+++ /dev/null
@@ -1,221 +0,0 @@
-/*!
- * \file mixed_observables_cc.cc
- * \brief Implementation of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
- * \author Javier Arribas, 2015. jarribas(at)cttc.es
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR 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 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-#include "mixed_observables_cc.h"
-#include <algorithm>
-#include <cmath>
-#include <iostream>
-#include <map>
-#include <vector>
-#include <utility>
-#include <gnuradio/io_signature.h>
-#include <glog/logging.h>
-#include "control_message_factory.h"
-#include "gnss_synchro.h"
-#include "GPS_L1_CA.h"
-
-
-
-using google::LogMessage;
-
-
-mixed_observables_cc_sptr
-mixed_make_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging)
-{
-    return mixed_observables_cc_sptr(new mixed_observables_cc(nchannels, dump, dump_filename, output_rate_ms, flag_averaging));
-}
-
-
-mixed_observables_cc::mixed_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) :
-		                        gr::block("mixed_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)),
-		                        gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)))
-{
-    // initialize internal vars
-    d_dump = dump;
-    d_nchannels = nchannels;
-    d_output_rate_ms = output_rate_ms;
-    d_dump_filename = dump_filename;
-    d_flag_averaging = flag_averaging;
-
-    // ############# ENABLE DATA FILE LOG #################
-    if (d_dump == true)
-        {
-            if (d_dump_file.is_open() == false)
-                {
-                    try
-                    {
-                            d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit );
-                            d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
-                            LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str() << std::endl;
-                    }
-                    catch (std::ifstream::failure& e)
-                    {
-                            LOG(WARNING) << "Exception opening observables dump file " << e.what() << std::endl;
-                    }
-                }
-        }
-}
-
-
-
-mixed_observables_cc::~mixed_observables_cc()
-{
-    d_dump_file.close();
-}
-
-
-bool MixedPairCompare_gnss_synchro_Prn_delay_ms(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
-{
-    return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms);
-}
-
-
-bool MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
-{
-    return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol);
-}
-
-
-int mixed_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items,
-        gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items)
-{
-    Gnss_Synchro **in = (Gnss_Synchro **)  &input_items[0];   // Get the input pointer
-    Gnss_Synchro **out = (Gnss_Synchro **)  &output_items[0]; // Get the output pointer
-
-    Gnss_Synchro current_gnss_synchro[d_nchannels];
-    std::map<int,Gnss_Synchro> current_gnss_synchro_map;
-    std::map<int,Gnss_Synchro>::iterator gnss_synchro_iter;
-
-    if (d_nchannels != ninput_items.size())
-        {
-            LOG(WARNING) << "The Observables block is not well connected";
-        }
-
-    /*
-     * 1. Read the GNSS SYNCHRO objects from available channels
-     */
-    for (unsigned int i = 0; i < d_nchannels; i++)
-        {
-            //Copy the telemetry decoder data to local copy
-            current_gnss_synchro[i] = in[i][0];
-            /*
-             * 1.2 Assume no valid pseudoranges
-             */
-            current_gnss_synchro[i].Flag_valid_pseudorange = false;
-            current_gnss_synchro[i].Pseudorange_m = 0.0;
-            if(current_gnss_synchro[i].Signal[0] == '2')
-                {
-                    if (current_gnss_synchro[i].Flag_valid_word) //if this channel have valid word
-                        {
-                            //record the word structure in a map for pseudorange computation
-                            current_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i]));
-                        }
-                }
-        }
-
-    /*
-     * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite)
-     */
-//    if(current_gnss_synchro_map.size() > 0)
-//        {
-//            /*
-//             *  2.1 Use CURRENT set of measurements and find the nearest satellite
-//             *  common RX time algorithm
-//             */
-//            // what is the most recent symbol TOW in the current set? -> this will be the reference symbol
-//            gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol);
-//            double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol;
-//            double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms;
-//            //int reference_channel= gnss_synchro_iter->second.Channel_ID;
-//
-//            // Now compute RX time differences due to the PRN alignment in the correlators
-//            double traveltime_ms;
-//            double pseudorange_m;
-//            double delta_rx_time_ms;
-//            for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++)
-//            {
-//            	// compute the required symbol history shift in order to match the reference symbol
-//            	delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms;
-//            	//compute the pseudorange
-//            	traveltime_ms = (d_TOW_reference-gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GPS_STARTOFFSET_ms;
-//            	pseudorange_m = traveltime_ms * GPS_C_m_ms; // [m]
-//                // update the pseudorange object
-//                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second;
-//                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m;
-//                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true;
-//                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GPS_STARTOFFSET_ms/1000.0;
-//                std::cout<<"Pseudorange_m="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m<<std::endl;
-//                std::cout<<"Signal="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Signal<<std::endl;
-//            }
-//        }
-
-    if(d_dump == true)
-        {
-            // MULTIPLEXED FILE RECORDING - Record results to file
-            try
-            {
-                    double tmp_double;
-                    for (unsigned int i = 0; i < d_nchannels; i++)
-                        {
-                            tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = current_gnss_synchro[i].Prn_timestamp_ms;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = current_gnss_synchro[i].Pseudorange_m;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true);
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = current_gnss_synchro[i].PRN;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = (double)(current_gnss_synchro[i].Flag_valid_symbol_output==true);
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = current_gnss_synchro[i].Prompt_I;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                            tmp_double = current_gnss_synchro[i].Prompt_Q;
-                            d_dump_file.write((char*)&tmp_double, sizeof(double));
-                        }
-            }
-            catch (const std::ifstream::failure& e)
-            {
-                    LOG(WARNING) << "Exception writing observables dump file " << e.what() << std::endl;
-            }
-        }
-
-    consume_each(1); //one by one
-    for (unsigned int i = 0; i < d_nchannels; i++)
-        {
-            *out[i] = current_gnss_synchro[i];
-        }
-    if (noutput_items == 0)
-        {
-            LOG(WARNING) << "noutput_items = 0";
-        }
-    return 1;
-}
-
diff --git a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h
deleted file mode 100644
index b278835..0000000
--- a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
- * \file mixed_observables_cc.h
- * \brief Interface of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
- * \author Javier Arribas, 2015. jarribas(at)cttc.es
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR 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 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR 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 GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-
-#ifndef GNSS_SDR_MIXED_OBSERVABLES_CC_H_
-#define	GNSS_SDR_MIXED_OBSERVABLES_CC_H_
-
-#include <fstream>
-#include <string>
-#include <gnuradio/block.h>
-
-
-class mixed_observables_cc;
-
-typedef boost::shared_ptr<mixed_observables_cc> mixed_observables_cc_sptr;
-
-mixed_observables_cc_sptr
-mixed_make_observables_cc(unsigned int n_channels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
-
-/*!
- * \brief This class implements a block that computes MIXED observables (Multi-frequency and Multi-system)
- */
-class mixed_observables_cc : public gr::block
-{
-public:
-    ~mixed_observables_cc ();
-    int general_work (int noutput_items, gr_vector_int &ninput_items,
-            gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
-
-private:
-    friend mixed_observables_cc_sptr
-    mixed_make_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
-    mixed_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
-
-    // class private vars
-    bool d_dump;
-    bool d_flag_averaging;
-    unsigned int d_nchannels;
-    int d_output_rate_ms;
-    std::string d_dump_filename;
-    std::ofstream d_dump_file;
-};
-
-#endif
diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc
index 8203e94..139f1f7 100644
--- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc
+++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc
@@ -463,8 +463,6 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut
             current_synchro_data.Flag_valid_word = false;
         }
 
-    DLOG(INFO) << "delta_t = " << delta_t;
-
     current_synchro_data.d_TOW = d_TOW_at_Preamble;
     current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol;
     current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol - delta_t; //delta_t = t_gal - t_gps  ---->  t_gps = t_gal -delta_t
diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc
index 660b2f4..347c1fa 100644
--- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc
+++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc
@@ -71,7 +71,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
     // set the preamble
     unsigned short int preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS] = GPS_PREAMBLE;
 
-    memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GPS_CA_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int));
+    //memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GPS_CA_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int));
 
     // preamble bits to sampled symbols
     d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GPS_CA_PREAMBLE_LENGTH_SYMBOLS);
@@ -80,7 +80,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
         {
             for (unsigned int j = 0; j < GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; j++)
                 {
-                    if (d_preambles_bits[i] == 1)
+                    if (preambles_bits[i] == 1)
                         {
                             d_preambles_symbols[n] = 1;
                         }
@@ -158,7 +158,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
         {
             if (in[0][i].Flag_valid_symbol_output == true)
                 {
-                    if (in[0][i].Prompt_I < 0)	// symbols clipping
+                    if (in[0][i].Prompt_I < 0)  // symbols clipping
                         {
                             corr_value -= d_preambles_symbols[i] * in[0][i].correlation_length_ms;
                         }
@@ -174,14 +174,15 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
     //******* frame sync ******************
     if (abs(corr_value) == GPS_CA_PREAMBLE_LENGTH_SYMBOLS)
         {
+            //TODO: Rewrite with state machine
             if (d_stat == 0)
                 {
                     d_GPS_FSM.Event_gps_word_preamble();
+                    //record the preamble sample stamp
                     d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the preamble sample stamp
-                    DLOG(INFO)  << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
+ 					DLOG(INFO)  << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
                     //sync the symbol to bits integrator
-                    d_symbol_accumulator = 0;
-                    d_symbol_accumulator_counter = 0;
+                    d_symbol_accumulator = 0;                    d_symbol_accumulator_counter = 0;
                     d_frame_bit_index = 0;
                     d_stat = 1; // enter into frame pre-detection status
                 }
@@ -190,10 +191,11 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
                     preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0);
                     if (abs(preamble_diff_ms - GPS_SUBFRAME_MS) < 1)
                         {
-                            DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite  << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
+                        	DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite  << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
                             d_GPS_FSM.Event_gps_word_preamble();
                             d_flag_preamble = true;
-                            d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the PRN start sample index associated to the preamble
+                            d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs;// - d_preamble_duration_seconds; //record the PRN start sample index associated to the preamble
+
                             if (!d_flag_frame_sync)
                                 {
                                     // send asynchronous message to tracking to inform of frame sync and extend correlation time
@@ -212,21 +214,24 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
                                     DLOG(INFO)  << " Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]";
                                 }
                         }
-                    else
+                }
+        }
+    else
+        {
+            if (d_stat == 1)
+                {
+                    preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0);
+                    if (preamble_diff_ms > GPS_SUBFRAME_MS+1)
                         {
-                            if (preamble_diff_ms > GPS_SUBFRAME_MS + 1)
-                                {
-                                    DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff_ms= " << preamble_diff_ms;
-                                    d_stat = 0; // lost of frame sync
-                                    d_flag_frame_sync = false;
-                                    flag_TOW_set = false;
-                                }
+                            DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff= " << preamble_diff_ms;
+                            d_stat = 0; //lost of frame sync
+                            d_flag_frame_sync = false;
+                            flag_TOW_set = false;
                         }
                 }
         }
 
     //******* SYMBOL TO BIT *******
-
     if (in[0][0].Flag_valid_symbol_output == true)
         {
             // extended correlation to bit period is enabled in tracking!
@@ -234,207 +239,207 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
             d_symbol_accumulator_counter += in[0][0].correlation_length_ms;
         }
     if (d_symbol_accumulator_counter >= 20)
-        {
-            if (d_symbol_accumulator > 0)
-                { //symbol to bit
-                    d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB
-                }
-            d_symbol_accumulator = 0;
-            d_symbol_accumulator_counter = 0;
-            //******* bits to words ******
-            d_frame_bit_index++;
-            if (d_frame_bit_index == 30)
-                {
-                    d_frame_bit_index = 0;
-                    // parity check
-                    // Each word in wordbuff is composed of:
-                    //      Bits 0 to 29 = the GPS data word
-                    //      Bits 30 to 31 = 2 LSBs of the GPS word ahead.
-                    // prepare the extended frame [-2 -1 0 ... 30]
-                    if (d_prev_GPS_frame_4bytes & 0x00000001)
-                        {
-                            d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000;
-                        }
-                    if (d_prev_GPS_frame_4bytes & 0x00000002)
-                        {
-                            d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000;
-                        }
-                    /* Check that the 2 most recently logged words pass parity. Have to first
-                     invert the data bits according to bit 30 of the previous word. */
-                    if(d_GPS_frame_4bytes & 0x40000000)
-                        {
-                            d_GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR)
-                        }
-                    if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(d_GPS_frame_4bytes))
-                        {
-                            memcpy(&d_GPS_FSM.d_GPS_frame_4bytes, &d_GPS_frame_4bytes, sizeof(char)*4);
-                            d_GPS_FSM.d_preamble_time_ms = d_preamble_time_seconds * 1000.0;
-                            d_GPS_FSM.Event_gps_word_valid();
-                            // send TLM data to PVT using asynchronous message queues
-                            if (d_GPS_FSM.d_flag_new_subframe == true)
-                                {
-                                    switch (d_GPS_FSM.d_subframe_ID)
-                                    {
-                                    case 3: //we have a new set of ephemeris data for the current SV
-                                        if (d_GPS_FSM.d_nav.satellite_validation() == true)
-                                            {
-                                                // get ephemeris object for this SV (mandatory)
-                                                std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_GPS_FSM.d_nav.get_ephemeris());
-                                                this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
-                                            }
-                                        break;
-                                    case 4: // Possible IONOSPHERE and UTC model update (page 18)
-                                        if (d_GPS_FSM.d_nav.flag_iono_valid == true)
-                                            {
-                                                std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>( d_GPS_FSM.d_nav.get_iono());
-                                                this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
-                                            }
-                                        if (d_GPS_FSM.d_nav.flag_utc_model_valid == true)
-                                            {
-                                                std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_GPS_FSM.d_nav.get_utc_model());
-                                                this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
-                                            }
-                                        break;
-                                    case 5:
-                                        // get almanac (if available)
-                                        //TODO: implement almanac reader in navigation_message
-                                        break;
-                                    default:
-                                        break;
-                                    }
-                                    d_GPS_FSM.clear_flag_new_subframe();
-                                }
+         {
+             if (d_symbol_accumulator > 0)
+                 { //symbol to bit
+                     d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB
+                 }
+             d_symbol_accumulator = 0;
+             d_symbol_accumulator_counter = 0;
+             //******* bits to words ******
+             d_frame_bit_index++;
+             if (d_frame_bit_index == 30)
+                 {
+                     d_frame_bit_index = 0;
+                     // parity check
+                     // Each word in wordbuff is composed of:
+                     //      Bits 0 to 29 = the GPS data word
+                     //      Bits 30 to 31 = 2 LSBs of the GPS word ahead.
+                     // prepare the extended frame [-2 -1 0 ... 30]
+                     if (d_prev_GPS_frame_4bytes & 0x00000001)
+                         {
+                             d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000;
+                         }
+                     if (d_prev_GPS_frame_4bytes & 0x00000002)
+                         {
+                             d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000;
+                         }
+                     /* Check that the 2 most recently logged words pass parity. Have to first
+                      invert the data bits according to bit 30 of the previous word. */
+                     if(d_GPS_frame_4bytes & 0x40000000)
+                         {
+                             d_GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR)
+                         }
+                     if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(d_GPS_frame_4bytes))
+                         {
+                             memcpy(&d_GPS_FSM.d_GPS_frame_4bytes, &d_GPS_frame_4bytes, sizeof(char)*4);
+                             d_GPS_FSM.d_preamble_time_ms = d_preamble_time_seconds * 1000.0;
+                             d_GPS_FSM.Event_gps_word_valid();
+                             // send TLM data to PVT using asynchronous message queues
+                             if (d_GPS_FSM.d_flag_new_subframe == true)
+                                 {
+                                     switch (d_GPS_FSM.d_subframe_ID)
+                                     {
+                                     case 3: //we have a new set of ephemeris data for the current SV
+                                         if (d_GPS_FSM.d_nav.satellite_validation() == true)
+                                             {
+                                                 // get ephemeris object for this SV (mandatory)
+                                                 std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_GPS_FSM.d_nav.get_ephemeris());
+                                                 this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
+                                             }
+                                         break;
+                                     case 4: // Possible IONOSPHERE and UTC model update (page 18)
+                                         if (d_GPS_FSM.d_nav.flag_iono_valid == true)
+                                             {
+                                                 std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>( d_GPS_FSM.d_nav.get_iono());
+                                                 this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
+                                             }
+                                         if (d_GPS_FSM.d_nav.flag_utc_model_valid == true)
+                                             {
+                                                 std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_GPS_FSM.d_nav.get_utc_model());
+                                                 this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
+                                             }
+                                         break;
+                                     case 5:
+                                         // get almanac (if available)
+                                         //TODO: implement almanac reader in navigation_message
+                                         break;
+                                     default:
+                                         break;
+                                     }
+                                     d_GPS_FSM.clear_flag_new_subframe();
+                                 }
 
-                            d_flag_parity = true;
-                        }
-                    else
-                        {
-                            d_GPS_FSM.Event_gps_word_invalid();
-                            d_flag_parity = false;
-                        }
-                    d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame
-                    d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0;
-                }
-            else
-                {
-                    d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word
-                }
-        }
-    // output the frame
-    consume_each(1); //one by one
-    Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block
-    //1. Copy the current tracking output
-    current_synchro_data = in[0][0];
-    //2. Add the telemetry decoder information
-    if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0)
-        //update TOW at the preamble instant (todo: check for valid d_TOW)
-        // JAVI: 30/06/2014
-        // TOW, in GPS, is referred to the START of the SUBFRAME, that is, THE FIRST SYMBOL OF THAT SUBFRAME, NOT THE PREAMBLE.
-        // thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_subframe_start.
-        // Sice we detected the preable, then, we are in the last symbol of that preamble, or just at the start of the first subframe symbol.
-        {
-            d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_SUBFRAME_SECONDS; //we decoded the current TOW when the last word of the subframe arrive, so, we have a lag of ONE SUBFRAME
-            d_TOW_at_current_symbol = d_TOW_at_Preamble;
-            Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
-            if (flag_TOW_set == false)
-                {
-                    flag_TOW_set = true;
-                }
-        }
-    else
-        {
-            d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD;
-        }
+                             d_flag_parity = true;
+                         }
+                     else
+                         {
+                             d_GPS_FSM.Event_gps_word_invalid();
+                             d_flag_parity = false;
+                         }
+                     d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame
+                     d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0;
+                 }
+             else
+                 {
+                     d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word
+                 }
+         }
+     // output the frame
+     consume_each(1); //one by one
+     Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block
+     //1. Copy the current tracking output
+     current_synchro_data = in[0][0];
+     //2. Add the telemetry decoder information
+     if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0)
+         //update TOW at the preamble instant (todo: check for valid d_TOW)
+         // JAVI: 30/06/2014
+         // TOW, in GPS, is referred to the START of the SUBFRAME, that is, THE FIRST SYMBOL OF THAT SUBFRAME, NOT THE PREAMBLE.
+         // thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_subframe_start.
+         // Sice we detected the preable, then, we are in the last symbol of that preamble, or just at the start of the first subframe symbol.
+         {
+             d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_SUBFRAME_SECONDS; //we decoded the current TOW when the last word of the subframe arrive, so, we have a lag of ONE SUBFRAME
+             d_TOW_at_current_symbol = d_TOW_at_Preamble;
+             Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
+             if (flag_TOW_set == false)
+                 {
+                     flag_TOW_set = true;
+                 }
+         }
+     else
+         {
+             d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD;
+         }
 
-    current_synchro_data.d_TOW = d_TOW_at_Preamble;
-    current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol;
-    current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; // to be  used in the hybrid configuration
-    current_synchro_data.Flag_valid_word = (d_flag_frame_sync == true and d_flag_parity == true and flag_TOW_set == true);
-    current_synchro_data.Flag_preamble = d_flag_preamble;
-    current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
-    current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms;
+     current_synchro_data.d_TOW = d_TOW_at_Preamble;
+     current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol;
+     current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; // to be  used in the hybrid configuration
+     current_synchro_data.Flag_valid_word = (d_flag_frame_sync == true and d_flag_parity == true and flag_TOW_set == true);
+     current_synchro_data.Flag_preamble = d_flag_preamble;
+     current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
+     current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms;
 
-    if (flag_PLL_180_deg_phase_locked == true)
-        {
-            //correct the accumulated phase for the costas loop phase shift, if required
-            current_synchro_data.Carrier_phase_rads += GPS_PI;
-        }
+     if (flag_PLL_180_deg_phase_locked == true)
+         {
+             //correct the accumulated phase for the costas loop phase shift, if required
+             current_synchro_data.Carrier_phase_rads += GPS_PI;
+         }
 
-    if(d_dump == true)
-        {
-            // MULTIPLEXED FILE RECORDING - Record results to file
-            try
-            {
-                    double tmp_double;
-                    tmp_double = d_TOW_at_current_symbol;
-                    d_dump_file.write((char*)&tmp_double, sizeof(double));
-                    tmp_double = current_synchro_data.Prn_timestamp_ms;
-                    d_dump_file.write((char*)&tmp_double, sizeof(double));
-                    tmp_double = d_TOW_at_Preamble;
-                    d_dump_file.write((char*)&tmp_double, sizeof(double));
-            }
-            catch (const std::ifstream::failure & e)
-            {
-                    LOG(WARNING) << "Exception writing observables dump file " << e.what();
-            }
-        }
+     if(d_dump == true)
+         {
+             // MULTIPLEXED FILE RECORDING - Record results to file
+             try
+             {
+                     double tmp_double;
+                     tmp_double = d_TOW_at_current_symbol;
+                     d_dump_file.write((char*)&tmp_double, sizeof(double));
+                     tmp_double = current_synchro_data.Prn_timestamp_ms;
+                     d_dump_file.write((char*)&tmp_double, sizeof(double));
+                     tmp_double = d_TOW_at_Preamble;
+                     d_dump_file.write((char*)&tmp_double, sizeof(double));
+             }
+             catch (const std::ifstream::failure & e)
+             {
+                     LOG(WARNING) << "Exception writing observables dump file " << e.what();
+             }
+         }
 
-    //todo: implement averaging
+     //todo: implement averaging
 
-    d_average_count++;
-    if (d_average_count == d_decimation_output_factor)
-        {
-            d_average_count = 0;
-            //3. Make the output (copy the object contents to the GNURadio reserved memory)
-            *out[0] = current_synchro_data;
-            //std::cout<<"GPS L1 TLM output on CH="<<this->d_channel << " SAMPLE STAMP="<<d_sample_counter/d_decimation_output_factor<<std::endl;
-            return 1;
-        }
-    else
-        {
-            return 0;
-        }
-}
+     d_average_count++;
+     if (d_average_count == d_decimation_output_factor)
+         {
+             d_average_count = 0;
+             //3. Make the output (copy the object contents to the GNURadio reserved memory)
+             *out[0] = current_synchro_data;
+             //std::cout<<"GPS L1 TLM output on CH="<<this->d_channel << " SAMPLE STAMP="<<d_sample_counter/d_decimation_output_factor<<std::endl;
+             return 1;
+         }
+     else
+         {
+             return 0;
+         }
+ }
 
 
-void gps_l1_ca_telemetry_decoder_cc::set_decimation(int decimation)
-{
-    d_decimation_output_factor = decimation;
-}
+ void gps_l1_ca_telemetry_decoder_cc::set_decimation(int decimation)
+ {
+     d_decimation_output_factor = decimation;
+ }
 
-void gps_l1_ca_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite)
-{
-    d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
-    LOG(INFO) << "Setting decoder Finite State Machine to satellite "  << d_satellite;
-    d_GPS_FSM.i_satellite_PRN = d_satellite.get_PRN();
-    DLOG(INFO) << "Navigation Satellite set to " << d_satellite;
-}
+ void gps_l1_ca_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite)
+ {
+     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
+     LOG(INFO) << "Setting decoder Finite State Machine to satellite "  << d_satellite;
+     d_GPS_FSM.i_satellite_PRN = d_satellite.get_PRN();
+     DLOG(INFO) << "Navigation Satellite set to " << d_satellite;
+ }
 
 
-void gps_l1_ca_telemetry_decoder_cc::set_channel(int channel)
-{
-    d_channel = channel;
-    d_GPS_FSM.i_channel_ID = channel;
-    DLOG(INFO) << "Navigation channel set to " << channel;
-    // ############# ENABLE DATA FILE LOG #################
-    if (d_dump == true)
-        {
-            if (d_dump_file.is_open() == false)
-                {
-                    try
-                    {
-                            d_dump_filename = "telemetry";
-                            d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
-                            d_dump_filename.append(".dat");
-                            d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
-                            d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
-                            LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel
-                                    << " Log file: " << d_dump_filename.c_str();
-                    }
-                    catch (const std::ifstream::failure &e)
-                    {
-                            LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what();
-                    }
-                }
-        }
-}
+ void gps_l1_ca_telemetry_decoder_cc::set_channel(int channel)
+ {
+     d_channel = channel;
+     d_GPS_FSM.i_channel_ID = channel;
+     DLOG(INFO) << "Navigation channel set to " << channel;
+     // ############# ENABLE DATA FILE LOG #################
+     if (d_dump == true)
+         {
+             if (d_dump_file.is_open() == false)
+                 {
+                     try
+                     {
+                             d_dump_filename = "telemetry";
+                             d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
+                             d_dump_filename.append(".dat");
+                             d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
+                             d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
+                             LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel
+                                     << " Log file: " << d_dump_filename.c_str();
+                     }
+                     catch (const std::ifstream::failure &e)
+                     {
+                             LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what();
+                     }
+                 }
+         }
+ }
diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h
index 961d83c..d0b2763 100644
--- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h
+++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h
@@ -85,7 +85,7 @@ private:
     bool gps_word_parityCheck(unsigned int gpsword);
 
     // constants
-    unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS];
+    //unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS];
     // class private vars
 
     int *d_preambles_symbols;
diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
index f431a15..30a10d3 100755
--- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
@@ -385,14 +385,7 @@ int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items __attri
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock
-                            this->message_port_pub(pmt::mp("events"), value);
-
-//                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-//                            if (d_queue != gr::msg_queue::sptr())
-//                                {
-//                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-//                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc
index c129879..cac3487 100644
--- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc
@@ -110,7 +110,7 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
-
+    this->message_port_register_out(pmt::mp("events"));
     this->set_relative_rate(1.0/vector_length);
     // initialize internal vars
     d_queue = queue;
@@ -394,11 +394,8 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work (int noutput_items __attr
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                            if (d_queue != gr::msg_queue::sptr())
-                                {
-                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
+
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc
index fb1cdc9..2673394 100644
--- a/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc
@@ -109,7 +109,7 @@ Galileo_E5a_Dll_Pll_Tracking_cc::Galileo_E5a_Dll_Pll_Tracking_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
-
+    this->message_port_register_out(pmt::mp("events"));
     this->set_relative_rate(1.0 / vector_length);
     // initialize internal vars
     d_queue = queue;
@@ -586,11 +586,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
                                         {
                                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                                            if (d_queue != gr::msg_queue::sptr())
-                                                {
-                                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                                }
+                                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                                             d_carrier_lock_fail_counter = 0;
                                             d_state = 0; // TODO: check if disabling tracking is consistent with the channel state machine
                                         }
@@ -615,11 +611,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
                                         {
                                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                                            if (d_queue != gr::msg_queue::sptr())
-                                                {
-                                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                                }
+                                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                                             d_carrier_lock_fail_counter = 0;
                                             d_state = 0;
                                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
index cfad636..3d5f5de 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
@@ -548,14 +548,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items __attri
                                 {
                                     std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                                     LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                                    pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock
-                                    this->message_port_pub(pmt::mp("events"), value);
-
-                                    //std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                                    //if (d_queue != gr::msg_queue::sptr())
-                                    //    {
-                                    //        d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                    //    }
+                                    this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                                     d_carrier_lock_fail_counter = 0;
                                     d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                                 }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
index ba79f15..8b84dc5 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
@@ -104,6 +104,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_sc::gps_l1_ca_dll_pll_c_aid_tracking_sc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
+    this->message_port_register_out(pmt::mp("events"));
     // initialize internal vars
     d_queue = queue;
     d_dump = dump;
@@ -425,11 +426,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_sc::general_work (int noutput_items __attri
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                            if (d_queue != gr::msg_queue::sptr())
-                                {
-                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
index a51913e..52e8664 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
@@ -105,7 +105,6 @@ Gps_L1_Ca_Dll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Pll_Tracking_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
-
     this->message_port_register_out(pmt::mp("events"));
 
     // initialize internal vars
@@ -408,13 +407,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock
-                            this->message_port_pub(pmt::mp("events"), value);
-//                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-//                            if (d_queue != gr::msg_queue::sptr())
-//                                {
-//                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-//                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc
index 0d33793..fc0048f 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc
@@ -101,6 +101,7 @@ Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
+    this->message_port_register_out(pmt::mp("events"));
     // initialize internal vars
     d_queue = queue;
     d_dump = dump;
@@ -431,11 +432,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                            if (d_queue != gr::msg_queue::sptr())
-                                {
-                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc
index 25bdd11..9207c79 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc
@@ -104,6 +104,7 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
+    this->message_port_register_out(pmt::mp("events"));
     // initialize internal vars
     d_queue = queue;
     d_dump = dump;
@@ -441,10 +442,7 @@ int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work (int noutput_items __attri
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                            if (d_queue != gr::msg_queue::sptr()) {
-                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                            }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
 
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc
index 1a7fd96..ee36843 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc
@@ -104,6 +104,7 @@ gps_l2_m_dll_pll_tracking_cc::gps_l2_m_dll_pll_tracking_cc(
 {
     // Telemetry bit synchronization message port input
     this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
+    this->message_port_register_out(pmt::mp("events"));
     // initialize internal vars
     d_queue = queue;
     d_dump = dump;
@@ -412,11 +413,7 @@ int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items __attribute__(
                         {
                             std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
                             LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
-                            std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
-                            if (d_queue != gr::msg_queue::sptr())
-                                {
-                                    d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
-                                }
+                            this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
                             d_carrier_lock_fail_counter = 0;
                             d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
                         }
diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc
index 719b82a..5d3916e 100644
--- a/src/core/receiver/gnss_block_factory.cc
+++ b/src/core/receiver/gnss_block_factory.cc
@@ -91,7 +91,6 @@
 #include "gps_l1_ca_observables.h"
 #include "galileo_e1_observables.h"
 #include "hybrid_observables.h"
-#include "mixed_observables.h"
 #include "gps_l1_ca_pvt.h"
 #include "galileo_e1_pvt.h"
 #include "hybrid_pvt.h"
@@ -227,17 +226,9 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetObservables(std::shared
     std::string default_implementation = "GPS_L1_CA_Observables";
     std::string implementation = configuration->property("Observables.implementation", default_implementation);
     LOG(INFO) << "Getting Observables with implementation " << implementation;
-    unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED
-    if(Galileo_channels == 0)
-        {
-            Galileo_channels = configuration->property("Channels_1B.count", 0);
-        }
+    unsigned int Galileo_channels = configuration->property("Channels_1B.count", 0);
     Galileo_channels += configuration->property("Channels_5X.count", 0);
-    unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED
-    if(GPS_channels == 0)
-        {
-            GPS_channels = configuration->property("Channels_1C.count", 0);
-        }
+    unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
     GPS_channels += configuration->property("Channels_2S.count", 0);
     return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels, queue);
 }
@@ -250,77 +241,14 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(std::shared_ptr<Con
     std::string default_implementation = "Pass_Through";
     std::string implementation = configuration->property("PVT.implementation", default_implementation);
     LOG(INFO) << "Getting PVT with implementation " << implementation;
-    unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED
-    if(Galileo_channels == 0)
-        {
-            Galileo_channels = configuration->property("Channels_1B.count", 0);
-        }
+    unsigned int Galileo_channels =configuration->property("Channels_1B.count", 0);
     Galileo_channels += configuration->property("Channels_5X.count", 0);
-    unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED
-    if(GPS_channels == 0)
-        {
-            GPS_channels = configuration->property("Channels_1C.count", 0);
-        }
+    unsigned int GPS_channels =configuration->property("Channels_1C.count", 0);
     GPS_channels += configuration->property("Channels_2S.count", 0);
     return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 1, queue);
 }
 
 
-
-//********* GPS CHANNEL *****************
-std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_GPS(
-        std::shared_ptr<ConfigurationInterface> configuration,
-        std::string acq, std::string trk, std::string tlm, int channel,
-        boost::shared_ptr<gr::msg_queue> queue)
-{
-
-    LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
-              << acq << ", Tracking Implementation: " << trk  << ", Telemetry Decoder implementation: " << tlm;
-    std::string aux = configuration->property("Acquisition_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix1;
-    if(aux.compare("W") != 0)
-        {
-            appendix1 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix1 = ""; 
-        }
-    aux = configuration->property("Tracking_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix2;
-    if(aux.compare("W") != 0)
-        {
-            appendix2 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix2 = ""; 
-        }
-    aux = configuration->property("TelemetryDecoder_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix3;
-    if(aux.compare("W") != 0)
-        {
-            appendix3 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix3 = ""; 
-        }
-
-    std::unique_ptr<GNSSBlockInterface> pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue);
-    std::unique_ptr<AcquisitionInterface> acq_ = GetAcqBlock(configuration, "Acquisition_GPS" + appendix1, acq, 1, 0, queue);
-    std::unique_ptr<TrackingInterface> trk_ = GetTrkBlock(configuration, "Tracking_GPS" + appendix2, trk, 1, 1, queue);
-    std::unique_ptr<TelemetryDecoderInterface> tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_GPS" + appendix3, tlm, 1, 1);
-
-    std::unique_ptr<GNSSBlockInterface> channel_(new Channel(configuration.get(), channel, pass_through_.release(),
-            acq_.release(),
-            trk_.release(),
-            tlm_.release(),
-            "Channel", "GPS" + appendix1, queue));
-
-    return channel_;
-}
-
 //********* GPS L1 C/A CHANNEL *****************
 std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C(
         std::shared_ptr<ConfigurationInterface> configuration,
@@ -328,6 +256,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C(
         boost::shared_ptr<gr::msg_queue> queue)
 {
 
+    //TODO: REMOVE APPENDIX!! AND CHECK ALTERNATIVE MECHANISM TO GET PARTICULARIZED PARAMETERS
     LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
               << acq << ", Tracking Implementation: " << trk  << ", Telemetry Decoder implementation: " << tlm;
 
@@ -431,62 +360,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S(
     return channel_;
 }
 
-//********* GALILEO CHANNEL *****************
-std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_Galileo(
-        std::shared_ptr<ConfigurationInterface> configuration,
-        std::string acq, std::string trk, std::string tlm, int channel,
-        boost::shared_ptr<gr::msg_queue> queue)
-{
-    std::stringstream stream;
-    stream << channel;
-    std::string id = stream.str();
-    LOG(INFO) << "Instantiating Channel " << id << " with Acquisition Implementation: "
-              << acq << ", Tracking Implementation: " << trk  << ", Telemetry Decoder implementation: " << tlm;
-    std::string aux = configuration->property("Acquisition_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix1;
-    if(aux.compare("W") != 0)
-        {
-            appendix1 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix1 = ""; 
-        }
-    aux = configuration->property("Tracking_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix2;
-    if(aux.compare("W") != 0)
-        {
-            appendix2 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix2 = ""; 
-        }
-    aux = configuration->property("TelemetryDecoder_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
-    std::string appendix3;
-    if(aux.compare("W") != 0)
-        {
-            appendix3 = boost::lexical_cast<std::string>(channel);
-        }
-    else
-        {
-            appendix3 = ""; 
-        }
-
-    std::unique_ptr<GNSSBlockInterface> pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue);
-    std::unique_ptr<AcquisitionInterface> acq_ = GetAcqBlock(configuration, "Acquisition_Galileo" + appendix1, acq, 1, 0, queue);
-    std::unique_ptr<TrackingInterface> trk_ = GetTrkBlock(configuration, "Tracking_Galileo" + appendix2, trk, 1, 1, queue);
-    std::unique_ptr<TelemetryDecoderInterface> tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_Galileo" + appendix3, tlm, 1, 1);
-
-    std::unique_ptr<GNSSBlockInterface> channel_(new Channel(configuration.get(), channel, pass_through_.release(),
-            acq_.release(),
-            trk_.release(),
-            tlm_.release(),
-            "Channel", "Galileo", queue));
-
-    return channel_;
-}
-
 //********* GALILEO E1 B CHANNEL *****************
 std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B(
         std::shared_ptr<ConfigurationInterface> configuration,
@@ -604,385 +477,146 @@ std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFacto
         std::shared_ptr<ConfigurationInterface> configuration, boost::shared_ptr<gr::msg_queue> queue)
 {
     std::string default_implementation = "Pass_Through";
-    unsigned int channel_count;
     std::string tracking_implementation;
     std::string telemetry_decoder_implementation;
     std::string acquisition_implementation;
 
-    unsigned int total_channels = configuration->property("Channels_GPS.count", 0) +
-            configuration->property("Channels_1C.count", 0) +
-            configuration->property("Channels_2S.count", 0) +
-            configuration->property("Channels_Galileo.count", 0) +
-            configuration->property("Channels_1B.count", 0) +
-            configuration->property("Channels_5X.count", 0);
+    unsigned int channel_absolute_id = 0;
 
+    unsigned int Channels_1C_count=configuration->property("Channels_1C.count", 0);
+    unsigned int Channels_2S_count=configuration->property("Channels_2S.count", 0);
+    unsigned int Channels_1B_count=configuration->property("Channels_1B.count", 0);
+    unsigned int Channels_5X_count=configuration->property("Channels_5X.count", 0);
 
+    unsigned int total_channels = Channels_1C_count +
+            Channels_2S_count +
+            Channels_1B_count +
+            Channels_5X_count;
     std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels(new std::vector<std::unique_ptr<GNSSBlockInterface>>(total_channels));
 
-    unsigned int channel_absolute_id = 0;
-
     //**************** GPS L1 C/A  CHANNELS **********************
-    channel_count = configuration->property("Channels_GPS.count", 0); // DEPRECATED
-    if (channel_count == 0)
-        {
-            channel_count = configuration->property("Channels_1C.count", 0);
-        }
-
-    LOG(INFO) << "Getting " << channel_count << " GPS L1 C/A channels";
-
-    tracking_implementation = configuration->property("Tracking_GPS.implementation", default_implementation);
-    if (tracking_implementation.compare(default_implementation) == 0)
-        {
-            tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation);
-        }
 
-    telemetry_decoder_implementation = configuration->property("TelemetryDecoder_GPS.implementation", default_implementation);
-    if (telemetry_decoder_implementation.compare(default_implementation) == 0)
-        {
-            telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
-        }
-
-    acquisition_implementation = configuration->property("Acquisition_GPS.implementation", default_implementation);
-    if (acquisition_implementation.compare(default_implementation) == 0)
-        {
-            acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
-        }
+    LOG(INFO) << "Getting " << Channels_1C_count << " GPS L1 C/A channels";
+    tracking_implementation  = configuration->property("Tracking_1C.implementation", default_implementation);
+    telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
+    acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
 
-    bool apply_;
-    std::string s;
-
-    for (unsigned int i = 0; i < total_channels; i++)
+    for (unsigned int i = 0; i < Channels_1C_count; i++)
         {
-            apply_ = false;
-            if( total_channels == channel_count )
-                {
-                    apply_ = true;
-                }
-
-            // Search for specific implementation of that particular channel in config file
-            //(i.e. Acquisition_GPS0.implementation=xxxx) DEPRECATED
-            s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
-            if( s.compare("1C") == 0 )
-                {
-                    apply_ = true;
-                }
-
-            std::string acquisition_implementation_specific = configuration->property(
-                    "Acquisition_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
             //(i.e. Acquisition_1C0.implementation=xxxx)
-            if(acquisition_implementation_specific.compare(default_implementation) == 0)
-                {
-                    acquisition_implementation_specific = configuration->property(
+            std::string acquisition_implementation_specific = configuration->property(
                             "Acquisition_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-
-            if(acquisition_implementation_specific.compare(default_implementation) != 0)
-                {
-                    acquisition_implementation = acquisition_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. Tracking_GPS0.implementation=xxxx) DEPRECATED
-            std::string tracking_implementation_specific = configuration->property(
-                    "Tracking_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
+                            acquisition_implementation);
             //(i.e. Tracking_1C0.implementation=xxxx)
-            if(tracking_implementation_specific.compare(default_implementation) == 0)
-                {
-                    tracking_implementation_specific = configuration->property(
+            std::string tracking_implementation_specific  = configuration->property(
                             "Tracking_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-
-            if(tracking_implementation_specific.compare(default_implementation) != 0)
-                {
-                    tracking_implementation = tracking_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. TelemetryDecoder_GPS0.implementation=xxxx) DEPRECATED
-            std::string telemetry_decoder_implementation_specific = configuration->property(
-                    "TelemetryDecoder_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-            //(i.e. TelemetryDecoder_1C0.implementation=xxxx)
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0)
-                {
-                    telemetry_decoder_implementation_specific = configuration->property(
+                            tracking_implementation);
+            std::string  telemetry_decoder_implementation_specific = configuration->property(
                             "TelemetryDecoder_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
-                {
-                    telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
-                    apply_ = true;
-                }
-
-            // Push back the channel to the vector of channels, if apply.
-            if((configuration->property("Channels_GPS.count", 0) > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_GPS(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
-            if((configuration->property("Channels_1C.count", 0) > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_1C(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
+                            telemetry_decoder_implementation);
+
+            // Push back the channel to the vector of channels
+             channels->at(channel_absolute_id) = std::move(GetChannel_1C(configuration,
+                     acquisition_implementation_specific,
+                     tracking_implementation_specific,
+                     telemetry_decoder_implementation_specific,
+                     channel_absolute_id,
+                     queue));
+             channel_absolute_id++;
         }
 
     //**************** GPS L2C (M)  CHANNELS **********************
-    channel_count = configuration->property("Channels_2S.count", 0);
-
-    LOG(INFO) << "Getting " << channel_count << " GPS L2C (M) channels";
-
-    tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation);
+    LOG(INFO)<< "Getting " << Channels_2S_count << " GPS L2C (M) channels";
+    tracking_implementation  = configuration->property("Tracking_2S.implementation", default_implementation);
     telemetry_decoder_implementation = configuration->property("TelemetryDecoder_2S.implementation", default_implementation);
     acquisition_implementation = configuration->property("Acquisition_2S.implementation", default_implementation);
-
-    for (unsigned int i = 0; i < total_channels; i++)
-        {
-            apply_ = false;
-            if( total_channels == channel_count )
-                {
-                    apply_ = true;
-                }
-
-            // Search for specific implementation of that particular channel in config file
-            //(i.e. Acquisition_2S0.implementation=xxxx)
-            s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
-            if( s.compare("2S") == 0 )
-                {
-                    apply_ = true;
-                }
+    for (unsigned int i = 0; i < Channels_2S_count; i++)
+        {
+            //(i.e. Acquisition_1C0.implementation=xxxx)
             std::string acquisition_implementation_specific = configuration->property(
-                    "Acquisition_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(acquisition_implementation_specific.compare(default_implementation) != 0)
-                {
-                    acquisition_implementation = acquisition_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. Tracking_2S0.implementation=xxxx)
-            std::string tracking_implementation_specific = configuration->property(
-                    "Tracking_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(tracking_implementation_specific.compare(default_implementation) != 0)
-                {
-                    tracking_implementation = tracking_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. TelemetryDecoder_1C0.implementation=xxxx)
+                            "Acquisition_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
+                            acquisition_implementation);
+            //(i.e. Tracking_1C0.implementation=xxxx)
+            std::string tracking_implementation_specific  = configuration->property(
+                            "Tracking_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
+                            tracking_implementation);
             std::string  telemetry_decoder_implementation_specific = configuration->property(
-                    "TelemetryDecoder_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
-                {
-                    telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
-                    apply_ = true;
-                }
+                            "TelemetryDecoder_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
+                            telemetry_decoder_implementation);
 
-
-            // Push back the channel to the vector of channels, if apply.
-            if((channel_count > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_2S(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
+            // Push back the channel to the vector of channels
+             channels->at(channel_absolute_id) = std::move(GetChannel_2S(configuration,
+                     acquisition_implementation_specific,
+                     tracking_implementation_specific,
+                     telemetry_decoder_implementation_specific,
+                     channel_absolute_id,
+                     queue));
+             channel_absolute_id++;
         }
 
-
     //**************** GALILEO E1 B (I/NAV OS) **********************
-    channel_count = configuration->property("Channels_Galileo.count", 0); // DEPRECATED
-    if (channel_count == 0)
-        {
-            channel_count = configuration->property("Channels_1B.count", 0);
-        }
-
-    LOG(INFO) << "Getting " << channel_count << " Galileo E1 B (I/NAV OS) channels";
 
-    tracking_implementation = configuration->property("Tracking_Galileo.implementation", default_implementation); // DEPRECATED
-    if (tracking_implementation.compare(default_implementation) == 0)
-        {
-            tracking_implementation = configuration->property("Tracking_1B.implementation", std::string("W"));
-        }
-
-    telemetry_decoder_implementation = configuration->property("TelemetryDecoder_Galileo.implementation", default_implementation); // DEPRECATED
-    if (telemetry_decoder_implementation.compare(default_implementation) == 0)
-        {
-            telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", std::string("W"));
-        }
-
-    acquisition_implementation = configuration->property("Acquisition_Galileo.implementation", default_implementation); // DEPRECATED
-    if (acquisition_implementation.compare(default_implementation) == 0)
-        {
-            acquisition_implementation = configuration->property("Acquisition_1B.implementation", std::string("W"));
-        }
-
-    for (unsigned int i = 0; i < total_channels; i++)
-        {
-            apply_ = false;
-            if( total_channels == channel_count )
-                {
-                    apply_ = true;
-                }
-            // Search for specific implementation of that particular channel in config file
-            //(i.e. Acquisition_Galileo0.implementation=xxxx) DEPRECATED
-            s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
-            if( s.compare("1B") == 0 )
-                {
-                    apply_ = true;
-                }
-
-            std::string acquisition_implementation_specific = configuration->property(
-                    "Acquisition_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-            //(i.e. Acquisition_1B0.implementation=xxxx)
-            if(acquisition_implementation_specific.compare(default_implementation) == 0)
-                {
-                    acquisition_implementation_specific = configuration->property(
-                            "Acquisition_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-
-            if(acquisition_implementation_specific.compare(default_implementation) != 0)
-                {
-                    acquisition_implementation = acquisition_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. Tracking_Galileo0.implementation=xxxx) DEPRECATED
-            std::string tracking_implementation_specific = configuration->property(
-                    "Tracking_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-            //(i.e. Tracking_1B0.implementation=xxxx)
-            if(tracking_implementation_specific.compare(default_implementation) == 0)
-                {
-                    tracking_implementation_specific = configuration->property(
-                            "Tracking_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-
-            if(tracking_implementation_specific.compare(default_implementation) != 0)
-                {
-                    tracking_implementation = tracking_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. TelemetryDecoder_Galileo0.implementation=xxxx) DEPRECATED
-            std::string telemetry_decoder_implementation_specific = configuration->property(
-                    "TelemetryDecoder_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-            //(i.e. TelemetryDecoder_1B0.implementation=xxxx)
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0)
-                {
-                    telemetry_decoder_implementation_specific = configuration->property(
-                            "TelemetryDecoder_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
-                            default_implementation);
-                }
-
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
-                {
-                    telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
-                    apply_ = true;
-                }
-
-
-            // Push back the channel to the vector of channels, if apply.
-            if((configuration->property("Channels_Galileo.count", 0) > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_Galileo(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
-            if((configuration->property("Channels_1B.count", 0) > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_1B(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
-        }
+    LOG(INFO) << "Getting " << Channels_1B_count << " GALILEO E1 B (I/NAV OS) channels";
+       tracking_implementation  = configuration->property("Tracking_1B.implementation", default_implementation);
+       telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", default_implementation);
+       acquisition_implementation = configuration->property("Acquisition_1B.implementation", default_implementation);
+       for (unsigned int i = 0; i < Channels_1B_count; i++)
+           {
+               //(i.e. Acquisition_1C0.implementation=xxxx)
+               std::string acquisition_implementation_specific = configuration->property(
+                               "Acquisition_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               acquisition_implementation);
+               //(i.e. Tracking_1C0.implementation=xxxx)
+               std::string tracking_implementation_specific  = configuration->property(
+                               "Tracking_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               tracking_implementation);
+               std::string  telemetry_decoder_implementation_specific = configuration->property(
+                               "TelemetryDecoder_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               telemetry_decoder_implementation);
+
+               // Push back the channel to the vector of channels
+                channels->at(channel_absolute_id) = std::move(GetChannel_1B(configuration,
+                        acquisition_implementation_specific,
+                        tracking_implementation_specific,
+                        telemetry_decoder_implementation_specific,
+                        channel_absolute_id,
+                        queue));
+                channel_absolute_id++;
+           }
 
 
     //**************** GALILEO E5a I (F/NAV OS)  CHANNELS **********************
-    channel_count = configuration->property("Channels_5X.count", 0);
-
-    LOG(INFO) << "Getting " << channel_count << " GALILEO E5a I (F/NAV OS) channels";
-
-    tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation);
-    telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation);
-    acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation);
-
-    for (unsigned int i = 0; i < total_channels; i++)
-        {
-            apply_ = false;
-            if( total_channels == channel_count )
-                {
-                    apply_ = true;
-                }
-            // Search for specific implementation of that particular channel in config file
-            //(i.e. Acquisition_5X0.implementation=xxxx)
-            s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
-            if( s.compare("5X") == 0 )
-                {
-                    apply_ = true;
-                }
-            std::string acquisition_implementation_specific = configuration->property(
-                    "Acquisition_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(acquisition_implementation_specific.compare(default_implementation) != 0)
-                {
-                    acquisition_implementation = acquisition_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. Tracking_5X0.implementation=xxxx)
-            std::string tracking_implementation_specific = configuration->property(
-                    "Tracking_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(tracking_implementation_specific.compare(default_implementation) != 0)
-                {
-                    tracking_implementation = tracking_implementation_specific;
-                    apply_ = true;
-                }
-
-            //(i.e. TelemetryDecoder_5X0.implementation=xxxx)
-            std::string  telemetry_decoder_implementation_specific = configuration->property(
-                    "TelemetryDecoder_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
-                    default_implementation);
-
-            if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
-                {
-                    telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
-                    apply_ = true;
-                }
-
-
-            // Push back the channel to the vector of channels, if apply.
-            if((channel_count > 0) and apply_)
-                {
-                    channels->at(i) = std::move(GetChannel_5X(configuration,
-                            acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
-                    channel_absolute_id++;
-                }
-        }
+    LOG(INFO) << "Getting " << Channels_5X_count << " GALILEO E5a I (F/NAV OS) channels";
+       tracking_implementation  = configuration->property("Tracking_5X.implementation", default_implementation);
+       telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation);
+       acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation);
+       for (unsigned int i = 0; i < Channels_5X_count; i++)
+           {
+               //(i.e. Acquisition_1C0.implementation=xxxx)
+               std::string acquisition_implementation_specific = configuration->property(
+                               "Acquisition_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               acquisition_implementation);
+               //(i.e. Tracking_1C0.implementation=xxxx)
+               std::string tracking_implementation_specific  = configuration->property(
+                               "Tracking_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               tracking_implementation);
+               std::string  telemetry_decoder_implementation_specific = configuration->property(
+                               "TelemetryDecoder_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
+                               telemetry_decoder_implementation);
+
+               // Push back the channel to the vector of channels
+                channels->at(channel_absolute_id) = std::move(GetChannel_5X(configuration,
+                        acquisition_implementation_specific,
+                        tracking_implementation_specific,
+                        telemetry_decoder_implementation_specific,
+                        channel_absolute_id,
+                        queue));
+                channel_absolute_id++;
+           }
 
     return channels;
 }
 
-
 /*
  * Returns the block with the required configuration and implementation
  *
@@ -1382,12 +1016,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
                     out_streams));
             block = std::move(block_);
         }
-    else if (implementation.compare("Mixed_Observables") == 0)
-        {
-            std::unique_ptr<GNSSBlockInterface> block_(new MixedObservables(configuration.get(), role, in_streams,
-                    out_streams));
-            block = std::move(block_);
-        }
     // PVT -------------------------------------------------------------------------
     else if (implementation.compare("GPS_L1_CA_PVT") == 0)
         {
diff --git a/src/core/receiver/gnss_block_factory.h b/src/core/receiver/gnss_block_factory.h
index 7eb596a..10d8c4d 100644
--- a/src/core/receiver/gnss_block_factory.h
+++ b/src/core/receiver/gnss_block_factory.h
@@ -83,10 +83,6 @@ public:
             boost::shared_ptr<gr::msg_queue> queue);
 
 private:
-    // DEPRECATED
-    std::unique_ptr<GNSSBlockInterface> GetChannel_GPS(std::shared_ptr<ConfigurationInterface> configuration,
-            std::string acq, std::string trk, std::string tlm, int channel,
-            boost::shared_ptr<gr::msg_queue> queue);
 
     std::unique_ptr<GNSSBlockInterface> GetChannel_1C(std::shared_ptr<ConfigurationInterface> configuration,
             std::string acq, std::string trk, std::string tlm, int channel,
@@ -96,11 +92,6 @@ private:
             std::string acq, std::string trk, std::string tlm, int channel,
             boost::shared_ptr<gr::msg_queue> queue);
 
-    //DEPRECATED
-    std::unique_ptr<GNSSBlockInterface> GetChannel_Galileo(std::shared_ptr<ConfigurationInterface> configuration,
-            std::string acq, std::string trk, std::string tlm, int channel,
-            boost::shared_ptr<gr::msg_queue> queue);
-
     std::unique_ptr<GNSSBlockInterface> GetChannel_1B(std::shared_ptr<ConfigurationInterface> configuration,
             std::string acq, std::string trk, std::string tlm, int channel,
             boost::shared_ptr<gr::msg_queue> queue);
diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc
index a79b4cd..3231ec6 100644
--- a/src/core/receiver/gnss_flowgraph.cc
+++ b/src/core/receiver/gnss_flowgraph.cc
@@ -187,7 +187,6 @@ void GNSSFlowgraph::connect()
     }
 
     DLOG(INFO) << "blocks connected internally";
-
     // Signal Source (i) >  Signal conditioner (i) >
     int RF_Channels = 0;
     int signal_conditioner_ID = 0;
@@ -257,7 +256,6 @@ void GNSSFlowgraph::connect()
                     return;
             }
         }
-
     DLOG(INFO) << "Signal source connected to signal conditioner";
 
     // Signal conditioner (selected_signal_source) >> channels (i) (dependent of their associated SignalSource_ID)
@@ -294,22 +292,20 @@ void GNSSFlowgraph::connect()
                     return;
             }
 
-            std::string default_signal = configuration_->property("Channel.signal", std::string("1C"));
-            std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", default_signal));
-
+            std::string gnss_signal = channels_.at(i)->get_signal().get_signal_str(); // use channel's implicit signal!
+            std::cout<<"gnss_signal "<<gnss_signal<<std::endl;
             while (gnss_signal.compare(available_GNSS_signals_.front().get_signal_str()) != 0 )
                 {
                     available_GNSS_signals_.push_back(available_GNSS_signals_.front());
                     available_GNSS_signals_.pop_front();
                 }
             channels_.at(i)->set_signal(available_GNSS_signals_.front());
-            LOG(INFO) << "Channel " << i << " assigned to " << available_GNSS_signals_.front();
-            //channels_.at(i)->start_channel();
 
             if (channels_state_[i] == 1)
                 {
                     channels_.at(i)->start_acquisition();
                     available_GNSS_signals_.pop_front();
+                    LOG(INFO) << "Channel " << i << " assigned to " << available_GNSS_signals_.front();
                     LOG(INFO) << "Channel " << i << " connected to observables and ready for acquisition";
                 }
             else
@@ -379,7 +375,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
     case 0:
         LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite() << ", Signal " << channels_.at(who)->get_signal().get_signal_str();
         available_GNSS_signals_.push_back(channels_.at(who)->get_signal());
-
         //TODO: Optimize the channel and signal matching!
         while ( channels_.at(who)->get_signal().get_signal_str().compare(available_GNSS_signals_.front().get_signal_str()) != 0 )
             {
@@ -388,6 +383,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
             }
         channels_.at(who)->set_signal(available_GNSS_signals_.front());
         available_GNSS_signals_.pop_front();
+        usleep(100);
         channels_.at(who)->start_acquisition();
         break;
     case 1:
@@ -556,13 +552,9 @@ void GNSSFlowgraph::set_signals_list()
     /*
      * Read GNSS-SDR default GNSS system and signal
      */
-    std::string default_system = configuration_->property("Channel.system", std::string("")); // DEPRECATED
-    std::string default_signal = configuration_->property("Channel.signal", std::string(""));
 
-    unsigned int total_channels = configuration_->property("Channels_GPS.count", 0) +
-            configuration_->property("Channels_1C.count", 0) +
+    unsigned int total_channels = configuration_->property("Channels_1C.count", 0) +
             configuration_->property("Channels_2S.count", 0) +
-            configuration_->property("Channels_Galileo.count", 0) +
             configuration_->property("Channels_1B.count", 0) +
             configuration_->property("Channels_5X.count", 0);
 
@@ -583,7 +575,6 @@ void GNSSFlowgraph::set_signals_list()
 
     std::string sv_list = configuration_->property("Galileo.prns", std::string("") );
 
-
     if( sv_list.length() > 0 )
     {
         // Reset the available prns:
@@ -613,7 +604,6 @@ void GNSSFlowgraph::set_signals_list()
             available_gps_prn = tmp_set;
         }
     }
-
     sv_list = configuration_->property("SBAS.prns", std::string("") );
 
     if( sv_list.length() > 0 )
@@ -630,7 +620,7 @@ void GNSSFlowgraph::set_signals_list()
         }
     }
 
-    if ((configuration_->property("Channels_1C.count", 0) > 0) or (default_system.find(std::string("GPS")) != std::string::npos) or (default_signal.compare("1C") == 0) or (configuration_->property("Channels_GPS.count", 0) > 0) )
+    if (configuration_->property("Channels_1C.count", 0) > 0 )
         {
             /*
              * Loop to create GPS L1 C/A signals
@@ -644,7 +634,7 @@ void GNSSFlowgraph::set_signals_list()
                 }
         }
 
-    if ((configuration_->property("Channels_2S.count", 0) > 0) or (default_system.find(std::string("GPS L2C M")) != std::string::npos) )
+    if (configuration_->property("Channels_2S.count", 0) > 0)
         {
             /*
              * Loop to create GPS L2C M signals
@@ -658,8 +648,7 @@ void GNSSFlowgraph::set_signals_list()
                 }
         }
 
-
-    if ((configuration_->property("Channels_SBAS.count", 0) > 0) or default_system.find(std::string("SBAS")) != std::string::npos)
+    if (configuration_->property("Channels_SBAS.count", 0) > 0)
         {
             /*
              * Loop to create SBAS L1 C/A signals
@@ -674,7 +663,7 @@ void GNSSFlowgraph::set_signals_list()
         }
 
 
-    if ((configuration_->property("Channels_1B.count", 0) > 0) or (default_system.find(std::string("Galileo")) != std::string::npos) or (default_signal.compare("1B") == 0) or (configuration_->property("Channels_Galileo.count", 0) > 0))
+    if (configuration_->property("Channels_1B.count", 0) > 0)
         {
             /*
              * Loop to create the list of Galileo E1 B signals
@@ -688,7 +677,7 @@ void GNSSFlowgraph::set_signals_list()
                 }
         }
 
-    if ((configuration_->property("Channels_5X.count", 0) > 0) )
+    if (configuration_->property("Channels_5X.count", 0) > 0 )
         {
             /*
              * Loop to create the list of Galileo E1 B signals
@@ -701,7 +690,6 @@ void GNSSFlowgraph::set_signals_list()
                             *available_gnss_prn_iter), std::string("5X")));
                 }
         }
-
     /*
      * Ordering the list of signals from configuration file
      */
@@ -711,45 +699,32 @@ void GNSSFlowgraph::set_signals_list()
 
     for (unsigned int i = 0; i < total_channels; i++)
         {
-            std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", default_signal));
+            std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", std::string("1C")));
             std::string gnss_system;
             if((gnss_signal.compare("1C") == 0) or (gnss_signal.compare("2S") == 0) ) gnss_system = "GPS";
             if((gnss_signal.compare("1B") == 0) or (gnss_signal.compare("5X") == 0) ) gnss_system = "Galileo";
-
-            LOG(INFO) << "Channel " << i <<  " system " << gnss_system << ", signal " << gnss_signal;
-
             unsigned int sat = configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".satellite", 0);
-
-            if (((sat == 0) || (sat == gnss_it->get_satellite().get_PRN()))  and  ( gnss_it->get_signal_str().compare(gnss_signal) == 0 )  ) // 0 = not PRN in configuration file
+            LOG(INFO) << "Channel " << i <<  " system " << gnss_system << ", signal " << gnss_signal <<", sat "<<sat;
+            if (sat == 0) // 0 = not PRN in configuration file
                 {
                     gnss_it++;
                 }
             else
                 {
-                    Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, ( sat != 0 ? sat : gnss_it->get_satellite().get_PRN())), gnss_signal);
-                    if( gnss_it == available_GNSS_signals_.begin() )
-                    {
-                        available_GNSS_signals_.remove(signal_value);
-                        gnss_it = available_GNSS_signals_.begin();
-                    }
-                    else
-                    {
-                        available_GNSS_signals_.remove(signal_value);
-                    }
+                    Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal);
+                    available_GNSS_signals_.remove(signal_value);
                     available_GNSS_signals_.insert(gnss_it, signal_value);
                 }
         }
 
         //    **** FOR DEBUGGING THE LIST OF GNSS SIGNALS ****
 
-        // std::cout << "default_system=" << default_system << std::endl;
-        // std::cout << "default_signal=" << default_signal << std::endl;
-        //    std::list<Gnss_Signal>::iterator available_gnss_list_iter;
-        //    for (available_gnss_list_iter = available_GNSS_signals_.begin(); available_gnss_list_iter
-        //    != available_GNSS_signals_.end(); available_gnss_list_iter++)
-        //    {
-        //      std::cout << *available_gnss_list_iter << std::endl;
-        //    }
+        std::list<Gnss_Signal>::iterator available_gnss_list_iter;
+            for (available_gnss_list_iter = available_GNSS_signals_.begin(); available_gnss_list_iter
+            != available_GNSS_signals_.end(); available_gnss_list_iter++)
+            {
+              std::cout << *available_gnss_list_iter << std::endl;
+            }
 }
 
 
diff --git a/src/core/system_parameters/gnss_signal.cc b/src/core/system_parameters/gnss_signal.cc
index 399a6a9..aaeb1a7 100644
--- a/src/core/system_parameters/gnss_signal.cc
+++ b/src/core/system_parameters/gnss_signal.cc
@@ -36,6 +36,10 @@ Gnss_Signal::Gnss_Signal()
     this->signal = "";
 }
 
+Gnss_Signal::Gnss_Signal(const std::string& signal_)
+{
+    this->signal = signal_;
+}
 
 Gnss_Signal::Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_)
 {
diff --git a/src/core/system_parameters/gnss_signal.h b/src/core/system_parameters/gnss_signal.h
index de83af6..4922e53 100644
--- a/src/core/system_parameters/gnss_signal.h
+++ b/src/core/system_parameters/gnss_signal.h
@@ -48,6 +48,7 @@ private:
     std::string signal;
 public:
     Gnss_Signal();
+    Gnss_Signal(const std::string& signal_);
     Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_);
     ~Gnss_Signal();
     std::string get_signal_str() const; //!<  Get the satellite signal {"1C" for GPS L1 C/A, "2S" for GPS L2C (M), "1B" for Galileo E1B, "5X" for Galileo E5a}
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index ede1f1e..ce8c40e 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -172,6 +172,7 @@ target_link_libraries(run_tests ${CLANG_FLAGS}
                                 ${GNURADIO_ANALOG_LIBRARIES} 
                                 ${ARMADILLO_LIBRARIES}
                                 ${VOLK_LIBRARIES}
+                                channel_fsm
                                 gnss_sp_libs 
                                 gnss_rx
                                 gnss_system_parameters  
diff --git a/src/utils/front-end-cal/CMakeLists.txt b/src/utils/front-end-cal/CMakeLists.txt
index 5c8b5c9..349b161 100644
--- a/src/utils/front-end-cal/CMakeLists.txt
+++ b/src/utils/front-end-cal/CMakeLists.txt
@@ -47,14 +47,20 @@ file(GLOB FRONT_END_CAL_HEADERS "*.h")
 add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS})
 source_group(Headers FILES ${FRONT_END_CAL_HEADERS})
 
-target_link_libraries(front_end_cal_lib ${Boost_LIBRARIES}
+target_link_libraries(front_end_cal_lib ${MAC_LIBRARIES}
+                                        ${Boost_LIBRARIES}
                                         ${GNURADIO_RUNTIME_LIBRARIES}
                                         ${GNURADIO_BLOCKS_LIBRARIES}
+                                        ${GNURADIO_FFT_LIBRARIES}
+                                        ${GNURADIO_FILTER_LIBRARIES}
                                         ${GFlags_LIBS}
                                         ${GLOG_LIBRARIES}
                                         ${ARMADILLO_LIBRARIES}
                                         ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}
+                                        ${GNSS_SDR_OPTIONAL_LIBS}
+                                        rx_core_lib
                                         gnss_rx
+                                        channel_fsm
                                         gnss_sp_libs
 )
     
@@ -70,18 +76,24 @@ add_custom_command(TARGET front-end-cal POST_BUILD
                                    ${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:front-end-cal>)
 
 
-target_link_libraries(front-end-cal  ${GNURADIO_RUNTIME_LIBRARIES}
-                                     ${GNURADIO_BLOCKS_LIBRARIES}
-                                     ${Boost_LIBRARIES}
-                                     ${GFlags_LIBS}
-                                     ${GLOG_LIBRARIES}
-                                     ${ARMADILLO_LIBRARIES}
-                                     gnss_rx
-                                     gnss_sp_libs
-                                     front_end_cal_lib
-                                     ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}
+target_link_libraries(front-end-cal    ${MAC_LIBRARIES}
+                                       ${Boost_LIBRARIES}
+                                       ${GNURADIO_RUNTIME_LIBRARIES}
+                                       ${GNURADIO_BLOCKS_LIBRARIES}
+                                       ${GNURADIO_FFT_LIBRARIES}
+                                       ${GNURADIO_FILTER_LIBRARIES}
+                                       ${GFlags_LIBS}
+                                       ${GLOG_LIBRARIES}
+                                       ${ARMADILLO_LIBRARIES}
+                                       ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}
+                                       ${GNSS_SDR_OPTIONAL_LIBS}
+                                       rx_core_lib
+                                       gnss_rx
+                                       gnss_sp_libs
+                                       front_end_cal_lib
 )
 
+                               
 install(TARGETS front-end-cal
         RUNTIME DESTINATION bin
         COMPONENT "front-end-cal"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list