diff --git a/libevdev/_clib.py b/libevdev/_clib.py
index 839787491d116aaa57ef0ebf3565fccc299a29c0..6e4ab2cf1cd7e0b9d1509e2d1e9d9587bc8c3c26 100644
--- a/libevdev/_clib.py
+++ b/libevdev/_clib.py
@@ -690,8 +690,9 @@ class Libevdev(_LibraryWrapper):
         if event_code is not None and event_value is not None:
             if not isinstance(event_type, int):
                 event_type = cls.event_to_value(event_type)
-            v = cls._event_value_from_name(event_type,
-                                           event_code.encode("iso8859-1"),
+            if not isinstance(event_code, int):
+                event_code = cls.event_to_value(event_type, event_code)
+            v = cls._event_value_from_name(event_type, event_code,
                                            event_value.encode("iso8859-1"))
         elif event_code is not None:
             if not isinstance(event_type, int):
diff --git a/test/test_clib.py b/test/test_clib.py
index 07cc6a153d7756e20f0948074a5c966c297db6bf..5db67d4c59068d5b5998e8c48c564127c42d22d2 100644
--- a/test/test_clib.py
+++ b/test/test_clib.py
@@ -123,6 +123,17 @@ class TestNameConversion(unittest.TestCase):
         v = Libevdev.event_to_value("EV_REL", "KEY_ESC")
         self.assertIsNone(v)
 
+    def test_event_value_to_value(self):
+        v = Libevdev.event_to_value("EV_ABS", "ABS_MT_TOOL_TYPE", "MT_TOOL_FINGER")
+        self.assertEqual(v, 0)
+
+        v = Libevdev.event_to_value("EV_ABS", "ABS_MT_TOOL_TYPE", "MT_TOOL_PEN")
+        self.assertEqual(v, 1)
+
+    def test_event_value_to_value_invalid(self):
+        v = Libevdev.event_to_value("EV_ABS", "ABS_X", "foo")
+        self.assertIsNone(v)
+
 
 class TestLibevdevDevice(unittest.TestCase):