diff -Naur lwip_HEAD/src/api/api_lib.c lwip_patch_MEMP_API_MSG/src/api/api_lib.c
--- lwip_HEAD/src/api/api_lib.c	2006-10-11 14:22:01.176368000 +0200
+++ lwip_patch_MEMP_API_MSG/src/api/api_lib.c	2007-01-15 10:48:40.215527000 +0100
@@ -198,7 +198,8 @@
                                    void (*callback)(struct netconn *, enum netconn_evt, u16_t len))
 {
   struct netconn *conn;
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
 
   conn = memp_malloc(MEMP_NETCONN);
   if (conn == NULL) {
@@ -225,17 +226,11 @@
   conn->callback = callback;
   conn->recv_avail = 0;
 
-  if((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    memp_free(MEMP_NETCONN, conn);
-    return NULL;
-  }
-  
   msg->type = API_MSG_NEWCONN;
   msg->msg.msg.bc.port = proto; /* misusing the port field */
   msg->msg.conn = conn;
   api_msg_post(msg);  
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
 
   if ( conn->err != ERR_OK ) {
     memp_free(MEMP_NETCONN, conn);
@@ -263,22 +258,18 @@
 err_t
 netconn_delete(struct netconn *conn)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
   void *mem;
   
   if (conn == NULL) {
     return ERR_OK;
   }
   
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return ERR_MEM;
-  }
-  
   msg->type = API_MSG_DELCONN;
   msg->msg.conn = conn;
   api_msg_post(msg);  
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
 
   /* Drain the recvmbox. */
   if (conn->recvmbox != SYS_MBOX_NULL) {
@@ -375,7 +366,8 @@
 netconn_bind(struct netconn *conn, struct ip_addr *addr,
       u16_t port)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
 
   if (conn == NULL) {
     return ERR_VAL;
@@ -388,16 +380,12 @@
     }
   }
   
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return (conn->err = ERR_MEM);
-  }
   msg->type = API_MSG_BIND;
   msg->msg.conn = conn;
   msg->msg.msg.bc.ipaddr = addr;
   msg->msg.msg.bc.port = port;
   api_msg_post(msg);
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 }
 
@@ -406,7 +394,8 @@
 netconn_connect(struct netconn *conn, struct ip_addr *addr,
        u16_t port)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
   
   if (conn == NULL) {
     return ERR_VAL;
@@ -419,36 +408,29 @@
     }
   }
   
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return ERR_MEM;
-  }
   msg->type = API_MSG_CONNECT;
   msg->msg.conn = conn;  
   msg->msg.msg.bc.ipaddr = addr;
   msg->msg.msg.bc.port = port;
   api_msg_post(msg);
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 }
 
 err_t
 netconn_disconnect(struct netconn *conn)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
   
   if (conn == NULL) {
     return ERR_VAL;
   }
 
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return ERR_MEM;
-  }
   msg->type = API_MSG_DISCONNECT;
   msg->msg.conn = conn;  
   api_msg_post(msg);
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 
 }
@@ -456,7 +438,8 @@
 err_t
 netconn_listen(struct netconn *conn)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
 
   if (conn == NULL) {
     return ERR_VAL;
@@ -469,14 +452,10 @@
     }
   }
   
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return (conn->err = ERR_MEM);
-  }
   msg->type = API_MSG_LISTEN;
   msg->msg.conn = conn;
   api_msg_post(msg);
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 }
 
@@ -500,7 +479,8 @@
 struct netbuf *
 netconn_recv(struct netconn *conn)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
   struct netbuf *buf;
   struct pbuf *p;
   u16_t len;
@@ -561,10 +541,6 @@
     buf->fromaddr = NULL;
 
     /* Let the stack know that we have taken the data. */
-    if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-      conn->err = ERR_MEM;
-      return buf;
-    }
     msg->type = API_MSG_RECV;
     msg->msg.conn = conn;
     if (buf != NULL) {
@@ -575,7 +551,6 @@
     api_msg_post(msg);
 
     sys_mbox_fetch(conn->mbox, NULL);
-    memp_free(MEMP_API_MSG, msg);
   } else {
     sys_mbox_fetch(conn->recvmbox, (void *)&buf);
   conn->recv_avail -= buf->p->tot_len;
@@ -596,7 +571,8 @@
 err_t
 netconn_send(struct netconn *conn, struct netbuf *buf)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
 
   if (conn == NULL) {
     return ERR_VAL;
@@ -606,10 +582,6 @@
     return conn->err;
   }
 
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return (conn->err = ERR_MEM);
-  }
-
   LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %d bytes\n", buf->p->tot_len));
   msg->type = API_MSG_SEND;
   msg->msg.conn = conn;
