diff --git a/space_view3d_spacebar_menu.py b/space_view3d_spacebar_menu.py
index 83114e795ec790aaf53b82683f8e074638f3c8f6..814fdcb00d666e03294dc80acc8a6be7189dfe1d 100644
--- a/space_view3d_spacebar_menu.py
+++ b/space_view3d_spacebar_menu.py
@@ -15,12 +15,12 @@
 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 #
 # ##### END GPL LICENSE BLOCK #####
-# Contributed to by: meta-androcto, JayDez, sim88, sam #
+# Contributed to by: meta-androcto, JayDez, sim88, sam, lijenstina, mkb, wisaac, CoDEmanX #
 
 bl_info = {
     "name": "Dynamic Context Menu",
     "author": "meta-androcto",
-    "version": (1, 8, 0),
+    "version": (1, 8, 2),
     "blender": (2, 77, 0),
     "location": "View3D > Spacebar",
     "description": "Object Mode Context Sensitive Spacebar Menu",
@@ -33,6 +33,7 @@ bl_info = {
 
 import bpy
 from bpy.types import Operator, Menu
+from bl_ui.properties_paint_common import UnifiedPaintPanel, brush_texture_settings
 
 ### Dynamic Context Sensitive Menu ###
 ### Main Menu based on Object Type & 3d View Editor Mode ###
@@ -51,7 +52,7 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if not context.active_object:
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_View_Directions", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_View_Navigation", icon='ROTATE')
@@ -61,6 +62,7 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
             layout.operator("view3d.snap_cursor_to_grid",
                             text="Cursor to Grid")
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -68,43 +70,56 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'MESH' and obj.mode in {'OBJECT'}:
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
             layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
 ## Mesh Edit Mode ##
         if obj and obj.type == 'MESH' and obj.mode in {'EDIT'}:
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Edit_Mesh", icon='RESTRICT_SELECT_OFF')
+            layout.menu("VIEW3D_MT_Edit_Multi", icon='VERTEXSEL')
+            UseSeparator(self,context)
             layout.menu("INFO_MT_mesh_add", text="Add Mesh", icon='OUTLINER_OB_MESH')
             layout.menu("VIEW3D_MT_Edit_Mesh", text="Mesh", icon='MESH_DATA')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuEdit", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_EditCursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UV_Map", icon='MOD_UVPROJECT')
             layout.menu("VIEW3D_MT_edit_mesh_specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_edit_mesh_extrude", icon='ORTHO')
