diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c
index 89ee0ba..873802d 100644
--- a/fs/9p/v9fs.c
+++ b/fs/9p/v9fs.c
@@ -37,47 +37,6 @@
 #include "v9fs_vfs.h"
 
 /*
- * Dynamic Transport Registration Routines
- *
- */
-
-static LIST_HEAD(v9fs_trans_list);
-static struct p9_trans_module *v9fs_default_trans;
-
-/**
- * v9fs_register_trans - register a new transport with 9p
- * @m - structure describing the transport module and entry points
- *
- */
-void v9fs_register_trans(struct p9_trans_module *m)
-{
-	list_add_tail(&m->list, &v9fs_trans_list);
-	if (m->def)
-		v9fs_default_trans = m;
-}
-EXPORT_SYMBOL(v9fs_register_trans);
-
-/**
- * v9fs_match_trans - match transport versus registered transports
- * @arg: string identifying transport
- *
- */
-static struct p9_trans_module *v9fs_match_trans(const substring_t *name)
-{
-	struct list_head *p;
-	struct p9_trans_module *t = NULL;
-
-	list_for_each(p, &v9fs_trans_list) {
-		t = list_entry(p, struct p9_trans_module, list);
-		if (strncmp(t->name, name->from, name->to-name->from) == 0) {
-			P9_DPRINTK(P9_DEBUG_TRANS, "trans=%s\n", t->name);
-			break;
-		}
-	}
-	return t;
-}
-
-/*
   * Option Parsing (code inspired by NFS code)
   *  NOTE: each transport will parse its own options
   */
@@ -135,7 +94,7 @@
 	v9ses->afid = ~0;
 	v9ses->debug = 0;
 	v9ses->cache = 0;
-	v9ses->trans = v9fs_default_trans;
+	v9ses->trans = v9fs_default_trans();
 
 	if (!options)
 		return;
@@ -245,10 +204,6 @@
 	v9ses->options = kstrdup(data, GFP_KERNEL);
 	v9fs_parse_options(v9ses);
 
-	if ((v9ses->trans == NULL) && !list_empty(&v9fs_trans_list))
-		v9ses->trans = list_first_entry(&v9fs_trans_list,
-		 struct p9_trans_module, list);
-
 	if (v9ses->trans == NULL) {
 		retval = -EPROTONOSUPPORT;
 		P9_DPRINTK(P9_DEBUG_ERROR,
diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h
index 7c68b3e..9dd4a05 100644
--- a/include/net/9p/transport.h
+++ b/include/net/9p/transport.h
@@ -50,5 +50,7 @@
 };
 
 void v9fs_register_trans(struct p9_trans_module *m);
+struct p9_trans_module *v9fs_match_trans(const substring_t *name);
+struct p9_trans_module *v9fs_default_trans(void);
 
 #endif /* NET_9P_TRANSPORT_H */
diff --git a/net/9p/client.c b/net/9p/client.c
index d83cc12..af91993 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -30,6 +30,7 @@
 #include <linux/sched.h>
 #include <linux/uaccess.h>
 #include <net/9p/9p.h>
+#include <linux/parser.h>
 #include <net/9p/transport.h>
 #include <net/9p/conn.h>
 #include <net/9p/client.h>
diff --git a/net/9p/mod.c b/net/9p/mod.c
index 4f9e1d2..b8ac063 100644
--- a/net/9p/mod.c
+++ b/net/9p/mod.c
@@ -27,6 +27,10 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <net/9p/9p.h>
+#include <linux/fs.h>
+#include <linux/parser.h>
+#include <net/9p/transport.h>
+#include <linux/list.h>
 
 #ifdef CONFIG_NET_9P_DEBUG
 unsigned int p9_debug_level = 0;	/* feature-rific global debug level  */
@@ -40,6 +44,64 @@
 extern int p9_sysctl_register(void);
 extern void p9_sysctl_unregister(void);
 
+/*
+ * Dynamic Transport Registration Routines
+ *
+ */
+
+static LIST_HEAD(v9fs_trans_list);
+static struct p9_trans_module *v9fs_default_transport;
+
+/**
+ * v9fs_register_trans - register a new transport with 9p
+ * @m - structure describing the transport module and entry points
+ *
+ */
+void v9fs_register_trans(struct p9_trans_module *m)
+{
+	list_add_tail(&m->list, &v9fs_trans_list);
+	if (m->def)
+		v9fs_default_transport = m;
+}
+EXPORT_SYMBOL(v9fs_register_trans);
+
+/**
+ * v9fs_match_trans - match transport versus registered transports
+ * @arg: string identifying transport
+ *
+ */
+struct p9_trans_module *v9fs_match_trans(const substring_t *name)
+{
+	struct list_head *p;
+	struct p9_trans_module *t = NULL;
+
+	list_for_each(p, &v9fs_trans_list) {
+		t = list_entry(p, struct p9_trans_module, list);
+		if (strncmp(t->name, name->from, name->to-name->from) == 0)
+			break;
+	}
+	return t;
+}
+EXPORT_SYMBOL(v9fs_match_trans);
+
+/**
+ * v9fs_default_trans - returns pointer to default transport
+ *
+ */
+
+struct p9_trans_module *v9fs_default_trans(void)
+{
+	if (v9fs_default_transport)
+		return v9fs_default_transport;
+	else if (!list_empty(&v9fs_trans_list))
+		return list_first_entry(&v9fs_trans_list,
+					struct p9_trans_module, list);
+	else
+		return NULL;
+}
+EXPORT_SYMBOL(v9fs_default_trans);
+
+
 /**
  * v9fs_init - Initialize module
  *
diff --git a/net/9p/mux.c b/net/9p/mux.c
index 934e2ea..f140147 100644
--- a/net/9p/mux.c
+++ b/net/9p/mux.c
@@ -31,6 +31,7 @@
 #include <linux/idr.h>
 #include <linux/mutex.h>
 #include <net/9p/9p.h>
+#include <linux/parser.h>
 #include <net/9p/transport.h>
 #include <net/9p/conn.h>
 
