diff --git a/space_view3d_spacebar_menu.py b/space_view3d_spacebar_menu.py
new file mode 100644
index 0000000000000000000000000000000000000000..eee13f40e363b2d71a4a397e37a8e1f8276c2632
--- /dev/null
+++ b/space_view3d_spacebar_menu.py
@@ -0,0 +1,1259 @@
+#3d_cursor_menu.py (c) 2010 Jonathan Smith (JayDez)
+#Original Script by: Mariano Hidalgo (uselessdreamer)
+#contributed to by: Crouch, sim88, sam, meta-androcto
+#
+#Tested with r28146
+#
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  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, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_addon_info = {
+    'name': '3D View: Dynamic Spacebar Menu',
+    'author': 'JayDez, sim88, meta-androcto',
+    'version': '1.3',
+    'blender': (2, 5, 3),
+    'location': 'View3D > Mouse > Menu ',
+    'description': 'Dynamic Menu Object/Edit mode in the 3D View',
+    'url': 'http://wiki.blender.org/index.php/Extensions:2.5/Py/' \
+        'Scripts/3D_interaction/Dynamic_Menu',
+    'category': '3D View'}
+"Add Dynamic Menu (Right click in View3D)"
+
+"""
+Name: 'Dynamic Spacebar Menu'
+Blender: 253
+"""
+
+__author__ = ["JayDez, sim88, meta-androcto, sam"]
+__version__ = '1.5'
+__url__ = [""]
+__bpydoc__ = """
+Dynamic Menu
+This adds a the Dynamic Spacebar Menu in the 3DView.
+
+Usage:
+* Right click in an empty space in the 3D View(that means nothing
+selectable is there). If your select mouse is set to left then left
+click in the 3D View.
+
+* Choose your function from the menu.
+
+Version history:
+v1.5 - (meta-androcto) - adding context sensitive menus.
+v1.3 - (JayDez) - Changed toggle editmode to an if statement, so that
+    if you are in editmode it will show change to object mode but
+    otherwise it shows change to edit mode. Also added separate icons
+    for change to edit mode and to object mode.
+v1.2 - (JayDez) - Editing docs, changing 3D cursor to dynamic menu,
+    reorganizing menu.
+v1.1 - (meta-androcto) - added editmode menu
+v1.0 - (meta-androcto) - initial final revision (commited to contrib)
+v0.1 through 0.9 - various tests/contributions by various people and scripts
+    Devs: JayDez, Crouch, sim88, meta-androcto, Sam
+    Scripts: 3D Cursor Menu, Original Dynamic Menu
+"""
+import bpy
+from bpy import *
+
+
+# Classes for VIEW3D_MT_CursorMenu()
+class pivot_cursor(bpy.types.Operator):
+    bl_idname = "view3d.pivot_cursor"
+    bl_label = "Cursor as Pivot Point"
+
+    def poll(self, context):
+        return bpy.context.space_data.pivot_point != 'CURSOR'
+
+    def execute(self, context):
+        bpy.context.space_data.pivot_point = 'CURSOR'
+        return {'FINISHED'}
+
+
+class revert_pivot(bpy.types.Operator):
+    bl_idname = "view3d.revert_pivot"
+    bl_label = "Reverts Pivot Point to median"
+
+    def poll(self, context):
+        return bpy.context.space_data.pivot_point != 'MEDIAN_POINT'
+
+    def execute(self, context):
+        bpy.context.space_data.pivot_point = 'MEDIAN_POINT'
+        # @todo Change this to 'BOUDNING_BOX_CENTER' if needed...
+        return{'FINISHED'}
+
+
+# Dynamic Menu
+class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
+    bl_label = "Dynamic Spacebar Menu"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = context.tool_settings
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        ob = context
+        if ob.mode == 'OBJECT':
+            # Object mode
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+            layout.separator()
+
+            # Add Menu block
+            layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
+            layout.separator()
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Parent block
+            layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
+
+            # Group block
+            layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            layout.separator()
+
+            # Modifier block
+            layout.operator("object.modifier_add", icon='MODIFIER')
+            layout.separator()
+
+            # Cursor Block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Align block
+            layout.menu("VIEW3D_MT_AlignMenu", icon='ALIGN')
+            layout.separator()
+
+            # Select block
+            layout.menu("VIEW3D_MT_SelectMenu", icon='RESTRICT_SELECT_OFF')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Editmode
+            layout.operator("object.editmode_toggle", text="Enter Edit Mode",
+                icon='EDITMODE_HLT')
+
+            # Delete block
+            layout.operator("object.delete", text="Delete Object",
+                icon='CANCEL')
+
+
+
+        elif ob.mode == 'EDIT_MESH':
+            # Edit mode
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Add block
+            bl_label = "Create"
+            layout.menu("INFO_MT_mesh_add", text="Add Mesh",
+                icon='EDITMODE_HLT')
+            layout.separator()
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Edit block
+            layout.menu("VIEW3D_MT_edit_TK", icon='OUTLINER_OB_MESH')
+            layout.separator()
+
+            # Extrude block
+            layout.menu("VIEW3D_MT_edit_mesh_extrude", icon='EDITMODE_HLT')
+            layout.separator()
+
+            # Tools block
+            layout.menu("VIEW3D_MT_edit_mesh_specials", icon='MODIFIER')
+            layout.menu("VIEW3D_MT_uv_map", icon='MOD_UVPROJECT')
+			
+            # Select block
+            layout.menu("VIEW3D_MT_SelectMenu", icon='RESTRICT_SELECT_OFF')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Object Mode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATAMODE')
+
+            # Delete Block
+            layout.operator("mesh.delete", icon='CANCEL')
+
+        if ob.mode == 'EDIT_CURVE':
+            # Curve menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Proportional block
+            layout.prop_menu_enum(settings, "proportional_editing", icon= "PROP_CON")
+            layout.prop_menu_enum(settings, "proportional_editing_falloff", icon= "SMOOTHCURVE")
+            layout.separator()
+
+            # Edit Control Points
+            layout.menu("VIEW3D_MT_EditCurveCtrlpoints",
+                icon='CURVE_BEZCURVE')
+            layout.separator()
+
+            # Edit Curve Specials
+            layout.menu("VIEW3D_MT_EditCurveSpecials",
+                icon='MODIFIER')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+			# Select Curve Block
+            layout.menu("VIEW3D_MT_SelectCurveMenu", icon='RESTRICT_SELECT_OFF')
+            layout.separator()
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+            # Delete block
+            layout.operator("object.delete", text="Delete Object",
+                icon='CANCEL')
+
+        if ob.mode == 'EDIT_SURFACE':
+            # Surface menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Proportional block
+            layout.prop_menu_enum(settings, "proportional_editing", icon= "PROP_CON")
+            layout.prop_menu_enum(settings, "proportional_editing_falloff", icon= "SMOOTHCURVE")
+
+            # Edit Curve Specials
+            layout.menu("VIEW3D_MT_EditCurveSpecials",
+                icon='MODIFIER')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Select Surface
+            layout.menu("VIEW3D_MT_SelectSurface", icon='RESTRICT_SELECT_OFF')
+            layout.separator()
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+            # Delete block
+            layout.operator("object.delete", text="Delete Object",
+                icon='CANCEL')
+
+        if ob.mode == 'EDIT_METABALL':
+            # Metaball menu
+
+            #Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Proportional block
+            layout.prop_menu_enum(settings, "proportional_editing", icon= "PROP_CON")
+            layout.prop_menu_enum(settings, "proportional_editing_falloff", icon= "SMOOTHCURVE")
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            #Select Metaball
+            layout.menu("VIEW3D_MT_SelectMetaball", icon='RESTRICT_SELECT_OFF')
+            layout.separator()
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+            # Delete block
+            layout.operator("object.delete", text="Delete Object",
+                icon='CANCEL')
+
+        ob = context
+        if ob.mode == 'PAINT_WEIGHT':
+            # Weight paint menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Weight Paint block
+            layout.menu("VIEW3D_MT_paint_weight", icon='WPAINT_HLT')
+            layout.separator()
+
+            # History/Cursor Block
+            layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+
+
+        elif ob.mode == 'PAINT_VERTEX':
+            # Vertex paint menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Vertex Paint block
+            layout.operator("paint.vertex_color_set", icon='VPAINT_HLT')
+            layout.separator()
+
+            # History/Cursor Block
+            layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+        elif ob.mode == 'PAINT_TEXTURE':
+            # Texture paint menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # History/Cursor Block
+            layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+        elif ob.mode == 'SCULPT':
+            # Sculpt menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Sculpt block
+            layout.menu("VIEW3D_MT_sculpt", icon='SCULPTMODE_HLT')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # History/Cursor Block
+            layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
+
+            # Toolshelf block
+            layout.operator("view3d.toolshelf", icon='MENU_PANEL')
+            layout.separator()
+
+            # Toggle Editmode
+            layout.operator("object.editmode_toggle", text="Enter Edit Mode",
+                icon='EDITMODE_HLT')
+
+            # Toggle Objectmode
+            layout.operator("object.editmode_toggle", text="Enter Object Mode",
+                icon='OBJECT_DATA')
+
+        elif ob.mode == 'EDIT_ARMATURE':
+            # Armature menu
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform block
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+            layout.separator()
+
+            # Mirror block
+            layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
+            layout.separator()
+
+            # Cursor block
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+            # Edit Armature roll
+            layout.menu("VIEW3D_MT_edit_armature_roll",
+			    icon='BONE_DATA')
+            layout.separator()
+
+            # Edit Armature Toolkit
+            layout.menu("VIEW3D_MT_EditArmatureTK",
+			    icon='ARMATURE_DATA')
+            layout.separator()
+
+            # Edit Armature Name
+            layout.menu("VIEW3D_MT_ArmatureName",
+			    icon='NEW')
+            layout.separator()
+ 
+            # Parent block
+            layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
+
+            layout.separator()
+            layout.operator_menu_enum("armature.flags_set", "mode", text="Bone Settings")
+
+            # Edit Armature Select
+            layout.menu("VIEW3D_MT_SelectArmatureMenu",
+                icon='RESTRICT_SELECT_OFF')
+            layout.separator()
+
+            # Edit Armature Specials
+            layout.menu("VIEW3D_MT_armature_specials", icon='MODIFIER')
+            layout.separator()
+
+            # Delete block
+            layout.operator("object.delete", text="Delete Object",
+                icon='CANCEL')
+
+            # Toggle Posemode
+            layout.operator("object.posemode_toggle", text="Enter Pose Mode",
+                icon='EDITMODE_HLT')
+
+        if context.mode == 'POSE':
+            # Pose mode menu
+            arm = context.active_object.data
+
+            # Search Menu
+            layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
+
+            # Transform Menu
+            layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
+
+			# Clear Transform
+            layout.menu("VIEW3D_MT_pose_transform")
+
+			# Cursor Menu
+            layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            layout.separator()
+
+			# Select Pose Block
+            layout.menu("VIEW3D_MT_SelectPoseMenu", icon='RESTRICT_SELECT_OFF')
+            layout.separator()
+
+			# Pose Copy Block
+            layout.menu("VIEW3D_MT_PoseCopy", icon='FILE')
+            layout.separator()
+			
+
+            if arm.drawtype in ('BBONE', 'ENVELOPE'):
+                layout.operator("transform.transform",
+                    text="Scale Envelope Distance").mode = 'BONESIZE'
+
+            layout.menu("VIEW3D_MT_pose_apply")
+            layout.separator()
+
+            layout.operator("pose.relax")
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_KeyframeMenu")
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_pose_pose")
+            layout.menu("VIEW3D_MT_pose_motion")
+            layout.menu("VIEW3D_MT_pose_group")
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_pose_ik")
+            layout.menu("VIEW3D_MT_PoseNames")
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_pose_constraints")
+            layout.separator()
+
+
+
+            layout.operator("pose.quaternions_flip")
+            layout.separator()
+
+            layout.operator_context = 'INVOKE_AREA'
+            layout.operator("pose.armature_layers",
+                text="Change Armature Layers...")
+            layout.operator("pose.bone_layers", text="Change Bone Layers...")
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_pose_showhide")
+            layout.operator_menu_enum("pose.flags_set", 'mode',
+                text="Bone Settings")
+
+            # Toggle Editmode
+            layout.operator("object.editmode_toggle", text="Enter Edit Mode",
+                icon='EDITMODE_HLT')
+
+
+class VIEW3D_MT_AddMenu(bpy.types.Menu):
+    bl_label = "Add Object Menu"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        layout.menu("INFO_MT_mesh_add", text="Add Mesh",
+            icon='OUTLINER_OB_MESH')
+        layout.operator_menu_enum("object.curve_add", "type",
+            icon='OUTLINER_OB_CURVE')
+        layout.operator_menu_enum("object.surface_add", "type",
+            icon='OUTLINER_OB_SURFACE')
+        layout.operator_menu_enum("object.metaball_add", "type",
+            icon='OUTLINER_OB_META')
+        layout.operator("object.text_add", text="Add Text",
+            icon='OUTLINER_OB_FONT')
+        layout.separator()
+
+        layout.menu("INFO_MT_armature_add", text="Add Armature",
+            icon='OUTLINER_OB_ARMATURE')
+        #layout.operator_menu_enum("object.lattice.add", "type",
+        #    text="Lattice",
+        #    icon='OUTLINER_OB_LATTICE')
+        layout.operator("object.add", text="Add Empty",
+            icon='OUTLINER_OB_EMPTY')
+        layout.separator()
+
+        layout.operator("object.camera_add", text="Camera",
+            icon='OUTLINER_OB_CAMERA')
+        layout.operator_menu_enum("object.lamp_add", "type",
+            icon="OUTLINER_OB_LAMP")
+        layout.separator()
+
+        layout.operator_menu_enum("object.effector_add", "type",
+            text="Force Field",
+            icon='OUTLINER_OB_EMPTY')
+        layout.operator_menu_enum("object.group_instance_add", "type",
+            text="Group Instance",
+            icon='OUTLINER_OB_EMPTY')
+
+
+class VIEW3D_MT_TransformMenu(bpy.types.Menu):
+    bl_label = "Transform Menu"
+
+    # TODO: get rid of the custom text strings?
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("transform.translate", text="Grab/Move")
+        # TODO: sub-menu for grab per axis
+        layout.operator("transform.rotate", text="Rotate")
+        # TODO: sub-menu for rot per axis
+        layout.operator("transform.resize", text="Scale")
+        # TODO: sub-menu for scale per axis
+        layout.separator()
+
+        layout.operator("transform.tosphere", text="To Sphere")
+        layout.operator("transform.shear", text="Shear")
+        layout.operator("transform.warp", text="Warp")
+        layout.operator("transform.push_pull", text="Push/Pull")
+        if context.edit_object and context.edit_object.type == 'ARMATURE':
+            layout.operator("armature.align")
+        else:
+            layout.operator_context = 'EXEC_REGION_WIN'
+            # @todo vvv See alignmenu() in edit.c of b2.4x to get this working.
+            layout.operator("transform.transform",
+                text="Align to Transform Orientation").mode = 'ALIGN'
+        layout.separator()
+
+        layout.operator_context = 'EXEC_AREA'
+
+        layout.operator("object.origin_set",
+            text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
+        layout.operator("object.origin_set",
+            text="Origin to Geometry").type = 'ORIGIN_GEOMETRY'
+        layout.operator("object.origin_set",
+            text="Origin to 3D Cursor").type = 'ORIGIN_CURSOR'
+
+
+class VIEW3D_MT_MirrorMenu(bpy.types.Menu):
+    bl_label = "Mirror Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("transform.mirror", text="Interactive Mirror")
+        layout.separator()
+
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        props = layout.operator("transform.mirror", text="X Global")
+        props.constraint_axis = (True, False, False)
+        props.constraint_orientation = 'GLOBAL'
+        props = layout.operator("transform.mirror", text="Y Global")
+        props.constraint_axis = (False, True, False)
+        props.constraint_orientation = 'GLOBAL'
+        props = layout.operator("transform.mirror", text="Z Global")
+        props.constraint_axis = (False, False, True)
+        props.constraint_orientation = 'GLOBAL'
+
+        if context.edit_object:
+            layout.separator()
+
+            props = layout.operator("transform.mirror", text="X Local")
+            props.constraint_axis = (True, False, False)
+            props.constraint_orientation = 'LOCAL'
+            props = layout.operator("transform.mirror", text="Y Local")
+            props.constraint_axis = (False, True, False)
+            props.constraint_orientation = 'LOCAL'
+            props = layout.operator("transform.mirror", text="Z Local")
+            props.constraint_axis = (False, False, True)
+            props.constraint_orientation = 'LOCAL'
+
+            layout.operator("object.vertex_group_mirror")
+
+class VIEW3D_MT_ParentMenu(bpy.types.Menu):
+    bl_label = "Parent Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("object.parent_set", text="Set")
+        layout.operator("object.parent_clear", text="Clear")
+
+class VIEW3D_MT_GroupMenu(bpy.types.Menu):
+    bl_label = "Group Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("group.create")
+        layout.operator("group.objects_remove")
+
+        layout.separator()
+
+        layout.operator("group.objects_add_active")
+        layout.operator("group.objects_remove_active")
+
+class VIEW3D_MT_AlignMenu(bpy.types.Menu):
+    bl_label = "Align Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.menu("VIEW3D_MT_view_align_selected")
+
+        layout.separator()
+
+        layout.operator("view3d.view_all", text="Center Cursor and View All").center = True
+        layout.operator("view3d.camera_to_view", text="Align Active Camera to View")
+        layout.operator("view3d.view_selected")
+        layout.operator("view3d.view_center_cursor")
+
+class VIEW3D_MT_SelectMenu(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        layout.operator("view3d.select_border")
+        layout.operator("view3d.select_circle")
+        layout.separator()
+        layout.operator("object.select_all", text="Select/Deselect All")
+        layout.operator("object.select_inverse", text="Inverse")
+        layout.operator("object.select_random", text="Random")
+        layout.operator("object.select_mirror", text="Mirror")
+        layout.operator("object.select_by_layer", text="Select All by Layer")
+        layout.operator_menu_enum("object.select_by_type", "type", text="Select All by Type...")
+        layout.operator("object.select_camera", text="Select Camera")
+        layout.separator()
+        layout.operator_menu_enum("object.select_grouped", "type", text="Grouped")
+        layout.operator_menu_enum("object.select_linked", "type", text="Linked")
+        layout.operator("object.select_pattern", text="Select Pattern...")
+
+class VIEW3D_MT_SelectEditMenu(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+        layout.operator("view3d.select_circle")
+
+        layout.separator()
+
+        layout.operator("mesh.select_all", text="Select/Deselect All")
+        layout.operator("mesh.select_inverse", text="Inverse")
+
+        layout.separator()
+
+        layout.operator("mesh.select_random", text="Random")
+        layout.operator("mesh.select_nth", text="Every N Number of Verts")
+        layout.operator("mesh.edges_select_sharp", text="Sharp Edges")
+        layout.operator("mesh.faces_select_linked_flat", text="Linked Flat Faces")
+        layout.operator("mesh.faces_select_interior", text="Interior Faces")
+        layout.operator("mesh.select_axis", text="Side of Active")
+
+        layout.separator()
+
+        layout.operator("mesh.select_by_number_vertices", text="Triangles").type = 'TRIANGLES'
+        layout.operator("mesh.select_by_number_vertices", text="Quads").type = 'QUADS'
+        if context.scene.tool_settings.mesh_selection_mode[2] == False:
+                layout.operator("mesh.select_non_manifold", text="Non Manifold")
+        layout.operator("mesh.select_by_number_vertices", text="Loose Verts/Edges").type = 'OTHER'
+        layout.operator("mesh.select_similar", text="Similar")
+
+        layout.separator()
+
+        layout.operator("mesh.select_less", text="Less")
+        layout.operator("mesh.select_more", text="More")
+
+        layout.separator()
+
+        layout.operator("mesh.select_mirror", text="Mirror")
+
+        layout.operator("mesh.select_linked", text="Linked")
+        layout.operator("mesh.select_vertex_path", text="Vertex Path")
+        layout.operator("mesh.loop_multi_select", text="Edge Loop")
+        layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
+
+        layout.separator()
+
+        layout.operator("mesh.loop_to_region")
+        layout.operator("mesh.region_to_loop")
+
+class VIEW3D_MT_SelectCurveMenu(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+        layout.operator("view3d.select_circle")
+
+        layout.separator()
+
+        layout.operator("curve.select_all", text="Select/Deselect All")
+        layout.operator("curve.select_inverse")
+        layout.operator("curve.select_random")
+        layout.operator("curve.select_every_nth")
+
+        layout.separator()
+
+        layout.operator("curve.de_select_first")
+        layout.operator("curve.de_select_last")
+        layout.operator("curve.select_next")
+        layout.operator("curve.select_previous")
+
+        layout.separator()
+
+        layout.operator("curve.select_more")
+        layout.operator("curve.select_less")
+
+class VIEW3D_MT_SelectArmatureMenu(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+
+
+        layout.separator()
+
+        layout.operator("armature.select_all", text="Select/Deselect All")
+        layout.operator("armature.select_inverse", text="Inverse")
+
+        layout.separator()
+
+        layout.operator("armature.select_hierarchy", text="Parent").direction = 'PARENT'
+        layout.operator("armature.select_hierarchy", text="Child").direction = 'CHILD'
+
+        layout.separator()
+
+        props = layout.operator("armature.select_hierarchy", text="Extend Parent")
+        props.extend = True
+        props.direction = 'PARENT'
+
+        props = layout.operator("armature.select_hierarchy", text="Extend Child")
+        props.extend = True
+        props.direction = 'CHILD'
+
+        layout.operator("object.select_pattern", text="Select Pattern...")
+
+
+class VIEW3D_MT_SelectPoseMenu(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+
+        layout.separator()
+
+        layout.operator("pose.select_all", text="Select/Deselect All")
+        layout.operator("pose.select_inverse", text="Inverse")
+        layout.operator("pose.select_constraint_target", text="Constraint Target")
+        layout.operator("pose.select_linked", text="Linked")
+
+        layout.separator()
+
+        layout.operator("pose.select_hierarchy", text="Parent").direction = 'PARENT'
+        layout.operator("pose.select_hierarchy", text="Child").direction = 'CHILD'
+
+        layout.separator()
+
+        props = layout.operator("pose.select_hierarchy", text="Extend Parent")
+        props.extend = True
+        props.direction = 'PARENT'
+
+        props = layout.operator("pose.select_hierarchy", text="Extend Child")
+        props.extend = True
+        props.direction = 'CHILD'
+
+        layout.separator()
+
+        layout.operator_menu_enum("pose.select_grouped", "type", text="Grouped")
+        layout.operator("object.select_pattern", text="Select Pattern...")
+
+class VIEW3D_MT_PoseCopy(bpy.types.Menu):
+    bl_label = "Pose Copy"
+
+    def draw(self, context):
+        layout = self.layout
+		 
+        layout.operator("pose.copy")
+        layout.operator("pose.paste")
+        layout.operator("pose.paste",
+           text="Paste X-Flipped Pose").flipped = True
+        layout.separator()
+
+class VIEW3D_MT_PoseNames(bpy.types.Menu):
+    bl_label = "Pose Copy"
+
+    def draw(self, context):
+        layout = self.layout
+		 
+        layout.operator_context = 'EXEC_AREA'
+        layout.operator("pose.autoside_names",
+            text="AutoName Left/Right").axis = 'XAXIS'
+        layout.operator("pose.autoside_names",
+            text="AutoName Front/Back").axis = 'YAXIS'
+        layout.operator("pose.autoside_names",
+            text="AutoName Top/Bottom").axis = 'ZAXIS'
+
+        layout.operator("pose.flip_names")
+
+
+class VIEW3D_MT_SelectSurface(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+        layout.operator("view3d.select_circle")
+
+        layout.separator()
+
+        layout.operator("curve.select_all", text="Select/Deselect All")
+        layout.operator("curve.select_inverse")
+        layout.operator("curve.select_random")
+        layout.operator("curve.select_every_nth")
+
+        layout.separator()
+
+        layout.operator("curve.select_row")
+
+        layout.separator()
+
+        layout.operator("curve.select_more")
+        layout.operator("curve.select_less")
+
+class VIEW3D_MT_SelectMetaball(bpy.types.Menu):
+    bl_label = "Select Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("view3d.select_border")
+
+        layout.separator()
+
+        #layout.operator("mball.select_deselect_all_metaelems")
+        layout.operator("mball.select_inverse_metaelems")
+
+        layout.separator()
+
+        layout.operator("mball.select_random_metaelems")
+
+class VIEW3D_MT_edit_TK(bpy.types.Menu):
+    bl_label = "Edit Mesh"
+
+    def draw(self, context):
+        layout = self.layout
+        row = layout.row()
+
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        prop = layout.operator("wm.context_set_value",
+            text="Select By Vertex", icon='VERTEXSEL')
+        prop.value = "(True, False, False)"
+        prop.path = "tool_settings.mesh_selection_mode"
+        layout.menu("VIEW3D_MT_edit_mesh_vertices", icon='VERTEXSEL')
+
+        prop = layout.operator("wm.context_set_value",
+            text="Select By Edge", icon='EDGESEL')
+        prop.value = "(False, True, False)"
+        prop.path = "tool_settings.mesh_selection_mode"
+        layout.menu("VIEW3D_MT_edit_mesh_edges", icon='EDGESEL')
+
+        prop = layout.operator("wm.context_set_value",
+            text="Select By Face", icon='FACESEL')
+        prop.value = "(False, False, True)"
+        prop.path = "tool_settings.mesh_selection_mode"
+        layout.menu("VIEW3D_MT_edit_mesh_faces", icon='FACESEL')
+        layout.separator()
+
+        layout.menu("VIEW3D_MT_edit_mesh_normals", icon='META_DATA')
+        layout.operator("mesh.loopcut_slide",
+            text="Loopcut", icon='EDIT_VEC')
+
+class VIEW3D_MT_editM_Edge(bpy.types.Menu):
+    bl_label = "Edges"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        layout.operator("mesh.mark_seam")
+        layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
+        layout.separator()
+
+        layout.operator("mesh.mark_sharp")
+        layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True
+        layout.operator("mesh.extrude_move_along_normals", text="Extrude")
+        layout.separator()
+
+        layout.operator("mesh.edge_rotate",
+            text="Rotate Edge CW").direction = 'CW'
+        layout.operator("mesh.edge_rotate",
+            text="Rotate Edge CCW").direction = 'CCW'
+        layout.separator()
+
+        layout.operator("TFM_OT_edge_slide", text="Edge Slide")
+        layout.operator("mesh.loop_multi_select", text="Edge Loop")
+        layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
+        layout.operator("mesh.loop_to_region")
+        layout.operator("mesh.region_to_loop")
+
+
+class VIEW3D_MT_EditCurveCtrlpoints(bpy.types.Menu):
+    bl_label = "Control Points"
+
+    def draw(self, context):
+        layout = self.layout
+
+        edit_object = context.edit_object
+
+        if edit_object.type == 'CURVE':
+            layout.operator("transform.transform").mode = 'TILT'
+            layout.operator("curve.tilt_clear")
+            layout.operator("curve.separate")
+
+            layout.separator()
+
+            layout.operator_menu_enum("curve.handle_type_set", "type")
+
+            layout.separator()
+
+            layout.menu("VIEW3D_MT_hook")
+
+
+class VIEW3D_MT_EditCurveSegments(bpy.types.Menu):
+    bl_label = "Curve Segments"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("curve.subdivide")
+        layout.operator("curve.switch_direction")
+
+class VIEW3D_MT_EditCurveSpecials(bpy.types.Menu):
+    bl_label = "Specials"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("curve.subdivide")
+        layout.operator("curve.switch_direction")
+        layout.operator("curve.spline_weight_set")
+        layout.operator("curve.radius_set")
+        layout.operator("curve.smooth")
+        layout.operator("curve.smooth_radius")
+
+class VIEW3D_MT_EditArmatureTK(bpy.types.Menu):
+    bl_label = "Armature Tools"
+
+    def draw(self, context):
+        layout = self.layout
+
+        # Edit Armature
+
+        layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE'
+
+        layout.operator("transform.transform", text="Scale B-Bone Width").mode = 'BONESIZE'
+
+        layout.separator()
+
+        layout.operator("armature.extrude_move")
+
+        layout.operator("armature.extrude_forked")
+
+        layout.operator("armature.duplicate_move")
+        layout.operator("armature.merge")
+        layout.operator("armature.fill")
+        layout.operator("armature.delete")
+        layout.operator("armature.separate")
+
+        layout.separator()
+
+        layout.operator("armature.subdivide_multi", text="Subdivide")
+        layout.operator("armature.switch_direction", text="Switch Direction")
+
+class VIEW3D_MT_ArmatureName(bpy.types.Menu):
+    bl_label = "Armature Name"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator_context = 'EXEC_AREA'
+        layout.operator("armature.autoside_names", text="AutoName Left/Right").type = 'XAXIS'
+        layout.operator("armature.autoside_names", text="AutoName Front/Back").type = 'YAXIS'
+        layout.operator("armature.autoside_names", text="AutoName Top/Bottom").type = 'ZAXIS'
+        layout.operator("armature.flip_names")
+        layout.separator()
+
+class VIEW3D_MT_KeyframeMenu(bpy.types.Menu):
+    bl_label = "Keyframe Menu"
+
+    def draw(self, context):
+        layout = self.layout
+
+        # Keyframe Bleck
+        layout.operator("anim.keyframe_insert_menu",
+            text="Insert Keyframe...")
+        layout.operator("anim.keyframe_delete_v3d",
+            text="Delete Keyframe...")
+        layout.operator("anim.keying_set_active_set",
+            text="Change Keying Set...")
+        layout.separator()
+
+class VIEW3D_MT_CursorMenu(bpy.types.Menu):
+    bl_label = "Snap Cursor Menu"
+
+    def draw(self, context):
+
+        layout = self.layout
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        layout.operator("view3d.snap_cursor_to_center",
+            text="Snap Cursor to Center")
+        layout.operator("view3d.snap_selected_to_cursor",
+            text="Selection to Cursor")
+        layout.operator("view3d.snap_cursor_to_selected",
+            text="Snap Cursor to Selected")
+        layout.separator()
+
+        layout.operator("view3d.snap_cursor_to_grid",
+            text="Snap Cursor to Grid")
+        layout.operator("view3d.snap_cursor_to_active",
+            text="Cursor to Active")
+        layout.operator("view3d.snap_selected_to_grid",
+            text="Selection to Grid")
+        layout.separator()
+
+        layout.operator("view3d.pivot_cursor",
+            text="Set Cursor as Pivot Point")
+        layout.operator("view3d.revert_pivot",
+            text="Revert Pivot Point")
+
+class VIEW3D_MT_undoS(bpy.types.Menu):
+    bl_label = "Undo/Redo"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        layout.operator("ed.undo", icon='TRIA_LEFT')
+        layout.operator("ed.redo", icon='TRIA_RIGHT')
+
+def register():
+    bpy.types.register(VIEW3D_MT_Space_Dynamic_Menu)
+    bpy.types.register(VIEW3D_MT_AddMenu)
+    bpy.types.register(VIEW3D_MT_TransformMenu)
+    bpy.types.register(VIEW3D_MT_MirrorMenu)
+    bpy.types.register(VIEW3D_MT_ParentMenu)
+    bpy.types.register(VIEW3D_MT_GroupMenu)
+    bpy.types.register(VIEW3D_MT_AlignMenu)
+    bpy.types.register(VIEW3D_MT_SelectMenu)
+    bpy.types.register(VIEW3D_MT_SelectEditMenu)
+    bpy.types.register(VIEW3D_MT_SelectCurveMenu)
+    bpy.types.register(VIEW3D_MT_SelectPoseMenu)
+    bpy.types.register(VIEW3D_MT_PoseCopy)
+    bpy.types.register(VIEW3D_MT_PoseNames)
+    bpy.types.register(VIEW3D_MT_KeyframeMenu)
+    bpy.types.register(VIEW3D_MT_SelectArmatureMenu)
+    bpy.types.register(VIEW3D_MT_ArmatureName)
+    bpy.types.register(VIEW3D_MT_SelectMetaball)
+    bpy.types.register(VIEW3D_MT_SelectSurface)
+    bpy.types.register(VIEW3D_MT_edit_TK)
+    bpy.types.register(VIEW3D_MT_EditArmatureTK)
+    bpy.types.register(VIEW3D_MT_editM_Edge)
+    bpy.types.register(VIEW3D_MT_EditCurveCtrlpoints)
+    bpy.types.register(VIEW3D_MT_EditCurveSegments)
+    bpy.types.register(VIEW3D_MT_EditCurveSpecials)
+    bpy.types.register(pivot_cursor)
+    bpy.types.register(revert_pivot)
+    bpy.types.register(VIEW3D_MT_CursorMenu)
+    bpy.types.register(VIEW3D_MT_undoS)
+
+    km = bpy.context.manager.active_keyconfig.keymaps['3D View']
+    kmi = km.items.add('wm.call_menu', 'SPACE', 'PRESS')
+    kmi.properties.name = "VIEW3D_MT_Space_Dynamic_Menu"
+
+
+def unregister():
+    bpy.types.unregister(VIEW3D_MT_Space_Dynamic_Menu)
+    bpy.types.unregister(VIEW3D_MT_AddMenu)
+    bpy.types.unregister(VIEW3D_MT_TransformMenu)
+    bpy.types.unregister(VIEW3D_MT_MirrorMenu)
+    bpy.types.unregister(VIEW3D_MT_ParentMenu)
+    bpy.types.unregister(VIEW3D_MT_GroupMenu)
+    bpy.types.unregister(VIEW3D_MT_AlignMenu)
+    bpy.types.unregister(VIEW3D_MT_SelectMenu)
+    bpy.types.unregister(VIEW3D_MT_SelectEditMenu)
+    bpy.types.unregister(VIEW3D_MT_SelectCurveMenu)
+    bpy.types.unregister(VIEW3D_MT_SelectPoseMenu)
+    bpy.types.unregister(VIEW3D_MT_PoseCopy)
+    bpy.types.unregister(VIEW3D_MT_PoseNames)
+    bpy.types.unregister(VIEW3D_MT_KeyframeMenu)
+    bpy.types.unregister(VIEW3D_MT_SelectArmatureMenu)
+    bpy.types.unregister(VIEW3D_MT_ArmatureName)
+    bpy.types.unregister(VIEW3D_MT_SelectMetaball)
+    bpy.types.unregister(VIEW3D_MT_SelectSurface)
+    bpy.types.unregister(VIEW3D_MT_edit_TK)
+    bpy.types.unregister(VIEW3D_MT_EditArmatureTK)
+    bpy.types.unregister(VIEW3D_MT_editM_Edge)
+    bpy.types.unregister(VIEW3D_MT_EditCurveCtrlpoints)
+    bpy.types.unregister(VIEW3D_MT_EditCurveSegments)
+    bpy.types.unregister(VIEW3D_MT_EditCurveSpecials)
+    bpy.types.unregister(pivot_cursor)
+    bpy.types.unregister(revert_pivot)
+    bpy.types.unregister(VIEW3D_MT_CursorMenu)
+    bpy.types.unregister(VIEW3D_MT_undoS)
+
+    km = bpy.context.manager.active_keyconfig.keymaps['3D View']
+    for kmi in km.items:
+        if kmi.idname == 'wm.call_menu':
+            if kmi.properties.name == "VIEW3D_MT__Space_Dynamic_Menu":
+                km.remove_item(kmi)
+                break
+
+if __name__ == "__main__":
+    register()