diff --git a/source/blender/blenkernel/intern/script.c b/source/blender/blenkernel/intern/script.c
index 45072513591dd2c8713bbb986ae8588c9b34a890..16b08e37b6c5b4422744a0462a44c869122e584f 100644
--- a/source/blender/blenkernel/intern/script.c
+++ b/source/blender/blenkernel/intern/script.c
@@ -38,10 +38,10 @@
 #include "BPI_script.h"
 
 #include "MEM_guardedalloc.h"
+#include "BKE_bad_level_calls.h" /* for BPY_clear_script */
 
 /*
 #include "BLI_blenlib.h"
-#include "BKE_bad_level_calls.h"
 #include "BKE_utildefines.h"
 #include "BKE_library.h"
 #include "BKE_global.h"
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 53a3b6f91d434de5a40794fdca50b6b8eeac9220..3ff3a9599b92661216f468bbdcee37cb75e4c738 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -611,8 +611,8 @@ int BPY_menu_do_python(short menutype, int event)
 	buffer = MEM_mallocN(len+2, "pyfilebuf"); /* len+2 to add '\n\0' */
 	len = fread(buffer, 1, len, fp);
 
-	buffer[len-1] = '\n'; /* to fix potential syntax error */
-	buffer[len] = '\0';
+	buffer[len] = '\n'; /* fix syntax error in files w/o eol*/
+	buffer[len+1] = '\0';
 
 	/* fast clean-up of dos cr/lf line endings: change '\r' to space */
 
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
index 065960e45d8960ac19b0e54996a987f8eb639cb8..66d82c9509ce0a0235863f0d1ce7b1fa1d7fe70c 100644
--- a/source/blender/python/api2_2x/Blender.c
+++ b/source/blender/python/api2_2x/Blender.c
@@ -207,14 +207,15 @@ void M_Blender_Init (void)
   /* TODO: create a docstring for the Blender module */
   module = Py_InitModule3("Blender", Blender_methods, NULL);
 
+	types_InitAll(); /* set all our pytypes to &PyType_Type*/
+
   dict = PyModule_GetDict (module);
   g_blenderdict = dict;
+  PyDict_SetItemString (dict, "Types",    Types_Init());
   PyDict_SetItemString (dict, "sys",      sys_Init());
   PyDict_SetItemString (dict, "Registry", Registry_Init());
   PyDict_SetItemString (dict, "Scene",    Scene_Init());
   PyDict_SetItemString (dict, "Object",   Object_Init());
-  PyDict_SetItemString (dict, "Types",    Types_Init());
-  PyDict_SetItemString (dict, "NMesh",    NMesh_Init());
   PyDict_SetItemString (dict, "Material", Material_Init());
   PyDict_SetItemString (dict, "Camera",   Camera_Init());
   PyDict_SetItemString (dict, "Lamp",     Lamp_Init());
@@ -232,6 +233,7 @@ void M_Blender_Init (void)
   PyDict_SetItemString (dict, "Text",     Text_Init());
   PyDict_SetItemString (dict, "World",    World_Init());
   PyDict_SetItemString (dict, "Texture",  Texture_Init());
+  PyDict_SetItemString (dict, "NMesh",    NMesh_Init());
   PyDict_SetItemString (dict, "Noise",    Noise_Init());
   PyDict_SetItemString (dict, "Mathutils",Mathutils_Init());
 }
diff --git a/source/blender/python/api2_2x/Effect.c b/source/blender/python/api2_2x/Effect.c
index 13afa2a5ad8570c5b24e80d4d4e8c30debe833df..ac6edead28aef66570ea9b03e09ae431e9541bda 100644
--- a/source/blender/python/api2_2x/Effect.c
+++ b/source/blender/python/api2_2x/Effect.c
@@ -33,6 +33,40 @@
 #include "Particle.h"
 #include "Wave.h"
 
