diff --git a/modules/geometry_utils.py b/modules/geometry_utils.py
index 413c24b80cd75cdab6b2c2f82873ab71f5fedb71..e928ace24df6138615673576974d00dd010ae432 100644
--- a/modules/geometry_utils.py
+++ b/modules/geometry_utils.py
@@ -21,10 +21,14 @@
     geometry_utils.py
 
     3d geometry calculations
+    
+    
+
 '''
 
 
-from mathutils import geometry, Vector
+from mathutils import Vector, Matrix
+from mathutils import geometry
 
 
 # 3D Geometry
@@ -136,7 +140,7 @@ class G3:
     def closestP2CylinderAxis(cls, p, fv):
         n = G3.ThreePnormal(fv)
         c = G3.circumCenter(fv)
-        if c is None:
+        if(c==None):
             return None
         return G3.closestP2L(p, c, c+n)
 
@@ -163,7 +167,7 @@ class G3:
         #print ("G3.closestP2Sphere")
         try:
             c = G3.centerOfSphere(fv)
-            if c is None:
+            if c==None:
                 return None
             pc = p-c
             if pc.length == 0:
@@ -178,7 +182,7 @@ class G3:
     def closestP2Cylinder(cls, p, fv):
         #print ("G3.closestP2Sphere")
         c = G3.closestP2CylinderAxis(p, fv)
-        if c is None:
+        if c==None:
             return None
         r = (fv[0] - G3.centerOfSphere(fv)).length
         pc = p-c
@@ -206,3 +210,6 @@ class G3:
         #else:
             #pc.normalize()
         #return c + (pc * G3.distanceP2P(c, fv[0]))
+
+
+
diff --git a/modules/misc_utils.py b/modules/misc_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b71d7d3b95f9756bbc39722c12cdf7e6c9f2981
--- /dev/null
+++ b/modules/misc_utils.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+'''
+    misc_util.py
+    
+    Miscellaneous helper methods.
+
+
+
+'''
+
+
+
+import bpy
+from cursor_utils import *
+from mathutils import Vector, Matrix
+
+
+
+class BlenderFake:
+
+    @classmethod
+    def forceUpdate(cls):
+        if bpy.context.mode == 'EDIT_MESH':
+            bpy.ops.object.mode_set(mode='OBJECT')
+            bpy.ops.object.mode_set(mode='EDIT')
+
+    @classmethod
+    def forceRedraw(cls):
+        CursorAccess.setCursor(CursorAccess.getCursor())
+
+
+
+# Converts 3D coordinates in a 3DRegion
+# into 2D screen coordinates for that region.
+# Borrowed from Buerbaum Martin (Pontiac)
+def region3d_get_2d_coordinates(context, loc_3d):
+    # Get screen information
+    mid_x = context.region.width / 2.0
+    mid_y = context.region.height / 2.0
+    width = context.region.width
+    height = context.region.height
+
+    # Get matrices
+    view_mat = context.space_data.region_3d.perspective_matrix
+    total_mat = view_mat
+
+    # order is important
+    vec = total_mat * Vector((loc_3d[0], loc_3d[1], loc_3d[2], 1.0))
+
+    # dehomogenise
+    vec = Vector((
+        vec[0] / vec[3],
+        vec[1] / vec[3],
+        vec[2] / vec[3]))
+
+    x = int(mid_x + vec[0] * width / 2.0)
+    y = int(mid_y + vec[1] * height / 2.0)
+    z = vec[2]
+
+    return Vector((x, y, z))
diff --git a/modules/ui_utils.py b/modules/ui_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..e938efa9e305cda81b158fae5398ed43f076ef52
--- /dev/null
+++ b/modules/ui_utils.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+'''
+    ui_utils.py
+
+    Some UI utility functions
+    
+    
+
+'''
+
+
+
+class GUI:
+
+    @classmethod
+    def drawIconButton(cls, enabled, layout, iconName, operator, frame=True):
+        col = layout.column()
+        col.enabled = enabled
+        bt = col.operator(operator,
+            text='',
+            icon=iconName,
+            emboss=frame)
+
+    @classmethod
+    def drawTextButton(cls, enabled, layout, text, operator, frame=True):
+        col = layout.column()
+        col.enabled = enabled
+        bt = col.operator(operator,
+            text=text,
+            emboss=frame)
+
+
+