diff --git a/mesh_extra_tools/__init__.py b/mesh_extra_tools/__init__.py
index 096206eaff9fa65270204a8f6cd82785d0208e84..4e861a6e6e6beaff654c75c8f4b00e8f3c67eef2 100644
--- a/mesh_extra_tools/__init__.py
+++ b/mesh_extra_tools/__init__.py
@@ -24,8 +24,8 @@
 bl_info = {
     "name": "Edit Tools 2",
     "author": "meta-androcto",
-    "version": (0, 3, 1),
-    "blender": (2, 77, 0),
+    "version": (0, 3, 2),
+    "blender": (2, 78, 0),
     "location": "View3D > Toolshelf > Tools and Specials (W-key)",
     "description": "Extra mesh edit tools - modifying meshes and selection",
     "warning": "",
diff --git a/mesh_extra_tools/mesh_pen_tool.py b/mesh_extra_tools/mesh_pen_tool.py
index 704ebc30bef011ab55d9f96c87963a546a4820f0..d0853088fb707028bcb316b47526b93168bfddcc 100644
--- a/mesh_extra_tools/mesh_pen_tool.py
+++ b/mesh_extra_tools/mesh_pen_tool.py
@@ -21,8 +21,8 @@
 bl_info = {
     "name": "Pen Tool",
     "author": "zmj100",
-    "version": (0, 2, 8),
-    "blender": (2, 6, 5),
+    "version": (0, 2, 9),
+    "blender": (2, 78, 0),
     "location": "View3D > Tool Shelf",
     "description": "",
     "warning": "",
@@ -32,6 +32,7 @@ bl_info = {
     }
 
 import bpy
+import bpy_extras
 import blf
 import bgl
 import bmesh
@@ -522,7 +523,15 @@ class_list = [pen_tool_panel,
              ]
 
 
-addon_keymaps = []
+KEYMAPS = (
+    # First, keymap identifiers (last bool is True for modal km).
+    (("3D View", "VIEW_3D", "WINDOW", False), (
+    # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val)
+    # for ops properties, if needing non-default values.
+        ({"idname": pen_tool_operator.bl_idname, "type": 'D', "value": 'PRESS', "ctrl": True},
+         ()),
+    )),
+)
 
 
 def register():
@@ -531,21 +540,11 @@ def register():
 
     bpy.types.Scene.pen_tool_props = PointerProperty(type=pen_tool_properties)
 
-    wm = bpy.context.window_manager
-    km = wm.keyconfigs.addon.keymaps.new(name='3D View', space_type='VIEW_3D')
-
-    # Note: left click + D key is reserved for Grease Pencil draw
-    kmi = km.keymap_items.new("pen_tool.operator", 'D', 'PRESS', ctrl=True)
-    addon_keymaps.append((km, kmi))
+    bpy_extras.keyconfig_utils.addon_keymap_register(bpy.context.window_manager, KEYMAPS)
 
 
 def unregister():
-    wm = bpy.context.window_manager
-    kc = wm.keyconfigs.addon
-    if kc:
-        for km, kmi in addon_keymaps:
-            km.keymap_items.remove(kmi)
-    addon_keymaps.clear()
+    bpy_extras.keyconfig_utils.addon_keymap_unregister(bpy.context.window_manager, KEYMAPS)
 
     del bpy.types.Scene.pen_tool_props
 
diff --git a/mesh_extra_tools/vfe_specials.py b/mesh_extra_tools/vfe_specials.py
index 99536c0adbbcd3dc62035ff6eb2195cd818d8416..da451e66ddd6e4075d095b571452e39bcf4df09b 100644
--- a/mesh_extra_tools/vfe_specials.py
+++ b/mesh_extra_tools/vfe_specials.py
@@ -3,13 +3,15 @@
 bl_info = {
     "name": "V/E/F Context Menu",
     "author": "Stanislav Blinov",
-    "version": (1, 0, 0),
-    "blender": (2, 74, 0),
+    "version": (1, 0, 1),
+    "blender": (2, 78, 0),
     "description": "Vert Edge Face Double Right Click Edit Mode",
     "category": "Mesh",
 }
 
 import bpy
+import bpy_extras
+
 from bpy.types import (
         Menu,
         Operator,
@@ -63,32 +65,31 @@ classes = [
     MESH_OT_CallContextMenu
 ]
 
-addon_keymaps = []
+
+KEYMAPS = (
+    # First, keymap identifiers (last bool is True for modal km).
+    (("3D View", "VIEW_3D", "WINDOW", False), (
+    # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val)
+    # for ops properties, if needing non-default values.
+        ({"idname": MESH_OT_CallContextMenu.bl_idname, "type": 'RIGHTMOUSE', "value": 'DOUBLE_CLICK'},
+         ()),
+    )),
+)
 
 
 def register():
     for cls in classes:
         bpy.utils.register_class(cls)
 
-    wm = bpy.context.window_manager
-    if wm.keyconfigs.addon:
-        km = wm.keyconfigs.addon.keymaps.new(name='3D View', space_type='VIEW_3D')
-        kmi = km.keymap_items.new('mesh.addon_call_context_menu', 'RIGHTMOUSE', 'DOUBLE_CLICK')
-        addon_keymaps.append((km, kmi))
+    bpy_extras.keyconfig_utils.addon_keymap_register(bpy.context.window_manager, KEYMAPS)
 
 
 def unregister():
-    wm = bpy.context.window_manager
-    kc = wm.keyconfigs.addon
-    if kc:
-        for km, kmi in addon_keymaps:
-            km.keymap_items.remove(kmi)
-    addon_keymaps.clear()
+    bpy_extras.keyconfig_utils.addon_keymap_unregister(bpy.context.window_manager, KEYMAPS)
 
     for cls in classes:
         bpy.utils.unregister_class(cls)
 
 
-
 if __name__ == "__main__":
     register()