diff --git a/ipuz/direction.py b/ipuz/direction.py
index <HASH>..<HASH> 100644
--- a/ipuz/direction.py
+++ b/ipuz/direction.py
@@ -3,7 +3,9 @@
 def validate_direction(direction):
     splitted = direction.split(':')
     direction_name = direction
-    if len(splitted) > 1:
+    if len(splitted) > 2:
+        return False
+    if len(splitted) <= 2:
         direction_name = splitted[0]
     return direction_name in (
         "Across",
diff --git a/tests/test_ipuz.py b/tests/test_ipuz.py
index <HASH>..<HASH> 100644
--- a/tests/test_ipuz.py
+++ b/tests/test_ipuz.py
@@ -510,6 +510,13 @@ class IPUZCrosswordValueTestCase(IPUZBaseTestCase):
             "Invalid CrosswordValue in saved element found"
         )
 
+    def test_validate_crosswordvalue_with_invalid_direction(self):
+        self.puzzle["saved"] = [[{"Across:Horizontal:and_something": "A"}]]
+        self.validate_puzzle(
+            self.puzzle,
+            "Invalid CrosswordValue in saved element found"
+        )
+
 
 class IPUZWriteTestCase(IPUZBaseTestCase):
Fixed issue with Direction validation with multiple colons