diff --git a/tangostationcontrol/tangostationcontrol/devices/beam.py b/tangostationcontrol/tangostationcontrol/devices/beam.py
index 1ca5631b4d5d7e65981512fada14a3e398ec6556..886affe25ecb1d45f4b44e594d73f7b690c37d4b 100644
--- a/tangostationcontrol/tangostationcontrol/devices/beam.py
+++ b/tangostationcontrol/tangostationcontrol/devices/beam.py
@@ -9,8 +9,10 @@
 
 import numpy
 import datetime
+from json import loads
+
 from tango.server import attribute, command
-from tango import AttrWriteType, DebugIt, DevState, DeviceProxy, DevVarStringArray, DevVarDoubleArray
+from tango import AttrWriteType, DebugIt, DevState, DeviceProxy, DevVarStringArray, DevVarDoubleArray, DevString
 
 # Additional import
 from tangostationcontrol.common.entrypoint import entry
@@ -82,9 +84,7 @@ class Beam(lofar_device):
     def _HBAT_delays(self, pointing_direction: numpy.array, timestamp: datetime.datetime = datetime.datetime.now()):
         """
         Calculate the delays (in seconds) based on the pointing list and the timestamp
-        TBD: antenna and reference positions will be retrieved from RECV and not stored as BEAM device properties
         """
-
         delays = numpy.zeros((96,16), dtype=numpy.float64)
 
         for tile in range(96):
@@ -182,6 +182,30 @@ class Beam(lofar_device):
 
         self._HBAT_set_pointing(pointing_direction, timestamp)
 
+    @command(dtype_in = DevString)
+    @DebugIt()
+    @only_in_states([DevState.ON])
+    def HBAT_set_pointing_for_specific_time(self, parameters: DevString = None):
+        """
+        Uploads beam weights based on a given pointing direction 2D array (96 tiles x 3 parameters)
+        for the given timestamp
+
+        Parameters are given in a json document.
+        pointing_direction: array of 96 casacore pointings (3 string parameters)
+        timestamp: POSIX timestamp
+        """
+        pointing_parameters = loads(parameters)
+
+        pointing_direction = list(pointing_parameters["pointing_direction"])
+        timestamp_param = float(pointing_parameters["timestamp"])
+        timestamp = datetime.datetime.fromtimestamp(timestamp_param)
+
+        # Reshape the flatten pointing array
+        pointing_direction = numpy.array(pointing_direction).reshape(96,3)
+
+        self._HBAT_set_pointing(pointing_direction, timestamp)
+
+
 # ----------
 # Run server
 # ----------
diff --git a/tangostationcontrol/tangostationcontrol/devices/lofar_device.py b/tangostationcontrol/tangostationcontrol/devices/lofar_device.py
index 977afa942616ad424915d8f724af48a3096ff781..a53fdfcfd8b61167789a4ed2a05728379d026e61 100644
--- a/tangostationcontrol/tangostationcontrol/devices/lofar_device.py
+++ b/tangostationcontrol/tangostationcontrol/devices/lofar_device.py
@@ -82,6 +82,8 @@ class lofar_device(Device, metaclass=DeviceMeta):
         # NOTE: Will delete_device first, if necessary
         Device.init_device(self)
 
+        self.properties_changed()
+        
         self.set_state(DevState.OFF)
         self.set_status("Device is in the OFF state.")
 
@@ -132,6 +134,8 @@ class lofar_device(Device, metaclass=DeviceMeta):
 
         self.configure_for_initialise()
 
+        self.properties_changed()
+
         self.set_state(DevState.STANDBY)
         self.set_status("Device is in the STANDBY state.")
 
@@ -220,6 +224,9 @@ class lofar_device(Device, metaclass=DeviceMeta):
         """Method always executed before any TANGO command is executed."""
         pass
 
+    def properties_changed(self):
+        pass
+
     @command()
     @only_in_states([DevState.STANDBY, DevState.ON])
     @DebugIt()
diff --git a/tangostationcontrol/tangostationcontrol/devices/recv.py b/tangostationcontrol/tangostationcontrol/devices/recv.py
index 57a187714939f7af9ef4d55810a1dbe62d46fa20..f2acb0794d294eece593ad247b5b15b19c0ee4ad 100644
--- a/tangostationcontrol/tangostationcontrol/devices/recv.py
+++ b/tangostationcontrol/tangostationcontrol/devices/recv.py
@@ -222,6 +222,9 @@ class RECV(opcua_device):
     # --------
     # overloaded functions
     # --------
