diff --git a/gsh/control_shell.py b/gsh/control_shell.py
index <HASH>..<HASH> 100644
--- a/gsh/control_shell.py
+++ b/gsh/control_shell.py
@@ -104,6 +104,9 @@ def switch_readline_history(new_histo):
         add_history(line)
     return prev_histo
 
+def handle_control_command(line):
+    singleton.onecmd(line)
+
 class control_shell(cmd.Cmd):
     """The little command line brought when a SIGINT is received"""
     def __init__(self, options):
diff --git a/gsh/stdin.py b/gsh/stdin.py
index <HASH>..<HASH> 100644
--- a/gsh/stdin.py
+++ b/gsh/stdin.py
@@ -130,9 +130,15 @@ class input_buffer(object):
 def process_input_buffer():
     """Send the content of the input buffer to all remote processes, this must
     be called in the main thread"""
+    from gsh.control_shell import handle_control_command
     data = the_stdin_thread.input_buffer.get()
     if not data:
         return
+
+    if data.startswith(':'):
+        handle_control_command(data[1:-1])
+        return
+
     for r in dispatchers.all_instances():
         try:
             r.dispatch_write(data)
Initial support of control commands prefixed by ':' in the main shell