GUACAMOLE-249: Rename and restructure RDP source files more sensibly.
diff --git a/src/protocols/rdp/Makefile.am b/src/protocols/rdp/Makefile.am
index 443ed0b..880df9b 100644
--- a/src/protocols/rdp/Makefile.am
+++ b/src/protocols/rdp/Makefile.am
@@ -37,85 +37,85 @@
     _generated_channel_entry_wrappers.c \
     _generated_keymaps.c
 
-libguac_client_rdp_la_SOURCES =   \
-    audio_input.c                 \
-    channels.c                    \
-    client.c                      \
-    clipboard.c                   \
-    common-svc.c                  \
-    decompose.c                   \
-    disp.c                        \
-    error.c                       \
-    input.c                       \
-    keyboard.c                    \
-    pipe-svc.c                    \
-    ptr_string.c                  \
-    rail.c                        \
-    rdp.c                         \
-    rdp_bitmap.c                  \
-    rdp_color.c                   \
-    rdp_fs.c                      \
-    rdp_gdi.c                     \
-    rdp_glyph.c                   \
-    rdp_keymap.c                  \
-    rdp_print_job.c               \
-    rdp_pointer.c                 \
-    rdp_settings.c                \
-    rdp_stream.c                  \
-    rdpdr.c                       \
-    rdpdr_fs_messages.c           \
-    rdpdr_fs_messages_dir_info.c  \
-    rdpdr_fs_messages_file_info.c \
-    rdpdr_fs_messages_vol_info.c  \
-    rdpdr_fs_service.c            \
-    rdpdr_messages.c              \
-    rdpdr_printer.c               \
-    rdpsnd.c                      \
-    rdpsnd_messages.c             \
-    resolution.c                  \
-    unicode.c                     \
+libguac_client_rdp_la_SOURCES =                  \
+    bitmap.c                                     \
+    channels/audio-input.c                       \
+    channels/cliprdr.c                           \
+    channels/common-svc.c                        \
+    channels/disp.c                              \
+    channels/pipe-svc.c                          \
+    channels/rail.c                              \
+    channels/rdpdr/rdpdr-fs-messages-dir-info.c  \
+    channels/rdpdr/rdpdr-fs-messages-file-info.c \
+    channels/rdpdr/rdpdr-fs-messages-vol-info.c  \
+    channels/rdpdr/rdpdr-fs-messages.c           \
+    channels/rdpdr/rdpdr-fs.c                    \
+    channels/rdpdr/rdpdr-messages.c              \
+    channels/rdpdr/rdpdr-printer.c               \
+    channels/rdpdr/rdpdr.c                       \
+    channels/rdpsnd/rdpsnd-messages.c            \
+    channels/rdpsnd/rdpsnd.c                     \
+    client.c                                     \
+    color.c                                      \
+    error.c                                      \
+    fs.c                                         \
+    gdi.c                                        \
+    glyph.c                                      \
+    input.c                                      \
+    keyboard/decompose.c                         \
+    keyboard/keyboard.c                          \
+    keyboard/keymap.c                            \
+    plugins/channels.c                           \
+    plugins/ptr-string.c                         \
+    pointer.c                                    \
+    print-job.c                                  \
+    rdp.c                                        \
+    resolution.c                                 \
+    settings.c                                   \
+    stream.c                                     \
+    unicode.c                                    \
     user.c
 
-noinst_HEADERS =                             \
-    guac_ai/ai_messages.h                    \
-    guac_ai/ai_service.h                     \
-    audio_input.h                            \
-    client.h                                 \
-    clipboard.h                              \
-    channels.h                               \
-    common-svc.h                             \
-    decompose.h                              \
-    disp.h                                   \
-    error.h                                  \
-    input.h                                  \
-    keyboard.h                               \
-    pipe-svc.h                               \
-    ptr_string.h                             \
-    rail.h                                   \
-    rdp.h                                    \
-    rdp_bitmap.h                             \
-    rdp_color.h                              \
-    rdp_fs.h                                 \
-    rdp_gdi.h                                \
-    rdp_glyph.h                              \
-    rdp_keymap.h                             \
-    rdp_pointer.h                            \
-    rdp_print_job.h                          \
-    rdp_settings.h                           \
-    rdp_status.h                             \
-    rdp_stream.h                             \
-    rdpdr.h                                  \
-    rdpdr_fs_messages.h                      \
-    rdpdr_fs_messages_dir_info.h             \
-    rdpdr_fs_messages_file_info.h            \
-    rdpdr_fs_messages_vol_info.h             \
-    rdpdr_fs_service.h                       \
-    rdpdr_messages.h                         \
-    rdpdr_printer.h                          \
-    rdpsnd.h                                 \
-    rdpsnd_messages.h                        \
-    resolution.h                             \
-    unicode.h                                \
+noinst_HEADERS =                                 \
+    bitmap.h                                     \
+    channels/audio-input.h                       \
+    channels/cliprdr.h                           \
+    channels/common-svc.h                        \
+    channels/disp.h                              \
+    channels/pipe-svc.h                          \
+    channels/rail.h                              \
+    channels/rdpdr/rdpdr-fs-messages-dir-info.h  \
+    channels/rdpdr/rdpdr-fs-messages-file-info.h \
+    channels/rdpdr/rdpdr-fs-messages-vol-info.h  \
+    channels/rdpdr/rdpdr-fs-messages.h           \
+    channels/rdpdr/rdpdr-fs.h                    \
+    channels/rdpdr/rdpdr-messages.h              \
+    channels/rdpdr/rdpdr-printer.h               \
+    channels/rdpdr/rdpdr.h                       \
+    channels/rdpsnd/rdpsnd-messages.h            \
+    channels/rdpsnd/rdpsnd.h                     \
+    client.h                                     \
+    color.h                                      \
+    error.h                                      \
+    fs.h                                         \
+    gdi.h                                        \
+    glyph.h                                      \
+    input.h                                      \
+    keyboard/decompose.h                         \
+    keyboard/keyboard.h                          \
+    keyboard/keymap.h                            \
+    plugins/channels.h                           \
+    plugins/guacai/guacai-messages.h             \
+    plugins/guacai/guacai.h                      \
+    plugins/ptr-string.h                         \
+    pointer.h                                    \
+    print-job.h                                  \
+    rdp.h                                        \
+    resolution.h                                 \
+    settings.h                                   \
+    status.h                                     \
+    stream.h                                     \
+    unicode.h                                    \
     user.h
 
 libguac_client_rdp_la_CFLAGS = \
@@ -131,8 +131,8 @@
     @PTHREAD_LIBS@              \
     @RDP_LIBS@
 
-libguac_client_rdp_la_LIBADD =     \
-    @COMMON_LTLIB@                 \
+libguac_client_rdp_la_LIBADD = \
+    @COMMON_LTLIB@             \
     @LIBGUAC_LTLIB@
 
 #
@@ -149,8 +149,8 @@
 # Common SVC plugin (shared by RDPDR, RDPSND, etc.)
 #
 
