diff --git a/common/addr_table/mprocessor.xml b/common/addr_table/mprocessor.xml
index 9a988f46d8112a295d7d6f728a376d50f4327c0f..5d54a3c01ebe1974ff5a98bf57c189d373577ebb 100644
--- a/common/addr_table/mprocessor.xml
+++ b/common/addr_table/mprocessor.xml
@@ -10,14 +10,18 @@
         <node id="header_user_bits" address="0x1"/>
     </node>
     
-    <node id="csr" address="0x30" description="MProcessor control and status" fwinfo="endpoint;width=3">
+    <node id="csr" address="0x30" description="MProcessor control and status" fwinfo="endpoint;width=4">
         <node id="header_start_select" address="0x0" mask="0x7"/>
         <node id="occupancy_windowL"   address="0x1"/>
         <node id="occupancy_windowH"   address="0x2" mask="0x000f"/>
-        <node id="lff"                 address="0x4" mask="0x0001"/>
-        <node id="super_id"            address="0x5"/>
-        <node id="occupancy_max_value" address="0x6"/>
+        <node id="localx_windowL"      address="0x3"/>
+        <node id="localx_windowH"      address="0x4" mask="0x000f"/>
+        <node id="lff"                 address="0x8" mask="0x0001"/>
+        <node id="super_id"            address="0x9"/>
+        <node id="occupancy_max_value" address="0xa"/>
+        <node id="localx_max_value"    address="0xb"/>
     </node>
 
     <node id="occupancy_mem" address="0x400" size="0x100" mode="incremental" fwinfo="endpoint;width=8"/>
+    <node id="tracking_localx_mem" address="0x1000" size="0x1000" mode="incremental" fwinfo="endpoint;width=12"/>
 </node>
diff --git a/common/firmware/hdl/LinkAggregatorIPBus.vhd b/common/firmware/hdl/LinkAggregatorIPBus.vhd
index 4ff1f48d6dbd798a4aa445cfc2adc8ceba15ba5e..1445c4ea0503078eab0f167151cb3fa3c9cd2ed0 100644
--- a/common/firmware/hdl/LinkAggregatorIPBus.vhd
+++ b/common/firmware/hdl/LinkAggregatorIPBus.vhd
@@ -24,6 +24,7 @@ entity LinkAggregatorIPBus is
         links_out          : out ldata(7 downto 0) := (others => LWORD_NULL);
         uncompressed_stubs : out ldata(N_LINKS * 8 - 1 downto 0) := (others => LWORD_NULL);
         readout_reset      : out std_logic := '0';
+        tracking_stubs     : out ldata(5 downto 0) := (others => LWORD_NULL);
         --- IPBus Ports ---
         ipb_clk            : in  std_logic;
         ipb_rst            : in  std_logic;
@@ -222,7 +223,8 @@ begin
         -- status_bits      => link_aggregator_status_registers(3)(15 downto 0),
         non_empty_counts => mprocessor_monitoring_registers,
         bx_valid_count_out => bx_valid_count,
-        debug_tracking_event_count => tracking_event_count
+        debug_tracking_event_count => tracking_event_count,
+        debug_tracking_stubs_out => tracking_stubs
     );
     
     rate_monitoring_registers(0) <= bx_valid_count(0);
diff --git a/common/firmware/hdl/MProcessor.vhd b/common/firmware/hdl/MProcessor.vhd
index d8a4465b88679e5360010cb7e0c050db9409db70..6e1be92d635b5cf962a1131deab8f07581c0b2d0 100644
--- a/common/firmware/hdl/MProcessor.vhd
+++ b/common/firmware/hdl/MProcessor.vhd
@@ -50,8 +50,8 @@ architecture Behavorial of MProcessor is
     signal aggregated_stubs        : ldata(7 downto 0)           := (others => LWORD_NULL);
     signal link_aggregator_input   : ldata(N_LINKS - 1 downto 0) := (others => LWORD_NULL);
 