+    def properties_changed(self):
+        super().properties_changed()
+        self.HBAT_bf_delay_offset = numpy.mean(self.HBAT_bf_delay_step_delays)
 
     # --------
     # internal functions
@@ -242,7 +245,7 @@ class RECV(opcua_device):
         distance = lambda x , y : numpy.absolute(x-y)
         for tile in range(96):
             for at in range(32):
-                delay = calibrated_delays[tile,at]
+                delay = calibrated_delays[tile,at] + self.HBAT_bf_delay_offset
                 step = min(self.HBAT_bf_delay_step_delays,key=partial(distance,delay))
                 HBAT_bf_delay_steps[tile,at] = numpy.where(self.HBAT_bf_delay_step_delays==step)[0][0]
         return HBAT_bf_delay_steps
diff --git a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py
index b7e8bc2a732801fdf80cb978e5b558bfc3909623..14841394fd308d11f1b8cb99bedd820fd86a1dde 100644
--- a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py
+++ b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py
@@ -8,11 +8,22 @@
 # See LICENSE.txt for more info.
 
 import numpy
+import datetime
+import json
+
 from tango import DevState
 from tangostationcontrol.integration_test.device_proxy import TestDeviceProxy
 
 from .base import AbstractTestBases
 
+
+class NumpyEncoder(json.JSONEncoder):
+    def default(self, obj):
+        if isinstance(obj, numpy.ndarray):
+            return obj.tolist()
+        return json.JSONEncoder.default(self, obj)
+
+
 class TestDeviceBeam(AbstractTestBases.TestDeviceBase):
 
     pointing_direction = numpy.array([["J2000","0deg","0deg"]] * 96).flatten()
@@ -70,3 +81,49 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase):
         # Verify delays changed (to be discussed)
         #self.assertFalse((HBAT_delays_r1==HBAT_delays_r2).all())
 
+    def test_pointing_to_zenith(self):
+        # setup RECV as well
+        recv_proxy = self.setup_recv_proxy()
+
+        self.proxy.initialise()
+        self.proxy.on()
+
+        # Point to Zenith
+        self.proxy.HBAT_set_pointing(numpy.array([["AZELGEO","0deg","90deg"]] * 96).flatten())
+
+        calculated_HBAT_delay_steps = numpy.array(recv_proxy.read_attribute('HBAT_BF_delay_steps_RW').value)
+
+        expected_HBAT_delay_steps = numpy.array([[15] * 32] * 96, dtype=numpy.int64)
+
+        numpy.testing.assert_equal(calculated_HBAT_delay_steps, expected_HBAT_delay_steps)
+
+    def test_delays_same_as_LOFAR_ref_pointing(self):
+        # setup RECV as well
+        recv_proxy = self.setup_recv_proxy()
+
+        self.proxy.initialise()
+        self.proxy.on()
+
+        # Point to LOFAR 1 ref pointing (0.929342, 0.952579, J2000)
+        pointings = numpy.array([["J2000", "0.929342rad", "0.952579rad"]] * 96).flatten()
+        # Need to set the time to '2022-01-18 11:19:35'
+        timestamp = datetime.datetime(2022, 1, 18, 11, 19, 35).timestamp()
+
+        parameters = {
+            "pointing_direction": pointings,
+            "timestamp": timestamp
+        }
+
+        json_string = json.dumps(parameters, cls=NumpyEncoder)
+        self.proxy.HBAT_set_pointing_for_specific_time(json_string)
+
+        calculated_HBAT_delay_steps = numpy.array(recv_proxy.read_attribute('HBAT_BF_delay_steps_RW').value)
+
+        # Check all delay steps are zero with small margin
+        # [24, 25, 27, 28, 17, 18, 20, 21, 10, 11, 13, 14, 3, 4, 5, 7] These are the real values from LOFAR.
+        # The [3] = 28 diff is explained that we match the closest delay step and LOFAR 1 wants the one with
+        # in 0.2ns but if it can't it will do a int(delay / 0.5ns) so we get slightly different results but
+        # they can be explained.
+        expected_HBAT_delay_steps = numpy.array([24, 25, 27, 29, 17, 18, 20, 21, 10, 11, 13, 14, 3, 4, 5, 7] * 2, dtype=numpy.int64)
+        numpy.testing.assert_equal(calculated_HBAT_delay_steps[0], expected_HBAT_delay_steps)
+        numpy.testing.assert_equal(calculated_HBAT_delay_steps[48], expected_HBAT_delay_steps)