-libguac_common_svc_client_la_SOURCES = \
-    guac-common-svc/common-svc-main.c
+libguac_common_svc_client_la_SOURCES =        \
+    plugins/guac-common-svc/guac-common-svc.c
 
 libguac_common_svc_client_la_CFLAGS = \
     -Werror -Wall -Iinclude           \
@@ -168,17 +168,17 @@
 # Audio Input
 #
 
-libguacai_client_la_SOURCES = \
-    audio_input.c             \
-    guac_ai/ai_messages.c     \
-    guac_ai/ai_service.c      \
-    ptr_string.c
+libguacai_client_la_SOURCES =        \
+    channels/audio-input.c           \
+    plugins/guacai/guacai-messages.c \
+    plugins/guacai/guacai.c          \
+    plugins/ptr-string.c
 
-libguacai_client_la_CFLAGS =   \
-    -Werror -Wall -Iinclude    \
-    @COMMON_INCLUDE@           \
-    @COMMON_SSH_INCLUDE@       \
-    @LIBGUAC_INCLUDE@          \
+libguacai_client_la_CFLAGS = \
+    -Werror -Wall -Iinclude  \
+    @COMMON_INCLUDE@         \
+    @COMMON_SSH_INCLUDE@     \
+    @LIBGUAC_INCLUDE@        \
     @RDP_CFLAGS@
 
 libguacai_client_la_LDFLAGS =      \
@@ -212,31 +212,31 @@
     _generated_channel_entry_wrappers.c \
     _generated_keymaps.c
 
-rdp_keymaps =                   \
-    $(srcdir)/keymaps/base.keymap         \
-    $(srcdir)/keymaps/failsafe.keymap     \
-    $(srcdir)/keymaps/de_de_qwertz.keymap \
-    $(srcdir)/keymaps/de_ch_qwertz.keymap \
-    $(srcdir)/keymaps/en_gb_qwerty.keymap \
-    $(srcdir)/keymaps/en_us_qwerty.keymap \
-    $(srcdir)/keymaps/es_es_qwerty.keymap \
-    $(srcdir)/keymaps/fr_fr_azerty.keymap \
-    $(srcdir)/keymaps/fr_ch_qwertz.keymap \
-    $(srcdir)/keymaps/it_it_qwerty.keymap \
-    $(srcdir)/keymaps/ja_jp_qwerty.keymap \
-    $(srcdir)/keymaps/pt_br_qwerty.keymap \
-    $(srcdir)/keymaps/sv_se_qwerty.keymap \
-    $(srcdir)/keymaps/da_dk_qwerty.keymap \
-    $(srcdir)/keymaps/tr_tr_qwerty.keymap
+rdp_keymaps =                                      \
+    $(srcdir)/keyboard/keymaps/base.keymap         \
+    $(srcdir)/keyboard/keymaps/failsafe.keymap     \
+    $(srcdir)/keyboard/keymaps/de_de_qwertz.keymap \
+    $(srcdir)/keyboard/keymaps/de_ch_qwertz.keymap \
+    $(srcdir)/keyboard/keymaps/en_gb_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/en_us_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/es_es_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/fr_fr_azerty.keymap \
+    $(srcdir)/keyboard/keymaps/fr_ch_qwertz.keymap \
+    $(srcdir)/keyboard/keymaps/it_it_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/ja_jp_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/pt_br_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/sv_se_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/da_dk_qwerty.keymap \
+    $(srcdir)/keyboard/keymaps/tr_tr_qwerty.keymap
 
 _generated_keymaps.c: $(rdp_keymaps)
-	$(AM_V_GEN) $(srcdir)/keymaps/generate.pl $(rdp_keymaps)
+	$(AM_V_GEN) $(srcdir)/keyboard/keymaps/generate.pl $(rdp_keymaps)
 
-_generated_channel_entry_wrappers.c: $(srcdir)/channels.h $(srcdir)/generate-entry-wrappers.pl
-	$(AM_V_GEN) $(srcdir)/generate-entry-wrappers.pl $(srcdir)/channels.h
+_generated_channel_entry_wrappers.c: $(srcdir)/plugins/channels.h $(srcdir)/plugins/generate-entry-wrappers.pl
+	$(AM_V_GEN) $(srcdir)/plugins/generate-entry-wrappers.pl $(srcdir)/plugins/channels.h
 
-EXTRA_DIST =                   \
-    $(rdp_keymaps)             \
-    generate-entry-wrappers.pl \
-    keymaps/generate.pl
+EXTRA_DIST =                           \
+    $(rdp_keymaps)                     \
+    plugins/generate-entry-wrappers.pl \
+    keyboard/keymaps/generate.pl
 
diff --git a/src/protocols/rdp/rdp_bitmap.c b/src/protocols/rdp/bitmap.c
similarity index 98%
rename from src/protocols/rdp/rdp_bitmap.c
rename to src/protocols/rdp/bitmap.c
index 2dcf77a..093dae1 100644
--- a/src/protocols/rdp/rdp_bitmap.c
+++ b/src/protocols/rdp/bitmap.c
@@ -23,8 +23,8 @@
 #include "common/display.h"
 #include "common/surface.h"
 #include "rdp.h"
-#include "rdp_bitmap.h"
-#include "rdp_settings.h"
+#include "bitmap.h"
+#include "settings.h"
 
 #include <cairo/cairo.h>
 #include <freerdp/codec/bitmap.h>
diff --git a/src/protocols/rdp/rdp_bitmap.h b/src/protocols/rdp/bitmap.h
similarity index 100%
rename from src/protocols/rdp/rdp_bitmap.h
rename to src/protocols/rdp/bitmap.h
diff --git a/src/protocols/rdp/audio_input.c b/src/protocols/rdp/channels/audio-input.c
similarity index 98%
rename from src/protocols/rdp/audio_input.c
rename to src/protocols/rdp/channels/audio-input.c
index a0dd24a..055ce83 100644
--- a/src/protocols/rdp/audio_input.c
+++ b/src/protocols/rdp/channels/audio-input.c
@@ -18,9 +18,9 @@
  */
 
 #include "config.h"
-#include "audio_input.h"
-#include "channels.h"
-#include "ptr_string.h"
+#include "channels/audio-input.h"
+#include "plugins/channels.h"
+#include "plugins/ptr-string.h"
 #include "rdp.h"
 
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/audio_input.h b/src/protocols/rdp/channels/audio-input.h
similarity index 100%
rename from src/protocols/rdp/audio_input.h
rename to src/protocols/rdp/channels/audio-input.h
diff --git a/src/protocols/rdp/clipboard.c b/src/protocols/rdp/channels/cliprdr.c
similarity index 98%
rename from src/protocols/rdp/clipboard.c
rename to src/protocols/rdp/channels/cliprdr.c
index 77b3dab..8cc43fe 100644
--- a/src/protocols/rdp/clipboard.c
+++ b/src/protocols/rdp/channels/cliprdr.c
@@ -19,9 +19,9 @@
 
 #include "config.h"
 