-    signal status_registers        : ipb_reg_v(3 - 1 downto 0)   := (others => (others => '0'));
-    signal control_registers       : ipb_reg_v(3 - 1 downto 0)   := (others => (others => '0'));
+    signal status_registers        : ipb_reg_v(4 - 1 downto 0)   := (others => (others => '0'));
+    signal control_registers       : ipb_reg_v(5 - 1 downto 0)   := (others => (others => '0'));
 
     signal super_id                : std_logic_vector(31 downto 0) := (others => '0');
 
@@ -62,7 +62,11 @@ architecture Behavorial of MProcessor is
     signal occupancy_histogram_reset                  : std_logic                                := '0';
     signal debug_packet_size                          : lword                                    := LWORD_NULL;
 
-
+    signal tracking_stubs : ldata(5 downto 0) := (others => LWORD_NULL);
+    signal localx_trigger_window_lower             : std_logic_vector(31 downto 0)            := (others => '0');
+    signal localx_trigger_window_upper             : std_logic_vector(3 downto 0)             := (others => '0');
+    signal localx_trigger_window                   : std_logic_vector(36 - 1 downto 0)        := X"0ffffffff";
+    signal localx_max_value                        : std_logic_vector(32 - 1 downto 0)        := (others => '0');
 
 begin
 
@@ -90,8 +94,8 @@ begin
     MProcessorControlInstance: entity work.ipbus_ctrlreg_v
     --==============================--
     generic map(
-        N_CTRL    => 3,
-        N_STAT    => 3
+        N_CTRL    => 5,
+        N_STAT    => 4
     )
     port map(
         clk       => ipb_clk,
@@ -111,17 +115,18 @@ begin
     )
     port map (
         --- Input Ports ---
-        clk_p         => clk_p,
-        packet_start  => packet_start,
-        links_in      => link_aggregator_input,
+        clk_p          => clk_p,
+        packet_start   => packet_start,
+        links_in       => link_aggregator_input,
         --- Output Ports ---
-        links_out     => aggregated_stubs,
-        readout_reset => readout_reset,
+        links_out      => aggregated_stubs,
+        readout_reset  => readout_reset,
+        tracking_stubs => tracking_stubs,
         --- IPBus Ports ---
-        ipb_clk       => ipb_clk,
-        ipb_rst       => ipb_rst,
-        ipb_in        => ipb_to_slaves(N_SLV_LINK_AGGREGATOR),
-        ipb_out       => ipb_from_slaves(N_SLV_LINK_AGGREGATOR)
+        ipb_clk        => ipb_clk,
+        ipb_rst        => ipb_rst,
+        ipb_in         => ipb_to_slaves(N_SLV_LINK_AGGREGATOR),
+        ipb_out        => ipb_from_slaves(N_SLV_LINK_AGGREGATOR)
     );
 
     --==============================--
@@ -160,6 +165,24 @@ begin
     --     stubs_in => aggregated_stubs(0)
     -- );
 
+    --==============================--
+    TrackFinderInstance : entity work.TrackFinder
+    --==============================--
+    port map (
+        -- Input Ports --
+        clk_p => clk_p,
+        stubs_in => tracking_stubs,
+        header_start => packet_start,
+        localx_trigger_window => localx_trigger_window,
+        --- Output Ports ---
+        localx_max_value => localx_max_value,
+        --- IPBus Ports ---
+        clk             => ipb_clk,
+        rst             => ipb_rst,
+        ipb_in          => ipb_to_slaves(N_SLV_TRACKING_LOCALX_MEM),
+        ipb_out         => ipb_from_slaves(N_SLV_TRACKING_LOCALX_MEM)
+    );
+
     link_aggregator_input(N_LINKS - 1 downto 0) <= links_in;
 
     status_registers(0)(0) <= gbe_backpressure;
@@ -204,8 +227,12 @@ begin
     occupancy_trigger_window_lower <= control_registers(1);
     occupancy_trigger_window_upper <= control_registers(2)(3 downto 0);
     occupancy_trigger_window       <= occupancy_trigger_window_upper & occupancy_trigger_window_lower;
+    localx_trigger_window_lower <= control_registers(3);
+    localx_trigger_window_upper <= control_registers(4)(3 downto 0);
+    localx_trigger_window       <= localx_trigger_window_upper & localx_trigger_window_lower;
 
     status_registers(2)(32 - 1 downto 0) <= occupancy_max_value;
