diff --git a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.hex b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.hex
index e29c17860a..01fcd0833d 100644
Binary files a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.hex and b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.hex differ
diff --git a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.png b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.png
index 5c4c7c7c1b..6fba568fc3 100644
Binary files a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.png and b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.png differ
diff --git a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png
index dbc51b79b3..b0a1c513cd 100644
Binary files a/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png and b/keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png differ
diff --git a/keyboard/ergodox_ez/keymaps/csharp_dev/keymap.c b/keyboard/ergodox_ez/keymaps/csharp_dev/keymap.c
index 537b15eeac..5f16107ce9 100644
--- a/keyboard/ergodox_ez/keymaps/csharp_dev/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/csharp_dev/keymap.c
@@ -3,8 +3,7 @@
 #include "action_layer.h"
 
 #define BASE 0 // default layer
-#define QWERTY 1 // qwerty keys
-#define FKEYS 2 // F keys + macros
+#define FKEYS 1 // F keys + macros
 
 #define MACRO_PUBLIC 10
 #define MACRO_PRIVATE 11
@@ -43,12 +42,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *   |Tab~CL|  <   |  >   |   |  |  &   |                                       |   =  |   +  |   -  |   *  |  L1  |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
- *                                        |. ~L1 | , ~L2|       |Home~L1| End~L2|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Copy |       | UP   |        |      |
- *                                 | Enter| Space|------|       |------|  Space |Enter |
- *                                 | ~LSFT| ~WIN | Past |       | DOWN |   ~WIN | ~LSFT|
- *                                 `--------------------'       `----------------------'
+ *                                        |. ~L1 | ,    |       |Home  |End~L1|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Copy |       | UP   |      |      |
+ *                                 | Enter| Space|------|       |------| Space|Enter |
+ *                                 | ~WIN | ~LSFT| Past |       | DOWN | ~LSFT| ~WIN |
+ *                                 `--------------------'       `--------------------'
  */
 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
 // Otherwise, it needs KC_*
@@ -59,110 +58,68 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_LCBR,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
         KC_RCBR,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_SLASH,
         CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, 
-                                              LT(1,KC_DOT),  LT(2,KC_COMM),
+                                              LT(1,KC_DOT),  KC_COMM,
                                                               LCTL(KC_C),
-                                               SFT_T(KC_ENTER),GUI_T(KC_SPACE),LCTL(KC_V),
+                                               GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V),
         // right hand
              LCTL(KC_S)  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_LBRACKET,
              KC_DELETE,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_RBRACKET,
                           KC_H,   KC_J,   KC_K,   KC_L,   KC_UNDS,LCTL(KC_Y),
              KC_SCOLON,KC_N,   KC_M, KC_QUOTE  ,KC_EXLM , LSFT(KC_SLASH),   LCTL(KC_Z),
                                   KC_EQUAL,KC_PLUS  ,  KC_MINUS,KC_ASTR  ,     TG(1),
-             LT(2,KC_HOME),         LT(1,KC_END),
+             KC_HOME,         LT(1,KC_END),
              KC_UP,
-             KC_DOWN,GUI_T(KC_SPACE), SFT_T(KC_ENTER)
+             KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER)
     ),
