diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c
index 6952d884e34753859682f0c704ca36f3f046a117..ffbfefc8ddac8fd97a1eb21da07d2828d0947f27 100644
--- a/libraries/libmdb/mdb.c
+++ b/libraries/libmdb/mdb.c
@@ -5057,7 +5057,7 @@ mdb_update_key(MDB_page *mp, indx_t indx, MDB_val *key)
 	MDB_node		*node;
 	char			*base;
 	size_t			 len;
-	int			 delta;
+	int			 delta, delta0;
 	indx_t			 ptr, i, numkeys;
 	DKBUF;
 
@@ -5077,7 +5077,11 @@ mdb_update_key(MDB_page *mp, indx_t indx, MDB_val *key)
 	}
 #endif
 
-	delta = key->mv_size - node->mn_ksize;
+	delta0 = delta = key->mv_size - node->mn_ksize;
+
+	/* Must be 2-byte aligned. If new key is
+	 * shorter by 1, the shift will be skipped.
+	 */
 	delta += (delta & 1);
 	if (delta) {
 		if (delta > 0 && SIZELEFT(mp) < delta) {
@@ -5097,9 +5101,12 @@ mdb_update_key(MDB_page *mp, indx_t indx, MDB_val *key)
 		mp->mp_upper -= delta;
 
 		node = NODEPTR(mp, indx);
-		node->mn_ksize = key->mv_size;
 	}
 
+	/* But even if no shift was needed, update ksize */
+	if (delta0)
+		node->mn_ksize = key->mv_size;
+
 	if (key->mv_size)
 		memcpy(NODEKEY(node), key->mv_data, key->mv_size);