-#include "channels.h"
+#include "plugins/channels.h"
 #include "client.h"
-#include "clipboard.h"
+#include "channels/cliprdr.h"
 #include "common/clipboard.h"
 #include "common/iconv.h"
 #include "rdp.h"
diff --git a/src/protocols/rdp/clipboard.h b/src/protocols/rdp/channels/cliprdr.h
similarity index 100%
rename from src/protocols/rdp/clipboard.h
rename to src/protocols/rdp/channels/cliprdr.h
diff --git a/src/protocols/rdp/common-svc.c b/src/protocols/rdp/channels/common-svc.c
similarity index 98%
rename from src/protocols/rdp/common-svc.c
rename to src/protocols/rdp/channels/common-svc.c
index 3e092a9..0ba8322 100644
--- a/src/protocols/rdp/common-svc.c
+++ b/src/protocols/rdp/channels/common-svc.c
@@ -18,8 +18,8 @@
  */
 
 #include "config.h"
-#include "channels.h"
-#include "common-svc.h"
+#include "plugins/channels.h"
+#include "channels/common-svc.h"
 #include "rdp.h"
 
 #include <freerdp/svc.h>
diff --git a/src/protocols/rdp/common-svc.h b/src/protocols/rdp/channels/common-svc.h
similarity index 100%
rename from src/protocols/rdp/common-svc.h
rename to src/protocols/rdp/channels/common-svc.h
diff --git a/src/protocols/rdp/disp.c b/src/protocols/rdp/channels/disp.c
similarity index 98%
rename from src/protocols/rdp/disp.c
rename to src/protocols/rdp/channels/disp.c
index cb37d8b..73920f4 100644
--- a/src/protocols/rdp/disp.c
+++ b/src/protocols/rdp/channels/disp.c
@@ -18,11 +18,11 @@
  */
 
 #include "config.h"
-#include "channels.h"
+#include "plugins/channels.h"
 #include "client.h"
-#include "disp.h"
+#include "channels/disp.h"
 #include "rdp.h"
-#include "rdp_settings.h"
+#include "settings.h"
 
 #include <freerdp/client/disp.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/disp.h b/src/protocols/rdp/channels/disp.h
similarity index 99%
rename from src/protocols/rdp/disp.h
rename to src/protocols/rdp/channels/disp.h
index 04df752..e88e8e4 100644
--- a/src/protocols/rdp/disp.h
+++ b/src/protocols/rdp/channels/disp.h
@@ -20,7 +20,7 @@
 #ifndef GUAC_RDP_DISP_H
 #define GUAC_RDP_DISP_H
 
-#include "rdp_settings.h"
+#include "settings.h"
 
 #include <freerdp/client/disp.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/pipe-svc.c b/src/protocols/rdp/channels/pipe-svc.c
similarity index 98%
rename from src/protocols/rdp/pipe-svc.c
rename to src/protocols/rdp/channels/pipe-svc.c
index 05cd758..68017ab 100644
--- a/src/protocols/rdp/pipe-svc.c
+++ b/src/protocols/rdp/channels/pipe-svc.c
@@ -19,11 +19,11 @@
 
 #include "config.h"
 
-#include "channels.h"
+#include "plugins/channels.h"
 #include "client.h"
 #include "common/list.h"
-#include "common-svc.h"
-#include "pipe-svc.h"
+#include "channels/common-svc.h"
+#include "channels/pipe-svc.h"
 #include "rdp.h"
 
 #include <freerdp/svc.h>
diff --git a/src/protocols/rdp/pipe-svc.h b/src/protocols/rdp/channels/pipe-svc.h
similarity index 99%
rename from src/protocols/rdp/pipe-svc.h
rename to src/protocols/rdp/channels/pipe-svc.h
index 1abcf09..0744740 100644
--- a/src/protocols/rdp/pipe-svc.h
+++ b/src/protocols/rdp/channels/pipe-svc.h
@@ -21,7 +21,7 @@
 #define GUAC_RDP_PIPE_SVC_H
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 
 #include <freerdp/svc.h>
 #include <guacamole/client.h>
diff --git a/src/protocols/rdp/rail.c b/src/protocols/rdp/channels/rail.c
similarity index 98%
rename from src/protocols/rdp/rail.c
rename to src/protocols/rdp/channels/rail.c
index 5f06155..65bc971 100644
--- a/src/protocols/rdp/rail.c
+++ b/src/protocols/rdp/channels/rail.c
@@ -19,11 +19,11 @@
 
 #include "config.h"
 
-#include "channels.h"
+#include "plugins/channels.h"
 #include "client.h"
-#include "rail.h"
+#include "channels/rail.h"
 #include "rdp.h"
-#include "rdp_settings.h"
+#include "settings.h"
 
 #include <freerdp/client/rail.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rail.h b/src/protocols/rdp/channels/rail.h
similarity index 100%
rename from src/protocols/rdp/rail.h
rename to src/protocols/rdp/channels/rail.h
diff --git a/src/protocols/rdp/rdpdr_fs_messages_dir_info.c b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.c
similarity index 98%
rename from src/protocols/rdp/rdpdr_fs_messages_dir_info.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.c
index 2362694..1a445d0 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_dir_info.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.c
@@ -18,9 +18,9 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
-#include "rdp_fs.h"
-#include "rdp_status.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "fs.h"
+#include "status.h"
 #include "unicode.h"
 
 #include <guacamole/unicode.h>
diff --git a/src/protocols/rdp/rdpdr_fs_messages_dir_info.h b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.h
similarity index 96%
rename from src/protocols/rdp/rdpdr_fs_messages_dir_info.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.h
index 8d49340..02acfdd 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_dir_info.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-dir-info.h
@@ -30,8 +30,8 @@
  */
 
 #include "config.h"
-#include "common-svc.h"
-#include "rdpdr.h"
+#include "channels/common-svc.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr_fs_messages_file_info.c b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.c
similarity index 98%
rename from src/protocols/rdp/rdpdr_fs_messages_file_info.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.c
index 4395a2f..ee134e5 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_file_info.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.c
@@ -18,9 +18,9 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
-#include "rdp_fs.h"
-#include "rdp_status.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "fs.h"
+#include "status.h"
 #include "unicode.h"
 
 #include <winpr/stream.h>
diff --git a/src/protocols/rdp/rdpdr_fs_messages_file_info.h b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.h
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_messages_file_info.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.h
index 56941d7..f2bb0d8 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_file_info.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-file-info.h
@@ -29,8 +29,8 @@
  */
 
 #include "config.h"
-#include "common-svc.h"
-#include "rdpdr.h"
+#include "channels/common-svc.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr_fs_messages_vol_info.c b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.c
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_messages_vol_info.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.c
index dc3a5e1..afacde6 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_vol_info.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.c
@@ -18,10 +18,10 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
-#include "rdpdr_messages.h"
-#include "rdp_fs.h"
-#include "rdp_status.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-messages.h"
+#include "fs.h"
+#include "status.h"
 
 #include <guacamole/unicode.h>
 #include <winpr/stream.h>