@@ -617,14 +589,14 @@
   api_msg_post(msg);
 
   sys_mbox_fetch(conn->mbox, NULL);
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 }
 
 err_t
 netconn_write(struct netconn *conn, void *dataptr, u16_t size, u8_t copy)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
   u16_t len;
   
   if (conn == NULL) {
@@ -635,9 +607,6 @@
     return conn->err;
   }
 
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return (conn->err = ERR_MEM);
-  }
   msg->type = API_MSG_WRITE;
   msg->msg.conn = conn;
         
@@ -680,7 +649,6 @@
     }
   }
  ret:
-  memp_free(MEMP_API_MSG, msg);
   conn->state = NETCONN_NONE;
   
   return conn->err;
@@ -689,14 +657,12 @@
 err_t
 netconn_close(struct netconn *conn)
 {
-  struct api_msg *msg;
+  struct api_msg _msg;
+  struct api_msg *msg = &_msg;
 
   if (conn == NULL) {
     return ERR_VAL;
   }
-  if ((msg = memp_malloc(MEMP_API_MSG)) == NULL) {
-    return (conn->err = ERR_MEM);
-  }
 
   conn->state = NETCONN_CLOSE;
  again:
@@ -710,7 +676,6 @@
     goto again;
   }
   conn->state = NETCONN_NONE;
-  memp_free(MEMP_API_MSG, msg);
   return conn->err;
 }
 
diff -Naur lwip_HEAD/src/api/tcpip.c lwip_patch_MEMP_API_MSG/src/api/tcpip.c
--- lwip_HEAD/src/api/tcpip.c	2006-10-10 15:20:06.764896000 +0200
+++ lwip_patch_MEMP_API_MSG/src/api/tcpip.c	2007-01-15 10:47:03.296542000 +0100
@@ -176,7 +176,6 @@
   struct tcpip_msg *msg;
   msg = memp_malloc(MEMP_TCPIP_MSG);
   if (msg == NULL) {
-    memp_free(MEMP_API_MSG, apimsg);
     return;
   }
   msg->type = TCPIP_MSG_API;
diff -Naur lwip_HEAD/src/core/memp.c lwip_patch_MEMP_API_MSG/src/core/memp.c
--- lwip_HEAD/src/core/memp.c	2006-11-22 09:37:01.125142000 +0100
+++ lwip_patch_MEMP_API_MSG/src/core/memp.c	2007-01-15 10:48:38.981765000 +0100
@@ -62,7 +62,6 @@
   MEM_ALIGN_SIZE(sizeof(struct tcp_seg)),
   MEM_ALIGN_SIZE(sizeof(struct netbuf)),
   MEM_ALIGN_SIZE(sizeof(struct netconn)),
-  MEM_ALIGN_SIZE(sizeof(struct api_msg)),
   MEM_ALIGN_SIZE(sizeof(struct tcpip_msg)),
   MEM_ALIGN_SIZE(sizeof(struct sys_timeo))
 };
@@ -76,7 +75,6 @@
   MEMP_NUM_TCP_SEG,
   MEMP_NUM_NETBUF,
   MEMP_NUM_NETCONN,
-  MEMP_NUM_API_MSG,
   MEMP_NUM_TCPIP_MSG,
   MEMP_NUM_SYS_TIMEOUT
 };
@@ -93,7 +91,6 @@
   MEMP_TYPE_SIZE(MEMP_NUM_TCP_SEG, struct tcp_seg) +
   MEMP_TYPE_SIZE(MEMP_NUM_NETBUF, struct netbuf) +
   MEMP_TYPE_SIZE(MEMP_NUM_NETCONN, struct netconn) +
-  MEMP_TYPE_SIZE(MEMP_NUM_API_MSG, struct api_msg) +
   MEMP_TYPE_SIZE(MEMP_NUM_TCPIP_MSG, struct tcpip_msg) +
   MEMP_TYPE_SIZE(MEMP_NUM_SYS_TIMEOUT, struct sys_timeo)];
 
diff -Naur lwip_HEAD/src/include/lwip/memp.h lwip_patch_MEMP_API_MSG/src/include/lwip/memp.h
--- lwip_HEAD/src/include/lwip/memp.h	2006-10-10 15:20:08.148512000 +0200
+++ lwip_patch_MEMP_API_MSG/src/include/lwip/memp.h	2007-01-15 10:49:11.679031000 +0100
@@ -45,7 +45,6 @@
 
   MEMP_NETBUF,
   MEMP_NETCONN,
-  MEMP_API_MSG,
   MEMP_TCPIP_MSG,
 
   MEMP_SYS_TIMEOUT,