+    status_registers(3)(32 - 1 downto 0) <= localx_max_value;
 
 
 end Behavorial;
diff --git a/common/firmware/hdl/TrackFinder.vhd b/common/firmware/hdl/TrackFinder.vhd
index 32e63137329eaf47e736412888f50fff99a4c184..374ad69f604220009b2ecef84e39dfa4c7d811ee 100644
--- a/common/firmware/hdl/TrackFinder.vhd
+++ b/common/firmware/hdl/TrackFinder.vhd
@@ -31,7 +31,14 @@ entity TrackFinder is
     port (
         clk_p : in STD_LOGIC;
         stubs_in : in ldata(5 downto 0) := (others => LWORD_NULL);
-        header_start : in std_logic
+        header_start : in std_logic;
+        localx_trigger_window : std_logic_vector(36 - 1 downto 0) := X"0ffffffff";
+        localx_max_value : std_logic_vector(32 - 1 downto 0) := (others => '0')
+        --- IPBus Ports ---
+        ipb_clk            : in  std_logic;
+        ipb_rst            : in  std_logic;
+        ipb_in             : in  ipb_wbus;
+        ipb_out            : out ipb_rbus;
     );
 end TrackFinder;
 
@@ -41,6 +48,9 @@ architecture Behavioral of TrackFinder is
     signal valid_event_array : std_logic_vector(5 downto 0);
     signal valid_event : std_logic := '0';
 
+    signal histogram_input : lword := LWORD_NULL;
+    signal localx_histogram_reset : std_logic := '0';
+
 begin
 
     genValidEventArray: for i in 0 to 5 generate
@@ -59,7 +69,49 @@ begin
                     end if;
                 end loop;
             end if;
+            valid_event <= and_reduce(valid_event_array) and headder_start;
+
+            if valid_event then
+                histogram_input.valid <= '1';
+                histogram_input.data(11 downto 0) <= std_logic_vector(to_unsigned(stub_array(0).localx, 12));
+            else
+                histogram_input <= LWORD_NULL;
+            end if;
         end if;
     end process pMain;
 
+
+    --==============================--
+    LocalXHistogramInstance : entity work.IPBusHistogram
+    --==============================--
+    generic map (
+        input_width => 12,
+        bin_width   => 32,
+        data_offset => 0
+    )
+    port map (
+        --- Input Ports ---
+        clk_p           => clk_p,
+        data_in         => histogram_input,
+        histogram_reset => localx_histogram_reset,
+        --- Output Ports ---
+        max_bin_value   => localx_max_value,
+        --- IPBus Ports ---
+        clk             => ipb_clk,
+        rst             => ipb_rst,
+        ipb_in          => ipb_in,
+        ipb_out         => ipb_out
+    );
+
+    --==============================--
+    LocalXHistogramResetter : entity work.HistogramResetter
+    --==============================--
+    port map (
+        --- Input Ports ---
+        clk_p           => clk_p,
+        trigger_window  => localx_trigger_window,
+        --- Output Ports ---
+        histogram_reset => localx_histogram_reset
+    );
+
 end Behavioral;
diff --git a/top/addr_table/emp_payload.xml b/top/addr_table/emp_payload.xml
index 88bd97a347787c1b5ea5f87497d1148e407eb3f7..65601aff8b667bca11a0fd6c3af46136eb6b8f35 100644
--- a/top/addr_table/emp_payload.xml
+++ b/top/addr_table/emp_payload.xml
@@ -13,7 +13,7 @@
 
     <node id="link_monitor" address="0x10000" module="file://LinkMonitorInterface.xml"/>
 
-    <node id="mprocessor" address="0x40000" description="MProcessor control and status" module="file://mprocessor.xml" fwinfo="endpoint;width=12"/>
+    <node id="mprocessor" address="0x40000" description="MProcessor control and status" module="file://mprocessor.xml" fwinfo="endpoint;width=13"/>
     <node id="mproc_ctrl" address="0x4fff0" description="MProcessor channel control" fwinfo="endpoint;width=1">
         <node id="control" address="0x0">
             <node id="chan_sel" mask="0x7f"/>