diff --git a/src/protocols/rdp/rdpdr_fs_messages_vol_info.h b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.h
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_messages_vol_info.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.h
index 1c34127..e6a95dd 100644
--- a/src/protocols/rdp/rdpdr_fs_messages_vol_info.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages-vol-info.h
@@ -30,7 +30,7 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr_fs_messages.c b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.c
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_messages.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.c
index 0264619..67bf349 100644
--- a/src/protocols/rdp/rdpdr_fs_messages.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.c
@@ -18,14 +18,14 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
-#include "rdpdr_fs_messages_dir_info.h"
-#include "rdpdr_fs_messages_file_info.h"
-#include "rdpdr_fs_messages.h"
-#include "rdpdr_fs_messages_vol_info.h"
-#include "rdpdr_messages.h"
-#include "rdp_fs.h"
-#include "rdp_status.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-fs-messages-dir-info.h"
+#include "channels/rdpdr/rdpdr-fs-messages-file-info.h"
+#include "channels/rdpdr/rdpdr-fs-messages.h"
+#include "channels/rdpdr/rdpdr-fs-messages-vol-info.h"
+#include "channels/rdpdr/rdpdr-messages.h"
+#include "fs.h"
+#include "status.h"
 #include "unicode.h"
 
 #include <freerdp/channels/rdpdr.h>
diff --git a/src/protocols/rdp/rdpdr_fs_messages.h b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.h
similarity index 98%
rename from src/protocols/rdp/rdpdr_fs_messages.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.h
index a2018f2..27aba84 100644
--- a/src/protocols/rdp/rdpdr_fs_messages.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs-messages.h
@@ -30,7 +30,7 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr_fs_service.c b/src/protocols/rdp/channels/rdpdr/rdpdr-fs.c
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_service.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs.c
index 933cd7e..89f2ba6 100644
--- a/src/protocols/rdp/rdpdr_fs_service.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs.c
@@ -20,9 +20,9 @@
 
 #include "config.h"
 #include "rdp.h"
-#include "rdpdr.h"
-#include "rdpdr_fs_messages.h"
-#include "rdpdr_messages.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-fs-messages.h"
+#include "channels/rdpdr/rdpdr-messages.h"
 
 #include <freerdp/channels/rdpdr.h>
 #include <guacamole/client.h>
diff --git a/src/protocols/rdp/rdpdr_fs_service.h b/src/protocols/rdp/channels/rdpdr/rdpdr-fs.h
similarity index 97%
rename from src/protocols/rdp/rdpdr_fs_service.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-fs.h
index a3775f9..63f4a5d 100644
--- a/src/protocols/rdp/rdpdr_fs_service.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-fs.h
@@ -33,7 +33,7 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <guacamole/pool.h>
 
diff --git a/src/protocols/rdp/rdpdr_messages.c b/src/protocols/rdp/channels/rdpdr/rdpdr-messages.c
similarity index 98%
rename from src/protocols/rdp/rdpdr_messages.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-messages.c
index 06f1c55..b063bbf 100644
--- a/src/protocols/rdp/rdpdr_messages.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-messages.c
@@ -19,8 +19,8 @@
 
 #include "config.h"
 #include "rdp.h"
-#include "rdpdr.h"
-#include "rdpdr_messages.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-messages.h"
 #include "unicode.h"
 
 #include <freerdp/channels/rdpdr.h>
diff --git a/src/protocols/rdp/rdpdr_messages.h b/src/protocols/rdp/channels/rdpdr/rdpdr-messages.h
similarity index 98%
rename from src/protocols/rdp/rdpdr_messages.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-messages.h
index 221db89..1f2db3b 100644
--- a/src/protocols/rdp/rdpdr_messages.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-messages.h
@@ -22,7 +22,7 @@
 #define GUAC_RDPDR_MESSAGES_H
 
 #include "config.h"
-#include "rdpdr.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr_printer.c b/src/protocols/rdp/channels/rdpdr/rdpdr-printer.c
similarity index 97%
rename from src/protocols/rdp/rdpdr_printer.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr-printer.c
index 9f5c121..dd16a5c 100644
--- a/src/protocols/rdp/rdpdr_printer.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-printer.c
@@ -18,12 +18,12 @@
  */
 
 #include "config.h"
-#include "rdpdr.h"
-#include "rdpdr_messages.h"
-#include "rdpdr_printer.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-messages.h"
+#include "channels/rdpdr/rdpdr-printer.h"
 #include "rdp.h"
-#include "rdp_print_job.h"
-#include "rdp_status.h"
+#include "print-job.h"
+#include "status.h"
 #include "unicode.h"
 
 #include <freerdp/channels/rdpdr.h>
diff --git a/src/protocols/rdp/rdpdr_printer.h b/src/protocols/rdp/channels/rdpdr/rdpdr-printer.h
similarity index 97%
rename from src/protocols/rdp/rdpdr_printer.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr-printer.h
index c9b30dd..8e967c7 100644
--- a/src/protocols/rdp/rdpdr_printer.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr-printer.h
@@ -22,7 +22,7 @@
 #define GUAC_RDPDR_PRINTER_H
 
 #include "config.h"
-#include "rdpdr.h"
+#include "channels/rdpdr/rdpdr.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpdr.c b/src/protocols/rdp/channels/rdpdr/rdpdr.c
similarity index 96%
rename from src/protocols/rdp/rdpdr.c
rename to src/protocols/rdp/channels/rdpdr/rdpdr.c
index f334e5e..6fe4c65 100644
--- a/src/protocols/rdp/rdpdr.c
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr.c
@@ -18,15 +18,15 @@
  */
 
 #include "config.h"
-#include "channels.h"
+#include "plugins/channels.h"
 #include "rdp.h"
-#include "rdp_fs.h"
-#include "rdp_settings.h"
-#include "rdp_stream.h"
-#include "rdpdr.h"
-#include "rdpdr_fs_service.h"
-#include "rdpdr_messages.h"
-#include "rdpdr_printer.h"
+#include "fs.h"
+#include "settings.h"
+#include "stream.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpdr/rdpdr-fs.h"
+#include "channels/rdpdr/rdpdr-messages.h"
+#include "channels/rdpdr/rdpdr-printer.h"
 
 #include <freerdp/channels/rdpdr.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rdpdr.h b/src/protocols/rdp/channels/rdpdr/rdpdr.h
similarity index 98%
rename from src/protocols/rdp/rdpdr.h
rename to src/protocols/rdp/channels/rdpdr/rdpdr.h
index b5e59f0..3984d9c 100644
--- a/src/protocols/rdp/rdpdr.h
+++ b/src/protocols/rdp/channels/rdpdr/rdpdr.h
@@ -21,7 +21,7 @@
 #define GUAC_RDP_RDPDR_H
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 
 #include <freerdp/freerdp.h>
 #include <guacamole/client.h>
