Cleanup unmap_ipv6_mapped_ipv4() macro
diff --git a/src/api/api_msg.c b/src/api/api_msg.c
index 76131ae..2b76f07 100644
--- a/src/api/api_msg.c
+++ b/src/api/api_msg.c
@@ -1401,8 +1401,9 @@
       
 #if LWIP_IPV4 && LWIP_IPV6
     /* Dual-stack: Unmap IPv6 mapped IPv4 addresses */
-    if(NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(msg->msg.b->addr)) {
-      unmap_ipv6_mapped_ipv4(&msg->msg.b->addr, &msg->msg.b->addr);
+    if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && ip6_addr_isipv6mappedipv4(ip_2_ip6(&msg->msg.b->addr))) {
+      unmap_ipv6_mapped_ipv4(ip_2_ip4(&msg->msg.b->addr), ip_2_ip6(&msg->msg.b->addr));
+      IP_SET_TYPE(&msg->msg.b->addr, IPADDR_TYPE_V4);
     }
 #endif /* LWIP_IPV4 && LWIP_IPV6 */
       
@@ -1722,11 +1723,8 @@
     
 #if LWIP_IPV4 && LWIP_IPV6
     /* Dual-stack: Map IPv4 addresses to IPv6 */
-    if(NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr))) {
-      ip4_addr_t ip4;
-      
-      ip4_addr_copy(ip4, *ip_2_ip4(&API_EXPR_DEREF(msg->msg.ad.ipaddr)));
-      ip4_2_ipv6_mapped_ipv4(ip_2_ip6(&API_EXPR_DEREF(msg->msg.ad.ipaddr)), &ip4);
+    if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn)) && IP_IS_V4_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr))) {
+      ip4_2_ipv6_mapped_ipv4(ip_2_ip6(&API_EXPR_DEREF(msg->msg.ad.ipaddr)), ip_2_ip4(&API_EXPR_DEREF(msg->msg.ad.ipaddr)));
       IP_SET_TYPE_VAL(API_EXPR_DEREF(msg->msg.ad.ipaddr), IPADDR_TYPE_V6);
     }
 #endif /* LWIP_IPV4 && LWIP_IPV6 */
diff --git a/src/include/lwip/ip_addr.h b/src/include/lwip/ip_addr.h
index 8ec640e..7e85037 100644
--- a/src/include/lwip/ip_addr.h
+++ b/src/include/lwip/ip_addr.h
@@ -215,15 +215,16 @@
 /** @ingroup ipaddr */
 #define IPADDR_STRLEN_MAX   IP6ADDR_STRLEN_MAX
 
+/** @ingroup ipaddr */
 #define ip4_2_ipv6_mapped_ipv4(ip6addr, ip4addr) do { \
-  (ip6addr)->addr[0] = 0; \
-  (ip6addr)->addr[1] = 0; \
+  (ip6addr)->addr[3] = (ip4addr)->addr; \
   (ip6addr)->addr[2] = PP_HTONL(0x0000FFFFUL); \
-  (ip6addr)->addr[3] = (ip4addr)->addr; } while(0);
+  (ip6addr)->addr[1] = 0; \
+  (ip6addr)->addr[0] = 0; } while(0);
 
-#define unmap_ipv6_mapped_ipv4(target, source) do { \
-  (target)->u_addr.ip4.addr = (source)->u_addr.ip6.addr[3]; \
-  (target)->type = IPADDR_TYPE_V4; } while(0);
+/** @ingroup ipaddr */
+#define unmap_ipv6_mapped_ipv4(target, source) \
+  (target)->addr = (source)->addr[3];
 
 #else /* LWIP_IPV4 && LWIP_IPV6 */