-/* Keymap 1: QWERTY layer
+
+/* Keymap 1:  F keys + macros
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  |   -  |           |   =  |   6  |   7  |   8  |   9  |  0   |        |
+ * |  ESC   |  F1  |  F2  |  F3  |  F4  |  F5  |  `   |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |   Tab  |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Esc   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   |   '    |
- * |--------+------+------+------+------+------|  Tab |           |  Esc |------+------+------+------+------+--------|
- * |  LSHFT |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |  /   |    \   |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | CTRL | WIN  |  ALT |ALT GR| Esc  |                                       | PgUp | PgDw | Ins  | PtSc |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |  Cut |       |      |      |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      |      |       |      |        |      |
- *                                 |      |      |------|       |------|   Left | Right|
- *                                 |      |      |      |       |      |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[QWERTY] = KEYMAP(  // layer 2 : QWERTY
-        // left hand
-        KC_GRAVE,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_MINUS,
-        KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_TRNS,
-        KC_ESCAPE,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSHIFT,        KC_Z,  KC_X,   KC_C,   KC_V,   KC_B,   KC_TAB,
-        KC_LCTRL, KC_LGUI,KC_LALT,  KC_RALT,    KC_ESCAPE,
-                                              KC_TRNS,  LCTL(KC_X),
-                                                              KC_TRNS,
-                                               KC_TRNS,KC_TRNS,KC_TRNS,
-        // right hand
-             KC_EQUAL  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0, KC_TRNS,
-             KC_TRNS,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,            KC_TRNS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCOLON,  KC_QUOTE,
-             KC_ESCAPE,KC_N,   KC_M,   KC_TRNS,KC_DOT , KC_SLASH,   KC_NONUS_BSLASH,
-                                  KC_PGUP  ,  KC_PGDOWN,KC_INSERT  ,KC_PSCREEN,          KC_TRNS,
-             KC_TRNS,        KC_TRNS,
-             KC_TRNS,
-             KC_TRNS,KC_LEFT, KC_RIGHT
-    ),
-/* Keymap 2:  F keys + macros
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
+ * |  Tab   |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * |        |Privat|Const |var   |float |null  |------|           |------|new   |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|  \   |           |  ~   |------+------+------+------+------+--------|
  * |        |      |      |void  |bool  |break;|      |           |      |();   |      |      |      |      |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      | Alt  |      |      |      |                                       |      |      |      |      |      |
+ *   |      |  WIN | Alt  |      |      |                                       | PgUp | PgDw | Ins  | PtSc |      |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
  *                                        |      | Cut  |       |      |      |
  *                                 ,------|------|------|       |------+------+------.
  *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |------|       |------| Left | Right|
  *                                 |      |      |      |       |      |      |      |
  *                                 `--------------------'       `--------------------'
  */
 // FKEYS + MACROS
 [FKEYS] = KEYMAP(
        // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
+       KC_ESCAPE,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_GRAVE,
+       KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
        KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL),
-       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_TRNS,
-       KC_TRNS,KC_LALT,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH,
+       KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,LCTL(KC_X),
                                                KC_TRNS,
                                KC_TRNS,KC_TRNS,KC_TRNS,
        // right hand
        KC_CALCULATOR, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
        KC_TRNS, M(MACRO_TODO),   KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_F12,
                 M(MACRO_NEW), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-       KC_TRNS, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-                         KC_TRNS,KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,
+       KC_TILD, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+                         KC_PGUP,KC_PGDOWN,  KC_INSERT,   KC_PSCREEN,  KC_TRNS,
        KC_TRNS, KC_TRNS,
        KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
+       KC_TRNS, KC_LEFT, KC_RIGHT
 ),
 
 
 };
 
 const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(QWERTY)                // FN1 - Momentary Layer 1
+    [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS)                // FN1 - Momentary Layer 1
 };
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
diff --git a/keyboard/ergodox_ez/keymaps/csharp_dev/readme.md b/keyboard/ergodox_ez/keymaps/csharp_dev/readme.md
index 3ceb77ecaf..96af077ade 100644
--- a/keyboard/ergodox_ez/keymaps/csharp_dev/readme.md
+++ b/keyboard/ergodox_ez/keymaps/csharp_dev/readme.md
@@ -4,6 +4,8 @@
 
 * Feb 12, 2016 (V1): 
   * First version commit
+* Mar 20, 2016 (V2):
+  * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter
 
 ## About
 This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions.
@@ -38,7 +40,6 @@ Still there are many way to improve or iterate on this:
 * Make it language agnostic
 * Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g.  https://dzone.com/articles/most-pressed-keys-various )
 * QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur
-* Layout 1 is mainly here for safety, most of its unique keys could be transfered to Layout 2 and it could then be removed
 
 ## Issues 
 One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold )
diff --git a/keyboard/ergodox_ez/keymaps/mpiechotka/keymap.c b/keyboard/ergodox_ez/keymaps/mpiechotka/keymap.c
index 178c290660..9f90c639aa 100644
--- a/keyboard/ergodox_ez/keymaps/mpiechotka/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/mpiechotka/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
         KC_DELT,        KC_Q,     KC_W,   KC_F,   KC_P,          KC_G,   TG(SYMB),
         KC_ESC,         KC_A,     KC_R,   KC_S,   KC_T,          KC_D,
-        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   ALL_T(KC_NO),
+        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   KC_EQL,
         LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
                                                              KC_LALT,       F(LWIN),
                                                                             KC_HOME,
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
              KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
              TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
                           KC_H,   KC_N,   KC_E,   KC_I,   KC_O,             KC_QUOT,