diff --git a/src/protocols/rdp/rdpsnd_messages.c b/src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.c
similarity index 98%
rename from src/protocols/rdp/rdpsnd_messages.c
rename to src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.c
index 5bed83b..7685683 100644
--- a/src/protocols/rdp/rdpsnd_messages.c
+++ b/src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.c
@@ -20,8 +20,8 @@
 #include "config.h"
 
 #include "rdp.h"
-#include "rdpsnd.h"
-#include "rdpsnd_messages.h"
+#include "channels/rdpsnd/rdpsnd.h"
+#include "channels/rdpsnd/rdpsnd-messages.h"
 
 #include <pthread.h>
 #include <stdlib.h>
diff --git a/src/protocols/rdp/rdpsnd_messages.h b/src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.h
similarity index 98%
rename from src/protocols/rdp/rdpsnd_messages.h
rename to src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.h
index 4a621d8..737f622 100644
--- a/src/protocols/rdp/rdpsnd_messages.h
+++ b/src/protocols/rdp/channels/rdpsnd/rdpsnd-messages.h
@@ -22,7 +22,7 @@
 #define GUAC_RDPSND_MESSAGES_H
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 
 #include <winpr/stream.h>
 
diff --git a/src/protocols/rdp/rdpsnd.c b/src/protocols/rdp/channels/rdpsnd/rdpsnd.c
similarity index 96%
rename from src/protocols/rdp/rdpsnd.c
rename to src/protocols/rdp/channels/rdpsnd/rdpsnd.c
index 04ef537..5991344 100644
--- a/src/protocols/rdp/rdpsnd.c
+++ b/src/protocols/rdp/channels/rdpsnd/rdpsnd.c
@@ -18,10 +18,10 @@
  */
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 #include "rdp.h"
-#include "rdpsnd.h"
-#include "rdpsnd_messages.h"
+#include "channels/rdpsnd/rdpsnd.h"
+#include "channels/rdpsnd/rdpsnd-messages.h"
 
 #include <freerdp/codec/audio.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rdpsnd.h b/src/protocols/rdp/channels/rdpsnd/rdpsnd.h
similarity index 98%
rename from src/protocols/rdp/rdpsnd.h
rename to src/protocols/rdp/channels/rdpsnd/rdpsnd.h
index deec0de..0c2abce 100644
--- a/src/protocols/rdp/rdpsnd.h
+++ b/src/protocols/rdp/channels/rdpsnd/rdpsnd.h
@@ -21,7 +21,7 @@
 #define GUAC_RDP_RDPSND_H
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 
 #include <guacamole/client.h>
 
diff --git a/src/protocols/rdp/client.c b/src/protocols/rdp/client.c
index 4e724aa..d1e294b 100644
--- a/src/protocols/rdp/client.c
+++ b/src/protocols/rdp/client.c
@@ -19,12 +19,12 @@
 
 #include "config.h"
 
-#include "audio_input.h"
+#include "channels/audio-input.h"
 #include "common/recording.h"
 #include "client.h"
-#include "disp.h"
+#include "channels/disp.h"
 #include "rdp.h"
-#include "rdp_fs.h"
+#include "fs.h"
 #include "user.h"
 
 #ifdef ENABLE_COMMON_SSH
diff --git a/src/protocols/rdp/rdp_color.c b/src/protocols/rdp/color.c
similarity index 98%
rename from src/protocols/rdp/rdp_color.c
rename to src/protocols/rdp/color.c
index 0132fb2..a0d7170 100644
--- a/src/protocols/rdp/rdp_color.c
+++ b/src/protocols/rdp/color.c
@@ -21,7 +21,7 @@
 
 #include "client.h"
 #include "rdp.h"
-#include "rdp_settings.h"
+#include "settings.h"
 
 #include <freerdp/codec/color.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rdp_color.h b/src/protocols/rdp/color.h
similarity index 100%
rename from src/protocols/rdp/rdp_color.h
rename to src/protocols/rdp/color.h
diff --git a/src/protocols/rdp/rdp_fs.c b/src/protocols/rdp/fs.c
similarity index 99%
rename from src/protocols/rdp/rdp_fs.c
rename to src/protocols/rdp/fs.c
index 0e7345f..fc8be59 100644
--- a/src/protocols/rdp/rdp_fs.c
+++ b/src/protocols/rdp/fs.c
@@ -19,9 +19,9 @@
 
 #include "config.h"
 
-#include "rdp_fs.h"
-#include "rdp_status.h"
-#include "rdp_stream.h"
+#include "fs.h"
+#include "status.h"
+#include "stream.h"
 
 #include <dirent.h>
 #include <errno.h>
diff --git a/src/protocols/rdp/rdp_fs.h b/src/protocols/rdp/fs.h
similarity index 100%
rename from src/protocols/rdp/rdp_fs.h
rename to src/protocols/rdp/fs.h
diff --git a/src/protocols/rdp/rdp_gdi.c b/src/protocols/rdp/gdi.c
similarity index 99%
rename from src/protocols/rdp/rdp_gdi.c
rename to src/protocols/rdp/gdi.c
index 33de873..5aed606 100644
--- a/src/protocols/rdp/rdp_gdi.c
+++ b/src/protocols/rdp/gdi.c
@@ -22,9 +22,9 @@
 #include "client.h"
 #include "common/surface.h"
 #include "rdp.h"
-#include "rdp_bitmap.h"
-#include "rdp_color.h"
-#include "rdp_settings.h"
+#include "bitmap.h"
+#include "color.h"
+#include "settings.h"
 
 #include <cairo/cairo.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rdp_gdi.h b/src/protocols/rdp/gdi.h
similarity index 100%
rename from src/protocols/rdp/rdp_gdi.h
rename to src/protocols/rdp/gdi.h
diff --git a/src/protocols/rdp/rdp_glyph.c b/src/protocols/rdp/glyph.c
similarity index 98%
rename from src/protocols/rdp/rdp_glyph.c
rename to src/protocols/rdp/glyph.c
index 96c4a14..fe21df0 100644
--- a/src/protocols/rdp/rdp_glyph.c
+++ b/src/protocols/rdp/glyph.c
@@ -22,9 +22,9 @@
 #include "client.h"
 #include "common/surface.h"
 #include "rdp.h"
-#include "rdp_color.h"
-#include "rdp_glyph.h"
-#include "rdp_settings.h"
+#include "color.h"
+#include "glyph.h"
+#include "settings.h"
 
 #include <freerdp/freerdp.h>
 #include <guacamole/client.h>
diff --git a/src/protocols/rdp/rdp_glyph.h b/src/protocols/rdp/glyph.h
similarity index 100%
rename from src/protocols/rdp/rdp_glyph.h
rename to src/protocols/rdp/glyph.h
diff --git a/src/protocols/rdp/input.c b/src/protocols/rdp/input.c
index 9e45516..b1031e3 100644
--- a/src/protocols/rdp/input.c
+++ b/src/protocols/rdp/input.c
@@ -21,9 +21,9 @@
 
 #include "client.h"
 #include "common/recording.h"
