diff --git a/keyboards/dumbpad/config.h b/keyboards/dumbpad/config.h
index a7d4e7b3c8..3c27a35b28 100644
--- a/keyboards/dumbpad/config.h
+++ b/keyboards/dumbpad/config.h
@@ -51,6 +51,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define ENCODERS_PAD_A { D0 }
 #define ENCODERS_PAD_B { D4 }
 
+/* LED layer indicators */
+#define LAYER_INDICATOR_LED_0 B3
+#define LAYER_INDICATOR_LED_1 B1
+
 /* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */
 #define BOOTMAGIC_LITE_ROW 3
 #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/dumbpad/dumbpad.c b/keyboards/dumbpad/dumbpad.c
index b53856237c..d9b649c715 100644
--- a/keyboards/dumbpad/dumbpad.c
+++ b/keyboards/dumbpad/dumbpad.c
@@ -15,15 +15,49 @@
  */
 #include "dumbpad.h"
 
+void keyboard_pre_init_kb(void) {
+  // Set the layer LED IO as outputs
+  setPinOutput(LAYER_INDICATOR_LED_0);
+  setPinOutput(LAYER_INDICATOR_LED_1);
+  
+  keyboard_pre_init_user();
+}
+
+void shutdown_user() {
+  // Shutdown the layer LEDs
+  writePinLow(LAYER_INDICATOR_LED_0);
+  writePinLow(LAYER_INDICATOR_LED_1);
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+  // Layer LEDs act as binary indication of current layer
+  uint8_t layer = biton32(state);
+  writePin(LAYER_INDICATOR_LED_0, layer & 0b1);
+  writePin(LAYER_INDICATOR_LED_1, (layer >> 1) & 0b1);
+  return layer_state_set_user(state);
+}
+
 // Optional override functions below.
 // You can leave any or all of these undefined.
 // These are only required if you want to perform custom actions.
 
-/*
-
 void matrix_init_kb(void) {
   // put your keyboard start-up code here
   // runs once when the firmware starts up
+  for (int i = 0; i < 2; i++) {
+    writePin(LAYER_INDICATOR_LED_0, true);
+    writePin(LAYER_INDICATOR_LED_1, false);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, true);
+    writePin(LAYER_INDICATOR_LED_1, true);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, false);
+    writePin(LAYER_INDICATOR_LED_1, true);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, false);
+    writePin(LAYER_INDICATOR_LED_1, false);
+    wait_ms(100);
+  }
 
   matrix_init_user();
 }
@@ -47,5 +81,3 @@ void led_set_kb(uint8_t usb_led) {
 
   led_set_user(usb_led);
 }
-
-*/
diff --git a/keyboards/dumbpad/keymaps/default/config.h b/keyboards/dumbpad/keymaps/default/config.h
new file mode 100644
index 0000000000..8380885593
--- /dev/null
+++ b/keyboards/dumbpad/keymaps/default/config.h
@@ -0,0 +1,2 @@
+#pragma once
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/dumbpad/keymaps/default/keymap.c b/keyboards/dumbpad/keymaps/default/keymap.c
index 061215a61b..c0d4a7c077 100644
--- a/keyboards/dumbpad/keymaps/default/keymap.c
+++ b/keyboards/dumbpad/keymaps/default/keymap.c
@@ -28,14 +28,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    |             |---------|---------|---------|---------|
    |             |    1    |    2    |    3    |   Tab   |
    |-------------|---------|---------|---------|---------|
-   | Left mouse  | MO(SUB) |    0    |    .    |  Enter  |
+   | Left mouse  | TT(SUB) |    0    |    .    |  Enter  |
    \-----------------------------------------------------'
   */
