diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
index f0e8985..e30a68f 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
@@ -110,6 +110,24 @@
         keyDeserializer::apply,
         valueDeserializer::apply,
         options)
+
+    /**
+     * Open a LevelDB-backed key-value store using Bytes keys and values.
+     *
+     * @param dbPath The path to the levelDB database.
+     * @return A key-value store dealing with bytes.
+     * @throws IOException If an I/O error occurs.
+     */
+    @JvmStatic
+    @Throws(IOException::class)
+    fun open(
+      dbPath: Path
+    ) =
+      LevelDBKeyValueStore<Bytes, Bytes>(dbPath,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply)
   }
 
   private val db: DB
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
index 190108f..125f53d 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
@@ -19,6 +19,7 @@
 import kotlinx.coroutines.Dispatchers
 import org.apache.tuweni.bytes.Bytes
 import org.mapdb.DB
+import org.mapdb.DB.Keys.valueSerializer
 import org.mapdb.DBMaker
 import org.mapdb.DataInput2
 import org.mapdb.DataOutput2
@@ -26,6 +27,7 @@
 import java.io.IOException
 import java.nio.file.Files
 import java.nio.file.Path
+import java.util.function.Function
 import kotlin.coroutines.CoroutineContext
 
 /**
@@ -42,7 +44,6 @@
  * @constructor Open a MapDB-backed key-value store.
  */
 class MapDBKeyValueStore<K, V>
-@Throws(IOException::class)
 constructor(
   dbPath: Path,
   private val keySerializer: (K) -> Bytes,
@@ -65,15 +66,35 @@
      * @throws IOException If an I/O error occurs.
      */
     @JvmStatic
-    @Throws(IOException::class)
     fun <K, V> open(
       dbPath: Path,
-      keySerializer: (K) -> Bytes,
-      valueSerializer: (V) -> Bytes,
-      keyDeserializer: (Bytes) -> K,
-      valueDeserializer: (Bytes?) -> V?
+      keySerializer: Function<K, Bytes>,
+      valueSerializer: Function<V, Bytes>,
+      keyDeserializer: Function<Bytes, K>,
+      valueDeserializer: Function<Bytes?, V?>
     ) =
-      MapDBKeyValueStore<K, V>(dbPath, keySerializer, valueSerializer, keyDeserializer, valueDeserializer)
+      MapDBKeyValueStore<K, V>(dbPath,
+        keySerializer::apply,
+        valueSerializer::apply,
+        keyDeserializer::apply,
+        valueDeserializer::apply)
+
+    /**
+     * Open a MapDB-backed key-value store using Bytes keys and values.
+     *
+     * @param dbPath The path to the MapDB database.
+     * @return A key-value store dealing with bytes.
+     * @throws IOException If an I/O error occurs.
+     */
+    @JvmStatic
+    fun open(
+      dbPath: Path
+    ) =
+      MapDBKeyValueStore<Bytes, Bytes>(dbPath,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply)
   }
 
   private val db: DB
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
index f22f0cd..c85f285 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
@@ -25,6 +25,7 @@
 import kotlinx.coroutines.future.await
 import org.apache.tuweni.bytes.Bytes
 import org.checkerframework.checker.units.qual.K
+import java.io.IOException
 import java.net.InetAddress
 import java.util.concurrent.CompletionStage
 import java.util.function.Function
@@ -51,6 +52,25 @@
 ) : KeyValueStore<K, V> {
 
   companion object {
+
+    /**
+     * Open a Redis-backed key-value store using Bytes keys and values.
+     *
+     * @param uri The uri to the Redis store.
+     * @return A key-value store dealing with bytes.
+     * @throws IOException If an I/O error occurs.
+     */
+    @JvmStatic
+    @Throws(IOException::class)
+    fun open(
+      uri: String
+    ) =
+      RedisKeyValueStore<Bytes, Bytes>(uri,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply,
+        Function.identity<Bytes>()::apply)
+
     /**
      * Open a Redis-backed key-value store.
      *
diff --git a/kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java b/kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java
index 19e0f37..0dd9056 100644
--- a/kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java
+++ b/kv/src/test/java/org/apache/tuweni/kv/KeyValueStoreTest.java
@@ -50,6 +50,27 @@
   }
 
   @Test
+  void testPutAndGetMapDB(@TempDirectory Path tmpDir) throws Exception {
+    KeyValueStore<Bytes, Bytes> store = MapDBKeyValueStore
+        .open(tmpDir.resolve("mapdb"), bytesIdentityFn, bytesIdentityFn, bytesIdentityFn, bytesIdentityFn);
+    AsyncCompletion completion = store.putAsync(Bytes.of(123), Bytes.of(10, 12, 13));
+    completion.join();
+    Bytes value = store.getAsync(Bytes.of(123)).get();
+    assertNotNull(value);
+    assertEquals(Bytes.of(10, 12, 13), value);
+  }
+
+  @Test
+  void testPutAndGetMapDBDirect(@TempDirectory Path tmpDir) throws Exception {
+    KeyValueStore<Bytes, Bytes> store = MapDBKeyValueStore.open(tmpDir.resolve("mapdb"));
+    AsyncCompletion completion = store.putAsync(Bytes.of(123), Bytes.of(10, 12, 13));
+    completion.join();
+    Bytes value = store.getAsync(Bytes.of(123)).get();
+    assertNotNull(value);
+    assertEquals(Bytes.of(10, 12, 13), value);
+  }
+
+  @Test
   void testNoValue() throws Exception {
     Map<Bytes, Bytes> map = new HashMap<>();
     KeyValueStore<Bytes, Bytes> store = MapKeyValueStore.open(map);
