diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile
index 485c5f77f..f3537b2c7 100644
--- a/keyboard/planck/Makefile
+++ b/keyboard/planck/Makefile
@@ -54,10 +54,19 @@ SRC = planck.c \
 	backlight.c 
 
 ifdef KEYMAP
-    SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
+ifneq ("$(wildcard keymaps/$(KEYMAP).c)","")
+	KEYMAP_FILE = keymaps/$(KEYMAP).c
 else
-    SRC := keymaps/keymap_default.c $(SRC)
+	KEYMAP_FILE = keymaps/$(KEYMAP)/default.c
 endif
+else
+ifneq ("$(wildcard keymaps/default.c)","")
+	KEYMAP_FILE = keymaps/default.c
+else
+	KEYMAP_FILE = keymaps/default/default.c
+endif
+endif
+SRC := $(KEYMAP_FILE) $(SRC)
 
 CONFIG_H = config.h
 
diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md
index 0003e765d..5c3a52498 100644
--- a/keyboard/planck/README.md
+++ b/keyboard/planck/README.md
@@ -3,29 +3,42 @@ Planck keyboard firmware
 DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
 
 ## Quantum MK Firmware
+
 You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
 
     BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
     MIDI_ENABLE = yes      # MIDI controls
-    # UNICODE_ENABLE = yes # Unicode support
+    # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
     BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
 
-### Mod shortcuts
+## Quick aliases to common actions
 
-* `LSFT(kc)` - applies left shift to *kc* - `S(kc)` is an alias
-* `RSFT(kc)` - applies right shift to *kc*
-* `LCTL(kc)` - applies left control to *kc*
-* `RCTL(kc)` - applies right control to *kc*
-* `LALT(kc)` - applies left alt to *kc*
-* `RALT(kc)` - applies right alt to *kc*
-* `LGUI(kc)` - applies left gui (command/win) to *kc*
-* `RGUI(kc)` - applies right gui (command/win) to *kc*
+Your keymap can include shortcuts to common operations (called "function actions" in tmk).
 
-You can also use more than one, like this:
+### Switching and toggling layers
 
-    LALT(LGUI(KC_ESC))
+`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
 
-The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names (see `quantum/keymap_common.h`) are also availble.
+`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
+
+`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
+
+### Fun with modifier keys
+
+* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
+* `RSFT(kc)` - applies right Shift to *kc*
+* `LCTL(kc)` - applies left Control to *kc*
+* `RCTL(kc)` - applies right Control to *kc*
+* `LALT(kc)` - applies left Alt to *kc*
+* `RALT(kc)` - applies right Alt to *kc*
+* `LGUI(kc)` - applies left GUI (command/win) to *kc*
+* `RGUI(kc)` - applies right GUI (command/win) to *kc*
+
+You can also chain these, like this:
+
+    LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
+
+The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
 
     KC_TILD  ~
     KC_EXLM  !
@@ -45,31 +58,71 @@ The following shortcuts automatically add `LSFT()` to keycodes to get commonly u
     KC_PIPE  |
     KC_COLN  :
 
-### Function shortcuts
+`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down. 
 
-Instead of using `FNx`, you can use `F(x)` - the benefit here is being able to use more than 32 function layers (up to 4096), if you happen to need them.
+These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
 
-There are also keycode shortcuts for common actions:
+  * MOD_LCTL
+  * MOD_LSFT
+  * MOD_LALT
+  * MOD_LGUI
+
+These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
+
+We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
 
-* `MO(layer)` - momentary switch to *layer*
-* `DF(layer)` - sets default layer to *layer*
-* `TG(layer)` - toggle between the current layer and *layer*
-* `MT(mod, kc)` - is *mod* when held, and *kc* when tapped
   * `CTL_T(kc)` - is LCTL when held and *kc* when tapped 
   * `SFT_T(kc)` - is LSFT when held and *kc* when tapped 
   * `ALT_T(kc)` - is LALT when held and *kc* when tapped 
   * `GUI_T(kc)` - is LGUI when held and *kc* when tapped 
