Index: uspace/lib/nic/src/nic_addr_db.c
===================================================================
--- uspace/lib/nic/src/nic_addr_db.c	(revision 61eb2ce2769cc7e957b2ee93ca59919d895a7999)
+++ uspace/lib/nic/src/nic_addr_db.c	(revision a78b0a0431e252aaadea9fc13ea3c15a62663075)
@@ -52,6 +52,7 @@
 typedef struct nic_addr_entry {
 	ht_link_t link;
+	size_t hash;
 	uint8_t len;
-	uint8_t addr[1];
+	uint8_t addr[];
 } nic_addr_entry_t;
 
@@ -60,14 +61,14 @@
  */
 typedef struct {
+	size_t hash;
 	size_t len;
 	const uint8_t *addr;
 } addr_key_t;
 
-static bool nic_addr_key_equal(const void *key_arg, const ht_link_t *item)
+static bool nic_addr_key_equal(const void *key_arg, size_t hash, const ht_link_t *item)
 {
 	const addr_key_t *key = key_arg;
 	nic_addr_entry_t *entry = member_to_inst(item, nic_addr_entry_t, link);
-
-	return memcmp(entry->addr, key->addr, entry->len) == 0;
+	return entry->hash == hash && memcmp(entry->addr, key->addr, entry->len) == 0;
 }
 
@@ -86,5 +87,5 @@
 {
 	const addr_key_t *key = k;
-	return addr_hash(key->len, key->addr);
+	return key->hash ? key->hash : addr_hash(key->len, key->addr);
 }
 
@@ -92,5 +93,5 @@
 {
 	nic_addr_entry_t *entry = member_to_inst(item, nic_addr_entry_t, link);
-	return addr_hash(entry->len, entry->addr);
+	return entry->hash;
 }
 
@@ -98,5 +99,4 @@
 {
 	nic_addr_entry_t *entry = member_to_inst(item, nic_addr_entry_t, link);
-
 	free(entry);
 }
@@ -173,5 +173,6 @@
 	addr_key_t key = {
 		.len = db->addr_len,
-		.addr = addr
+		.addr = addr,
+		.hash = addr_hash(db->addr_len, addr),
 	};
 
@@ -179,5 +180,5 @@
 		return EEXIST;
 
-	nic_addr_entry_t *entry = malloc(sizeof(nic_addr_entry_t) + db->addr_len - 1);
+	nic_addr_entry_t *entry = malloc(offsetof(nic_addr_entry_t, addr) + db->addr_len);
 	if (entry == NULL)
 		return ENOMEM;
@@ -185,4 +186,5 @@
 	entry->len = (uint8_t) db->addr_len;
 	memcpy(entry->addr, addr, db->addr_len);
+	entry->hash = key.hash;
 
 	hash_table_insert(&db->set, &entry->link);
Index: uspace/lib/nic/src/nic_wol_virtues.c
===================================================================
--- uspace/lib/nic/src/nic_wol_virtues.c	(revision 61eb2ce2769cc7e957b2ee93ca59919d895a7999)
+++ uspace/lib/nic/src/nic_wol_virtues.c	(revision a78b0a0431e252aaadea9fc13ea3c15a62663075)
@@ -57,5 +57,5 @@
 }
 
-static bool nic_wv_key_equal(const void *key, const ht_link_t *item)
+static bool nic_wv_key_equal(const void *key, size_t hash, const ht_link_t *item)
 {
 	const nic_wv_id_t *k = key;