-#include "disp.h"
+#include "channels/disp.h"
 #include "input.h"
-#include "keyboard.h"
+#include "keyboard/keyboard.h"
 #include "rdp.h"
 
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/decompose.c b/src/protocols/rdp/keyboard/decompose.c
similarity index 99%
rename from src/protocols/rdp/decompose.c
rename to src/protocols/rdp/keyboard/decompose.c
index 5f559d9..1495f51 100644
--- a/src/protocols/rdp/decompose.c
+++ b/src/protocols/rdp/keyboard/decompose.c
@@ -18,7 +18,7 @@
  */
 
 #include "config.h"
-#include "keyboard.h"
+#include "keyboard/keyboard.h"
 
 /**
  * The X11 keysym for the dead key which types a grave (`).
diff --git a/src/protocols/rdp/decompose.h b/src/protocols/rdp/keyboard/decompose.h
similarity index 97%
rename from src/protocols/rdp/decompose.h
rename to src/protocols/rdp/keyboard/decompose.h
index a7ab146..0d5a076 100644
--- a/src/protocols/rdp/decompose.h
+++ b/src/protocols/rdp/keyboard/decompose.h
@@ -21,7 +21,7 @@
 #define GUAC_RDP_DECOMPOSE_H
 
 #include "config.h"
-#include "keyboard.h"
+#include "keyboard/keyboard.h"
 
 /**
  * Attempts to type the given keysym by decomposing the associated character
diff --git a/src/protocols/rdp/keyboard.c b/src/protocols/rdp/keyboard/keyboard.c
similarity index 99%
rename from src/protocols/rdp/keyboard.c
rename to src/protocols/rdp/keyboard/keyboard.c
index b0a0188..90fc99d 100644
--- a/src/protocols/rdp/keyboard.c
+++ b/src/protocols/rdp/keyboard/keyboard.c
@@ -20,10 +20,10 @@
 #include "config.h"
 
 #include "client.h"
-#include "decompose.h"
-#include "keyboard.h"
+#include "keyboard/decompose.h"
+#include "keyboard/keyboard.h"
 #include "rdp.h"
-#include "rdp_keymap.h"
+#include "keyboard/keymap.h"
 
 #include <freerdp/freerdp.h>
 #include <freerdp/input.h>
diff --git a/src/protocols/rdp/keyboard.h b/src/protocols/rdp/keyboard/keyboard.h
similarity index 99%
rename from src/protocols/rdp/keyboard.h
rename to src/protocols/rdp/keyboard/keyboard.h
index 79eed75..d280fa4 100644
--- a/src/protocols/rdp/keyboard.h
+++ b/src/protocols/rdp/keyboard/keyboard.h
@@ -20,7 +20,7 @@
 #ifndef GUAC_RDP_KEYBOARD_H
 #define GUAC_RDP_KEYBOARD_H
 
-#include "rdp_keymap.h"
+#include "keyboard/keymap.h"
 
 #include <guacamole/client.h>
 
diff --git a/src/protocols/rdp/rdp_keymap.c b/src/protocols/rdp/keyboard/keymap.c
similarity index 98%
rename from src/protocols/rdp/rdp_keymap.c
rename to src/protocols/rdp/keyboard/keymap.c
index 3be48a7..b6ea757 100644
--- a/src/protocols/rdp/rdp_keymap.c
+++ b/src/protocols/rdp/keyboard/keymap.c
@@ -19,7 +19,7 @@
 
 #include "config.h"
 
-#include "rdp_keymap.h"
+#include "keyboard/keymap.h"
 
 #include <string.h>
 
diff --git a/src/protocols/rdp/rdp_keymap.h b/src/protocols/rdp/keyboard/keymap.h
similarity index 100%
rename from src/protocols/rdp/rdp_keymap.h
rename to src/protocols/rdp/keyboard/keymap.h
diff --git a/src/protocols/rdp/keymaps/base.keymap b/src/protocols/rdp/keyboard/keymaps/base.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/base.keymap
rename to src/protocols/rdp/keyboard/keymaps/base.keymap
diff --git a/src/protocols/rdp/keymaps/da_dk_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/da_dk_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/da_dk_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/da_dk_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/de_ch_qwertz.keymap b/src/protocols/rdp/keyboard/keymaps/de_ch_qwertz.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/de_ch_qwertz.keymap
rename to src/protocols/rdp/keyboard/keymaps/de_ch_qwertz.keymap
diff --git a/src/protocols/rdp/keymaps/de_de_qwertz.keymap b/src/protocols/rdp/keyboard/keymaps/de_de_qwertz.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/de_de_qwertz.keymap
rename to src/protocols/rdp/keyboard/keymaps/de_de_qwertz.keymap
diff --git a/src/protocols/rdp/keymaps/en_gb_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/en_gb_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/en_gb_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/en_gb_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/en_us_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/en_us_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/en_us_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/en_us_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/es_es_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/es_es_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/es_es_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/es_es_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/failsafe.keymap b/src/protocols/rdp/keyboard/keymaps/failsafe.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/failsafe.keymap
rename to src/protocols/rdp/keyboard/keymaps/failsafe.keymap
diff --git a/src/protocols/rdp/keymaps/fr_ch_qwertz.keymap b/src/protocols/rdp/keyboard/keymaps/fr_ch_qwertz.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/fr_ch_qwertz.keymap
rename to src/protocols/rdp/keyboard/keymaps/fr_ch_qwertz.keymap
diff --git a/src/protocols/rdp/keymaps/fr_fr_azerty.keymap b/src/protocols/rdp/keyboard/keymaps/fr_fr_azerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/fr_fr_azerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/fr_fr_azerty.keymap
diff --git a/src/protocols/rdp/keymaps/generate.pl b/src/protocols/rdp/keyboard/keymaps/generate.pl
similarity index 98%
rename from src/protocols/rdp/keymaps/generate.pl
rename to src/protocols/rdp/keyboard/keymaps/generate.pl
index 8ca2a6b..2aa360f 100755
--- a/src/protocols/rdp/keymaps/generate.pl
+++ b/src/protocols/rdp/keyboard/keymaps/generate.pl
@@ -43,7 +43,7 @@
 open OUTPUT, ">", "_generated_keymaps.c";
 print OUTPUT 
        '#include "config.h"'                                . "\n"
-     . '#include "rdp_keymap.h"'                            . "\n"
+     . '#include "keyboard/keymap.h"'                       . "\n"
      . '#include <freerdp/input.h>'                         . "\n"
      . '#include <freerdp/locale/keyboard.h>'               . "\n"
      .                                                        "\n"
diff --git a/src/protocols/rdp/keymaps/it_it_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/it_it_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/it_it_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/it_it_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/ja_jp_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/ja_jp_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/ja_jp_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/ja_jp_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/pt_br_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/pt_br_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/pt_br_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/pt_br_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/sv_se_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/sv_se_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/sv_se_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/sv_se_qwerty.keymap
diff --git a/src/protocols/rdp/keymaps/tr_tr_qwerty.keymap b/src/protocols/rdp/keyboard/keymaps/tr_tr_qwerty.keymap
similarity index 100%
rename from src/protocols/rdp/keymaps/tr_tr_qwerty.keymap
rename to src/protocols/rdp/keyboard/keymaps/tr_tr_qwerty.keymap
diff --git a/src/protocols/rdp/channels.c b/src/protocols/rdp/plugins/channels.c
similarity index 98%
rename from src/protocols/rdp/channels.c
rename to src/protocols/rdp/plugins/channels.c
index 368846a..9cf5a36 100644
--- a/src/protocols/rdp/channels.c
+++ b/src/protocols/rdp/plugins/channels.c
@@ -18,7 +18,7 @@
  */
 
 #include "config.h"
