diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x
index a6e4b943..4b09dc52 100644
--- a/release-notes/CREDITS-2.x
+++ b/release-notes/CREDITS-2.x
@@ -20,6 +20,9 @@ Contributors:
 Ilya Ryzhenkov (@orangy)
 * #580: Lazy load UNIT_TYPE
 
+WrongWrong (@k163377)
+* #627: Merge creator cache for Constructor and Method
+
 # 2.14.0
 
 Richard Kwasnicki (Richie94@github)
diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x
index 33ab5c7c..604d4de7 100644
--- a/release-notes/VERSION-2.x
+++ b/release-notes/VERSION-2.x
@@ -22,6 +22,7 @@ Co-maintainers:
  (fix via [jackson-dataformat-xml#547])
 #580: Lazy load UNIT_TYPE
  (contributed by Ilya R)
+#627: Merge creator cache for Constructor and Method
 
 2.14.2 (28-Jan-2023)
 2.14.1 (21-Nov-2022)
diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/ReflectionCache.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/ReflectionCache.kt
index 432b8518..81400e86 100644
--- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/ReflectionCache.kt
+++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/ReflectionCache.kt
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.introspect.AnnotatedMethod
 import com.fasterxml.jackson.databind.introspect.AnnotatedWithParams
 import com.fasterxml.jackson.databind.util.LRUMap
 import java.lang.reflect.Constructor
+import java.lang.reflect.Executable
 import java.lang.reflect.Method
 import kotlin.reflect.KClass
 import kotlin.reflect.KFunction
@@ -36,8 +37,7 @@ internal class ReflectionCache(reflectionCacheSize: Int) {
     private val javaClassToKotlin = LRUMap<Class<Any>, KClass<Any>>(reflectionCacheSize, reflectionCacheSize)
     private val javaConstructorToKotlin = LRUMap<Constructor<Any>, KFunction<Any>>(reflectionCacheSize, reflectionCacheSize)
     private val javaMethodToKotlin = LRUMap<Method, KFunction<*>>(reflectionCacheSize, reflectionCacheSize)
-    private val javaConstructorToValueCreator = LRUMap<Constructor<Any>, ConstructorValueCreator<*>>(reflectionCacheSize, reflectionCacheSize)
-    private val javaMethodToValueCreator = LRUMap<Method, MethodValueCreator<*>>(reflectionCacheSize, reflectionCacheSize)
+    private val javaExecutableToValueCreator = LRUMap<Executable, ValueCreator<*>>(reflectionCacheSize, reflectionCacheSize)
     private val javaConstructorIsCreatorAnnotated = LRUMap<AnnotatedConstructor, Boolean>(reflectionCacheSize, reflectionCacheSize)
     private val javaMemberIsRequired = LRUMap<AnnotatedMember, BooleanTriState?>(reflectionCacheSize, reflectionCacheSize)
     private val kotlinGeneratedMethod = LRUMap<AnnotatedMethod, Boolean>(reflectionCacheSize, reflectionCacheSize)
@@ -63,22 +63,25 @@ internal class ReflectionCache(reflectionCacheSize: Int) {
         is AnnotatedConstructor -> {
             val constructor = _withArgsCreator.annotated as Constructor<Any>
 
-            javaConstructorToValueCreator.get(constructor)
+            javaExecutableToValueCreator.get(constructor)
                 ?: kotlinFromJava(constructor)?.let {
                     val value = ConstructorValueCreator(it)
-                    javaConstructorToValueCreator.putIfAbsent(constructor, value) ?: value
+                    javaExecutableToValueCreator.putIfAbsent(constructor, value) ?: value
                 }
         }
         is AnnotatedMethod -> {
-            val method = _withArgsCreator.annotated as Method
+            val method = _withArgsCreator.annotated
 
-            javaMethodToValueCreator.get(method)
+            javaExecutableToValueCreator.get(method)
                 ?: kotlinFromJava(method)?.let {
                     val value = MethodValueCreator.of(it)
-                    javaMethodToValueCreator.putIfAbsent(method, value) ?: value
+                    javaExecutableToValueCreator.putIfAbsent(method, value) ?: value
                 }
         }
-        else -> throw IllegalStateException("Expected a constructor or method to create a Kotlin object, instead found ${_withArgsCreator.annotated.javaClass.name}")
+        else -> throw IllegalStateException(
+            "Expected a constructor or method to create a Kotlin object," +
+                    " instead found ${_withArgsCreator.annotated.javaClass.name}"
+        )
     } // we cannot reflect this method so do the default Java-ish behavior
 
     fun checkConstructorIsCreatorAnnotated(key: AnnotatedConstructor, calc: (AnnotatedConstructor) -> Boolean): Boolean = javaConstructorIsCreatorAnnotated.get(key)