-            layout.menu("VIEW3D_MT_Edit_Multi", icon='VERTEXSEL')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_edit_mesh_delete", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -112,16 +127,23 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'MESH' and obj.mode in {'SCULPT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
-            layout.menu("VIEW3D_MT_sculpt", icon='SCULPTMODE_HLT')
-            layout.menu("VIEW3D_MT_brush", icon='ZOOM_ALL')
-            layout.menu("VIEW3D_MT_hide_mask", icon='SCULPTMODE_HLT')
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_Sculpts", icon='SCULPTMODE_HLT')
+            layout.menu("VIEW3D_MT_Brush_Selection", text="Sculpt Tool", icon='BRUSH_SCULPT_DRAW')
+            layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
+            layout.menu("VIEW3D_MT_Hide_Masks", icon='RESTRICT_VIEW_OFF')
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_Sculpt_Specials", icon='SOLO_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -129,13 +151,16 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'MESH' and obj.mode in {'VERTEX_PAINT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
-            layout.menu("VIEW3D_MT_paint_vertex", icon='VPAINT_HLT')
-            layout.menu("VIEW3D_MT_brush", icon='BRUSH_DATA')
-            layout.operator("paint.vertex_color_set", icon='GROUP_VCOL')
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
+            layout.menu("VIEW3D_MT_Brush_Selection", text="Vertex Paint Tool", icon='BRUSH_VERTEXDRAW')
+            layout.menu("VIEW3D_MT_Vertex_Colors", icon='GROUP_VCOL')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -143,12 +168,16 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'MESH' and obj.mode in {'WEIGHT_PAINT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
-            layout.menu("VIEW3D_MT_paint_weight", icon='WPAINT_HLT')
-            layout.menu("VIEW3D_MT_brush", icon='BRUSH_DATA')
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_Paint_Weights", icon='WPAINT_HLT')
+            layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
+            layout.menu("VIEW3D_MT_Brush_Selection", text="Weight Paint Tool", icon='BRUSH_TEXMASK')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -156,11 +185,14 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'MESH' and obj.mode in {'TEXTURE_PAINT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
-            layout.menu("VIEW3D_MT_brush", icon='BRUSH_DATA')
+            layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
+            layout.menu("VIEW3D_MT_Brush_Selection", text="Texture Paint Tool", icon='SCULPTMODE_HLT')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -169,23 +201,30 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
             layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -193,13 +232,15 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'CURVE' and obj.mode in {'EDIT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Edit_Curve",
                         icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("INFO_MT_curve_add", text="Add Curve",
                         icon='OUTLINER_OB_CURVE')
             layout.menu("VIEW3D_MT_Edit_Curve", icon='CURVE_DATA')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
@@ -207,11 +248,14 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
                         icon='CURVE_BEZCURVE')
             layout.menu("VIEW3D_MT_EditCurveSpecials",
                         icon= 'SOLO_OFF')
+            UseSeparator(self,context)
             layout.operator("curve.delete", text="Delete Object",
                             icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Object Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -220,23 +264,30 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
             layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -244,24 +295,30 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'SURFACE' and obj.mode in {'EDIT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
+            layout.menu("VIEW3D_MT_Select_Edit_Surface", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("INFO_MT_surface_add", text="Add Surface",
                         icon='OUTLINER_OB_SURFACE')
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.prop_menu_enum(settings, "proportional_edit",
                                   icon="PROP_CON")
             layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                   icon="SMOOTHCURVE")
             layout.menu("VIEW3D_MT_EditCurveSpecials",
                         icon='SOLO_OFF')
-            layout.menu("VIEW3D_MT_Select_Edit_Surface", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.operator("curve.delete", text="Delete Object",
                             icon='CANCEL')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Object Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -270,22 +327,29 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -293,23 +357,29 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'META' and obj.mode in {'EDIT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
+            layout.menu("VIEW3D_MT_SelectMetaball", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.operator_menu_enum("object.metaball_add", "type",
                                       text="Add Metaball",
                                       icon='OUTLINER_OB_META')
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.prop_menu_enum(settings, "proportional_edit",
                                   icon="PROP_CON")
             layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                   icon="SMOOTHCURVE")
-            layout.menu("VIEW3D_MT_SelectMetaball", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.operator("mball.delete_metaelems", text="Delete Object",
                             icon='CANCEL')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Object Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -318,37 +388,47 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
-            layout.operator("object.editmode_toggle", text="Enter Edit Mode",
-                            icon='OBJECT_DATA')
+            # New Entry For Switching to Editmode
+            layout.operator("view3d.interactive_mode_text", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
 ### Text Edit Mode ###
+        # To Do: Space is already reserved for the typing tool
         if obj and obj.type == 'FONT' and obj.mode in {'EDIT'}:
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_select_edit_text", icon='VIEW3D')
             layout.menu("VIEW3D_MT_edit_font", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Object Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -357,19 +437,26 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -378,19 +465,26 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuLite", icon='MANIPUL')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -399,21 +493,28 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuArmature", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -421,16 +522,18 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'ARMATURE' and obj.mode in {'EDIT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Edit_Armature",
                         icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("INFO_MT_armature_add", text="Add Armature",
                         icon='OUTLINER_OB_ARMATURE')
             layout.menu("VIEW3D_MT_Edit_Armature", text="Armature",
                         icon='OUTLINER_DATA_ARMATURE')
             layout.menu("VIEW3D_MT_EditArmatureTK",
                         icon='ARMATURE_DATA')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuArmatureEdit", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
@@ -438,10 +541,13 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
             layout.menu("VIEW3D_MT_armature_specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_edit_armature_roll",
                         icon='BONE_DATA')
+            UseSeparator(self,context)
             layout.operator("armature.delete", text="Delete Object",
                             icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -451,12 +557,14 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
             arm = context.active_object.data
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Pose", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_Pose", icon='OUTLINER_DATA_POSE')
             layout.menu("VIEW3D_MT_TransformMenuArmaturePose", icon='MANIPUL')
             layout.menu("VIEW3D_MT_pose_transform", icon='EMPTY_DATA')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
             layout.menu("VIEW3D_MT_PoseCopy", icon='FILE')
 
@@ -469,8 +577,10 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
             layout.menu("VIEW3D_MT_KeyframeMenu", icon='KEY_HLT')
             layout.menu("VIEW3D_MT_pose_specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_pose_group", icon= 'GROUP_BONE')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -479,23 +589,30 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
             layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -503,20 +620,26 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
         if obj and obj.type == 'LATTICE' and obj.mode in {'EDIT'}:
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
+            layout.menu("VIEW3D_MT_Select_Edit_Lattice",
+                        icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
+            UseSeparator(self,context)
             layout.prop_menu_enum(settings, "proportional_edit",
                                   icon= "PROP_CON")
             layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                   icon= "SMOOTHCURVE")
+            UseSeparator(self,context)
             layout.operator("lattice.make_regular")
-            layout.menu("VIEW3D_MT_Select_Edit_Lattice",
-                        icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.operator("object.editmode_toggle", text="Enter Object Mode",
                             icon='OBJECT_DATA')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -525,20 +648,27 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuLite", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_object_specials", text = "Specials", icon='SOLO_OFF')
             layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -547,39 +677,54 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
 
             layout.operator_context = 'INVOKE_REGION_WIN'
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
             layout.menu("VIEW3D_MT_Select_Object", icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
             layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenuLite", icon='MANIPUL')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
             layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
 ## Particle Menu ##
-        if obj and  context.mode == 'PARTICLE':
+        if obj and context.mode == 'PARTICLE':
 
             layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
-            layout.separator()
+            UseSeparator(self,context)
+            layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
+            layout.menu("VIEW3D_MT_Select_Particle",
+                        icon='RESTRICT_SELECT_OFF')
+            layout.menu("VIEW3D_MT_Selection_Mode_Particle",
+                        text="Select and Display Mode", icon='PARTICLE_PATH')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
             layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
             layout.menu("VIEW3D_MT_CursorMenuLite", icon='CURSOR')
+            UseSeparator(self,context)
             layout.prop_menu_enum(settings, "proportional_edit",
                                   icon= "PROP_CON")
             layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                   icon= "SMOOTHCURVE")
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_particle", icon='PARTICLEMODE')
             layout.menu("VIEW3D_MT_particle_specials", text="Hair Specials", icon='HAIR')
-            layout.menu("VIEW3D_MT_Select_Particle",
-                        icon='RESTRICT_SELECT_OFF')
+            UseSeparator(self,context)
             layout.operator("object.delete", text="Delete Object", icon='X_VEC')
+            UseSeparator(self,context)
             layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
             layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='VIEW3D')
+            UseSeparator(self,context)
             layout.operator("view3d.toolshelf", icon='MENU_PANEL')
             layout.operator("view3d.properties", icon='MENU_PANEL')
 
@@ -596,6 +741,7 @@ class VIEW3D_MT_Object(bpy.types.Menu):
         is_local_view = (view.local_view is not None)
 
         layout.operator("object.delete", text="Delete...").use_global = False
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_object_parent")
         layout.menu("VIEW3D_MT_Duplicate")
         layout.operator("object.join")
@@ -609,11 +755,16 @@ class VIEW3D_MT_Object(bpy.types.Menu):
 
         layout.menu("VIEW3D_MT_make_links", text="Make Links...")
         layout.menu("VIEW3D_MT_Object_Data_Link")
+        UseSeparator(self,context)
+        layout.menu("VIEW3D_MT_AutoSmooth", icon='ALIASED')
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_object_constraints")
         layout.menu("VIEW3D_MT_object_track")
         layout.menu("VIEW3D_MT_object_animation")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_object_game")
         layout.menu("VIEW3D_MT_object_showhide")
+        UseSeparator(self,context)
         layout.operator_menu_enum("object.convert", "target")
 
 # ********** Object Add **********
@@ -634,20 +785,25 @@ class VIEW3D_MT_AddMenu(bpy.types.Menu):
                                   icon='OUTLINER_OB_META')
         layout.operator("object.text_add", text="Add Text",
                         icon='OUTLINER_OB_FONT')
+        UseSeparator(self,context)
         layout.menu("INFO_MT_armature_add", text="Add Armature",
                     icon='OUTLINER_OB_ARMATURE')
         layout.operator("object.add", text="Lattice",
                         icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
         layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY')
+        UseSeparator(self,context)
         layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER')
+        UseSeparator(self,context)
         layout.operator("object.camera_add", text="Camera",
                         icon='OUTLINER_OB_CAMERA')
         layout.operator_menu_enum("object.lamp_add", "type",
                                   icon="OUTLINER_OB_LAMP")
+        UseSeparator(self,context)
         layout.operator_menu_enum("object.effector_add", "type",
                                   text="Force Field",
                                   icon='FORCE_FORCE')
         layout.menu("VIEW3D_MT_object_quick_effects", text="Quick Effects", icon='PARTICLES')
+        UseSeparator(self,context)
         layout.operator_menu_enum("object.group_instance_add", "group",
                                   text="Group Instance",
                                   icon='GROUP_VERTEX')
@@ -665,6 +821,7 @@ class VIEW3D_MT_ManipulatorMenu1(bpy.types.Menu):
         props.rotate = True
         props = layout.operator("view3d.enable_manipulator",text ='Scale', icon='MAN_SCALE')
         props.scale = True
+        UseSeparator(self,context)
         props = layout.operator("view3d.enable_manipulator",text ='Combo', icon='MAN_SCALE')
         props.scale = True
         props.rotate = True
@@ -681,6 +838,7 @@ class VIEW3D_MT_MirrorMenu(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("transform.mirror", text="Interactive Mirror")
+        UseSeparator(self,context)
         layout.operator_context = 'INVOKE_REGION_WIN'
         props = layout.operator("transform.mirror", text="X Global")
         props.constraint_axis = (True, False, False)
@@ -694,6 +852,7 @@ class VIEW3D_MT_MirrorMenu(bpy.types.Menu):
 
         if context.edit_object:
 
+            UseSeparator(self,context)
             props = layout.operator("transform.mirror", text="X Local")
             props.constraint_axis = (True, False, False)
             props.constraint_orientation = 'LOCAL'
@@ -703,6 +862,7 @@ class VIEW3D_MT_MirrorMenu(bpy.types.Menu):
             props = layout.operator("transform.mirror", text="Z Local")
             props.constraint_axis = (False, False, True)
             props.constraint_orientation = 'LOCAL'
+            UseSeparator(self,context)
             layout.operator("object.vertex_group_mirror")
 
 # ********** Object Snap Cursor **********
@@ -713,6 +873,7 @@ class VIEW3D_MT_Pivot(bpy.types.Menu):
         layout = self.layout
         layout.prop(context.space_data, "pivot_point", expand=True)
         if context.active_object.mode == 'OBJECT':
+            UseSeparator(self,context)
             layout.prop(context.space_data, "use_pivot_point_align", text="Center Points")
 
 class VIEW3D_Snap_Context(bpy.types.Menu):
@@ -725,13 +886,14 @@ class VIEW3D_Snap_Context(bpy.types.Menu):
         layout.prop(toolsettings, "use_snap")
 
 class VIEW3D_Snap_Origin(bpy.types.Menu):
-    bl_label = "Snap Origin"
+    bl_label = "Snap  "
 
     def draw(self, context):
         layout = self.layout
         layout.operator_context = 'EXEC_AREA'
         layout.operator("object.origin_set",
                         text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
+        UseSeparator(self,context)
         layout.operator("object.origin_set",
                         text="Origin to Geometry").type = 'ORIGIN_GEOMETRY'
         layout.operator("object.origin_set",
@@ -747,6 +909,7 @@ class VIEW3D_MT_CursorMenu(bpy.types.Menu):
         layout.operator_context = 'INVOKE_REGION_WIN'
         layout.menu("VIEW3D_Snap_Origin")
         layout.menu("VIEW3D_Snap_Context")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_cursor_to_selected",
                         text="Cursor to Selected")
         layout.operator("view3d.snap_cursor_to_center",
@@ -755,10 +918,14 @@ class VIEW3D_MT_CursorMenu(bpy.types.Menu):
                         text="Cursor to Grid")
         layout.operator("view3d.snap_cursor_to_active",
                         text="Cursor to Active")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor").use_offset = False
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor (Offset)").use_offset = True
         layout.operator("view3d.snap_selected_to_grid",
                         text="Selection to Grid")
+        layout.operator("view3d.snap_cursor_selected_to_center",
+                        text="Selection and Cursor to Center")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_Pivot")
         layout.operator("view3d.pivot_cursor",
                         text="Set Cursor as Pivot Point")
@@ -772,6 +939,7 @@ class VIEW3D_MT_CursorMenuLite(bpy.types.Menu):
         layout = self.layout
         layout.operator_context = 'INVOKE_REGION_WIN'
         layout.menu("VIEW3D_Snap_Origin")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_cursor_to_selected",
                         text="Cursor to Selected")
         layout.operator("view3d.snap_cursor_to_center",
@@ -780,10 +948,14 @@ class VIEW3D_MT_CursorMenuLite(bpy.types.Menu):
                         text="Cursor to Grid")
         layout.operator("view3d.snap_cursor_to_active",
                         text="Cursor to Active")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor").use_offset = False
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor (Offset)").use_offset = True
         layout.operator("view3d.snap_selected_to_grid",
                         text="Selection to Grid")
+        layout.operator("view3d.snap_cursor_selected_to_center",
+                        text="Selection and Cursor to Center")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_Pivot")
         layout.operator("view3d.pivot_cursor",
                         text="Set Cursor as Pivot Point")
@@ -816,6 +988,22 @@ class InteractiveModeArmature(bpy.types.Menu):
         self.layout.operator(SetObjectMode.bl_idname, text="Edit", icon="EDITMODE_HLT").mode = "EDIT"
         self.layout.operator(SetObjectMode.bl_idname, text="Pose", icon="POSE_HLT").mode = "POSE"
 
+# ********** Text Interactive Mode **********
+class VIEW3D_OT_Interactive_Mode_Text(bpy.types.Operator):
+    """Toggle object's editmode"""
+    bl_idname = "view3d.interactive_mode_text"
+    bl_label = "Enter Edit Mode"
+
+    @classmethod
+    def poll(cls, context):
+        return (context.active_object is not None)
+
+    def execute(self, context):
+        bpy.ops.object.editmode_toggle()
+        self.report({'INFO'}, "Spacebar shortcut won't work in the Text Edit mode")
+        return {'FINISHED'}
+
+
 # ********** Object Parent **********
 class VIEW3D_MT_ParentMenu(bpy.types.Menu):
     bl_label = "Parent"
@@ -833,9 +1021,10 @@ class VIEW3D_MT_GroupMenu(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("group.create")
+        layout.operator("group.objects_add_active")
+        UseSeparator(self,context)
         layout.operator("group.objects_remove")
         layout.operator("group.objects_remove_all")
-        layout.operator("group.objects_add_active")
         layout.operator("group.objects_remove_active")
 
 # ********** Object Camera Options **********
@@ -860,6 +1049,7 @@ class VIEW3D_MT_Object_Data_Link(Menu):
         layout.menu("VIEW3D_MT_make_single_user")
         layout.operator("object.proxy_make", text="Make Proxy...")
         layout.operator("object.make_dupli_face")
+        UseSeparator(self,context)
         layout.operator("object.data_transfer")
         layout.operator("object.datalayout_transfer")
 
@@ -871,7 +1061,6 @@ class VIEW3D_MT_Duplicate(Menu):
 
         layout.operator("object.duplicate_move")
         layout.operator("object.duplicate_move_linked")
-        layout.separator()
 
 class VIEW3D_MT_KeyframeMenu(bpy.types.Menu):
     bl_label = "Keyframe"
@@ -893,8 +1082,37 @@ class VIEW3D_MT_UndoS(bpy.types.Menu):
 
         layout.operator("ed.undo")
         layout.operator("ed.redo")
+        UseSeparator(self,context)
         layout.operator("ed.undo_history")
 
+# ********** Normals / Auto Smooth Menu **********
+# Thanks to marvin.k.breuer for the Autosmooth part of the menu
+class VIEW3D_MT_AutoSmooth(bpy.types.Menu):
+    bl_label = "Normals / Auto Smooth"
+
+    def draw(self, context):
+        layout = self.layout
+        obj = context.object
+        obj_data = context.active_object.data
+
+        # moved the VIEW3D_MT_edit_mesh_normals contents here under an Edit mode check
+        if obj and obj.type == 'MESH' and obj.mode in {'EDIT'}:
+            layout.operator("mesh.normals_make_consistent",
+                            text="Recalculate Outside").inside = False
+            layout.operator("mesh.normals_make_consistent",
+                            text="Recalculate Inside").inside = True
+            layout.operator("mesh.flip_normals")
+            UseSeparator(self,context)
+
+        layout.prop(obj_data, "show_double_sided", text = "Normals: Double Sided")
+        UseSeparator(self,context)
+        layout.prop(obj_data, "use_auto_smooth", text = "Normals: Auto Smooth")
+
+        # Auto Smooth Angle has two tab spaces to align it with the rest of the menu
+        layout.prop(obj_data, "auto_smooth_angle",
+                    text="       Auto Smooth Angle")
+
+
 ############ Edit Mode Menu's #########
 
 # ********** Edit Mesh **********
@@ -904,22 +1122,36 @@ class VIEW3D_MT_Edit_Mesh(Menu):
     def draw(self, context):
         layout = self.layout
         toolsettings = context.tool_settings
+        view = context.space_data
 
         layout.menu("VIEW3D_MT_edit_mesh_vertices", icon='VERTEXSEL')
         layout.menu("VIEW3D_MT_edit_mesh_edges", icon='EDGESEL')
         layout.menu("VIEW3D_MT_edit_mesh_faces", icon='FACESEL')
+        UseSeparator(self,context)
         layout.operator("mesh.duplicate_move")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_edit_mesh_clean", icon='AUTO')
-        layout.menu("VIEW3D_MT_edit_mesh_normals", icon='META_DATA')
+        layout.prop(view, "use_occlude_geometry")
+        UseSeparator(self,context)
+        layout.menu("VIEW3D_MT_AutoSmooth", icon='META_DATA')
         layout.operator("mesh.loopcut_slide",
                         text="Loopcut", icon='EDIT_VEC')
+        UseSeparator(self,context)
         layout.operator("mesh.symmetrize")
         layout.operator("mesh.symmetry_snap")
+        UseSeparator(self,context)
         layout.operator("mesh.bisect")
         layout.operator_menu_enum("mesh.sort_elements", "type", text="Sort Elements...")
-        layout.prop(toolsettings, "use_mesh_automerge")
+        UseSeparator(self,context)
         layout.prop_menu_enum(toolsettings, "proportional_edit")
         layout.prop_menu_enum(toolsettings, "proportional_edit_falloff")
+        UseSeparator(self,context)
+
+        layout.prop(toolsettings, "use_mesh_automerge")
+        #text = Double Threshold has two tab spaces to align it with the rest of the menu
+        layout.prop(toolsettings, "double_threshold", text="       Double Threshold")
+
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_edit_mesh_showhide")
 
 # ********** Edit Multiselect **********
@@ -930,7 +1162,6 @@ class VIEW3D_MT_Edit_Multi(bpy.types.Menu):
         layout = self.layout
         layout.operator_context = 'INVOKE_REGION_WIN'
 
-        layout.separator()
         prop = layout.operator("wm.context_set_value", text="Vertex Select",
                                icon='VERTEXSEL')
         prop.value = "(True, False, False)"
@@ -945,7 +1176,7 @@ class VIEW3D_MT_Edit_Multi(bpy.types.Menu):
                                icon='FACESEL')
         prop.value = "(False, False, True)"
         prop.data_path = "tool_settings.mesh_select_mode"
-        layout.separator()
+        UseSeparator(self,context)
 
         prop = layout.operator("wm.context_set_value",
                                text="Vertex & Edge Select",
@@ -964,7 +1195,7 @@ class VIEW3D_MT_Edit_Multi(bpy.types.Menu):
                                icon='SNAP_FACE')
         prop.value = "(False, True, True)"
         prop.data_path = "tool_settings.mesh_select_mode"
-        layout.separator()
+        UseSeparator(self,context)
 
         prop = layout.operator("wm.context_set_value",
                                text="Vertex & Edge & Face Select",
@@ -982,18 +1213,18 @@ class VIEW3D_MT_EditM_Edge(bpy.types.Menu):
 
         layout.operator("mesh.mark_seam")
         layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
-        layout.separator()
+        UseSeparator(self,context)
 
         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()
+        UseSeparator(self,context)
 
         layout.operator("mesh.edge_rotate",
                         text="Rotate Edge CW").direction = 'CW'
         layout.operator("mesh.edge_rotate",
                         text="Rotate Edge CCW").direction = 'CCW'
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("TFM_OT_edge_slide", text="Edge Slide")
         layout.operator("mesh.loop_multi_select", text="Edge Loop")
@@ -1011,8 +1242,10 @@ class VIEW3D_MT_EditCursorMenu(bpy.types.Menu):
         layout.operator_context = 'INVOKE_REGION_WIN'
         layout.operator("object.setorigintoselected",
                         text="Origin to Selected V/F/E")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_Snap_Origin")
         layout.menu("VIEW3D_Snap_Context")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_cursor_to_selected",
                         text="Cursor to Selected")
         layout.operator("view3d.snap_cursor_to_center",
@@ -1021,17 +1254,19 @@ class VIEW3D_MT_EditCursorMenu(bpy.types.Menu):
                         text="Cursor to Grid")
         layout.operator("view3d.snap_cursor_to_active",
                         text="Cursor to Active")
+        layout.operator("view3d.snap_cursor_to_edge_intersection",
+                        text="Cursor to Edge Intersection")
+        UseSeparator(self,context)
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor").use_offset = False
         layout.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor (Offset)").use_offset = True
         layout.operator("view3d.snap_selected_to_grid",
                         text="Selection to Grid")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_Pivot")
         layout.operator("view3d.pivot_cursor",
                         text="Set Cursor as Pivot Point")
         layout.operator("view3d.revert_pivot",
                         text="Revert Pivot Point")
-        layout.operator("view3d.snap_cursor_to_edge_intersection",
-                        text="Cursor to Edge Intersection")
 
 # ********** Edit Mesh UV **********
 class VIEW3D_MT_UV_Map(bpy.types.Menu):
@@ -1040,6 +1275,7 @@ class VIEW3D_MT_UV_Map(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("uv.unwrap")
+        UseSeparator(self,context)
         layout.operator_context = 'INVOKE_DEFAULT'
         layout.operator("uv.smart_project")
         layout.operator("uv.lightmap_pack")
@@ -1049,8 +1285,10 @@ class VIEW3D_MT_UV_Map(bpy.types.Menu):
         layout.operator("uv.cylinder_project")
         layout.operator("uv.sphere_project")
         layout.operator_context = 'INVOKE_REGION_WIN'
+        UseSeparator(self,context)
         layout.operator("uv.project_from_view").scale_to_bounds = False
         layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
+        UseSeparator(self,context)
         layout.operator("uv.reset")
 
 
@@ -1070,7 +1308,9 @@ class VIEW3D_MT_Edit_Curve(bpy.types.Menu):
         layout.operator("curve.separate")
         layout.operator("curve.make_segment")
         layout.operator("curve.cyclic_toggle")
+        UseSeparator(self,context)
         layout.operator("curve.delete", text="Delete...")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_edit_curve_segments")
         layout.prop_menu_enum(settings, "proportional_edit",
                               icon="PROP_CON")
@@ -1107,16 +1347,276 @@ class VIEW3D_MT_EditCurveSpecials(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("curve.subdivide")
+        UseSeparator(self,context)
         layout.operator("curve.switch_direction")
         layout.operator("curve.spline_weight_set")
         layout.operator("curve.radius_set")
+        UseSeparator(self,context)
         layout.operator("curve.smooth")
         layout.operator("curve.smooth_weight")
         layout.operator("curve.smooth_radius")
         layout.operator("curve.smooth_tilt")
 
-############ Armature Menu's #########
+############ Brushes Menu's ########
+# Thanks to CoDEmanX for the code
+class VIEW3D_MT_Brush_Selection(bpy.types.Menu):
+    bl_label = "Brush Tool"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = UnifiedPaintPanel.paint_settings(context)
+
+        #check if brush exists (for instance, in paint mode before adding a slot)
+        if hasattr(settings, 'brush'):
+            brush = settings.brush
+        else:
+            brush = None
+
+        if not brush: return
+
+        if not context.particle_edit_object:
+            if UseBrushesLists():
+                col = layout.row()
+                flow = layout.column_flow(columns=3)
+
+                for brsh in bpy.data.brushes:
+                    if (context.sculpt_object and brsh.use_paint_sculpt):
+                        props = flow.operator("wm.context_set_id", text=brsh.name,
+                                            icon_value=layout.icon(brsh))
+                        props.data_path = "tool_settings.sculpt.brush"
+                        props.value = brsh.name
+                    elif (context.image_paint_object and brsh.use_paint_image):
+                        props = flow.operator("wm.context_set_id", text=brsh.name,
+                                            icon_value=layout.icon(brsh))
+                        props.data_path = "tool_settings.image_paint.brush"
+                        props.value = brsh.name
+                    elif (context.vertex_paint_object and brsh.use_paint_vertex):
+                        props = flow.operator("wm.context_set_id", text=brsh.name,
+                                            icon_value=layout.icon(brsh))
+                        props.data_path = "tool_settings.vertex_paint.brush"
+                        props.value = brsh.name
+                    elif (context.weight_paint_object and brsh.use_paint_weight):
+                        props = flow.operator("wm.context_set_id", text=brsh.name,
+                                            icon_value=layout.icon(brsh))
+                        props.data_path = "tool_settings.weight_paint.brush"
+                        props.value = brsh.name
+            else:
+                layout.template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8)
+
+class VIEW3D_MT_Brush_Settings(bpy.types.Menu):
+    bl_label = "Brush Settings"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = UnifiedPaintPanel.paint_settings(context)
+        brush = settings.brush
+
+        ups = context.tool_settings.unified_paint_settings
+        layout.prop(ups, "use_unified_size", text="Unified Size")
+        layout.prop(ups, "use_unified_strength", text="Unified Strength")
+        if context.image_paint_object or context.vertex_paint_object:
+            layout.prop(ups, "use_unified_color", text="Unified Color")
+        UseSeparator(self,context)
+
+        layout.menu("VIEW3D_MT_brush_paint_modes")
+
+        if not brush:
+            return
+
+        if context.sculpt_object:
+            sculpt_tool = brush.sculpt_tool
+
+            UseSeparator(self,context)
+            layout.operator_menu_enum("brush.curve_preset", "shape", text="Curve Preset")
+            UseSeparator(self,context)
+
+            if sculpt_tool != 'GRAB':
+                layout.prop_menu_enum(brush, "stroke_method")
+
+                if sculpt_tool in {'DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'}:
+                    layout.prop_menu_enum(brush, "direction")
+
+                if sculpt_tool == 'LAYER':
+                    layout.prop(brush, "use_persistent")
+                    layout.operator("sculpt.set_persistent_base")
+
+
+############ Sculpt Menu's #########
+class VIEW3D_MT_Sculpts(Menu):
+    bl_label = "Sculpt"
+
+    def draw(self, context):
+        layout = self.layout
+        toolsettings = context.tool_settings
+        sculpt = toolsettings.sculpt
+
+        layout.prop(sculpt, "use_symmetry_x")
+        layout.prop(sculpt, "use_symmetry_y")
+        layout.prop(sculpt, "use_symmetry_z")
+
+        UseSeparator(self,context)
+        layout.prop(sculpt, "lock_x")
+        layout.prop(sculpt, "lock_y")
+        layout.prop(sculpt, "lock_z")
+
+        UseSeparator(self,context)
+        layout.prop(sculpt, "use_threaded", text="Threaded Sculpt")
+        layout.prop(sculpt, "show_low_resolution")
+        layout.prop(sculpt, "use_deform_only")
+
+        UseSeparator(self,context)
+        layout.prop(sculpt, "show_brush")
+        layout.prop(sculpt, "show_diffuse_color")
+
+class VIEW3D_MT_Hide_Masks(Menu):
+    bl_label = "Hide/Mask"
+
+    def draw(self, context):
+        layout = self.layout
+
+        props = layout.operator("paint.mask_lasso_gesture", text="Lasso Mask")
+        UseSeparator(self,context)
+        props = layout.operator("view3d.select_border", text="Box Mask", icon="BORDER_RECT")
+        props = layout.operator("paint.hide_show", text="Box Hide")
+        props.action = 'HIDE'
+        props.area = 'INSIDE'
+
+        props = layout.operator("paint.hide_show", text="Box Show")
+        props.action = 'SHOW'
+        props.area = 'INSIDE'
+        UseSeparator(self,context)
+
+        props = layout.operator("paint.mask_flood_fill", text="Fill Mask", icon="BORDER_RECT")
+        props.mode = 'VALUE'
+        props.value = 1
+
+        props = layout.operator("paint.mask_flood_fill", text="Clear Mask")
+        props.mode = 'VALUE'
+        props.value = 0
+
+        layout.operator("paint.mask_flood_fill", text="Invert Mask").mode = 'INVERT'
+        UseSeparator(self,context)
+
+        props = layout.operator("paint.hide_show", text="Show All", icon="RESTRICT_VIEW_OFF")
+        props.action = 'SHOW'
+        props.area = 'ALL'
+
+        props = layout.operator("paint.hide_show", text="Hide Masked", icon="RESTRICT_VIEW_ON")
+        props.area = 'MASKED'
+        props.action = 'HIDE'
+
+## Dyntopo Menu (Thanks to marvin.k.breuer) ##
+class VIEW3D_MT_Sculpt_Dyntopo(bpy.types.Menu):
+    bl_label = "Dyntopo Set"
+    bl_idname = "view3d.set_brush_dyntopo"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = context.tool_settings
+
+        layout.prop(settings.sculpt, "detail_refine_method", text="")
+        layout.prop(settings.sculpt, "detail_type_method", text="")
+        UseSeparator(self,context)
+        layout.prop(settings.sculpt, "use_smooth_shading", "Smooth")
+
+## Sculpt Specials Menu (Thanks to marvin.k.breuer) ##
+class VIEW3D_MT_Sculpt_Specials(bpy.types.Menu):
+    bl_label = "Sculpt Specials"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = context.tool_settings
 
+        if context.sculpt_object.use_dynamic_topology_sculpting:
+            layout.operator("sculpt.dynamic_topology_toggle", icon='X', text="Disable Dyntopo")
+            UseSeparator(self,context)
+            if (settings.sculpt.detail_type_method == 'CONSTANT'):
+                layout.prop(settings.sculpt, "constant_detail", text="Const.")
+                layout.operator("sculpt.sample_detail_size", text="", icon='EYEDROPPER')
+            else:
+                layout.prop(settings.sculpt, "detail_size", text="Detail")
+
+            UseSeparator(self,context)
+            layout.operator("sculpt.symmetrize", icon='ARROW_LEFTRIGHT')
+            layout.prop(settings.sculpt, "symmetrize_direction", "")
+            UseSeparator(self,context)
+            layout.operator("sculpt.optimize")
+            if (settings.sculpt.detail_type_method == 'CONSTANT'):
+                layout.operator("sculpt.detail_flood_fill")
+
+            layout.menu("view3d.set_brush_dyntopo")
+
+        else:
+            layout.operator("sculpt.dynamic_topology_toggle", icon='SCULPT_DYNTOPO', text="Enable Dyntopo")
+
+## Display Wire (Thanks to marvin.k.breuer) ##
+class VIEW3D_OT_Display_Wire_All(bpy.types.Operator):
+    """Display Wire on All Objects"""
+    bl_label = "Wire on All Objects"
+    bl_idname = "view3d.display_wire_all"
+
+    @classmethod
+    def poll(cls, context):
+        return context.active_object is not None
+
+    def execute(self, context):
+
+        for obj in bpy.data.objects:
+            if obj.show_wire:
+                obj.show_all_edges = False
+                obj.show_wire = False
+            else:
+                obj.show_all_edges = True
+                obj.show_wire = True
+
+        return {'FINISHED'}
+
+## Vertex Color Menu ##
+class VIEW3D_MT_Vertex_Colors(Menu):
+    bl_label = "Vertex Colors"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator("paint.vertex_color_set")
+        UseSeparator(self,context)
+        layout.operator("paint.vertex_color_smooth")
+        layout.operator("paint.vertex_color_dirt")
+
+## Weight Paint Menu ##
+class VIEW3D_MT_Paint_Weights(Menu):
+    bl_label = "Weights"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("paint.weight_from_bones", text="Assign Automatic From Bones").type = 'AUTOMATIC'
+        layout.operator("paint.weight_from_bones", text="Assign From Bone Envelopes").type = 'ENVELOPES'
+        UseSeparator(self,context)
+
+        layout.operator("object.vertex_group_normalize_all", text="Normalize All")
+        layout.operator("object.vertex_group_normalize", text="Normalize")
+        UseSeparator(self,context)
+
+        layout.operator("object.vertex_group_mirror", text="Mirror")
+        layout.operator("object.vertex_group_invert", text="Invert")
+        UseSeparator(self,context)
+        layout.operator("object.vertex_group_clean", text="Clean")
+        layout.operator("object.vertex_group_quantize", text="Quantize")
+        UseSeparator(self,context)
+        layout.operator("object.vertex_group_levels", text="Levels")
+        layout.operator("object.vertex_group_smooth", text="Smooth")
+        UseSeparator(self,context)
+        props = layout.operator("object.data_transfer", text="Transfer Weights")
+        props.use_reverse_transfer = True
+        props.data_type = 'VGROUP_WEIGHTS'
+        UseSeparator(self,context)
+        layout.operator("object.vertex_group_limit_total", text="Limit Total")
+        layout.operator("object.vertex_group_fix", text="Fix Deforms")
+
+        UseSeparator(self,context)
+
+        layout.operator("paint.weight_set")
+############ Armature Menu's #########
 
 class VIEW3D_MT_Edit_Armature(bpy.types.Menu):
     bl_label = "Armature"
@@ -1130,6 +1630,7 @@ class VIEW3D_MT_Edit_Armature(bpy.types.Menu):
 
         layout.prop_menu_enum(toolsettings, "proportional_edit", icon="PROP_CON")
         layout.prop_menu_enum(toolsettings, "proportional_edit_falloff", icon="SMOOTHCURVE")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
         layout.operator("armature.merge")
         layout.operator("armature.fill")
@@ -1138,7 +1639,9 @@ class VIEW3D_MT_Edit_Armature(bpy.types.Menu):
         layout.operator("armature.switch_direction", text="Switch Direction")
         layout.operator_context = 'EXEC_AREA'
         layout.operator("armature.symmetrize")
+        UseSeparator(self,context)
         layout.operator("armature.delete")
+        UseSeparator(self,context)
         layout.operator_context = 'INVOKE_DEFAULT'
         layout.operator("armature.armature_layers")
         layout.operator("armature.bone_layers")
@@ -1152,7 +1655,9 @@ class VIEW3D_MT_EditArmatureTK(bpy.types.Menu):
         layout.operator("armature.extrude_move")
         layout.operator("armature.extrude_forked")
         layout.operator("armature.duplicate_move")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_edit_armature_delete")
+        UseSeparator(self,context)
         layout.operator("transform.transform",
                         text="Scale Envelope Distance").mode = 'BONE_SIZE'
         layout.operator("transform.transform",
@@ -1171,15 +1676,19 @@ class VIEW3D_MT_Pose(bpy.types.Menu):
         layout.menu("VIEW3D_MT_pose_propagate")
         layout.menu("VIEW3D_MT_pose_library")
         layout.menu("VIEW3D_MT_pose_motion")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_pose_group")
         layout.menu("VIEW3D_MT_object_parent")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_pose_ik")
         layout.menu("VIEW3D_MT_pose_constraints")
         layout.menu("VIEW3D_MT_PoseNames")
         layout.operator("pose.quaternions_flip")
         layout.operator_context = 'INVOKE_AREA'
+        UseSeparator(self,context)
         layout.operator("armature.armature_layers", text="Change Armature Layers...")
         layout.operator("pose.bone_layers", text="Change Bone Layers...")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_pose_showhide")
         layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
 
@@ -1191,18 +1700,23 @@ class VIEW3D_MT_TransformMenu(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.menu("VIEW3D_MT_ManipulatorMenu1")
-        layout.menu("VIEW3D_MT_object_clear")
-        layout.menu("VIEW3D_MT_object_apply")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
+        UseSeparator(self,context)
+        layout.menu("VIEW3D_MT_object_clear")
+        layout.menu("VIEW3D_MT_object_apply")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Move Texture Space").texture_space = True
         layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
+        UseSeparator(self,context)
         layout.operator("object.randomize_transform")
         layout.operator("transform.tosphere", text="To Sphere")
         layout.operator("transform.shear", text="Shear")
         layout.operator("transform.bend", text="Bend")
         layout.operator("transform.push_pull", text="Push/Pull")
+        UseSeparator(self,context)
         layout.operator("object.align")
         layout.operator_context = 'EXEC_REGION_WIN'
         layout.operator("transform.transform",
@@ -1215,17 +1729,21 @@ class VIEW3D_MT_TransformMenuEdit(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.menu("VIEW3D_MT_ManipulatorMenu1")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
+        UseSeparator(self,context)
         layout.operator("transform.tosphere", text="To Sphere")
         layout.operator("transform.shear", text="Shear")
         layout.operator("transform.bend", text="Bend")
         layout.operator("transform.push_pull", text="Push/Pull")
         layout.operator("transform.vertex_warp", text="Warp")
         layout.operator("transform.vertex_random", text="Randomize")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Move Texture Space").texture_space = True
         layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
+        UseSeparator(self,context)
         layout.operator_context = 'EXEC_REGION_WIN'
         layout.operator("transform.transform",
                         text="Align to Transform Orientation").mode = 'ALIGN'
@@ -1240,11 +1758,14 @@ class VIEW3D_MT_TransformMenuLite(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.menu("VIEW3D_MT_ManipulatorMenu1")
-        layout.menu("VIEW3D_MT_object_clear")
-        layout.menu("VIEW3D_MT_object_apply")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
+        UseSeparator(self,context)
+        layout.menu("VIEW3D_MT_object_clear")
+        layout.menu("VIEW3D_MT_object_apply")
+        UseSeparator(self,context)
         layout.operator("transform.transform",
                         text="Align to Transform Orientation").mode = 'ALIGN'
 
@@ -1261,6 +1782,7 @@ class VIEW3D_MT_TransformMenuCamera(bpy.types.Menu):
         layout.operator("transform.resize", text="Scale")
         layout.operator("object.align")
         layout.operator_context = 'EXEC_REGION_WIN'
+        UseSeparator(self,context)
         layout.operator("transform.transform",
                         text="Align to Transform Orientation").mode = 'ALIGN'
 
@@ -1271,12 +1793,15 @@ class VIEW3D_MT_TransformMenuArmature(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.menu("VIEW3D_MT_ManipulatorMenu1")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
+        UseSeparator(self,context)
         layout.operator("armature.align")
         layout.operator("object.align")
         layout.operator_context = 'EXEC_AREA'
+        UseSeparator(self,context)
         layout.operator("object.origin_set",
                         text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
         layout.operator("object.origin_set",
@@ -1293,14 +1818,17 @@ class VIEW3D_MT_TransformMenuArmatureEdit(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.menu("VIEW3D_MT_ManipulatorMenu1")
+        UseSeparator(self,context)
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
+        UseSeparator(self,context)
         layout.operator("transform.tosphere", text="To Sphere")
         layout.operator("transform.shear", text="Shear")
         layout.operator("transform.bend", text="Bend")
         layout.operator("transform.push_pull", text="Push/Pull")
         layout.operator("transform.vertex_warp", text="Warp")
+        UseSeparator(self,context)
         layout.operator("transform.vertex_random", text="Randomize")
         layout.operator("armature.align")
         layout.operator_context = 'EXEC_AREA'
@@ -1315,13 +1843,13 @@ class VIEW3D_MT_TransformMenuArmaturePose(bpy.types.Menu):
         layout.operator("transform.translate", text="Grab/Move")
         layout.operator("transform.rotate", text="Rotate")
         layout.operator("transform.resize", text="Scale")
-        layout.separator()
+        UseSeparator(self,context)
         layout.operator("pose.transforms_clear", text="Clear All")
         layout.operator("pose.loc_clear", text="Location")
         layout.operator("pose.rot_clear", text="Rotation")
         layout.operator("pose.scale_clear", text="Scale")
 
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("pose.user_transforms_clear", text="Reset unkeyed")
         obj = context.object
@@ -1340,13 +1868,17 @@ class VIEW3D_MT_View_Directions(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("view3d.viewnumpad", text="Camera").type = 'CAMERA'
+        UseSeparator(self,context)
         layout.operator("view3d.viewnumpad", text="Top").type = 'TOP'
         layout.operator("view3d.viewnumpad", text="Bottom").type = 'BOTTOM'
+        UseSeparator(self,context)
         layout.operator("view3d.viewnumpad", text="Front").type = 'FRONT'
         layout.operator("view3d.viewnumpad", text="Back").type = 'BACK'
+        UseSeparator(self,context)
         layout.operator("view3d.viewnumpad", text="Right").type = 'RIGHT'
         layout.operator("view3d.viewnumpad", text="Left").type = 'LEFT'
 
+
 class VIEW3D_MT_View_Border(bpy.types.Menu):
     bl_label = "Set Border"
 
@@ -1364,6 +1896,7 @@ class VIEW3D_MT_View_Toggle(bpy.types.Menu):
         layout = self.layout
         layout.operator_context = 'INVOKE_REGION_WIN'
         layout.operator("screen.area_dupli")
+        UseSeparator(self,context)
         layout.operator("screen.region_quadview")
         layout.operator("screen.screen_full_area", text="Toggle Maximize Area")
         layout.operator("screen.screen_full_area").use_hide_panels = True
@@ -1374,20 +1907,25 @@ class VIEW3D_MT_View_Menu(bpy.types.Menu):
 
     def draw(self, context):
         layout = self.layout
+        layout.menu("VIEW3D_MT_Shade")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_view_cameras", text="Cameras")
         layout.menu("VIEW3D_MT_View_Directions")
         layout.menu("VIEW3D_MT_View_Navigation")
-        layout.menu("VIEW3D_MT_Shade")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_View_Align")
         layout.menu("VIEW3D_MT_View_Toggle")
         layout.operator("view3d.view_persportho")
         layout.operator("view3d.localview", text="View Global/Local")
         layout.operator("view3d.view_selected").use_all_regions = False
         layout.operator("view3d.view_all").center = False
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_View_Border")
-        layout.operator("screen.area_dupli")
         layout.operator("view3d.layers", text="Show All Layers").nr = 0
-        layout.operator("screen.animation_play", text="Playback Animation")
+        UseSeparator(self,context)
+        # New menu entry for Animation player
+        layout.menu("VIEW3D_MT_Animation_Player",
+                        text="Playback Animation", icon='PLAY')
 
 class VIEW3D_MT_View_Navigation(bpy.types.Menu):
     bl_label = "Navigation"
@@ -1400,12 +1938,17 @@ class VIEW3D_MT_View_Navigation(bpy.types.Menu):
         props.type = 'ORBITRIGHT'
         props.angle = pi
 
+        UseSeparator(self,context)
         layout.operator("view3d.view_roll", text="Roll Left").type = 'LEFT'
         layout.operator("view3d.view_roll", text="Roll Right").type = 'RIGHT'
+        UseSeparator(self,context)
         layout.operator_enum("view3d.view_pan", "type")
+        UseSeparator(self,context)
         layout.operator("view3d.zoom", text="Zoom In").delta = 1
         layout.operator("view3d.zoom", text="Zoom Out").delta = -1
+        UseSeparator(self,context)
         layout.operator("view3d.zoom_camera_1_to_1", text="Zoom Camera 1:1")
+        UseSeparator(self,context)
         layout.operator("view3d.fly")
         layout.operator("view3d.walk")
 
@@ -1415,10 +1958,12 @@ class VIEW3D_MT_View_Align(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("view3d.view_all", text="Center Cursor and View All").center = True
+        layout.operator("view3d.view_center_cursor")
+        UseSeparator(self,context)
         layout.operator("view3d.camera_to_view", text="Align Active Camera to View")
         layout.operator("view3d.camera_to_view_selected", text="Align Active Camera to Selected")
+        UseSeparator(self,context)
         layout.operator("view3d.view_selected")
-        layout.operator("view3d.view_center_cursor")
         layout.operator("view3d.view_lock_to_active")
         layout.operator("view3d.view_lock_clear")
 
@@ -1454,6 +1999,7 @@ class VIEW3D_MT_View_Cameras(bpy.types.Menu):
         layout.operator("view3d.object_as_camera")
         layout.operator("view3d.viewnumpad", text="Active Camera").type = 'CAMERA'
 
+# Matcap and AO, Wire all and X-Ray entries thanks to marvin.k.breuer
 class VIEW3D_MT_Shade(Menu):
     bl_label = "Shade"
 
@@ -1461,6 +2007,7 @@ class VIEW3D_MT_Shade(Menu):
         layout = self.layout
 
         layout.prop(context.space_data, "viewport_shade", expand=True)
+        UseSeparator(self,context)
 
         if context.active_object:
             if(context.mode == 'EDIT_MESH'):
@@ -1470,6 +2017,46 @@ class VIEW3D_MT_Shade(Menu):
                 layout.operator("OBJECT_OT_shade_smooth")
                 layout.operator("OBJECT_OT_shade_flat")
 
+        UseSeparator(self,context)
+        layout.operator("view3d.display_wire_all", text="Wire all", icon='WIRE')
+        layout.prop(context.object, "show_x_ray", text="X-Ray", icon="META_CUBE")
+
+        UseSeparator(self,context)
+        layout.prop(context.space_data.fx_settings, "use_ssao",
+                    text="Ambient Occlusion", icon="GROUP")
+        layout.prop(context.space_data, "use_matcap", icon="MATCAP_01")
+
+        if context.space_data.use_matcap:
+            row = layout.column(1)
+            row.scale_y = 0.3
+            row.scale_x = 0.5
+            row.template_icon_view(context.space_data, "matcap_icon")
+
+
+## Animation Player (Thanks to marvin.k.breuer) ##
+class VIEW3D_MT_Animation_Player(bpy.types.Menu):
+    bl_label = "Animation Player"
+
+    def draw(self, context):
+        layout = self.layout
+
+        scene = context.scene
+        toolsettings = context.tool_settings
+        screen = context.screen
+
+        layout.operator("screen.frame_jump", text="Jump REW", icon='REW').end = False
+        layout.operator("screen.keyframe_jump", text="Previous FR", icon='PREV_KEYFRAME').next = False
+
+        UseSeparator(self,context)
+        layout.operator("screen.animation_play", text="Reverse", icon='PLAY_REVERSE').reverse = True
+        layout.operator("screen.animation_play", text="PLAY", icon='PLAY')
+        layout.operator("screen.animation_play", text="Stop", icon='PAUSE')
+        UseSeparator(self,context)
+
+        layout.operator("screen.keyframe_jump", text="Next FR", icon='NEXT_KEYFRAME').next = True
+        layout.operator("screen.frame_jump", text="Jump FF", icon='FF').end = True
+
+
 ############ Select Menu's #########
 
 ## Object Select ##
@@ -1481,20 +2068,23 @@ class VIEW3D_MT_Select_Object(bpy.types.Menu):
         layout.operator_context = 'INVOKE_REGION_WIN'
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("object.select_all").action = 'TOGGLE'
         layout.operator("object.select_all", text="Inverse").action = 'INVERT'
         layout.operator("object.select_random", text="Random")
         layout.operator("object.select_mirror", text="Mirror")
+        UseSeparator(self,context)
         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.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...")
+        layout.operator("object.select_camera", text="Select Camera")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_Select_Object_More_Less", text="More/Less")
+        layout.operator("object.select_pattern", text="Select Pattern...")
 
 class VIEW3D_MT_Select_Object_More_Less(bpy.types.Menu):
     bl_label = "Select More/Less"
@@ -1503,12 +2093,14 @@ class VIEW3D_MT_Select_Object_More_Less(bpy.types.Menu):
         layout = self.layout
         layout.operator("object.select_more", text="More")
         layout.operator("object.select_less", text="Less")
+        UseSeparator(self,context)
         props = layout.operator("object.select_hierarchy", text="Parent")
         props.extend = False
         props.direction = 'PARENT'
         props = layout.operator("object.select_hierarchy", text="Child")
         props.extend = False
         props.direction = 'CHILD'
+        UseSeparator(self,context)
         props = layout.operator("object.select_hierarchy", text="Extend Parent")
         props.extend = True
         props.direction = 'PARENT'
@@ -1524,6 +2116,7 @@ class VIEW3D_MT_Select_Edit_Mesh(bpy.types.Menu):
         layout = self.layout
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("mesh.select_all").action = 'TOGGLE'
         layout.operator("mesh.select_all", text="Inverse").action = 'INVERT'
         layout.operator("mesh.select_linked", text="Linked")
@@ -1531,13 +2124,16 @@ class VIEW3D_MT_Select_Edit_Mesh(bpy.types.Menu):
                         text="Linked Flat Faces")
         layout.operator("mesh.select_random", text="Random")
         layout.operator("mesh.select_nth", text="Every N Number of Verts")
+        UseSeparator(self,context)
         layout.menu("VIEW3D_MT_Edit_Mesh_Select_Trait")
         layout.menu("VIEW3D_MT_Edit_Mesh_Select_Similar")
         layout.menu("VIEW3D_MT_Edit_Mesh_Select_More_Less")
+        UseSeparator(self,context)
         layout.operator("mesh.select_mirror", text="Mirror")
         layout.operator("mesh.edges_select_sharp", text="Sharp Edges")
         layout.operator("mesh.select_axis", text="Side of Active")
         layout.operator("mesh.shortest_path_select", text="Shortest Path")
+        UseSeparator(self,context)
         layout.operator("mesh.loop_multi_select", text="Edge Loops").ring = False
         layout.operator("mesh.loop_multi_select", text="Edge Rings").ring = True
         layout.operator("mesh.loop_to_region")
@@ -1570,6 +2166,7 @@ class VIEW3D_MT_Edit_Mesh_Select_More_Less(bpy.types.Menu):
         layout = self.layout
         layout.operator("mesh.select_more", text="More")
         layout.operator("mesh.select_less", text="Less")
+        UseSeparator(self,context)
         layout.operator("mesh.select_next_item", text="Next Active")
         layout.operator("mesh.select_prev_item", text="Previous Active")
 
@@ -1581,16 +2178,19 @@ class VIEW3D_MT_Select_Edit_Curve(bpy.types.Menu):
         layout = self.layout
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("curve.select_all").action = 'TOGGLE'
         layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
-        layout.operator("curve.select_random")
         layout.operator("curve.select_nth")
+        UseSeparator(self,context)
+        layout.operator("curve.select_random")
         layout.operator("curve.select_linked", text="Select Linked")
         layout.operator("curve.select_similar", text="Select Similar")
         layout.operator("curve.de_select_first")
         layout.operator("curve.de_select_last")
         layout.operator("curve.select_next")
         layout.operator("curve.select_previous")
+        UseSeparator(self,context)
         layout.operator("curve.select_more")
         layout.operator("curve.select_less")
 
@@ -1626,18 +2226,18 @@ class VIEW3D_MT_Select_Edit_Armature(bpy.types.Menu):
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
 
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("armature.select_all").action = 'TOGGLE'
         layout.operator("armature.select_all", text="Inverse").action = 'INVERT'
         layout.operator("armature.select_mirror", text="Mirror").extend = False
 
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("armature.select_more", text="More")
         layout.operator("armature.select_less", text="Less")
 
-        layout.separator()
+        UseSeparator(self,context)
 
         props = layout.operator("armature.select_hierarchy", text="Parent")
         props.extend = False
@@ -1647,7 +2247,7 @@ class VIEW3D_MT_Select_Edit_Armature(bpy.types.Menu):
         props.extend = False
         props.direction = 'CHILD'
 
-        layout.separator()
+        UseSeparator(self,context)
 
         props = layout.operator("armature.select_hierarchy", text="Extend Parent")
         props.extend = True
@@ -1667,11 +2267,13 @@ class VIEW3D_MT_Select_Pose(bpy.types.Menu):
         layout = self.layout
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("pose.select_all").action = 'TOGGLE'
         layout.operator("pose.select_all", text="Inverse").action = 'INVERT'
         layout.operator("pose.select_mirror", text="Flip Active")
         layout.operator("pose.select_constraint_target",
                         text="Constraint Target")
+        UseSeparator(self,context)
         layout.operator("pose.select_linked", text="Linked")
         layout.operator("pose.select_hierarchy",
                         text="Parent").direction = 'PARENT'
@@ -1685,6 +2287,7 @@ class VIEW3D_MT_Select_Pose(bpy.types.Menu):
         props.direction = 'CHILD'
         layout.operator_menu_enum("pose.select_grouped", "type",
                                   text="Grouped")
+        UseSeparator(self,context)
         layout.operator("object.select_pattern", text="Select Pattern...")
         layout.menu("VIEW3D_MT_select_pose_more_less")
 
@@ -1741,6 +2344,7 @@ class VIEW3D_MT_Select_Edit_Surface(bpy.types.Menu):
         layout = self.layout
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("curve.select_all").action = 'TOGGLE'
         layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
         layout.operator("curve.select_random")
@@ -1748,6 +2352,7 @@ class VIEW3D_MT_Select_Edit_Surface(bpy.types.Menu):
         layout.operator("curve.select_linked", text="Select Linked")
         layout.operator("curve.select_similar", text="Select Similar")
         layout.operator("curve.select_row")
+        UseSeparator(self,context)
         layout.operator("curve.select_more")
         layout.operator("curve.select_less")
 
@@ -1758,6 +2363,8 @@ class VIEW3D_MT_SelectMetaball(bpy.types.Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator("view3d.select_border")
+        layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("mball.select_all").action = 'TOGGLE'
         layout.operator("mball.select_all").action = 'INVERT'
         layout.operator("mball.select_random_metaelems")
@@ -1775,31 +2382,39 @@ class VIEW3D_MT_Select_Edit_Metaball(bpy.types.Menu):
         layout.operator_menu_enum("mball.select_similar", "type", text="Similar")
 
 ## Particle Select ##
+class VIEW3D_MT_Selection_Mode_Particle(bpy.types.Menu):
+    bl_label = "Particle Select and Display Mode"
+
+    def draw(self, context):
+        layout = self.layout
+        toolsettings = context.tool_settings
+
+        layout.prop(toolsettings.particle_edit, "select_mode", expand=True)
+
+
 class VIEW3D_MT_Select_Particle(bpy.types.Menu):
     bl_label = "Select"
 
     def draw(self, context):
         layout = self.layout
+        toolsettings = context.tool_settings
 
         layout.operator("view3d.select_border")
-
-        layout.separator()
+        layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
 
         layout.operator("particle.select_all").action = 'TOGGLE'
         layout.operator("particle.select_linked")
         layout.operator("particle.select_all", text="Inverse").action = 'INVERT'
 
-        layout.separator()
-
+        UseSeparator(self,context)
         layout.operator("particle.select_more")
         layout.operator("particle.select_less")
 
-        layout.separator()
-
+        UseSeparator(self,context)
         layout.operator("particle.select_random")
 
-        layout.separator()
-
+        UseSeparator(self,context)
         layout.operator("particle.select_roots", text="Roots")
         layout.operator("particle.select_tips", text="Tips")
 
@@ -1812,10 +2427,12 @@ class VIEW3D_MT_Select_Edit_Lattice(bpy.types.Menu):
 
         layout.operator("view3d.select_border")
         layout.operator("view3d.select_circle")
+        UseSeparator(self,context)
         layout.operator("lattice.select_mirror")
         layout.operator("lattice.select_random")
         layout.operator("lattice.select_all").action = 'TOGGLE'
         layout.operator("lattice.select_all", text="Inverse").action = 'INVERT'
+        UseSeparator(self,context)
         layout.operator("lattice.select_ungrouped", text="Ungrouped Verts")
 
 ## Grease Pencil Select ##
@@ -1830,7 +2447,7 @@ class VIEW3D_MT_Select_Gpencil(bpy.types.Menu):
         layout.operator("gpencil.select_border")
         layout.operator("gpencil.select_circle")
 
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("gpencil.select_all", text="(De)select All").action = 'TOGGLE'
         layout.operator("gpencil.select_all", text="Inverse").action = 'INVERT'
@@ -1838,7 +2455,7 @@ class VIEW3D_MT_Select_Gpencil(bpy.types.Menu):
         #layout.operator_menu_enum("gpencil.select_grouped", "type", text="Grouped")
         layout.operator("gpencil.select_grouped", text="Grouped")
 
-        layout.separator()
+        UseSeparator(self,context)
 
         layout.operator("gpencil.select_more")
         layout.operator("gpencil.select_less")
@@ -1915,7 +2532,6 @@ class VIEW3D_MT_Angle_Control(bpy.types.Menu):
             else:
                 layout.prop(tex_slot, "use_random", text="Random")
 
-
 ## Cursor Menu Operators ##
 class VIEW3D_OT_Pivot_Cursor(bpy.types.Operator):
     "Cursor as Pivot Point"
@@ -1994,6 +2610,7 @@ def edgeIntersect(context, operator):
     point = line[0].lerp(line[1], 0.5)
     context.scene.cursor_location = obj.matrix_world * point
 
+
 ## Cursor Edge Intersection Operator ##
 class VIEW3D_OT_CursorToEdgeIntersection(bpy.types.Operator):
     "Finds the mid-point of the shortest distance between two edges"
@@ -2010,8 +2627,8 @@ class VIEW3D_OT_CursorToEdgeIntersection(bpy.types.Operator):
         edgeIntersect(context, self)
         return {'FINISHED'}
 
-### Set Mode Operator ###
 
+### Set Mode Operator ###
 class SetObjectMode(bpy.types.Operator):
     bl_idname = "object.set_object_mode"
     bl_label = "Set the object interactive mode"
@@ -2030,6 +2647,7 @@ class SetObjectMode(bpy.types.Operator):
             self.report(type={"WARNING"}, message="There is no active object")
         return {'FINISHED'}
 
+
 ## Origin To Selected Edit Mode ##
 def vfeOrigin(context):
     cursorPositionX = bpy.context.scene.cursor_location[0]
@@ -2043,6 +2661,7 @@ def vfeOrigin(context):
     bpy.context.scene.cursor_location[1] = cursorPositionY
     bpy.context.scene.cursor_location[2] = cursorPositionZ
 
+
 class SetOriginToSelected(bpy.types.Operator):
     '''Tooltip'''
     bl_idname = "object.setorigintoselected"
@@ -2056,6 +2675,63 @@ class SetOriginToSelected(bpy.types.Operator):
         vfeOrigin(context)
         return {'FINISHED'}
 
+# Code thanks to Isaac Weaver (wisaac) D1963
+class SnapCursSelToCenter(bpy.types.Operator):
+    """Snap 3D cursor and selected objects to the center \n"""\
+    """Works only in Object Mode"""
+    bl_idname = "view3d.snap_cursor_selected_to_center"
+    bl_label = "Snap Cursor & Selection to Center"
+
+    @classmethod
+    def poll(cls, context):
+        return (context.mode == "OBJECT")
+
+    def execute(self, context):
+        context.space_data.cursor_location = (0, 0, 0)
+        for obj in context.selected_objects:
+            obj.location = (0, 0, 0)
+        return {'FINISHED'}
+
+## Draw Separator ##
+def UseSeparator(operator, context):
+    #pass the preferences use_separators bool to enable/disable them
+    useSep = bpy.context.user_preferences.addons[__name__].preferences.use_separators
+    if useSep:
+        operator.layout.separator()
+
+## Use compact brushes menus ##
+def UseBrushesLists():
+    #pass the prefrences use_brushes_lists bool to enable/disable them
+    #separate function just for more convience
+    useLists = bpy.context.user_preferences.addons[__name__].preferences.use_brushes_lists
+    if useLists: return True
+    return False
+
+### Addon Preferences ###
+class VIEW3D_MT_Space_Dynamic_Menu_Pref(bpy.types.AddonPreferences):
+    bl_idname = __name__
+
+    use_separators = bpy.props.BoolProperty(
+        name="Use Separators in the menus",
+        default=True,
+        description="Use separators in the menus, a trade-off between \n"\
+                    "readability vs. using more space for displaying items"
+    )
+
+    use_brushes_lists = bpy.props.BoolProperty(
+        name="Use compact menus for brushes",
+        default=False,
+        description="Use more compact menus instead  \n"\
+                    "of thumbnails for displaying brushes"
+    )
+
+    def draw(self, context):
+        layout = self.layout
+        row = layout.row()
+        row.prop(self, "use_separators")
+        row.prop(self, "use_brushes_lists")
+
+
 ### List The Classes ###
 
 classes = [
@@ -2132,6 +2808,21 @@ classes = [
     SetOriginToSelected,
     VIEW3D_MT_Object_Data_Link,
     VIEW3D_MT_Duplicate,
+    VIEW3D_MT_Space_Dynamic_Menu_Pref,
+    VIEW3D_MT_Selection_Mode_Particle,
+    VIEW3D_MT_AutoSmooth,
+    VIEW3D_MT_Animation_Player,
+    VIEW3D_OT_Interactive_Mode_Text,
+    SnapCursSelToCenter,
+    VIEW3D_MT_Sculpt_Specials,
+    VIEW3D_MT_Sculpt_Dyntopo,
+    VIEW3D_MT_Brush_Settings,
+    VIEW3D_MT_Brush_Selection,
+    VIEW3D_MT_Sculpts,
+    VIEW3D_MT_Hide_Masks,
+    VIEW3D_OT_Display_Wire_All,
+    VIEW3D_MT_Vertex_Colors,
+    VIEW3D_MT_Paint_Weights
 ]
 
 ## Register Classes ^ & Hotkeys ##
@@ -2147,6 +2838,7 @@ def register():
         kmi = km.keymap_items.new('wm.call_menu', 'SPACE', 'PRESS')
         kmi.properties.name = "VIEW3D_MT_Space_Dynamic_Menu"
 
+
 ## Unegister Classes & Hotkeys ##
 
 def unregister():