#include "recoverd.h"
 #include "dir.h"
 #include "midcomms.h"
-#include "lowcomms.h"
 #include "config.h"
 #include "memory.h"
 #include "lock.h"
        if (!ls_count) {
                dlm_scand_stop();
                dlm_midcomms_shutdown();
-               dlm_lowcomms_stop();
+               dlm_midcomms_stop();
        }
  out:
        mutex_unlock(&ls_lock);
        if (!error)
                ls_count--;
        if (!ls_count)
-               dlm_lowcomms_stop();
+               dlm_midcomms_stop();
        mutex_unlock(&ls_lock);
 
        return error;
 
 int dlm_lowcomms_start(void)
 {
        int error = -EINVAL;
-       int i;
-
-       for (i = 0; i < CONN_HASH_SIZE; i++)
-               INIT_HLIST_HEAD(&connection_hash[i]);
 
        init_local();
        if (!dlm_local_count) {
                goto fail;
        }
 
-       INIT_WORK(&listen_con.rwork, process_listen_recv_socket);
-
        error = work_start();
        if (error)
                goto fail_local;
        return error;
 }
 
+void dlm_lowcomms_init(void)
+{
+       int i;
+
+       for (i = 0; i < CONN_HASH_SIZE; i++)
+               INIT_HLIST_HEAD(&connection_hash[i]);
+
+       INIT_WORK(&listen_con.rwork, process_listen_recv_socket);
+}
+
 void dlm_lowcomms_exit(void)
 {
        struct dlm_node_addr *na, *safe;
 
 int dlm_lowcomms_start(void);
 void dlm_lowcomms_shutdown(void);
 void dlm_lowcomms_stop(void);
+void dlm_lowcomms_init(void);
 void dlm_lowcomms_exit(void);
 int dlm_lowcomms_close(int nodeid);
 struct dlm_msg *dlm_lowcomms_new_msg(int nodeid, int len, gfp_t allocation,
 
 #include "user.h"
 #include "memory.h"
 #include "config.h"
-#include "lowcomms.h"
+#include "midcomms.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/dlm.h>
        if (error)
                goto out;
 
+       dlm_midcomms_init();
+
        error = dlm_lockspace_init();
        if (error)
                goto out_mem;
  out_lockspace:
        dlm_lockspace_exit();
  out_mem:
+       dlm_midcomms_exit();
        dlm_memory_exit();
  out:
        return error;
        dlm_config_exit();
        dlm_memory_exit();
        dlm_lockspace_exit();
-       dlm_lowcomms_exit();
+       dlm_midcomms_exit();
        dlm_unregister_debugfs();
 }
 
 
 #endif
 
 int dlm_midcomms_start(void)
+{
+       return dlm_lowcomms_start();
+}
+
+void dlm_midcomms_stop(void)
+{
+       dlm_lowcomms_stop();
+}
+
+void dlm_midcomms_init(void)
 {
        int i;
 
        for (i = 0; i < CONN_HASH_SIZE; i++)
                INIT_HLIST_HEAD(&node_hash[i]);
 
-       return dlm_lowcomms_start();
+       dlm_lowcomms_init();
+}
+
+void dlm_midcomms_exit(void)
+{
+       dlm_lowcomms_exit();
 }
 
 static void dlm_act_fin_ack_rcv(struct midcomms_node *node)
 
                                 int namelen);
 int dlm_midcomms_close(int nodeid);
 int dlm_midcomms_start(void);
+void dlm_midcomms_stop(void);
+void dlm_midcomms_init(void);
+void dlm_midcomms_exit(void);
 void dlm_midcomms_shutdown(void);
 void dlm_midcomms_add_member(int nodeid);
 void dlm_midcomms_remove_member(int nodeid);