+/*****************************************************************************/
+/* Python BPy_Effect methods table:                                            */
+/*****************************************************************************/
+static PyMethodDef BPy_Effect_methods[] = {
+  {0}
+};
+
+/*****************************************************************************/
+/* Python Effect_Type structure definition:                                  */
+/*****************************************************************************/
+PyTypeObject Effect_Type =
+{
+  PyObject_HEAD_INIT(NULL)
+  0,                                      /* ob_size */
+  "Effect",                               /* tp_name */
+  sizeof (BPy_Effect),                      /* tp_basicsize */
+  0,                                      /* tp_itemsize */
+  /* methods */
+  (destructor)EffectDeAlloc,              /* tp_dealloc */
+  0,                 /* tp_print */
+  (getattrfunc)EffectGetAttr,             /* tp_getattr */
+  (setattrfunc)EffectSetAttr,             /* tp_setattr */
+  0,                                      /* tp_compare */
+  (reprfunc)EffectRepr,                   /* tp_repr */
+  0,                                      /* tp_as_number */
+  0,                                      /* tp_as_sequence */
+  0,                                      /* tp_as_mapping */
+  0,                                      /* tp_as_hash */
+  0,0,0,0,0,0,
+  0,                                      /* tp_doc */ 
+  0,0,0,0,0,0,
+  BPy_Effect_methods,                       /* tp_methods */
+  0,                                      /* tp_members */
+};
 
 /*****************************************************************************/
 /* Python method structure definition for Blender.Effect module:             */
diff --git a/source/blender/python/api2_2x/Effect.h b/source/blender/python/api2_2x/Effect.h
index 711afad0a2daa2212e724bd8e067dc7da901ed42..8b0562db2a4e4c12728d272049557451763ecbda 100644
--- a/source/blender/python/api2_2x/Effect.h
+++ b/source/blender/python/api2_2x/Effect.h
@@ -46,14 +46,6 @@
 #include"gen_utils.h"
 #include "bpy_types.h"
 
-
-/*****************************************************************************/
-/* Python BPy_Effect methods table:                                            */
-/*****************************************************************************/
-static PyMethodDef BPy_Effect_methods[] = {
-  {0}
-};
-
 /*****************************************************************************/
 /* Python API function prototypes for the Effect module.                     */
 /*****************************************************************************/
@@ -79,32 +71,5 @@ PyObject *EffectRepr (BPy_Effect *msh);
 PyObject* EffectCreatePyObject (struct Effect *effect);
 int EffectCheckPyObject (PyObject *py_obj);
 struct Effect* EffectFromPyObject (PyObject *py_obj);