-             MEH_T(KC_NO),KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+             KC_MINS,     KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
                                   KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
              KC_LALT,         KC_RALT,
              KC_PGUP,
@@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
@@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
         KC_DELT,        CM_Q,     CM_W,   CM_F,   CM_P,          CM_G,   TG(SYMB),
         KC_ESC,         CM_A,     CM_R,   CM_S,   CM_T,          CM_D,
-        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   ALL_T(KC_NO),
+        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   KC_EQL,
         LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
                                                              KC_LALT,       F(LWIN),
                                                                             KC_HOME,
@@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
              KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
              TG(SYMB),    CM_J,   CM_L,   CM_U,   CM_Y,   KC_P, /*CM_SCLN*/ KC_BSLS,
                           CM_H,   CM_N,   CM_E,   CM_I,   CM_O,             KC_QUOT,
-             MEH_T(KC_NO),CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
+             KC_MINS,     CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
                                   KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
              KC_LALT,         KC_RALT,
              KC_PGUP,
@@ -222,22 +222,27 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
         } else {
              unregister_code(KC_LGUI);
         }
+        break;
     case PC1:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(1), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END);
         }
+        break;
     case PC2:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(2), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END);
         }
+        break;
     case PC3:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(3), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END);
         }
+        break;
     case PC4:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(4), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), END);
         }
+        break;
     }
     return MACRO_NONE;
 }
