diff --git a/modules/module-pipewire/simple-endpoint-link.c b/modules/module-pipewire/simple-endpoint-link.c
index a0dc2b8db175d048e25cbe4eb237e122d7290fd9..dd029e867356f205c3286b63fc93fad9b223ccc0 100644
--- a/modules/module-pipewire/simple-endpoint-link.c
+++ b/modules/module-pipewire/simple-endpoint-link.c
@@ -104,6 +104,7 @@ simple_endpoint_link_create (WpEndpointLink * epl, GVariant * src_data,
   GVariant *src_ports, *sink_ports;
   GVariantIter *out_iter, *in_iter;
   guint64 out_ptr, in_ptr;
+  GHashTable *linked_ports = NULL;
 
   /* Get the remote pipewire */
   remote_pipewire = wp_core_get_global (core, WP_GLOBAL_REMOTE_PIPEWIRE);
@@ -122,6 +123,7 @@ simple_endpoint_link_create (WpEndpointLink * epl, GVariant * src_data,
       return FALSE;
 
   /* Link all the output ports with the input ports */
+  linked_ports = g_hash_table_new (g_direct_hash, g_direct_equal);
   g_variant_get (src_ports, "at", &out_iter);
   while (g_variant_iter_loop (out_iter, "t", &out_ptr)) {
     WpProxyPort *out_p = (gpointer)out_ptr;
@@ -138,6 +140,10 @@ simple_endpoint_link_create (WpEndpointLink * epl, GVariant * src_data,
       if (in_direction == PW_DIRECTION_OUTPUT)
         continue;
 
+      /* Skip the port if it is already linked */
+      if (g_hash_table_contains (linked_ports, GUINT_TO_POINTER(in_id)))
+        continue;
+
       /* Create the properties */
       props = pw_properties_new(NULL, NULL);
       pw_properties_setf(props, PW_LINK_OUTPUT_NODE_ID, "%d", output_node_id);
@@ -149,6 +155,9 @@ simple_endpoint_link_create (WpEndpointLink * epl, GVariant * src_data,
       wp_remote_pipewire_create_object(remote_pipewire, "link-factory",
           PW_TYPE_INTERFACE_Link, &props->dict);
 
+      /* Insert the port id in the hash table to know it is linked */
+      g_hash_table_insert (linked_ports, GUINT_TO_POINTER(in_id), NULL);
+
       /* Clean up */
       pw_properties_free(props);
     }
@@ -156,6 +165,9 @@ simple_endpoint_link_create (WpEndpointLink * epl, GVariant * src_data,
   }
   g_variant_iter_free (out_iter);
 
+  /* Clean up */
+  g_hash_table_unref(linked_ports);
+
   return TRUE;
 }