diff --git a/camkes/templates/cantripRPCSignalOverMultiSharedData-from.template.rs b/camkes/templates/cantripRPCSignalOverMultiSharedData-from.template.rs
new file mode 100644
index 0000000..f205973
--- /dev/null
+++ b/camkes/templates/cantripRPCSignalOverMultiSharedData-from.template.rs
@@ -0,0 +1,62 @@
+/*#
+ *#Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
+ *#
+ *#SPDX-License-Identifier: BSD-2-Clause
+  #*/
+
+/*- set suffix = "_buf" -*/
+
+/*# Assign client ids and badges #*/
+/*- set badges = namespace() -*/
+/*- if client_ids is not undefined -*/
+    /*- set badges.badges = client_ids.badges -*/
+/*- else -*/
+    /*- from 'rpc-connector.c' import allocate_badges with context -*/
+    /*- do allocate_badges(badges) -*/
+/*- endif -*/
+/*- set client_id = badges.badges[me.parent.from_ends.index(me)] -*/
+
+/*- if suffix is not defined -*/
+  /*- set suffix = '' -*/
+/*- endif -*/
+
+/*- set shmem_size = configuration[me.instance.name].get("%s_shmem_size" % me.interface.name, 4096) -*/
+/*- set shmem_section = '%s' % me.interface.name -*/
+/*- set shmem_symbol = '%s_INTERFACE_DATA' % me.interface.name.upper() -*/
+/*- set shmem_name = '%s%s' % (me.interface.name, suffix) -*/
+/*- set page_size = macros.get_page_size(shmem_size, options.architecture) -*/
+/*- if page_size == 0 -*/
+  /*? raise(TemplateError('Setting %s.%s_shmem_size does not meet minimum size and alignment requirements. %d must be at least %d and %d aligned' % (me.instance.name, me.interface.name, size, 4096, 4096))) ?*/
+/*- endif -*/
+
+/*? macros.shared_buffer_symbol(sym=shmem_symbol, shmem_size=shmem_size, page_size=page_size, language='rust') ?*/
+#[no_mangle]
+pub fn /*? me.interface.name ?*/_interface_shared_buffer_mut() -> &'static mut [u8] {
+    unsafe { &mut /*? shmem_symbol ?*/.data[..] }
+}
+#[no_mangle]
+pub fn /*? me.interface.name ?*/_interface_shared_buffer() -> &'static [u8] {
+    unsafe { &/*? shmem_symbol ?*/.data[..] }
+}
+/*? register_shared_variable('%s_%s_data' % (me.parent.name, client_id), shmem_symbol, shmem_size, frame_size=page_size, language='rust') ?*/
+
+/*- from 'rpc-connector.c' import establish_from_rpc with context -*/
+
+/*- set connector = namespace() -*/
+/*- set shmem_size = configuration[me.instance.name].get("%s_shmem_size" % me.interface.name, 4096) -*/
+
+/*- set lock = True -*/
+/*? establish_from_rpc(connector, buffer=('((void*)%s%s)' % (me.interface.name, suffix), shmem_size, lock), language='rust') ?*/
+
+/*- set prefix = me.interface.name.upper() -*/
+#[no_mangle]
+pub static /*? prefix ?*/_INTERFACE_ENDPOINT: sel4_sys::seL4_CPtr = /*? connector.ep ?*/;
+
+/*? assert(isinstance(connector, namespace)) ?*/
+/*- set interface = me.interface.name -*/
+/*- from 'global-endpoint.template.c' import allocate_cap with context -*/
+/*- do allocate_cap(me, is_reader=True) -*/
+#[no_mangle]
+pub static /*? prefix ?*/_INTERFACE_NOTIFICATION: sel4_sys::seL4_CPtr = /*? pop('notification') ?*/;
+#[no_mangle]
+pub static /*? prefix ?*/_INTERFACE_NOTIFICATION_BADGE: sel4_sys::seL4_CPtr = /*? pop('badge') ?*/;
diff --git a/camkes/templates/cantripRPCSignalOverMultiSharedData-to.template.rs b/camkes/templates/cantripRPCSignalOverMultiSharedData-to.template.rs
new file mode 100644
index 0000000..a90ee21
--- /dev/null
+++ b/camkes/templates/cantripRPCSignalOverMultiSharedData-to.template.rs
@@ -0,0 +1,84 @@
+/*#
+ *#Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
+ *#
+ *#SPDX-License-Identifier: BSD-2-Clause
+  #*/
+
+/*# Assign client ids and badges #*/
+/*- set badges = namespace() -*/
+/*- if client_ids is not undefined -*/
+    /*- set badges.badges = client_ids.badges -*/
+/*- else -*/
+    /*- from 'rpc-connector.c' import allocate_badges with context -*/
+    /*- do allocate_badges(badges) -*/
+/*- endif -*/
+/*- set badges = badges.badges -*/
+
+/*- from 'global-endpoint.template.c' import allocate_cap with context -*/
+
+#[no_mangle]
+pub fn /*? me.interface.name ?*/_emit(badge: sel4_sys::seL4_Word) {
+    match badge {
+    /*- for (i, c) in enumerate(me.parent.from_ends) -*/
+        /*- do allocate_cap(c, is_reader=False) -*/
+        /*- set notification = pop('notification') -*/
+        /*? badges[i] ?*/ => unsafe { sel4_sys::seL4_Signal(/*? notification ?*/) },
+    /*- endfor -*/
+        _ => unreachable!(),
+    }
+}
+
+/*# Enumerate all the incoming interfaces #*/
+/*- set shmems = [] -*/
+/*- set client_ids = set() -*/
+/*- for c in me.parent.from_ends -*/
+
+    /*- set client_id = badges[loop.index0] -*/
+
+    /*- if client_id not in client_ids -*/
+        /*- do client_ids.add(client_id) -*/
+
+        /*- set shmem_size = configuration[c.instance.name].get("%s_shmem_size" % c.interface.name, 4096) -*/
+        /*- set shmem_section = '%s_%s' % (me.interface.name.upper(), client_id) -*/
+        /*- set shmem_symbol = '%s_%s_DATA' % (me.interface.name.upper(), client_id) -*/
+        /*- set shmem_name = "%s_buf_%s" % (me.interface.name, client_id) -*/
+        /*- set page_size = macros.get_page_size(shmem_size, options.architecture) -*/
+        /*- if page_size == 0 -*/
+          /*? raise(TemplateError('Setting %s.%s_shmem_size does not meet minimum size and alignment requirements. %d must be at least %d and %d aligned' % (c.instance.name, c.interface.name, size, 4096, 4096))) ?*/
+        /*- endif -*/
+        /*- set page_size_bits = int(math.log(page_size, 2)) -*/
+
+        /*? macros.shared_buffer_symbol(sym=shmem_symbol, shmem_size=shmem_size, page_size=page_size, language='rust') ?*/
+        /*? register_shared_variable('%s_%s_data' % (me.parent.name, client_id), shmem_symbol, shmem_size, frame_size=page_size, language='rust') ?*/
+
+        /*- do shmems.append((shmem_symbol, client_id, shmem_size)) -*/
+    /*- else -*/
+        /* skipping /*? client_id ?*/ */
+    /*- endif -*/
+
+/*- endfor -*/
+
+
+pub fn /*? me.interface.name ?*/_interface_recv_buffer(
+    badge: sel4_sys::seL4_Word,
+) -> &'static mut [u8] {
+    match badge {
+    /*- for symbol, id, _ in shmems -*/
+        /*? id ?*/ => unsafe { &mut /*? symbol.upper() ?*/.data[..] },
+    /*- endfor -*/
+        _ => unreachable!(),
+    }
+}
+
+
+/*- from 'rpc-connector.c' import establish_recv_rpc with context -*/
+
+/*- set connector = namespace() -*/
+
+/*? establish_recv_rpc(connector, me.interface.name, buffer=('(%s_buf(%s_get_sender_id()))' % (me.interface.name,me.interface.name) , '(%s_buf_size(%s_get_sender_id()))' % (me.interface.name,me.interface.name)), language='rust') ?*/
+
+/*- set prefix = me.interface.name.upper() -*/
+#[no_mangle]
+pub static /*? prefix ?*/_INTERFACE_ENDPOINT: sel4_sys::seL4_CPtr = /*? connector.ep ?*/;
+#[no_mangle]
+pub static /*? prefix ?*/_INTERFACE_REPLY: sel4_sys::seL4_CPtr = /*? connector.reply_cap_slot ?*/;
diff --git a/camkes/templates/templates.cmake b/camkes/templates/templates.cmake
index df21c4b..2f95eb4 100644
--- a/camkes/templates/templates.cmake
+++ b/camkes/templates/templates.cmake
@@ -61,6 +61,7 @@
     cantripRPCCall
     cantripRPCCallSignal
     cantripRPCOverMultiSharedData
+    cantripRPCSignalOverMultiSharedData
 )
     DeclareCAmkESConnector(
         ${connector}
diff --git a/include/builtin/std_connector.camkes b/include/builtin/std_connector.camkes
index 0eb252f..6234109 100644
--- a/include/builtin/std_connector.camkes
+++ b/include/builtin/std_connector.camkes
@@ -355,3 +355,14 @@
     from Procedures with 0 threads;
     to Procedure;
 }
+
+/**
+ * cantripRPCSignalOverMultiSharedData connector
+ *
+ * Combination of cantripRPCOverMultiSharedData & cantripRPCCallSignal.
+ */
+connector cantripRPCSignalOverMultiSharedData {
+    from Procedures with 0 threads;
+    to Procedure;
+    attribute bool from_global_endpoint = True;
+}
