diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index de821ef..3083f82 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -192,7 +192,6 @@
     transports/inproc/binproc.c
     transports/inproc/cinproc.h
     transports/inproc/cinproc.c
-    transports/inproc/inproc.h
     transports/inproc/inproc.c
     transports/inproc/ins.h
     transports/inproc/ins.c
@@ -207,7 +206,6 @@
     transports/ipc/bipc.c
     transports/ipc/cipc.h
     transports/ipc/cipc.c
-    transports/ipc/ipc.h
     transports/ipc/ipc.c
     transports/ipc/sipc.h
     transports/ipc/sipc.c
@@ -220,7 +218,6 @@
     transports/tcp/ctcp.c
     transports/tcp/stcp.h
     transports/tcp/stcp.c
-    transports/tcp/tcp.h
     transports/tcp/tcp.c
 
     transports/ws/aws.h
@@ -231,7 +228,6 @@
     transports/ws/cws.c
     transports/ws/sws.h
     transports/ws/sws.c
-    transports/ws/ws.h
     transports/ws/ws.c
     transports/ws/ws_handshake.h
     transports/ws/ws_handshake.c
diff --git a/src/core/ep.c b/src/core/ep.c
index a39f01a..d32fee3 100644
--- a/src/core/ep.c
+++ b/src/core/ep.c
@@ -47,7 +47,7 @@
     void *srcptr);
 
 int nn_ep_init (struct nn_ep *self, int src, struct nn_sock *sock, int eid,
-    struct nn_transport *transport, int bind, const char *addr)
+    const struct nn_transport *transport, int bind, const char *addr)
 {
     int rc;
 
diff --git a/src/core/ep.h b/src/core/ep.h
index 1e44930..b585ef5 100644
--- a/src/core/ep.h
+++ b/src/core/ep.h
@@ -1,5 +1,6 @@
 /*
     Copyright (c) 2012 Martin Sustrik  All rights reserved.
+    Copyright 2016 Garrett D'Amore <garrett@damore.org>
 
     Permission is hereby granted, free of charge, to any person obtaining a copy
     of this software and associated documentation files (the "Software"),
@@ -53,7 +54,7 @@
 };
 
 int nn_ep_init (struct nn_ep *self, int src, struct nn_sock *sock, int eid,
-    struct nn_transport *transport, int bind, const char *addr);
+    const struct nn_transport *transport, int bind, const char *addr);
 void nn_ep_term (struct nn_ep *self);
 
 void nn_ep_start (struct nn_ep *self);
diff --git a/src/core/global.c b/src/core/global.c
index fa01418..12b1506 100644
--- a/src/core/global.c
+++ b/src/core/global.c
@@ -45,11 +45,6 @@
 #include "../utils/msg.h"
 #include "../utils/attr.h"
 
-#include "../transports/inproc/inproc.h"
-#include "../transports/ipc/ipc.h"
-#include "../transports/tcp/tcp.h"
-#include "../transports/ws/ws.h"
-
 #include "../pubsub.h"
 #include "../pipeline.h"
 
@@ -130,6 +125,22 @@
     NULL,
 };
 
+/* As with protocols, we could have these in a header file, but we are the
+   only consumer, so just declare them inline. */
+
+extern struct nn_transport nn_inproc;
+extern struct nn_transport nn_ipc;
+extern struct nn_transport nn_tcp;
+extern struct nn_transport nn_ws;
+
+const struct nn_transport *nn_transports[] = {
+    &nn_inproc,
+    &nn_ipc,
+    &nn_tcp,
+    &nn_ws,
+    NULL,
+};
+
 struct nn_global {
 
     /*  The global table of existing sockets. The descriptor representing
@@ -147,11 +158,6 @@
     /*  Combination of the flags listed above. */
     int flags;
 
-    /*  List of all available transports.  Note that this list is not
-        dynamic; i.e. it is created during global initialization and
-        is never modified. */
-    struct nn_list transports;
-
     /*  Pool of worker threads. */
     struct nn_pool pool;
 
@@ -173,9 +179,6 @@
 static void nn_global_init (void);
 static void nn_global_term (void);
 
-/*  Transport-related private functions. */
-static void nn_global_add_transport (struct nn_transport *transport);
-
 /*  Private function that unifies nn_bind and nn_connect functionality.
     It returns the ID of the newly created endpoint. */
 static int nn_global_create_ep (struct nn_sock *, const char *addr, int bind);
@@ -208,6 +211,7 @@
     int rc;
     WSADATA data;
 #endif
+    const struct nn_transport *tp;
 
     /*  Check whether the library was already initialised. If so, do nothing. */
     if (self.socks)
@@ -247,14 +251,12 @@
     for (i = 0; i != NN_MAX_SOCKETS; ++i)
         self.unused [i] = NN_MAX_SOCKETS - i - 1;
 
-    /*  Initialise other parts of the global state. */
-    nn_list_init (&self.transports);
-
-    /*  Plug in individual transports. */
-    nn_global_add_transport (nn_inproc);
-    nn_global_add_transport (nn_ipc);
-    nn_global_add_transport (nn_tcp);
-    nn_global_add_transport (nn_ws);
+    /*  Initialize transports if needed. */
+    for (i = 0; (tp = nn_transports[i]) != NULL; i++) {
+        if (tp->init != NULL) {
+            tp->init ();
+        }
+    }
 
     /*  Start the worker threads. */
     nn_pool_init (&self.pool);
@@ -265,8 +267,8 @@
 #if defined NN_HAVE_WINDOWS
     int rc;
 #endif
-    struct nn_list_item *it;
-    struct nn_transport *tp;
+    const struct nn_transport *tp;
+    int i;
 
     /*  If there are no sockets remaining, uninitialise the global context. */
     nn_assert (self.socks);
@@ -277,16 +279,12 @@
     nn_pool_term (&self.pool);
 
     /*  Ask all the transport to deallocate their global resources. */
-    while (!nn_list_empty (&self.transports)) {
-        it = nn_list_begin (&self.transports);
-        tp = nn_cont (it, struct nn_transport, item);
+    for (i = 0; (tp = nn_transports[i]) != NULL; i++) {
         if (tp->term)
             tp->term ();
-        nn_list_erase (&self.transports, it);
     }
 
     /*  Final deallocation of the nn_global object itself. */
-    nn_list_term (&self.transports);
     nn_free (self.socks);
 
     /*  This marks the global state as uninitialised. */
@@ -413,7 +411,6 @@
     int rc;
     int s;
     int i;
-    struct nn_list_item *it;
     const struct nn_socktype *socktype;
     struct nn_sock *sock;
 
@@ -1043,14 +1040,6 @@
     return val;
 }
 
-static void nn_global_add_transport (struct nn_transport *transport)
-{
-    if (transport->init)
-        transport->init ();
-    nn_list_insert (&self.transports, &transport->item,
-        nn_list_end (&self.transports));
-}
-
 static int nn_global_create_ep (struct nn_sock *sock, const char *addr,
     int bind)
 {
@@ -1058,8 +1047,8 @@
     const char *proto;
     const char *delim;
     size_t protosz;
-    struct nn_transport *tp;
-    struct nn_list_item *it;
+    const struct nn_transport *tp;
+    int i;
 
     /*  Check whether address is valid. */
     if (!addr)
@@ -1079,18 +1068,14 @@
 
     /*  Find the specified protocol. */
     tp = NULL;
-    for (it = nn_list_begin (&self.transports);
-          it != nn_list_end (&self.transports);
-          it = nn_list_next (&self.transports, it)) {
-        tp = nn_cont (it, struct nn_transport, item);
+    for (i = 0; ((tp = nn_transports[i]) != NULL); i++) {
         if (strlen (tp->name) == protosz &&
               memcmp (tp->name, proto, protosz) == 0)
             break;
-        tp = NULL;
     }
 
     /*  The protocol specified doesn't match any known protocol. */
-    if (!tp) {
+    if (tp == NULL) {
         return -EPROTONOSUPPORT;
     }
 
@@ -1099,23 +1084,16 @@
     return rc;
 }
 
-struct nn_transport *nn_global_transport (int id)
+const struct nn_transport *nn_global_transport (int id)
 {
-    struct nn_transport *tp;
-    struct nn_list_item *it;
+    const struct nn_transport *tp;
+    int i;
 
-    /*  Find the specified protocol. */
-    tp = NULL;
-    for (it = nn_list_begin (&self.transports);
-          it != nn_list_end (&self.transports);
-          it = nn_list_next (&self.transports, it)) {
-        tp = nn_cont (it, struct nn_transport, item);
+    for (i = 0; (tp = nn_transports[i]) != NULL; i++) {
         if (tp->id == id)
-            break;
-        tp = NULL;
+            return tp;
     }
-
-    return tp;
+    return NULL;
 }
 
 struct nn_pool *nn_global_getpool ()
diff --git a/src/core/global.h b/src/core/global.h
index 53e9d25..dd7c8d0 100644
--- a/src/core/global.h
+++ b/src/core/global.h
@@ -1,5 +1,6 @@
 /*
     Copyright (c) 2012-2013 Martin Sustrik  All rights reserved.
+    Copyright 2016 Garrett D'Amore <garrett@damore.org>
 
     Permission is hereby granted, free of charge, to any person obtaining a copy
     of this software and associated documentation files (the "Software"),
@@ -24,7 +25,7 @@
 #define NN_GLOBAL_INCLUDED
 
 /*  Provides access to the list of available transports. */
-struct nn_transport *nn_global_transport (int id);
+const struct nn_transport *nn_global_transport (int id);
 
 /*  Returns the global worker thread pool. */
 struct nn_pool *nn_global_getpool ();
diff --git a/src/core/sock.c b/src/core/sock.c
index c116c34..e257ca9 100644
--- a/src/core/sock.c
+++ b/src/core/sock.c
@@ -482,7 +482,7 @@
     return 0;
 }
 
-int nn_sock_add_ep (struct nn_sock *self, struct nn_transport *transport,
+int nn_sock_add_ep (struct nn_sock *self, const struct nn_transport *transport,
     int bind, const char *addr)
 {
     int rc;
@@ -805,7 +805,7 @@
 static struct nn_optset *nn_sock_optset (struct nn_sock *self, int id)
 {
     int index;
-    struct nn_transport *tp;
+    const struct nn_transport *tp;
 
     /*  Transport IDs are negative and start from -1. */
     index = (-id) - 1;
diff --git a/src/core/sock.h b/src/core/sock.h
index 584bcbe..bf09576 100644
--- a/src/core/sock.h
+++ b/src/core/sock.h
@@ -161,7 +161,7 @@
 int nn_sock_ispeer (struct nn_sock *self, int socktype);
 
 /*  Add new endpoint to the socket. */
-int nn_sock_add_ep (struct nn_sock *self, struct nn_transport *transport,
+int nn_sock_add_ep (struct nn_sock *self, const struct nn_transport *transport,
     int bind, const char *addr);
 
 /*  Remove the endpoint with the specified ID from the socket. */
diff --git a/src/transport.h b/src/transport.h
index 86fb817..0f17575 100644
--- a/src/transport.h
+++ b/src/transport.h
@@ -232,10 +232,6 @@
         Set this member to NULL in case there are no transport-specific
         socket options available. */
     struct nn_optset *(*optset) (void);
-
-    /*  This member is used exclusively by the core. Never touch it directly
-        from the transport. */
-    struct nn_list_item item;
 };
 
 #endif
diff --git a/src/transports/inproc/inproc.c b/src/transports/inproc/inproc.c
index a77f8fa..b69fdd8 100644
--- a/src/transports/inproc/inproc.c
+++ b/src/transports/inproc/inproc.c
@@ -1,6 +1,7 @@
 /*
     Copyright (c) 2012-2013 Martin Sustrik  All rights reserved.
     Copyright (c) 2013 GoPivotal, Inc.  All rights reserved.
+    Copyright 2016 Garrett D'Amore <garrett@damore.org>
 
     Permission is hereby granted, free of charge, to any person obtaining a copy
     of this software and associated documentation files (the "Software"),
@@ -21,7 +22,6 @@
     IN THE SOFTWARE.
 */
 
-#include "inproc.h"
 #include "ins.h"
 #include "binproc.h"
 #include "cinproc.h"
@@ -36,7 +36,7 @@
 static int nn_inproc_bind (struct nn_ep *);
 static int nn_inproc_connect (struct nn_ep *);
 
-static struct nn_transport nn_inproc_vfptr = {
+struct nn_transport nn_inproc = {
     "inproc",
     NN_INPROC,
     nn_inproc_init,
@@ -44,11 +44,8 @@
     nn_inproc_bind,
     nn_inproc_connect,
     NULL,
-    NN_LIST_ITEM_INITIALIZER
 };
 
-struct nn_transport *nn_inproc = &nn_inproc_vfptr;
-
 static void nn_inproc_init (void)
 {
     nn_ins_init ();
@@ -68,4 +65,3 @@
 {
     return nn_cinproc_create (ep);
 }
-
diff --git a/src/transports/inproc/inproc.h b/src/transports/inproc/inproc.h
deleted file mode 100644
index 0486dff..0000000
--- a/src/transports/inproc/inproc.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-    Copyright (c) 2012 Martin Sustrik  All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom
-    the Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-    IN THE SOFTWARE.
-*/
-
-#ifndef NN_INPROC_INCLUDED
-#define NN_INPROC_INCLUDED
-
-#include "../../transport.h"
-
-extern struct nn_transport *nn_inproc;
-
-#endif
diff --git a/src/transports/ipc/ipc.c b/src/transports/ipc/ipc.c
index 5f23722..2260bbd 100644
--- a/src/transports/ipc/ipc.c
+++ b/src/transports/ipc/ipc.c
@@ -22,7 +22,6 @@
     IN THE SOFTWARE.
 */
 
-#include "ipc.h"
 #include "bipc.h"
 #include "cipc.h"
 
@@ -31,7 +30,6 @@
 #include "../../utils/err.h"
 #include "../../utils/alloc.h"
 #include "../../utils/fast.h"
-#include "../../utils/list.h"
 #include "../../utils/cont.h"
 
 #include <string.h>
@@ -70,7 +68,7 @@
 static int nn_ipc_connect (struct nn_ep *ep);
 static struct nn_optset *nn_ipc_optset (void);
 
-static struct nn_transport nn_ipc_vfptr = {
+struct nn_transport nn_ipc = {
     "ipc",
     NN_IPC,
     NULL,
@@ -78,11 +76,8 @@
     nn_ipc_bind,
     nn_ipc_connect,
     nn_ipc_optset,
-    NN_LIST_ITEM_INITIALIZER
 };
 
-struct nn_transport *nn_ipc = &nn_ipc_vfptr;
-
 static int nn_ipc_bind (struct nn_ep *ep)
 {
     return nn_bipc_create (ep);
diff --git a/src/transports/ipc/ipc.h b/src/transports/ipc/ipc.h
deleted file mode 100644
index 8c52780..0000000
--- a/src/transports/ipc/ipc.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-    Copyright (c) 2012-2013 Martin Sustrik  All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom
-    the Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-    IN THE SOFTWARE.
-*/
-
-#ifndef NN_IPC_INCLUDED
-#define NN_IPC_INCLUDED
-
-#include "../../transport.h"
-
-extern struct nn_transport *nn_ipc;
-
-#endif
diff --git a/src/transports/tcp/tcp.c b/src/transports/tcp/tcp.c
index 32e5c60..b3107bf 100644
--- a/src/transports/tcp/tcp.c
+++ b/src/transports/tcp/tcp.c
@@ -22,7 +22,6 @@
     IN THE SOFTWARE.
 */
 
-#include "tcp.h"
 #include "btcp.h"
 #include "ctcp.h"
 
@@ -34,7 +33,6 @@
 #include "../../utils/err.h"
 #include "../../utils/alloc.h"
 #include "../../utils/fast.h"
-#include "../../utils/list.h"
 #include "../../utils/cont.h"
 
 #include <string.h>
@@ -68,7 +66,7 @@
 static int nn_tcp_connect (struct nn_ep *ep);
 static struct nn_optset *nn_tcp_optset (void);
 
-static struct nn_transport nn_tcp_vfptr = {
+struct nn_transport nn_tcp = {
     "tcp",
     NN_TCP,
     NULL,
@@ -76,11 +74,8 @@
     nn_tcp_bind,
     nn_tcp_connect,
     nn_tcp_optset,
-    NN_LIST_ITEM_INITIALIZER
 };
 
-struct nn_transport *nn_tcp = &nn_tcp_vfptr;
-
 static int nn_tcp_bind (struct nn_ep *ep)
 {
     return nn_btcp_create (ep);
diff --git a/src/transports/tcp/tcp.h b/src/transports/tcp/tcp.h
deleted file mode 100644
index ab55485..0000000
--- a/src/transports/tcp/tcp.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-    Copyright (c) 2012-2013 Martin Sustrik  All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom
-    the Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-    IN THE SOFTWARE.
-*/
-
-#ifndef NN_TCP_INCLUDED
-#define NN_TCP_INCLUDED
-
-#include "../../transport.h"
-
-extern struct nn_transport *nn_tcp;
-
-#endif
diff --git a/src/transports/ws/ws.c b/src/transports/ws/ws.c
index 4e6d805..0dfeba0 100644
--- a/src/transports/ws/ws.c
+++ b/src/transports/ws/ws.c
@@ -23,7 +23,6 @@
     IN THE SOFTWARE.
 */
 
-#include "ws.h"
 #include "bws.h"
 #include "cws.h"
 #include "sws.h"
@@ -36,7 +35,6 @@
 #include "../../utils/err.h"
 #include "../../utils/alloc.h"
 #include "../../utils/fast.h"
-#include "../../utils/list.h"
 #include "../../utils/cont.h"
 
 #include <string.h>
@@ -69,7 +67,7 @@
 static int nn_ws_connect (struct nn_ep *);
 static struct nn_optset *nn_ws_optset (void);
 
-static struct nn_transport nn_ws_vfptr = {
+struct nn_transport nn_ws = {
     "ws",
     NN_WS,
     NULL,
@@ -77,11 +75,8 @@
     nn_ws_bind,
     nn_ws_connect,
     nn_ws_optset,
-    NN_LIST_ITEM_INITIALIZER
 };
 
-struct nn_transport *nn_ws = &nn_ws_vfptr;
-
 static int nn_ws_bind (struct nn_ep *ep)
 {
     return nn_bws_create (ep);
diff --git a/src/transports/ws/ws.h b/src/transports/ws/ws.h
deleted file mode 100644
index 10fb408..0000000
--- a/src/transports/ws/ws.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-    Copyright (c) 2012-2013 250bpm s.r.o.  All rights reserved.
-    Copyright (c) 2014 Wirebird Labs LLC.  All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom
-    the Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-    IN THE SOFTWARE.
-*/
-
-#ifndef NN_WS_INCLUDED
-#define NN_WS_INCLUDED
-
-#include "../../transport.h"
-
-extern struct nn_transport *nn_ws;
-
-#endif