-#include "channels.h"
+#include "plugins/channels.h"
 #include "rdp.h"
 
 #include <freerdp/channels/channels.h>
diff --git a/src/protocols/rdp/channels.h b/src/protocols/rdp/plugins/channels.h
similarity index 100%
rename from src/protocols/rdp/channels.h
rename to src/protocols/rdp/plugins/channels.h
diff --git a/src/protocols/rdp/generate-entry-wrappers.pl b/src/protocols/rdp/plugins/generate-entry-wrappers.pl
similarity index 98%
rename from src/protocols/rdp/generate-entry-wrappers.pl
rename to src/protocols/rdp/plugins/generate-entry-wrappers.pl
index 21efdbc..f3fc003 100755
--- a/src/protocols/rdp/generate-entry-wrappers.pl
+++ b/src/protocols/rdp/plugins/generate-entry-wrappers.pl
@@ -46,7 +46,7 @@
 
 # Generate required headers
 print OUTPUT <<"EOF";
-#include "channels.h"
+#include "plugins/channels.h"
 #include <freerdp/channels/channels.h>
 #include <freerdp/freerdp.h>
 EOF
diff --git a/src/protocols/rdp/guac-common-svc/common-svc-main.c b/src/protocols/rdp/plugins/guac-common-svc/guac-common-svc.c
similarity index 98%
rename from src/protocols/rdp/guac-common-svc/common-svc-main.c
rename to src/protocols/rdp/plugins/guac-common-svc/guac-common-svc.c
index 572a1d2..7318e1e 100644
--- a/src/protocols/rdp/guac-common-svc/common-svc-main.c
+++ b/src/protocols/rdp/plugins/guac-common-svc/guac-common-svc.c
@@ -18,7 +18,7 @@
  */
 
 #include "config.h"
-#include "common-svc.h"
+#include "channels/common-svc.h"
 
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/protocols/rdp/guac_ai/ai_messages.c b/src/protocols/rdp/plugins/guacai/guacai-messages.c
similarity index 98%
rename from src/protocols/rdp/guac_ai/ai_messages.c
rename to src/protocols/rdp/plugins/guacai/guacai-messages.c
index e0161d5..341914a 100644
--- a/src/protocols/rdp/guac_ai/ai_messages.c
+++ b/src/protocols/rdp/plugins/guacai/guacai-messages.c
@@ -19,8 +19,8 @@
 
 #include "config.h"
 
-#include "ai_messages.h"
-#include "audio_input.h"
+#include "plugins/guacai/guacai-messages.h"
+#include "channels/audio-input.h"
 #include "rdp.h"
 
 #include <stdlib.h>
diff --git a/src/protocols/rdp/guac_ai/ai_messages.h b/src/protocols/rdp/plugins/guacai/guacai-messages.h
similarity index 100%
rename from src/protocols/rdp/guac_ai/ai_messages.h
rename to src/protocols/rdp/plugins/guacai/guacai-messages.h
diff --git a/src/protocols/rdp/guac_ai/ai_service.c b/src/protocols/rdp/plugins/guacai/guacai.c
similarity index 97%
rename from src/protocols/rdp/guac_ai/ai_service.c
rename to src/protocols/rdp/plugins/guacai/guacai.c
index aa6bca7..ba66078 100644
--- a/src/protocols/rdp/guac_ai/ai_service.c
+++ b/src/protocols/rdp/plugins/guacai/guacai.c
@@ -19,10 +19,10 @@
 
 #include "config.h"
 
-#include "ai_messages.h"
-#include "ai_service.h"
-#include "audio_input.h"
-#include "ptr_string.h"
+#include "plugins/guacai/guacai-messages.h"
+#include "plugins/guacai/guacai.h"
+#include "channels/audio-input.h"
+#include "plugins/ptr-string.h"
 #include "rdp.h"
 
 #include <stdlib.h>
diff --git a/src/protocols/rdp/guac_ai/ai_service.h b/src/protocols/rdp/plugins/guacai/guacai.h
similarity index 100%
rename from src/protocols/rdp/guac_ai/ai_service.h
rename to src/protocols/rdp/plugins/guacai/guacai.h
diff --git a/src/protocols/rdp/ptr_string.c b/src/protocols/rdp/plugins/ptr-string.c
similarity index 96%
rename from src/protocols/rdp/ptr_string.c
rename to src/protocols/rdp/plugins/ptr-string.c
index 5ec1b62..9131187 100644
--- a/src/protocols/rdp/ptr_string.c
+++ b/src/protocols/rdp/plugins/ptr-string.c
@@ -18,7 +18,7 @@
  */
 
 #include "config.h"
-#include "ptr_string.h"
+#include "plugins/ptr-string.h"
 
 #include <guacamole/client.h>
 
diff --git a/src/protocols/rdp/ptr_string.h b/src/protocols/rdp/plugins/ptr-string.h
similarity index 100%
rename from src/protocols/rdp/ptr_string.h
rename to src/protocols/rdp/plugins/ptr-string.h
diff --git a/src/protocols/rdp/rdp_pointer.c b/src/protocols/rdp/pointer.c
similarity index 99%
rename from src/protocols/rdp/rdp_pointer.c
rename to src/protocols/rdp/pointer.c
index fb78984..3883e21 100644
--- a/src/protocols/rdp/rdp_pointer.c
+++ b/src/protocols/rdp/pointer.c
@@ -23,7 +23,7 @@
 #include "common/cursor.h"
 #include "common/display.h"
 #include "rdp.h"
-#include "rdp_pointer.h"
+#include "pointer.h"
 
 #include <cairo/cairo.h>
 #include <freerdp/freerdp.h>