-  * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped 
-* `LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped
+  * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
 
-These functions work the same way that their `ACTION_*` functions do, and will require KC_TRNS on the layer being switched to - check out the default keymap for an example.
+### Temporarily setting the default layer 
 
-### Additional keycodes for software-implemented layouts (Colemak, Dvorak, etc)
+`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
+
+### Remember: These are just aliases
+
+These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
+
+Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
+
+## Macro shortcuts: Send a whole string when pressing just one key
+
+Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymaps/default.c).
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
+{
+  switch(id) {
+    case 0: // this would trigger when you hit a key mapped as M(0)
+      if (record->event.pressed) {
+        return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END  ); // this sends the string 'hello' when the macro executes
+      } 
+      break;
+  }
+  return MACRO_NONE;
+};
+```
+A macro can include the following commands:
+
+* I() change interval of stroke in milliseconds.
+* D() press key.
+* U() release key.
+* T() type key(press and release).
+* W() wait (milliseconds).
+* END end mark.
+
+So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
+
+Note: Using macros to have your keyboard send passwords for you is a bad idea.
+
+### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
 
 Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
 
-     #include "keymap_<layout>.h"
-     
+   #include "keymap_<layout>.h"
+
 Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
  
  * `CM_*` for all of the Colemak-equivalent characters
@@ -79,19 +132,15 @@ These implementations assume you're using Colemak or Dvorak on your OS, not on y
 
 To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
 
-### Additional language support
+## Additional language support
 
-In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbrivation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
+In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
 
-### Unicode support
+## Unicode support
 
 You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
 
-### Macro shortcuts
-
-Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to filter them. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
-
-### Other keyboard shortcut keycodes
+## Other firmware shortcut keycodes
 
 * `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
 * `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
@@ -105,12 +154,11 @@ Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to acces
 
 Enable the backlight from the Makefile.
 
-
-### MIDI functionalty
+## MIDI functionalty
 
 This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
 
-### Bluetooth functionality
+## Bluetooth functionality
 
 This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
 
@@ -124,13 +172,13 @@ Depending on which keymap you would like to use, you will have to compile slight
 To build with the default keymap, simply run `make`.
 
 ### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
 
 To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
 ```
 $ make KEYMAP=[default|jack|<name>]
 ```
-Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
+Keymaps follow the format **__<name\>.c__** and are stored in the `keymaps` folder.
 
 ### Notable forks (which some of the keymap files are from)
 - [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
diff --git a/keyboard/planck/keymaps/keymap_alexey.c b/keyboard/planck/keymaps/alexey.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_alexey.c
rename to keyboard/planck/keymaps/alexey.c
diff --git a/keyboard/planck/keymaps/keymap_angerthosenear.c b/keyboard/planck/keymaps/angerthosenear.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_angerthosenear.c
rename to keyboard/planck/keymaps/angerthosenear.c
diff --git a/keyboard/planck/keymaps/keymap_austin.c b/keyboard/planck/keymaps/austin.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_austin.c
rename to keyboard/planck/keymaps/austin.c
diff --git a/keyboard/planck/keymaps/keymap_charlie.c b/keyboard/planck/keymaps/charlie.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_charlie.c
rename to keyboard/planck/keymaps/charlie.c
diff --git a/keyboard/planck/keymaps/keymap_daniel.c b/keyboard/planck/keymaps/daniel.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_daniel.c
rename to keyboard/planck/keymaps/daniel.c
diff --git a/keyboard/planck/keymaps/keymap_david.c b/keyboard/planck/keymaps/david.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_david.c
rename to keyboard/planck/keymaps/david.c
diff --git a/keyboard/planck/keymaps/keymap_default.c b/keyboard/planck/keymaps/default.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_default.c
rename to keyboard/planck/keymaps/default.c
diff --git a/keyboard/planck/keymaps/keymap_dzobert.c b/keyboard/planck/keymaps/dzobert.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_dzobert.c
rename to keyboard/planck/keymaps/dzobert.c
diff --git a/keyboard/planck/keymaps/keymap_gabriel.c b/keyboard/planck/keymaps/gabriel.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_gabriel.c
rename to keyboard/planck/keymaps/gabriel.c
diff --git a/keyboard/planck/keymaps/keymap_jack.c b/keyboard/planck/keymaps/jack.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_jack.c
rename to keyboard/planck/keymaps/jack.c
diff --git a/keyboard/planck/keymaps/keymap_joe.c b/keyboard/planck/keymaps/joe.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_joe.c
rename to keyboard/planck/keymaps/joe.c
diff --git a/keyboard/planck/keymaps/keymap_kyle.c b/keyboard/planck/keymaps/kyle.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_kyle.c
rename to keyboard/planck/keymaps/kyle.c
diff --git a/keyboard/planck/keymaps/keymap_leo.c b/keyboard/planck/keymaps/leo.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_leo.c
rename to keyboard/planck/keymaps/leo.c
diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/lock.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_lock.c
rename to keyboard/planck/keymaps/lock.c
diff --git a/keyboard/planck/keymaps/keymap_max.c b/keyboard/planck/keymaps/max.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_max.c
rename to keyboard/planck/keymaps/max.c
diff --git a/keyboard/planck/keymaps/keymap_monkey.c b/keyboard/planck/keymaps/monkey.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_monkey.c
rename to keyboard/planck/keymaps/monkey.c
diff --git a/keyboard/planck/keymaps/keymap_numpad.c b/keyboard/planck/keymaps/numpad.c
similarity index 100%
rename from keyboard/planck/keymaps/keymap_numpad.c
rename to keyboard/planck/keymaps/numpad.c
diff --git a/keyboard/planck/keymaps/test/default.c b/keyboard/planck/keymaps/test/default.c
new file mode 100644
index 000000000..bc81adcf9
--- /dev/null
+++ b/keyboard/planck/keymaps/test/default.c
@@ -0,0 +1,123 @@
+// USING_MIDI
+// USING_BACKLIGHT
+#include "keymap_common.h"
+#include "backlight.h"
+#include "action_layer.h"
+#include "keymap_midi.h"
+#include <avr/boot.h>
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,   KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,  KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT},
+  {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2),    KC_SPC,   KC_SPC,    FUNC(1),   KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT}
+                                                // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,     KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT},
+  {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2),    KC_SPC,   KC_SPC,    FUNC(1),   KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT}
+},
+[2] = { /* RAISE */
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {KC_TRNS, KC_F11,  KC_F12,  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,  FUNC(1),   KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+  {S(KC_GRV),  S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    S(KC_9),    S(KC_0), KC_BSPC},
+  {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL),  S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+  {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS},
+  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2),   KC_TRNS,   KC_TRNS,   KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[4] = { /* TENKEY */
+  {KC_TAB,  N_C5, N_D5, N_E5, N_F5, N_G5, N_A5,    KC_KP_7,    KC_KP_8,    KC_KP_9,    KC_P,   KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_KP_4,    KC_KP_5,    KC_KP_6,    KC_SCLN,  KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_KP_1,    KC_KP_2,    KC_KP_3,  KC_SLSH, KC_ENT},
+  {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS,    KC_SPC,   KC_SPC, KC_KP_0,   KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT}
+},
+[5] = {
+  { MIDI12 },
+  { MIDI12 },
+  { MIDI12 },
+  {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,    KC_SPC,   KC_SPC,    FUNC(1),   MIDI, MIDI, MIDI,  MIDI}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_MOMENTARY(2),  // to RAISE
+    [2] = ACTION_LAYER_MOMENTARY(3),  // to LOWER
+
+    [3] = ACTION_DEFAULT_LAYER_SET(0),
+    [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+uint16_t hextokeycode(int hex) {
+    if (hex == 0x0) {
+        return KC_0;
+    } else if (hex < 0xA) {
+        return KC_1 + (hex - 0x1);
+    } else {
+        return KC_A + (hex - 0xA);
+    }
+}
+
+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) {
+          // play_note(440, 20);
+          // register_code(KC_RSFT);
+          backlight_set(BACKLIGHT_LEVELS);
+          default_layer_and(0); 
+          default_layer_or((1<<5));
+
+          // uint8_t low = boot_lock_fuse_bits_get(0x0000);
+          // uint8_t high = boot_lock_fuse_bits_get(0x0003);
+          // uint8_t ext = boot_lock_fuse_bits_get(0x0002);
+          // uint8_t lock = boot_lock_fuse_bits_get(0x0001);
+
+          // register_code(hextokeycode((low & 0xF0) >> 4));
+          // unregister_code(hextokeycode((low & 0xF0) >> 4));
+          // register_code(hextokeycode((low & 0x0F)));
+          // unregister_code(hextokeycode((low & 0x0F)));
+
+
+          // register_code(hextokeycode((high & 0xF0) >> 4));
+          // unregister_code(hextokeycode((high & 0xF0) >> 4));
+          // register_code(hextokeycode((high & 0x0F)));
+          // unregister_code(hextokeycode((high & 0x0F)));
+
+
+          // register_code(hextokeycode((ext & 0xF0) >> 4));
+          // unregister_code(hextokeycode((ext & 0xF0) >> 4));
+          // register_code(hextokeycode((ext & 0x0F)));
+          // unregister_code(hextokeycode((ext & 0x0F)));
+
+
+          // register_code(hextokeycode((lock & 0xF0) >> 4));
+          // unregister_code(hextokeycode((lock & 0xF0) >> 4));
+          // register_code(hextokeycode((lock & 0x0F)));
+          // unregister_code(hextokeycode((lock & 0x0F)));
+
+          // note(0+12, 20);
+          // note(0+24, 20);
+        } else {
+          // unregister_code(KC_RSFT);
+          // stop_note();
+          backlight_set(0);
+          default_layer_and(0); 
+          default_layer_or(0);
+          // note(0+24, 20);
+          // note(0, 20);
+          // play_note(4, 20);
+        }
+        break;
+      } 
+    return MACRO_NONE;
+};
diff --git a/quantum/quantum.mk b/quantum/quantum.mk
index 62d67be9f..3a968a145 100644
--- a/quantum/quantum.mk
+++ b/quantum/quantum.mk
@@ -4,18 +4,18 @@ QUANTUM_DIR = quantum
 SRC += $(QUANTUM_DIR)/keymap_common.c \
 	$(QUANTUM_DIR)/led.c 
 
-ifdef KEYMAP
-ifneq (,$(shell grep USING_MIDI 'keymaps/keymap_$(KEYMAP).c'))
+ifdef KEYMAP_FILE
+ifneq (,$(shell grep USING_MIDI '$(KEYMAP_FILE)'))
 MIDI_ENABLE=yes
-$(info  * Overriding MIDI_ENABLE setting - keymap_$(KEYMAP).c requires it)
+$(info  * Overriding MIDI_ENABLE setting - $(KEYMAP_FILE) requires it)
 endif
-ifneq (,$(shell grep USING_UNICODE 'keymaps/keymap_$(KEYMAP).c'))
+ifneq (,$(shell grep USING_UNICODE '$(KEYMAP_FILE)'))
 UNICODE_ENABLE=yes
-$(info  * Overriding UNICODE_ENABLE setting - keymap_$(KEYMAP).c requires it)
+$(info  * Overriding UNICODE_ENABLE setting - $(KEYMAP_FILE) requires it)
 endif
-ifneq (,$(shell grep USING_BACKLIGHT 'keymaps/keymap_$(KEYMAP).c'))
+ifneq (,$(shell grep USING_BACKLIGHT '$(KEYMAP_FILE)'))
 BACKLIGHT_ENABLE=yes
-$(info  * Overriding BACKLIGHT_ENABLE setting - keymap_$(KEYMAP).c requires it)
+$(info  * Overriding BACKLIGHT_ENABLE setting - $(KEYMAP_FILE) requires it)
 endif
 endif