diff --git a/keyboard/ergodox_ez/keymaps/mpiechotka/mpiechotka.hex b/keyboard/ergodox_ez/keymaps/mpiechotka/mpiechotka.hex
index 4bb17147f0..e2f2b6caaf 100644
Binary files a/keyboard/ergodox_ez/keymaps/mpiechotka/mpiechotka.hex and b/keyboard/ergodox_ez/keymaps/mpiechotka/mpiechotka.hex differ
diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c
new file mode 100644
index 0000000000..173fc4ecd5
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c
@@ -0,0 +1,134 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+#define SYMB 1
+#define PLVR 2
+#define ARRW 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
+    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
+    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
+    //
+    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
+    KC_MPLY,       KC_MNXT,
+    KC_MPRV,
+    KC_FN3,        KC_QUOT, KC_SPC
+  ),
+  [SYMB] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
+    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+  [PLVR] = KEYMAP(
+    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
+    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
+    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
+    //
+    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
+    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
+    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
+    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_NO,         KC_N,    KC_M
+  ),
+  [ARRW] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
+  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
+  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+    case 0:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void * matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void * matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    case SYMB:
+      ergodox_right_led_1_on();
+      break;
+    case PLVR:
+      ergodox_right_led_2_on();
+      break;
+    case ARRW:
+      ergodox_right_led_3_on();
+      break;
+    default:
+      break;
+  }
+};
diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md
new file mode 100644
index 0000000000..6f182d0d83
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md
@@ -0,0 +1,43 @@
+# Roman's Layout
+
+There are four layers:
+
+- **BASE** is [Norman layout](https://normanlayout.info/).
+- **SYMB** for numbers and symbols.
+- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
+- **ARRW** for navigation.
+
+[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
+
+## Switching
+
+- Tap `SYMB` to toggle **SYMB**.
+- Tap `ARRW` to toggle **ARRW**.
+- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
+- Tap `PLVR` to toggle **PLVR**.
+
+## LEDs
+
+- Red: SYMB is on.
+- Green: PLVR is on.
+- Blue: ARRW is on.
+
+## Functional Keys
+
+- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
+- Tap `F2` to copy screenshot to the clipboard.
+- Hold `SHIFT` and tap `F2` to save screenshot as a file.
+- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
+- Tap `F14`, `F15` to adjust display brightness.
+
+## CTRL/ESC
+
+Both of those keys are frequently used in Vim.
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## Activate N-rollover
+
+- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
+- Then you can activate **PLVR** and use ErgoDox EZ for steno.
diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.hex b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.hex
new file mode 100644
index 0000000000..b5eded6e66
Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.hex differ
diff --git a/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
new file mode 100644
index 0000000000..10b0752be5
Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png differ
diff --git a/keyboard/planck/CYGWIN_GUIDE.md b/keyboard/planck/CYGWIN_GUIDE.md
index 0b08a6aa1e..ac13e745d7 100755
--- a/keyboard/planck/CYGWIN_GUIDE.md
+++ b/keyboard/planck/CYGWIN_GUIDE.md
@@ -17,6 +17,9 @@ Download the `cygwin` setup ([x86_64](https://cygwin.com/setup-x86_64.exe)) and
 - devel/make
 - devel/texinfo
 - devel/gettext-devel
+- devel/automake
+- devel/autoconfig
+- devel/libtool
 - text/gettext
 - libs/libgcc1
 - interpreters/m4
@@ -60,7 +63,7 @@ These commands will set up the install directory and the `PATH` variable, which
 $ PREFIX=$HOME/local/avr
 $ export PREFIX
 $ PATH=/usr/local/bin:/usr/local/lib:/usr/local/include:/bin:/lib:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
-$ PATH=$PATH:$PREFIX/bin
+$ PATH=$PATH:$PREFIX/bin:$PREFIX/lib
 $ export PATH
 ```
 
@@ -155,13 +158,13 @@ $ make install
 We can either build our own, or use the precomplied binaries.  The precompiled binaries don't play well with `cygwin` so it is better to build them ourselves.  The procedure for the precompiled binaries is included at the end of this guide.
 
 ### Build and Install the `libusb`
-The `dfu-programmer` requires `libusb` so that it can interact with the USB system.
+The `dfu-programmer` requires `libusb` so that it can interact with the USB system. These repos must be bootstrapped in order to create an appropriate `./configure` and `Makefile` for your system.
 ```
 $ cd ~/src
 $ git clone https://github.com/libusb/libusb.git
 $ cd libusb
 $ ./bootstrap.sh
-$ ./configure --prefix=$PREFIX
+$ ./configure
 $ make
 $ make install
 ```
@@ -172,7 +175,7 @@ $ cd ~/src
 $ git clone https://github.com/dfu-programmer/dfu-programmer.git
 $ cd dfu-programmer
 $ ./bootstrap.sh
-$ ./configure --prefix=$PREFIX
+$ ./configure
 $ make
 $ make install
 ```
@@ -180,7 +183,7 @@ $ make install
 Verify the installation with:
 ```
 $ which dfu-programmer
-/home/Kevin/local/avr/bin/dfu-programmer
+/usr/local/bin/dfu-programmer
 
 $ dfu-programmer
 dfu-programmer 0.7.2
@@ -315,7 +318,6 @@ These tools are for debugging your firmware, etc. before flashing. Theoretically
 $ cd ~/src
 $ git clone git://sourceware.org/git/binutils-gdb.git
 $ cd binutils-gdb
-$ ./bootstrap
 $ mkdir obj-avr
 $ cd obj-avr
 $ ../configure --prefix=$PREFIX --target=avr --build=x86_64-unknown-cygwin --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --disable-nls --enable-static
diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h
new file mode 100644
index 0000000000..1ab2d63ddd
--- /dev/null
+++ b/quantum/keymap_extras/keymap_bepo.h
@@ -0,0 +1,311 @@
+/* Keymap macros for the French BÉPO layout - http://bepo.fr */
+#ifndef KEYMAP_BEPO_H
+#define KEYMAP_BEPO_H
+
+#include "keymap_common.h"
+
+// Alt gr
+#ifndef ALTGR
+#define ALTGR(kc)   RALT(kc)
+#endif
+#ifndef ALGR
+#define ALGR(kc)    ALTGR(kc)
+#endif
+#define BP_ALGR KC_RALT
+
+// Normal characters
+// First row (on usual keyboards)
+#define BP_DOLLAR           KC_GRAVE            // $
+#define BP_DLR              BP_DOLLAR
+#define BP_DOUBLE_QUOTE     KC_1                // "
+#define BP_DQOT             BP_DOUBLE_QUOTE
+#define BP_LEFT_GUILLEMET   KC_2                // «
+#define BP_LGIL             BP_LEFT_GUILLEMET
+#define BP_RIGHT_GUILLEMET  KC_3                // »
+#define BP_RGIL             BP_RIGHT_GUILLEMET
+#define BP_LEFT_PAREN       KC_4                // (
+#define BP_LPRN             BP_LEFT_PAREN
+#define BP_RIGHT_PAREN      KC_5                // )
+#define BP_RPRN             BP_RIGHT_PAREN
+#define BP_AT               KC_6                // @
+#define BP_PLUS             KC_7                // +
+#define BP_MINUS            KC_8                // -
+#define BP_MINS             BP_MINUS
+#define BP_SLASH            KC_9                // /
+#define BP_SLSH             BP_SLASH
+#define BP_ASTERISK         KC_0                // *
+#define BP_ASTR             BP_ASTERISK
+#define BP_EQUAL            KC_MINUS            // =
+#define BP_EQL              BP_EQUAL
+#define BP_PERCENT          KC_EQUAL            // %
+#define BP_PERC             BP_PERCENT
+
+// Second row
+#define BP_B                KC_Q
+#define BP_E_ACUTE          KC_W        // é
+#define BP_ECUT             BP_E_ACUTE
+#define BP_P                KC_E
+#define BP_O                KC_R
+#define BP_E_GRAVE          KC_T        // è
+#define BP_EGRV             BP_E_GRAVE
+#define BP_DEAD_CIRCUMFLEX  KC_Y        // dead ^
+#define BP_DCRC             BP_DEAD_CIRCUMFLEX
+#define BP_V                KC_U
+#define BP_D                KC_I
+#define BP_L                KC_O
+#define BP_J                KC_P
+#define BP_Z                KC_LBRACKET
+#define BP_W                KC_RBRACKET
+
+// Third row
+#define BP_A            KC_A
+#define BP_U            KC_S
+#define BP_I            KC_D
+#define BP_E            KC_F
+#define BP_COMMA        KC_G        // ,
+#define BP_COMM         BP_COMMA
+#define BP_C            KC_H
+#define BP_T            KC_J
+#define BP_S            KC_K
+#define BP_R            KC_L
+#define BP_N            KC_SCOLON
+#define BP_M            KC_QUOTE
+#define BP_C_CEDILLA    KC_BSLASH   // ç
+#define BP_CCED         BP_C_CEDILLA
+
+// Fourth row
+#define BP_E_CIRCUMFLEX     KC_NONUS_BSLASH // ê
+#define BP_ECRC             BP_E_CIRCUMFLEX
+#define BP_A_GRAVE          KC_Z            // à
+#define BP_AGRV             BP_A_GRAVE
+#define BP_Y                KC_X
+#define BP_X                KC_C
+#define BP_DOT              KC_V            // .
+#define BP_K                KC_B
+#define BP_APOSTROPHE       KC_N
+#define BP_APOS             BP_APOSTROPHE   // '
+#define BP_Q                KC_M
+#define BP_G                KC_COMMA
+#define BP_H                KC_DOT
+#define BP_F                KC_SLASH
+
+// Shifted characters
+// First row
+#define BP_HASH     LSFT(BP_DOLLAR)     // #
+#define BP_1        LSFT(KC_1)
+#define BP_2        LSFT(KC_2)
+#define BP_3        LSFT(KC_3)
+#define BP_4        LSFT(KC_4)
+#define BP_5        LSFT(KC_5)
+#define BP_6        LSFT(KC_6)
+#define BP_7        LSFT(KC_7)
+#define BP_8        LSFT(KC_8)
+#define BP_9        LSFT(KC_9)
+#define BP_0        LSFT(KC_0)
+#define BP_DEGREE   LSFT(BP_EQUAL)      // °
+#define BP_DEGR     BP_DEGREE
+#define BP_GRAVE    LSFT(BP_PERCENT)    // `
+#define BP_GRV      BP_GRAVE
+
+// Second row
+#define BP_EXCLAIM  LSFT(BP_DEAD_CIRCUMFLEX)    // !
+#define BP_EXLM     BP_EXCLAIM
+
+// Third row
+#define BP_SCOLON   LSFT(BP_COMMA)  // ;
+#define BP_SCLN     BP_SCOLON
+
+// Fourth row
+#define BP_COLON    LSFT(BP_DOT)    // :
+#define BP_COLN     BP_COLON
+#define BP_QUESTION LSFT(BP_QUOTE)  // ?
+#define BP_QEST     BP_QUESTION
+
+// Space bar
+#define BP_NON_BREAKING_SPACE   LSFT(KC_SPACE)
+#define BP_NBSP                 BP_NON_BREAKING_SPACE
+
+// AltGr-ed characters
+// First row
+#define BP_EN_DASH          ALTGR(BP_DOLLAR)    // –
+#define BP_NDSH             BP_EN_DASH
+#define BP_EM_DASH          ALTGR(KC_1)         // —
+#define BP_MDSH             BP_EM_DASH
+#define BP_LESS             ALTGR(KC_2)         // <
+#define BP_GREATER          ALTGR(KC_3)         // >
+#define BP_GRTR             BP_GREATER
+#define BP_LBRACKET         ALTGR(KC_4)         // [
+#define BP_LBRC             BP_LBRACKET
+#define BP_RBRACKET         ALTGR(KC_5)         // ]
+#define BP_RBRC             BP_RBRACKET
+#define BP_CIRCUMFLEX       ALTGR(KC_6)         // ^
+#define BP_CIRC             BP_CIRCUMFLEX
+#define BP_PLUS_MINUS       ALTGR(KC_7)         // ±
+#define BP_PSMS             BP_PLUS_MINUS
+#define BP_MATH_MINUS       ALTGR(KC_8)         // −
+#define BP_MMNS             BP_MATH_MINUS
+#define BP_OBELUS           ALTGR(KC_9)         // ÷
+#define BP_OBEL             BP_OBELUS
+// more conventional name of the symbol
+#define BP_DIVISION_SIGN    BP_OBELUS
+#define BP_DVSN             BP_DIVISION_SIGN
+#define BP_TIMES            ALTGR(KC_0)         // ×
+#define BP_TIMS             BP_TIMES
+#define BP_DIFFERENT        ALTGR(BP_EQUAL)     // ≠
+#define BP_DIFF             BP_DIFFERENT
+#define BP_PERMILLE         ALTGR(BP_PERCENT)   // ‰
+#define BP_PMIL             BP_PERMILLE
+
+// Second row
+#define BP_PIPE                 ALTGR(BP_B)         // |
+#define BP_DEAD_ACUTE           ALTGR(BP_E_ACUTE)   // dead ´
+#define BP_DACT                 BP_DEAD_ACUTE
+#define BP_AMPERSAND            ALTGR(BP_P)         // &
+#define BP_AMPR                 BP_AMPERSAND
+#define BP_OE_LIGATURE          ALTGR(BP_O)         // œ
+#define BP_OE                   BP_OE_LIGATURE
+#define BP_DEAD_GRAVE           ALTGR(BP_E_GRAVE)   // `
+#define BP_DGRV                 BP_DEAD_GRAVE
+#define BP_INVERTED_EXCLAIM     ALTGR(BP_DEAD_CIRCUMFLEX)   // ¡
+#define BP_IXLM                 BP_INVERTED_EXCLAIM
+#define BP_DEAD_CARON           ALTGR(BP_V)         // dead ˇ
+#define BP_DCAR                 BP_DEAD_CARON
+#define BP_ETH                  ALTGR(BP_D)         // ð
+#define BP_DEAD_SLASH           ALTGR(BP_L)         // dead /
+#define BP_DSLH                 BP_DEAD_SLASH
+#define BP_IJ_LIGATURE          ALTGR(BP_J)         // ij
+#define BP_IJ                   BP_IJ_LIGATURE
+#define BP_SCHWA                ALTGR(BP_Z)         // ə
+#define BP_SCWA                 BP_SCHWA
+#define BP_DEAD_BREVE           ALTGR(BP_W)         // dead ˘
+#define BP_DBRV                 BP_DEAD_BREVE
+
+// Third row
+#define BP_AE_LIGATURE              ALTGR(BP_A)         // æ
+#define BP_AE                       BP_AE_LIGATURE
+#define BP_U_GRAVE                  AGR(BP_U)           // ù
+#define BP_UGRV                     BP_U_GRAVE
+#define BP_DEAD_TREMA               ALTGR(BP_I)         // dead ¨ (trema/umlaut/diaresis)
+#define BP_DTRM                     BP_DEAD_TREMA
+#define BP_EURO                     ALTGR(BP_E)         // €
+#define BP_TYPOGRAPHICAL_APOSTROPHE ALTGR(BP_COMMMA)    // ’
+#define BP_TAPO                     BP_TYPOGRAPHICAL_APOSTROPHE
+#define BP_COPYRIGHT                ALTGR(BP_C)         // ©
+#define BP_CPRT                     BP_COPYRIGHT
+#define BP_THORN                    ALTGR(BP_T)         // þ
+#define BP_THRN                     BP_THORN
+#define BP_SHARP_S                  ALTGR(BP_S)         // ß
+#define BP_SRPS                     BP_SHARP_S
+#define BP_REGISTERED_TRADEMARK     ALTGR(BP_R)         // ®
+#define BP_RTM                      BP_REGISTERED_TRADEMARK
+#define BP_DEAD_TILDE               ALTGR(BP_N)         // dead ~
+#define BP_DTLD                     BP_DEAD_TILDE
+#define BP_DEAD_MACRON              ALTGR(BP_M)         // dead ¯
+#define BP_DMCR                     BP_DEAD_MACRON
+#define BP_DEAD_CEDILLA             ALTGR(BP_C_CEDILLA) // dead ¸
+#define BP_DCED                     BP_DEAD_CEDILLA
+
+// Fourth row
+#define BP_NONUS_SLASH          ALTGR(BP_E_CIRCUMFLEX)  // / on non-us backslash key (102nd key, ê in bépo)
+#define BP_NUSL                 BP_NONUS_SLASH
+#define BP_BACKSLASH            ALTGR(BP_A_GRAVE)       /* \ */
+#define BP_BSLS                 BP_BACKSLASH
+#define BP_LEFT_CURLY_BRACE     ALTGR(BP_Y)             // {
+#define BP_LCBR                 BP_LEFT_CURLY_BRACE
+#define BP_RIGHT_CURLY_BRACE    ALTGR(BP_X)             // }
+#define BP_RCBR                 BP_RIGHT_CURLY_BRACE
+#define BP_ELLIPSIS             ALTGR(BP_DOT)           // …
+#define BP_ELPS                 BP_ELLIPSIS
+#define BP_TILDE                ALTGR(BP_K)             // ~
+#define BP_TILD                 BP_TILDE
+#define BP_INVERTED_QUESTION    ALTGR(BP_QUESTION)      // ¿
+#define BP_IQST                 BP_INVERTED_QUESTION
+#define BP_DEAD_RING            ALTGR(BP_Q)             // dead °
+#define BP_DRNG                 BP_DEAD_RING
+#define BP_DEAD_GREEK           ALTGR(BP_G)             // dead Greek key (following key will make a Greek letter)
+#define BP_DGRK                 BP_DEAD_GREEK
+#define BP_DAGGER               ALTGR(BP_H)             // †
+#define BP_DAGR                 BP_DAGGER
+#define BP_DEAD_OGONEK          ALTGR(BP_F)             // dead ˛
+#define BP_DOGO                 BP_DEAD_OGONEK
+
+// Space bar
+#define BP_UNDERSCORE   ALTGR(KC_SPACE)     // _
+#define BP_UNDS         BP_UNDERSCORE
+
+// AltGr-Shifted characters (different from capitalised AltGr-ed characters)
+// First row
+#define BP_PARAGRAPH            ALTGR(BP_HASH)      // ¶
+#define BP_PARG                 BP_PARAGRAPH
+#define BP_LOW_DOUBLE_QUOTE     ALTGR(BP_1)         // „
+#define BP_LWQT                 BP_LOW_DOUBLE_QUOTE
+#define BP_LEFT_DOUBLE_QUOTE    ALTGR(BP_2)         // “
+#define BP_LDQT                 BP_LEFT_DOUBLE_QUOTE
+#define BP_RIGHT_DOUBLE_QUOTE   ALTGR(BP_3)         // ”
+#define BP_RDQT                 BP_RIGHT_DOUBLE_QUOTE
+#define BP_LESS_OR_EQUAL        ALTGR(BP_4)         // ≤
+#define BP_LEQL                 BP_LESS_OR_EQUAL
+#define BP_GREATER_OR_EQUAL     ALTGR(BP_5)         // ≥
+#define BP_GEQL                 BP_GREATER_OR_EQUAL
+// nothing on ALTGR(BP_6)
+#define BP_NEGATION             ALTGR(BP_7)         // ¬
+#define BP_NEGT                 BP_NEGATION
+#define BP_ONE_QUARTER          ALTGR(BP_8)         // ¼
+#define BP_1QRT                 BP_ONE_QUARTER
+#define BP_ONE_HALF             ALTGR(BP_9)         // ½
+#define BP_1HLF                 BP_ONE_HALF
+#define BP_THREE_QUARTERS       ALTGR(BP_0)         // ¾
+#define BP_3QRT                 BP_THREE_QUARTERS
+#define BP_MINUTES              ALTGR(BP_DEGREE)    // ′
+#define BP_MNUT                 BP_MINUTES
+#define BP_SECONDS              ALTGR(BP_GRAVE)     // ″
+#define BP_SCND                 BP_SECONDS
+
+// Second row
+#define BP_BROKEN_PIPE          LSFT(BP_PIPE)           // ¦
+#define BP_BPIP                 BP_BROKEN_PIPE
+#define BP_DEAD_DOUBLE_ACUTE    LSFT(BP_DEAD_ACUTE)     // ˝
+#define BP_DDCT                 BP_DEAD_DOUBLE_ACUTE
+#define BP_SECTION              ALTGR(LSFT(BP_P))       // §
+#define BP_SECT                 BP_SECTION
+// LSFT(BP_DEAD_GRAVE) is actually the same character as LSFT(BP_PERCENT)
+#define BP_GRAVE_BIS            LSFT(BP_DEAD_GRAVE)     // `
+#define BP_GRVB                 BP_GRAVE_BIS
+
+// Third row
+#define BP_DEAD_DOT_ABOVE       LSFT(BP_DEAD_TREMA)     // dead ˙
+#define BP_DDTA                 BP_DEAD_DOT_ABOVE
+#define BP_DEAD_CURRENCY        LSFT(BP_EURO)           // dead ¤ (next key will generate a currency code like ¥ or £)
+#define BP_DCUR                 BP_DEAD_CURRENCY
+#define BP_DEAD_HORN            LSFT(ALTGR(BP_COMMA))   // dead ̛
+#define BP_DHRN                 BP_DEAD_HORN
+#define BP_LONG_S               LSFT(ALTGR(BP_C))       // ſ
+#define BP_LNGS                 BP_LONG_S
+#define BP_TRADEMARK            LSFT(BP_REGISTERED_TRADEMARK)   // ™
+#define BP_TM                   BP_TRADEMARK
+#define BP_ORDINAL_INDICATOR_O  LSFT(ALTGR(BP_M))               // º
+#define BP_ORDO                 BP_ORDINAL_INDICATOR_O
+#define BP_DEAD_COMMA           LSFT(BP_DEAD_CEDILLA)   // dead ˛
+#define BP_DCOM                 BP_DEAD_COMMA
+
+// Fourth row
+#define BP_LEFT_QUOTE           LSFT(ALTGR(BP_Y))       // ‘
+#define BP_LQOT                 BP_LEFT_QUOTE
+#define BP_RIGHT_QUOTE          LSFT(ALTGR(BP_X))       // ’
+#define BP_RQOT                 BP_RIGHT_QUOTE
+#define BP_INTERPUNCT           LSFT(ALTGR(BP_DOT))     // ·
+#define BP_IPCT                 BP_INTERPUNCT
+#define BP_DEAD_HOOK_ABOVE      LSFT(ALTGR(BP_QUESTION))    // dead ̉
+#define BP_DHKA                 BP_DEAD_HOOK_ABOVE
+#define BP_DEAD_UNDERDOT        LSFT(BP_DEAD_RING)      // dead ̣
+#define BP_DUDT                 BP_DEAD_UNDERDOT
+#define BP_DOUBLE_DAGGER        LSFT(BP_DAGGER)         // ‡
+#define BP_DDGR                 BP_DOUBLE_DAGGER
+#define BP_ORDINAL_INDICATOR_A  LSFT(ALTGR(BP_F))       // ª
+#define BP_ORDA                 BP_ORDINAL_INDICATOR_A
+
+// Space bar
+#define BP_NARROW_NON_BREAKING_SPACE    ALTGR(BP_NON_BREAKING_SPACE)
+#define BP_NNBS                         BP_NARROW_NON_BREAKING_SPACE
+
+#endif
diff --git a/quantum/keymap_extras/keymap_german_osx.h b/quantum/keymap_extras/keymap_german_osx.h
index b011561e2f..da91b4bf46 100644
--- a/quantum/keymap_extras/keymap_german_osx.h
+++ b/quantum/keymap_extras/keymap_german_osx.h
@@ -12,7 +12,7 @@
 #define DE_Z KC_Y
 #define DE_Y KC_Z
 
-#define DE_A KC_A 
+#define DE_A KC_A
 #define DE_B KC_B
 #define DE_C KC_C
 #define DE_D KC_D
@@ -87,7 +87,7 @@
 // Alt-ed characters
 #define DE_SQ2 LALT(KC_2) // ²
 #define DE_SQ3 LALT(KC_3) // ³
-#define DE_LCBR LALT(KC_7) // {
+#define DE_LCBR LALT(KC_8) // {
 #define DE_LBRC LALT(KC_5) // [
 #define DE_RBRC LALT(KC_6) // ]
 #define DE_RCBR LALT(KC_9) // }