diff --git a/Makefile b/Makefile
index 940f314..496ce24 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@
 	pub upgrade
 
 .PHONY: build
-build: packages $(DISCOVERY_BUILD_DIR)/discovery.mojo gen-mojom
+build: packages gen-mojom $(DISCOVERY_BUILD_DIR)/discovery.mojo
 
 .PHONY: test
 test: discovery-test
diff --git a/go/src/vanadium/discovery/discovery.go b/go/src/vanadium/discovery/discovery.go
index 86fce64..91cf623 100644
--- a/go/src/vanadium/discovery/discovery.go
+++ b/go/src/vanadium/discovery/discovery.go
@@ -36,12 +36,12 @@
 	impl     *internal.DiscoveryService
 }
 
-func (d *discoveryDelegate) Initialize(c application.Context) {
+func (d *discoveryDelegate) Initialize(mctx application.Context) {
 	// TODO(bjornick): Calling init multiple times in the same process
 	// will be bad.  For now, this is ok because this is the only
 	// vanadium service that will be used in the demos and each go library
 	// will be in its own process.
-	d.ctx, d.shutdown = v23.Init()
+	d.ctx, d.shutdown = v23.Init(mctx)
 	d.impl = internal.NewDiscoveryService(d.ctx)
 }
 
diff --git a/lib/gen/dart-gen/mojom/lib/discovery/discovery.mojom.dart b/lib/gen/dart-gen/mojom/lib/discovery/discovery.mojom.dart
index 60a3e41..ced6cc3 100644
--- a/lib/gen/dart-gen/mojom/lib/discovery/discovery.mojom.dart
+++ b/lib/gen/dart-gen/mojom/lib/discovery/discovery.mojom.dart
@@ -26,7 +26,9 @@
   static Service deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -195,7 +197,9 @@
   static Error deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -277,7 +281,9 @@
   static AdvertiserAdvertiseParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -368,7 +374,9 @@
   static AdvertiserAdvertiseResponseParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -442,7 +450,9 @@
   static AdvertiserStopParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -508,7 +518,9 @@
   static ScannerScanParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -580,7 +592,9 @@
   static ScannerScanResponseParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -654,7 +668,9 @@
   static ScannerStopParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -719,7 +735,9 @@
   static ScanHandlerFoundParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
@@ -785,7 +803,9 @@
   static ScanHandlerLostParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
-    decoder.excessHandles.forEach((h) => h.close());
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
     return result;
   }
 
