diff --git a/CHANGES b/CHANGES
index 6c005c4..ee0315b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -29,6 +29,10 @@ Corrections:
 	or to undefined behaviour before terminating Socat with addresses EXEC,
 	SYSTEM, or SHELL.
 
+	Option ip-add-source-membership did not work.
+	Thanks to Duncan Sands and others for reporting this issue and sending
+	the fix.
+
 Building:
 	Disabling certain features during configure could break build process.
 
diff --git a/xio-ip.c b/xio-ip.c
index 3a136d0..455ac47 100644
--- a/xio-ip.c
+++ b/xio-ip.c
@@ -1355,7 +1355,7 @@ int xioapply_ip_add_source_membership(struct single *sfd, struct opt *opt) {
    }
    ip4_mreq_src.imr_multiaddr = sockaddr1.ip4.sin_addr;
    /* second parameter is interface address */
-   rc = xioresolve(opt->value.u_string/*ifaddr*/, NULL,
+   rc = xioresolve(opt->value2.u_string/*ifaddr*/, NULL,
 		   sfd->para.socket.la.soa.sa_family,
 		   SOCK_DGRAM, IPPROTO_IP,
 		   &sockaddr2, &socklen2, sfd->para.socket.ip.ai_flags);
@@ -1364,7 +1364,7 @@ int xioapply_ip_add_source_membership(struct single *sfd, struct opt *opt) {
    }
    ip4_mreq_src.imr_interface = sockaddr2.ip4.sin_addr;
    /* third parameter is source address */
-   rc = xioresolve(opt->value.u_string/*srcaddr*/, NULL,
+   rc = xioresolve(opt->value3.u_string/*srcaddr*/, NULL,
 		   sfd->para.socket.la.soa.sa_family,
 		   SOCK_DGRAM, IPPROTO_IP,
 		   &sockaddr3, &socklen3, sfd->para.socket.ip.ai_flags);