-  [_BASE] = LAYOUT( /* Base */
+  [_BASE] = LAYOUT(
                    KC_7,      KC_8,    KC_9,     KC_BSPC, 
                    KC_4,      KC_5,    KC_6,     KC_ESC, 
                    KC_1,      KC_2,    KC_3,     KC_TAB, 
-    KC_BTN1,       MO(_SUB),  KC_0,    KC_DOT,   KC_ENTER
+    KC_BTN1,       TT(_SUB),  KC_0,    KC_DOT,   KC_ENTER
   ),
   /*
         SUB LAYER
@@ -88,19 +88,34 @@ void led_set_user(uint8_t usb_led) {
 }
 
 void encoder_update_user(uint8_t index, bool clockwise) {
+  /*  Custom encoder control - handles CW/CCW turning of encoder
+   *  Default behavior:
+   *    main layer:
+   *       CW: move mouse right
+   *      CCW: move mouse left
+   *    other layers:
+   *       CW: = (equals/plus - increase slider in Adobe products)
+   *      CCW: - (minus/underscore - decrease slider in adobe products)
+   */
   if (index == 0) {
-    if (layer_state && 0x1) {
-      if (clockwise) {
-        tap_code(KC_VOLU);
-      } else {
-        tap_code(KC_VOLD);
-      }
-    } else {
-      if (clockwise) {
-        tap_code(KC_MS_R);
-      } else {
-        tap_code(KC_MS_L);
-      }
+    switch (biton32(layer_state)) {
+      case _BASE:
+        // main layer - move mouse right (CW) and left (CCW)
+        if (clockwise) {
+          tap_code(KC_MS_R);
+        } else {
+          tap_code(KC_MS_L);
+        }
+        break;
+
+      default:
+        // other layers - =/+ (quals/plus) (CW) and -/_ (minus/underscore) (CCW)
+        if (clockwise) {
+          tap_code(KC_EQL);
+        } else {
+          tap_code(KC_MINS);
+        }
+        break;
     }
   }
 }
diff --git a/keyboards/dumbpad/keymaps/imchipwood/config.h b/keyboards/dumbpad/keymaps/imchipwood/config.h
new file mode 100644
index 0000000000..8380885593
--- /dev/null
+++ b/keyboards/dumbpad/keymaps/imchipwood/config.h
@@ -0,0 +1,2 @@
+#pragma once
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/dumbpad/keymaps/imchipwood/keymap.c b/keyboards/dumbpad/keymaps/imchipwood/keymap.c
new file mode 100644
index 0000000000..73a8e824ca
--- /dev/null
+++ b/keyboards/dumbpad/keymaps/imchipwood/keymap.c
@@ -0,0 +1,163 @@
+/* Copyright 2019 imchipwood
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#define _BASE     0
+#define _SUB      1
+#define _DBG      2
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /*
+        BASE LAYER
+   /-----------------------------------------------------`
+   |             |    7    |    8    |    9    |  Bkspc  |
+   |             |---------|---------|---------|---------|
+   |             |    4    |    5    |    6    |    +    |
+   |             |---------|---------|---------|---------|
+   |             |    1    |    2    |    3    |    *    |
+   |-------------|---------|---------|---------|---------|
+   | Play/Pause  | TT(SUB) |    0    |    .    |  Enter  |
+   \-----------------------------------------------------'
+  */
+  [_BASE] = LAYOUT(
+                   KC_P7,     KC_P8,   KC_P9,    KC_BSPC, 
+                   KC_P4,     KC_P5,   KC_P6,    KC_KP_PLUS, 
+                   KC_P1,     KC_P2,   KC_P3,    KC_KP_ASTERISK, 
+    KC_MPLY,       TT(_SUB),  KC_P0,   KC_PDOT,  KC_KP_ENTER
+  ),
+  /*
+        SUB LAYER
+   /-----------------------------------------------------`
+   |             |         |         |         | Numlock |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |    -    |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |    /    |
+   |-------------|---------|---------|---------|---------|
+   |  MO(_DBG)   |         |         |         |    =    |
+   \-----------------------------------------------------'
+  */
+  [_SUB] = LAYOUT(
+                 _______,     _______,     _______,      KC_NLCK, 
+                 _______,     _______,     _______,      KC_KP_MINUS, 
+                 _______,     _______,     _______,      KC_KP_SLASH, 
+    MO(_DBG),    _______,     _______,     _______,      KC_KP_EQUAL
+  ),
+  /*
+        DEBUG LAYER
+   /-----------------------------------------------------`
+   |             |         |         |         |  Reset  |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |         |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |         |
+   |-------------|---------|---------|---------|---------|
+   |             |         |         |         |         |
+   \-----------------------------------------------------'
+  */
+  [_DBG] = LAYOUT(
+                 _______,     _______,     _______,      RESET, 
+                 _______,     _______,     _______,      _______, 
+                 _______,     _______,     _______,      _______, 
+    _______,     _______,     _______,     _______,      _______
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  // If console is enabled, it will print the matrix position and status of each key pressed
+/*
+#ifdef CONSOLE_ENABLE
+    uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+#endif 
+*/
+  return true;
+}
+
+void keyboard_post_init_user(void) {
+  // Customise these values to desired behaviour
+  //debug_enable = true;
+  //debug_matrix = true;
+  //debug_keyboard = true;
+  //debug_mouse = true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+  /*  Custom encoder control - handles CW/CCW turning of encoder
+   *  Cusotom behavior:
+   *    main layer:
+   *       CW: volume up
+   *      CCW: volume down
+   *    sub layer:
+   *       CW: next media track
+   *      CCW: prev media track
+   *    debug layer:
+   *       CW: brightness up
+   *      CCW: brightness down
+   */
+  if (index == 0) {
+    switch (biton32(layer_state)) {
+      case _BASE:
+        // main layer - volume up (CW) and down (CCW)
+        if (clockwise) {
+          tap_code(KC_VOLU);
+        } else {
+          tap_code(KC_VOLD);
+        }
+        break;
+
+      case _SUB:
+        // sub layer - next track (CW) and previous track (CCW)
+        if (clockwise) {
+          tap_code(KC_MNXT);
+        } else {
+          tap_code(KC_MPRV);
+        }
+        break;
+
+      case _DBG:
+        // debug layer - brightness up (CW) and brightness down (CCW)
+        if (clockwise) {
+          tap_code(KC_BRIU);
+        } else {
+          tap_code(KC_BRID);
+        }
+        break;
+
+      default:
+        // any other layer (shouldn't exist..) - volume up (CW) and down (CCW)
+        if (clockwise) {
+          tap_code(KC_VOLU);
+        } else {
+          tap_code(KC_VOLD);
+        }
+        break;   
+    }
+  }
+}