diff --git a/src/protocols/rdp/rdp_pointer.h b/src/protocols/rdp/pointer.h
similarity index 100%
rename from src/protocols/rdp/rdp_pointer.h
rename to src/protocols/rdp/pointer.h
diff --git a/src/protocols/rdp/rdp_print_job.c b/src/protocols/rdp/print-job.c
similarity index 99%
rename from src/protocols/rdp/rdp_print_job.c
rename to src/protocols/rdp/print-job.c
index a3b51bc..8e6211e 100644
--- a/src/protocols/rdp/rdp_print_job.c
+++ b/src/protocols/rdp/print-job.c
@@ -19,7 +19,7 @@
 
 
 #include "config.h"
-#include "rdp_print_job.h"
+#include "print-job.h"
 
 #include <guacamole/client.h>
 #include <guacamole/protocol.h>
diff --git a/src/protocols/rdp/rdp_print_job.h b/src/protocols/rdp/print-job.h
similarity index 100%
rename from src/protocols/rdp/rdp_print_job.h
rename to src/protocols/rdp/print-job.h
diff --git a/src/protocols/rdp/rdp.c b/src/protocols/rdp/rdp.c
index b2423da..4bfc0c8 100644
--- a/src/protocols/rdp/rdp.c
+++ b/src/protocols/rdp/rdp.c
@@ -19,28 +19,28 @@
 
 #include "config.h"
 
-#include "audio_input.h"
-#include "channels.h"
+#include "channels/audio-input.h"
+#include "plugins/channels.h"
 #include "client.h"
-#include "clipboard.h"
+#include "channels/cliprdr.h"
 #include "common/cursor.h"
 #include "common/display.h"
 #include "common/recording.h"
-#include "disp.h"
+#include "channels/disp.h"
 #include "error.h"
-#include "keyboard.h"
-#include "pipe-svc.h"
-#include "rail.h"
+#include "keyboard/keyboard.h"
+#include "channels/pipe-svc.h"
+#include "channels/rail.h"
 #include "rdp.h"
-#include "rdp_bitmap.h"
-#include "rdp_fs.h"
-#include "rdp_print_job.h"
-#include "rdp_gdi.h"
-#include "rdp_glyph.h"
-#include "rdp_pointer.h"
-#include "rdp_stream.h"
-#include "rdpdr.h"
-#include "rdpsnd.h"
+#include "bitmap.h"
+#include "fs.h"
+#include "print-job.h"
+#include "gdi.h"
+#include "glyph.h"
+#include "pointer.h"
+#include "stream.h"
+#include "channels/rdpdr/rdpdr.h"
+#include "channels/rdpsnd/rdpsnd.h"
 
 #ifdef ENABLE_COMMON_SSH
 #include "common-ssh/sftp.h"
diff --git a/src/protocols/rdp/rdp.h b/src/protocols/rdp/rdp.h
index 5394bb3..64a5a50 100644
--- a/src/protocols/rdp/rdp.h
+++ b/src/protocols/rdp/rdp.h
@@ -22,18 +22,18 @@
 
 #include "config.h"
 
-#include "audio_input.h"
-#include "clipboard.h"
+#include "channels/audio-input.h"
+#include "channels/cliprdr.h"
 #include "common/clipboard.h"
 #include "common/display.h"
 #include "common/list.h"
 #include "common/recording.h"
 #include "common/surface.h"
-#include "disp.h"
-#include "keyboard.h"
-#include "rdp_fs.h"
-#include "rdp_print_job.h"
-#include "rdp_settings.h"
+#include "channels/disp.h"
+#include "keyboard/keyboard.h"
+#include "fs.h"
+#include "print-job.h"
+#include "settings.h"
 
 #include <freerdp/freerdp.h>
 #include <freerdp/codec/color.h>
diff --git a/src/protocols/rdp/rdp_settings.c b/src/protocols/rdp/settings.c
similarity index 99%
rename from src/protocols/rdp/rdp_settings.c
rename to src/protocols/rdp/settings.c
index e64aa07..86e315a 100644
--- a/src/protocols/rdp/rdp_settings.c
+++ b/src/protocols/rdp/settings.c
@@ -22,7 +22,7 @@
 #include "client.h"
 #include "common/string.h"
 #include "rdp.h"
-#include "rdp_settings.h"
+#include "settings.h"
 #include "resolution.h"
 
 #include <freerdp/constants.h>
diff --git a/src/protocols/rdp/rdp_settings.h b/src/protocols/rdp/settings.h
similarity index 99%
rename from src/protocols/rdp/rdp_settings.h
rename to src/protocols/rdp/settings.h
index ae27e9d..92fc3b8 100644
--- a/src/protocols/rdp/rdp_settings.h
+++ b/src/protocols/rdp/settings.h
@@ -23,7 +23,7 @@
 
 #include "config.h"
 
-#include "rdp_keymap.h"
+#include "keyboard/keymap.h"
 
 #include <freerdp/freerdp.h>
 
diff --git a/src/protocols/rdp/rdp_status.h b/src/protocols/rdp/status.h
similarity index 100%
rename from src/protocols/rdp/rdp_status.h
rename to src/protocols/rdp/status.h
diff --git a/src/protocols/rdp/rdp_stream.c b/src/protocols/rdp/stream.c
similarity index 99%
rename from src/protocols/rdp/rdp_stream.c
rename to src/protocols/rdp/stream.c
index a497c92..fedec50 100644
--- a/src/protocols/rdp/rdp_stream.c
+++ b/src/protocols/rdp/stream.c
@@ -21,8 +21,8 @@
 #include "config.h"
 #include "client.h"
 #include "rdp.h"
-#include "rdp_fs.h"
-#include "rdp_stream.h"
+#include "fs.h"
+#include "stream.h"
 
 #include <freerdp/freerdp.h>
 #include <freerdp/channels/channels.h>
diff --git a/src/protocols/rdp/rdp_stream.h b/src/protocols/rdp/stream.h
similarity index 100%
rename from src/protocols/rdp/rdp_stream.h
rename to src/protocols/rdp/stream.h
diff --git a/src/protocols/rdp/tests/fs/normalize_path.c b/src/protocols/rdp/tests/fs/normalize_path.c
index ccf23e0..22a2d80 100644
--- a/src/protocols/rdp/tests/fs/normalize_path.c
+++ b/src/protocols/rdp/tests/fs/normalize_path.c
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-#include "rdp_fs.h"
+#include "fs.h"
 
 #include <CUnit/CUnit.h>
 #include <stdlib.h>
diff --git a/src/protocols/rdp/user.c b/src/protocols/rdp/user.c
index 1fc1189..f2569f4 100644
--- a/src/protocols/rdp/user.c
+++ b/src/protocols/rdp/user.c
@@ -19,14 +19,14 @@
 
 #include "config.h"
 
-#include "audio_input.h"
+#include "channels/audio-input.h"
 #include "common/display.h"
 #include "input.h"
 #include "user.h"
-#include "pipe-svc.h"
+#include "channels/pipe-svc.h"
 #include "rdp.h"
-#include "rdp_settings.h"
-#include "rdp_stream.h"
+#include "settings.h"
+#include "stream.h"
 
 #ifdef ENABLE_COMMON_SSH
 #include "sftp.h"