-/*****************************************************************************/
-/* Python Effect_Type structure definition:                                  */
-/*****************************************************************************/
-static PyTypeObject Effect_Type =
-{
-  PyObject_HEAD_INIT(NULL)
-  0,                                      /* ob_size */
-  "Effect",                               /* tp_name */
-  sizeof (BPy_Effect),                      /* tp_basicsize */
-  0,                                      /* tp_itemsize */
-  /* methods */
-  (destructor)EffectDeAlloc,              /* tp_dealloc */
-  0,                 /* tp_print */
-  (getattrfunc)EffectGetAttr,             /* tp_getattr */
-  (setattrfunc)EffectSetAttr,             /* tp_setattr */
-  0,                                      /* tp_compare */
-  (reprfunc)EffectRepr,                   /* tp_repr */
-  0,                                      /* tp_as_number */
-  0,                                      /* tp_as_sequence */
-  0,                                      /* tp_as_mapping */
-  0,                                      /* tp_as_hash */
-  0,0,0,0,0,0,
-  0,                                      /* tp_doc */ 
-  0,0,0,0,0,0,
-  BPy_Effect_methods,                       /* tp_methods */
-  0,                                      /* tp_members */
-};
 
 #endif /* EXPP_EFFECT_H */
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 25364642c7afd5e687de71f42217c6aede955da1..2c0e6c1172176323eec7e2736bacccd1654fc7d7 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -741,7 +741,7 @@ static PyObject *Object_getDrawMode (BPy_Object *self)
 
 static PyObject *Object_getAction (BPy_Object *self)
 {
-	BPy_Action *py_action = NULL;
+	/*BPy_Action *py_action = NULL;*/
 
 	if(!self->object->action){
 		Py_INCREF (Py_None);
diff --git a/source/blender/python/api2_2x/Types.c b/source/blender/python/api2_2x/Types.c
index 3a1b95f8b5949db3431f0c7687d8c81c0850c2a7..8acc3b6abbebafac0e3ddf1bfc7784611876d0f9 100644
--- a/source/blender/python/api2_2x/Types.c
+++ b/source/blender/python/api2_2x/Types.c
@@ -17,7 +17,7 @@
  *
  * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 59 Temple Place - Suite 330, Boston, MA	02111-1307, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
@@ -37,82 +37,106 @@ This module is a dictionary of all Blender Python types";
 
 struct PyMethodDef Null_methods[] = {{NULL, NULL}};
 
-/*****************************************************************************/
-/* Function:             Types_Init                                          */
-/*****************************************************************************/
-PyObject *Types_Init (void)
+void types_InitAll(void)
 {
-  PyObject  *submodule, *dict;
-
- /* These are only set when some object initializes them.  But unless we
-	* do it now, we get an easy way to crash Blender. Maybe we'd better
-	* have an Init function for all these internal types that more than one
-	* module can use.  We could call it after setting the Blender dictionary */
-  Action_Type.ob_type = &PyType_Type;
-  matrix_Type.ob_type = &PyType_Type;
-  vector_Type.ob_type = &PyType_Type;
-  euler_Type.ob_type = &PyType_Type;
-  quaternion_Type.ob_type = &PyType_Type;
-  rgbTuple_Type.ob_type = &PyType_Type;
-	constant_Type.ob_type = &PyType_Type;
-	buffer_Type.ob_type = &PyType_Type;
-	Button_Type.ob_type = &PyType_Type;
+ /* The internal types (lowercase first letter, like constant_Type) are only
+	* set when some object initializes them.  But unless we do it early, we get
+	* some easy and unpredictable (varies with platform, even distro) ways to
+	* crash Blender.  Some modules also need this early up, so let's generalize
+	* and init all our pytypes here. */
+
+	Action_Type.ob_type = &PyType_Type;
+	Armature_Type.ob_type = &PyType_Type;
 	BezTriple_Type.ob_type = &PyType_Type;
-
-	/* Another one that needs to be here: */
+	Bone_Type.ob_type = &PyType_Type;
+	Build_Type.ob_type = &PyType_Type;
+	Button_Type.ob_type = &PyType_Type;
+	Camera_Type.ob_type = &PyType_Type;
+	Curve_Type.ob_type = &PyType_Type;
+	Effect_Type.ob_type = &PyType_Type;
+	Image_Type.ob_type = &PyType_Type;
+	Ipo_Type.ob_type = &PyType_Type;
+	IpoCurve_Type.ob_type = &PyType_Type;
+	Lamp_Type.ob_type = &PyType_Type;
+	Lattice_Type.ob_type = &PyType_Type;
+	Material_Type.ob_type = &PyType_Type;
+	Metaball_Type.ob_type = &PyType_Type;
+	MTex_Type.ob_type = &PyType_Type;
+	NMCol_Type.ob_type = &PyType_Type;
+	NMFace_Type.ob_type = &PyType_Type;
+	NMVert_Type.ob_type = &PyType_Type;
+	NMesh_Type.ob_type = &PyType_Type;
+	Object_Type.ob_type = &PyType_Type;
+	Particle_Type.ob_type = &PyType_Type;
+	Scene_Type.ob_type = &PyType_Type;
 	Text_Type.ob_type = &PyType_Type;
+	Texture_Type.ob_type = &PyType_Type;
+	Wave_Type.ob_type = &PyType_Type;
+	World_Type.ob_type = &PyType_Type;
+	buffer_Type.ob_type = &PyType_Type;
+	constant_Type.ob_type = &PyType_Type;
+	euler_Type.ob_type = &PyType_Type;
+	matrix_Type.ob_type = &PyType_Type;
+	quaternion_Type.ob_type = &PyType_Type;
+	rgbTuple_Type.ob_type = &PyType_Type;
+	vector_Type.ob_type = &PyType_Type;
+}
 
-  Texture_Type.ob_type = &PyType_Type;
-	MTex_Type.ob_type = &PyType_Type;
+/*****************************************************************************/
+/* Function:						 Types_Init																					 */
+/*****************************************************************************/
+PyObject *Types_Init (void)
+{
+	PyObject	*submodule, *dict;
 
-  submodule = Py_InitModule3 ("Blender.Types", Null_methods, M_Types_doc);
+	submodule = Py_InitModule3 ("Blender.Types", Null_methods, M_Types_doc);
 
-  dict = PyModule_GetDict(submodule);
+	dict = PyModule_GetDict(submodule);
 
-  /* The Blender Object Type */
+	/* The Blender Object Type */
 
-  PyDict_SetItemString(dict, "ObjectType",   (PyObject *)&Object_Type);
+	PyDict_SetItemString(dict, "ObjectType",	 (PyObject *)&Object_Type);
 
-  /* Blender Object Data Types */
+	/* Blender Object Data Types */
 
-  PyDict_SetItemString(dict, "SceneType",   (PyObject *)&Scene_Type);
+	PyDict_SetItemString(dict, "SceneType",		(PyObject *)&Scene_Type);
 
-  PyDict_SetItemString(dict, "NMeshType",    (PyObject *)&NMesh_Type);
-  PyDict_SetItemString(dict, "NMFaceType",   (PyObject *)&NMFace_Type);
-  PyDict_SetItemString(dict, "NMVertType",   (PyObject *)&NMVert_Type);
-  PyDict_SetItemString(dict, "NMColType",    (PyObject *)&NMCol_Type);
+	PyDict_SetItemString(dict, "NMeshType",		 (PyObject *)&NMesh_Type);
+	PyDict_SetItemString(dict, "NMFaceType",	 (PyObject *)&NMFace_Type);
+	PyDict_SetItemString(dict, "NMVertType",	 (PyObject *)&NMVert_Type);
+	PyDict_SetItemString(dict, "NMColType",		 (PyObject *)&NMCol_Type);
 
-  PyDict_SetItemString(dict, "ArmatureType", (PyObject *)&Armature_Type);
-  PyDict_SetItemString(dict, "BoneType",     (PyObject *)&Bone_Type);
+	PyDict_SetItemString(dict, "ArmatureType", (PyObject *)&Armature_Type);
+	PyDict_SetItemString(dict, "BoneType",		 (PyObject *)&Bone_Type);
 
-  PyDict_SetItemString(dict, "CurveType",    (PyObject *)&Curve_Type);
-  PyDict_SetItemString(dict, "IpoType",      (PyObject *)&Ipo_Type);
-  PyDict_SetItemString(dict, "MetaballType", (PyObject *)&Metaball_Type);
+	PyDict_SetItemString(dict, "CurveType",		 (PyObject *)&Curve_Type);
+	PyDict_SetItemString(dict, "IpoType",			 (PyObject *)&Ipo_Type);
+	PyDict_SetItemString(dict, "MetaballType", (PyObject *)&Metaball_Type);
 
-  PyDict_SetItemString(dict, "CameraType",   (PyObject *)&Camera_Type);
-  PyDict_SetItemString(dict, "ImageType",    (PyObject *)&Image_Type);
-  PyDict_SetItemString(dict, "LampType",     (PyObject *)&Lamp_Type);
-  PyDict_SetItemString(dict, "TextType",     (PyObject *)&Text_Type);
-  PyDict_SetItemString(dict, "MaterialType", (PyObject *)&Material_Type);
+	PyDict_SetItemString(dict, "CameraType",	 (PyObject *)&Camera_Type);
+	PyDict_SetItemString(dict, "ImageType",		 (PyObject *)&Image_Type);
+	PyDict_SetItemString(dict, "LampType",		 (PyObject *)&Lamp_Type);
+	PyDict_SetItemString(dict, "TextType",		 (PyObject *)&Text_Type);
+	PyDict_SetItemString(dict, "MaterialType", (PyObject *)&Material_Type);
 
-  PyDict_SetItemString(dict, "ButtonType",   (PyObject *)&Button_Type);
+	PyDict_SetItemString(dict, "ButtonType",	 (PyObject *)&Button_Type);
 
-  PyDict_SetItemString(dict, "LatticeType",  (PyObject *)&Lattice_Type);
+	PyDict_SetItemString(dict, "LatticeType",  (PyObject *)&Lattice_Type);
 
-  PyDict_SetItemString(dict, "TextureType",  (PyObject *)&Texture_Type);
-  PyDict_SetItemString(dict, "MTexType",     (PyObject *)&MTex_Type);
+	PyDict_SetItemString(dict, "TextureType",  (PyObject *)&Texture_Type);
+	PyDict_SetItemString(dict, "MTexType",		 (PyObject *)&MTex_Type);
 
-  /* External helper Types available to the main ones above */
+	/* External helper Types available to the main ones above */
 
-  PyDict_SetItemString(dict, "vectorType",   (PyObject *)&vector_Type);
-  PyDict_SetItemString(dict, "bufferType",   (PyObject *)&buffer_Type);
-  PyDict_SetItemString(dict, "constantType", (PyObject *)&constant_Type);
-  PyDict_SetItemString(dict, "rgbTupleType", (PyObject *)&rgbTuple_Type);
-  PyDict_SetItemString(dict, "matrix_Type",  (PyObject *)&matrix_Type);
-  PyDict_SetItemString(dict, "eulerType",  (PyObject *)&euler_Type);
-  PyDict_SetItemString(dict, "quaternionType",  (PyObject *)&quaternion_Type);
-  PyDict_SetItemString(dict, "BezTripleType", (PyObject *)&BezTriple_Type);
-  PyDict_SetItemString(dict, "ActionType", (PyObject *)&Action_Type);
+	PyDict_SetItemString(dict, "vectorType",	 (PyObject *)&vector_Type);
+	PyDict_SetItemString(dict, "bufferType",	 (PyObject *)&buffer_Type);
+	PyDict_SetItemString(dict, "constantType", (PyObject *)&constant_Type);
+	PyDict_SetItemString(dict, "rgbTupleType", (PyObject *)&rgbTuple_Type);
+	PyDict_SetItemString(dict, "matrix_Type",  (PyObject *)&matrix_Type);
+	PyDict_SetItemString(dict, "eulerType",  (PyObject *)&euler_Type);
+	PyDict_SetItemString(dict, "quaternionType",	(PyObject *)&quaternion_Type);
+	PyDict_SetItemString(dict, "BezTripleType", (PyObject *)&BezTriple_Type);
+	PyDict_SetItemString(dict, "ActionType", (PyObject *)&Action_Type);
 
-  return submodule;
+	return submodule;
 }
diff --git a/source/blender/python/api2_2x/Types.h b/source/blender/python/api2_2x/Types.h
index ec812ef183c9f65a9830d2f2cfa72b8608810623..87d45fa7795fc3fd702d276ef6d2a4c9cee5a2e6 100644
--- a/source/blender/python/api2_2x/Types.h
+++ b/source/blender/python/api2_2x/Types.h
@@ -34,22 +34,21 @@
 
 #include "Python.h"
 
-extern PyTypeObject Button_Type, Material_Type;
-
-extern PyTypeObject Texture_Type, MTex_Type;
-
+extern PyTypeObject Action_Type, Armature_Type;
+extern PyTypeObject BezTriple_Type, Bone_Type, Build_Type, Button_Type;
+extern PyTypeObject Camera_Type, Curve_Type;
+extern PyTypeObject Effect_Type;
+extern PyTypeObject Image_Type, Ipo_Type, IpoCurve_Type;
+extern PyTypeObject Lamp_Type, Lattice_Type;
+extern PyTypeObject Material_Type, Metaball_Type, MTex_Type;
+extern PyTypeObject NMFace_Type, NMVert_Type, NMCol_Type, NMesh_Type;
 extern PyTypeObject Object_Type;
+extern PyTypeObject Particle_Type;
 extern PyTypeObject Scene_Type;
-extern PyTypeObject NMesh_Type, NMFace_Type, NMVert_Type, NMCol_Type;
-extern PyTypeObject Camera_Type, Lamp_Type, Image_Type, Text_Type;
-extern PyTypeObject Armature_Type, Bone_Type;
-extern PyTypeObject Curve_Type, Ipo_Type, Metaball_Type;
-extern PyTypeObject Lattice_Type;
-
-extern PyTypeObject  buffer_Type, rgbTuple_Type,
-	constant_Type, BezTriple_Type;
+extern PyTypeObject Text_Type, Texture_Type;
+extern PyTypeObject Wave_Type, World_Type;
 
-extern PyTypeObject vector_Type, matrix_Type, euler_Type, quaternion_Type;
-extern PyTypeObject Action_Type;
+extern PyTypeObject buffer_Type, constant_Type, euler_Type;
+extern PyTypeObject matrix_Type, quaternion_Type, rgbTuple_Type, vector_Type;
 
 #endif /* EXPP_TYPES_H */
diff --git a/source/blender/python/api2_2x/doc/Draw.py b/source/blender/python/api2_2x/doc/Draw.py
index 4a0185cd389b8da5eb39be905934cac1bf769ec3..3c391f9384854b61071b82ec73595b5343b16e96 100644
--- a/source/blender/python/api2_2x/doc/Draw.py
+++ b/source/blender/python/api2_2x/doc/Draw.py
@@ -381,3 +381,12 @@ def Text(string, fontsize = 'normal'):
   @rtype: int
   @return: The width of I{string} drawn with the chosen I{fontsize}.
   """
+
+class Button:
+  """
+  The Button object
+  =================
+    This object represents a button in Blender's GUI.
+  @type val: int or float or string (depends on button type).
+  @cvar val: The button's value.
+  """
diff --git a/source/blender/python/api2_2x/matrix.c b/source/blender/python/api2_2x/matrix.c
index cfd7a6604df9cc830e4d210bf4bbac987048abe6..42f82ef55879cdb4ee2104fe0662eaa601da89e8 100644
--- a/source/blender/python/api2_2x/matrix.c
+++ b/source/blender/python/api2_2x/matrix.c
@@ -264,7 +264,7 @@ PyObject *Matrix_Invert(MatrixObject *self)
 {
 	float det;
 	int x,y,z;
-	float *mat;
+	float *mat = NULL;
 	float t;
 
 	if(self->rowSize != self->colSize)
diff --git a/source/blender/python/api2_2x/modules.h b/source/blender/python/api2_2x/modules.h
index b761fbad2a0408c1471a872ea882cc56c4fba48a..74f3ec81b5e5b087c900fcce71f9a4630fa6fa9b 100644
--- a/source/blender/python/api2_2x/modules.h
+++ b/source/blender/python/api2_2x/modules.h
@@ -62,6 +62,8 @@ extern PyObject *g_blenderdict;
 /*****************************************************************************/
 void M_Blender_Init (void);
 
+void types_InitAll(void); /* in Types.c */
+
 /* sys */
 PyObject * sys_Init (void);