diff --git a/tangostationcontrol/tangostationcontrol/beam/delays.py b/tangostationcontrol/tangostationcontrol/beam/delays.py
index ff81bd485fb66d8a043922a9a65443b3c080ff81..59d566a1e629506463473e2f6ce05606dad6bf6e 100644
--- a/tangostationcontrol/tangostationcontrol/beam/delays.py
+++ b/tangostationcontrol/tangostationcontrol/beam/delays.py
@@ -53,18 +53,19 @@ class delay_calculator:
     def is_valid_direction(self, direction):
         try:
             _ = self.measure.direction(*direction)
-        except RuntimeError as e:
+        except (RuntimeError, TypeError) as e:
             return False
 
         return True
 
     def convert(self, direction, antenna_itrf: list([float])):
-        try:
-            # obtain the direction vector for a specific pointing
-            pointing = self.measure.direction(*direction)
-        except RuntimeError as e:
+        # explicitly check validity to get a proper error message
+        if not self.is_valid_direction(direction):
             raise ValueError(f"Could not convert direction {direction} into a pointing") from e
 
+        # obtain the direction vector for a specific pointing
+        pointing = self.measure.direction(*direction)
+
         reference_dir_vector = self.get_direction_vector(pointing)
 
         # # compute the delays for an antennas w.r.t. the reference position
diff --git a/tangostationcontrol/tangostationcontrol/test/beam/test_delays.py b/tangostationcontrol/tangostationcontrol/test/beam/test_delays.py
index 82b4c2b9aeaf03f330fd5736517a59db9ee41e3b..3b3900138c2a9f0a9394b02f6272745fa53bdb6d 100644
--- a/tangostationcontrol/tangostationcontrol/test/beam/test_delays.py
+++ b/tangostationcontrol/tangostationcontrol/test/beam/test_delays.py
@@ -18,6 +18,29 @@ class TestDelays(base.TestCase):
 
         self.assertIsNotNone(d)
 
+    def test_is_valid_direction(self):
+        d = delay_calculator([0, 0, 0])
+
+        # should accept base use cases
+        self.assertTrue(d.is_valid_direction(("J2000", "0deg", "0deg")))
+        self.assertTrue(d.is_valid_direction(("J2000", "270deg", "90deg")))
+        self.assertTrue(d.is_valid_direction(("AZELGEO", "0deg", "0deg")))
+        self.assertTrue(d.is_valid_direction(("AZELGEO", "270deg", "90deg")))
+        self.assertTrue(d.is_valid_direction(("SUN", "0deg", "0deg")))
+
+        # i dont get these either, but casacore accepts them
+        self.assertTrue(d.is_valid_direction([]))
+        self.assertTrue(d.is_valid_direction(("J2000",)))
+        self.assertTrue(d.is_valid_direction(("J2000", "0deg",)))
+        self.assertTrue(d.is_valid_direction(("J2000", "0deg", "0deg", "0deg")))
+
+        # should not throw, and return False, on bad uses
+        self.assertFalse(d.is_valid_direction(("", "", "")))
+        self.assertFalse(d.is_valid_direction(("J2000", "0deg", "0deg", "0deg", "0deg")))
+        self.assertFalse(d.is_valid_direction((1, 2, 3)))
+        self.assertFalse(d.is_valid_direction("foo"))
+        self.assertFalse(d.is_valid_direction(None))
+
     def test_sun(self):
         # # create a frame tied to the reference position
         reference_itrf = [3826577.066, 461022.948, 5064892.786]