Description: Use consistent indentation in sunflow_export.py
Forwarded: no
Author: tony mancill <tmancill@debian.org>

--- a/exporters/blender/sunflow_export.py
+++ b/exporters/blender/sunflow_export.py
@@ -8,7 +8,7 @@
 
 Version         :       1.4.18 (January 2008)
 Author          :       R Lindsay (hayfever) / Christopher Kulla / MADCello /
-			olivS / Eugene Reilly / Heavily Tessellated / Humfred
+                        olivS / Eugene Reilly / Heavily Tessellated / Humfred
 Description     :       Export to Sunflow renderer http://sunflow.sourceforge.net/
 Usage           :       See how to use the script at http://sunflow.sourceforge.net/phpbb2/viewtopic.php?t=125
 
@@ -102,119 +102,119 @@
 
 ## Default values of buttons ##
 def default_values():
-        global FILETYPE, MINAA, MAXAA, AASAMPLES, AAJITTER, DSAMPLES, IMGFILTER, IMGFILTERW, IMGFILTERH, BUCKETSIZE,\
-        BUCKETTYPE, REVERSE, DOF, DOFRADIUS, LENSSIDES, LENSROTATION, SPHERICALCAMERA, FISHEYECAMERA, IMP_BCKGRD,\
-        IMP_SUN, BCKGRD, BACKGROUND, SUN_TURB, SUN_SAMPLES, IBL, IBLLOCK, IBLSAMPLES, INFINITEPLANE, IPLANECOLOR,\
-        MESHLIGHTPOWER, LAMPPOWER, CONVLAMP, MEM, THREADS, CAUSTICS, PHOTONNUMBER, PHOTONMAP, PHOTONESTIMATE,\
-        PHOTONRADIUS, INSTANTGI, IGISAMPLES, IGISETS, IGIBIAS, IGIBIASSAMPLES, IRRCACHE, IRRSAMPLES, IRRTOLERANCE,\
-        IRRSPACEMIN, IRRSPACEMAX, USEGLOBALS, gPHOTONNUMBER, gPHOTONMAP, gPHOTONESTIMATE, gPHOTONRADIUS, PATHTRACE,\
-        PATHSAMPLES, VIEWCAUSTICS, VIEWGLOBALS, VIEWGI, OCCLUSION, OCCBRIGHT, OCCDARK, OCCSAMPLES, OCCDIST,\
-        SHADTYPE, QUICKOPT, IPR, EXP_ANIM, DEPTH_DIFF, DEPTH_REFL, DEPTH_REFR, NOGI, NOCAUSTICS, QUICKOCC, QOCCDIST,\
-        NOGUI, SMALLMESH, IMGFILTERLIST, BUCKETTYPELIST, PHOTONMAPLIST, gPHOTONMAPLIST, FAKEAMB, FAMBSKY, FAMBGROUND
-
-        FILETYPE = Draw.Create(1)
-
-        # AA panel values
-        MINAA = Draw.Create(0)
-        MAXAA = Draw.Create(2)
-        AASAMPLES = Draw.Create(1)
-        AAJITTER = Draw.Create(0)
-        DSAMPLES = Draw.Create(16)
-        IMGFILTER = Draw.Create(1)
-        IMGFILTERW = Draw.Create(1)
-        IMGFILTERH = Draw.Create(1)
-        BUCKETSIZE = Draw.Create(64)
-        BUCKETTYPE = Draw.Create(1)
-        REVERSE = Draw.Create(0)
-
-        # Camera panel values
-        DOF = Draw.Create(0)
-        DOFRADIUS = Draw.Create(1.00)
-        LENSSIDES = Draw.Create(6)
-        LENSROTATION = Draw.Create(0.0)
-        SPHERICALCAMERA = Draw.Create(0)
-        FISHEYECAMERA = Draw.Create(0)
-
-        # Background panel values
-        IMP_BCKGRD  = Draw.Create(1)
-        IMP_SUN  = Draw.Create(0)
-        BCKGRD = Draw.Create(0.0, 0.0, 0.0)
-        BACKGROUND = Draw.Create(0)
-        SUN_TURB = Draw.Create(6.0)
-        SUN_SAMPLES = Draw.Create(128)
-        IBL = Draw.Create(0)
-        IBLLOCK = Draw.Create(0)
-        IBLSAMPLES = Draw.Create(16)
-        INFINITEPLANE = Draw.Create(0)
-        IPLANECOLOR= Draw.Create(1.0, 1.0, 1.0)
-
-        # Light panel values
-        MESHLIGHTPOWER = Draw.Create(100)
-        LAMPPOWER = Draw.Create(100)
-        CONVLAMP    = Draw.Create(0)
-
-        # Config panel values
-        MEM = Draw.Create(1024)
-        THREADS    = Draw.Create(0)
-
-        # GI/Caustic panel values
-        CAUSTICS = Draw.Create(0)
-        PHOTONNUMBER = Draw.Create(1000000)
-        PHOTONMAP = Draw.Create(1)
-        PHOTONESTIMATE = Draw.Create(100)
-        PHOTONRADIUS = Draw.Create(0.5)
-        INSTANTGI = Draw.Create(0)
-        IGISAMPLES = Draw.Create(64)
-        IGISETS = Draw.Create(1)
-        IGIBIAS = Draw.Create(0.01)
-        IGIBIASSAMPLES = Draw.Create(0)
-        IRRCACHE = Draw.Create(0)
-        IRRSAMPLES = Draw.Create(512)
-        IRRTOLERANCE = Draw.Create(0.01)
-        IRRSPACEMIN = Draw.Create(0.05)
-        IRRSPACEMAX = Draw.Create(5.0)
-        USEGLOBALS = Draw.Create(0)
-        gPHOTONNUMBER = Draw.Create(1000000)
-        gPHOTONMAP = Draw.Create(1)
-        gPHOTONESTIMATE = Draw.Create(100)
-        gPHOTONRADIUS = Draw.Create(0.5)
-        PATHTRACE = Draw.Create(0)
-        PATHSAMPLES = Draw.Create(32)
-        VIEWCAUSTICS = Draw.Create(0)
-        VIEWGLOBALS = Draw.Create(0)
-        VIEWGI = Draw.Create(0)
-        OCCLUSION = Draw.Create(0)
-        OCCBRIGHT = Draw.Create(1.0, 1.0, 1.0)
-        OCCDARK = Draw.Create(0.0, 0.0, 0.0)
-        OCCSAMPLES = Draw.Create(32)
-        OCCDIST = Draw.Create(3.0)
-        FAKEAMB = Draw.Create(0)
-        FAMBSKY = Draw.Create(1.0, 0.95, 0.65)
-        FAMBGROUND = Draw.Create(0.5, 0.8, 1.0)
-
-        # Shader panel values
-        SHADTYPE = Draw.Create(1)
-
-        # Render panel values
-        QUICKOPT = Draw.Create(1)
-        IPR = Draw.Create(0)
-        EXP_ANIM = Draw.Create(0)
-        DEPTH_DIFF = Draw.Create(1)
-        DEPTH_REFL = Draw.Create(4)
-        DEPTH_REFR = Draw.Create(4)
-        NOGI    = Draw.Create(0)
-        NOCAUSTICS    = Draw.Create(0)
-        QUICKOCC    = Draw.Create(0)
-        QOCCDIST    = Draw.Create(0.5)
-        NOGUI    = Draw.Create(0)
-        SMALLMESH    = Draw.Create(0)
-
-        ## Lists ##
-        IMGFILTERLIST = ["box", "gaussian", "mitchell", "triangle", "catmull-rom", "blackman-harris", "sinc", "lanczos"]
-        BUCKETTYPELIST = ["hilbert", "spiral", "column", "row", "diagonal", "random"]
-        FILETYPE
-        PHOTONMAPLIST = ["kd"]
-        gPHOTONMAPLIST = ["grid"]
+    global FILETYPE, MINAA, MAXAA, AASAMPLES, AAJITTER, DSAMPLES, IMGFILTER, IMGFILTERW, IMGFILTERH, BUCKETSIZE,\
+    BUCKETTYPE, REVERSE, DOF, DOFRADIUS, LENSSIDES, LENSROTATION, SPHERICALCAMERA, FISHEYECAMERA, IMP_BCKGRD,\
+    IMP_SUN, BCKGRD, BACKGROUND, SUN_TURB, SUN_SAMPLES, IBL, IBLLOCK, IBLSAMPLES, INFINITEPLANE, IPLANECOLOR,\
+    MESHLIGHTPOWER, LAMPPOWER, CONVLAMP, MEM, THREADS, CAUSTICS, PHOTONNUMBER, PHOTONMAP, PHOTONESTIMATE,\
+    PHOTONRADIUS, INSTANTGI, IGISAMPLES, IGISETS, IGIBIAS, IGIBIASSAMPLES, IRRCACHE, IRRSAMPLES, IRRTOLERANCE,\
+    IRRSPACEMIN, IRRSPACEMAX, USEGLOBALS, gPHOTONNUMBER, gPHOTONMAP, gPHOTONESTIMATE, gPHOTONRADIUS, PATHTRACE,\
+    PATHSAMPLES, VIEWCAUSTICS, VIEWGLOBALS, VIEWGI, OCCLUSION, OCCBRIGHT, OCCDARK, OCCSAMPLES, OCCDIST,\
+    SHADTYPE, QUICKOPT, IPR, EXP_ANIM, DEPTH_DIFF, DEPTH_REFL, DEPTH_REFR, NOGI, NOCAUSTICS, QUICKOCC, QOCCDIST,\
+    NOGUI, SMALLMESH, IMGFILTERLIST, BUCKETTYPELIST, PHOTONMAPLIST, gPHOTONMAPLIST, FAKEAMB, FAMBSKY, FAMBGROUND
+
+    FILETYPE = Draw.Create(1)
+
+    # AA panel values
+    MINAA = Draw.Create(0)
+    MAXAA = Draw.Create(2)
+    AASAMPLES = Draw.Create(1)
+    AAJITTER = Draw.Create(0)
+    DSAMPLES = Draw.Create(16)
+    IMGFILTER = Draw.Create(1)
+    IMGFILTERW = Draw.Create(1)
+    IMGFILTERH = Draw.Create(1)
+    BUCKETSIZE = Draw.Create(64)
+    BUCKETTYPE = Draw.Create(1)
+    REVERSE = Draw.Create(0)
+
+    # Camera panel values
+    DOF = Draw.Create(0)
+    DOFRADIUS = Draw.Create(1.00)
+    LENSSIDES = Draw.Create(6)
+    LENSROTATION = Draw.Create(0.0)
+    SPHERICALCAMERA = Draw.Create(0)
+    FISHEYECAMERA = Draw.Create(0)
+
+    # Background panel values
+    IMP_BCKGRD  = Draw.Create(1)
+    IMP_SUN  = Draw.Create(0)
+    BCKGRD = Draw.Create(0.0, 0.0, 0.0)
+    BACKGROUND = Draw.Create(0)
+    SUN_TURB = Draw.Create(6.0)
+    SUN_SAMPLES = Draw.Create(128)
+    IBL = Draw.Create(0)
+    IBLLOCK = Draw.Create(0)
+    IBLSAMPLES = Draw.Create(16)
+    INFINITEPLANE = Draw.Create(0)
+    IPLANECOLOR= Draw.Create(1.0, 1.0, 1.0)
+
+    # Light panel values
+    MESHLIGHTPOWER = Draw.Create(100)
+    LAMPPOWER = Draw.Create(100)
+    CONVLAMP    = Draw.Create(0)
+
+    # Config panel values
+    MEM = Draw.Create(1024)
+    THREADS    = Draw.Create(0)
+
+    # GI/Caustic panel values
+    CAUSTICS = Draw.Create(0)
+    PHOTONNUMBER = Draw.Create(1000000)
+    PHOTONMAP = Draw.Create(1)
+    PHOTONESTIMATE = Draw.Create(100)
+    PHOTONRADIUS = Draw.Create(0.5)
+    INSTANTGI = Draw.Create(0)
+    IGISAMPLES = Draw.Create(64)
+    IGISETS = Draw.Create(1)
+    IGIBIAS = Draw.Create(0.01)
+    IGIBIASSAMPLES = Draw.Create(0)
+    IRRCACHE = Draw.Create(0)
+    IRRSAMPLES = Draw.Create(512)
+    IRRTOLERANCE = Draw.Create(0.01)
+    IRRSPACEMIN = Draw.Create(0.05)
+    IRRSPACEMAX = Draw.Create(5.0)
+    USEGLOBALS = Draw.Create(0)
+    gPHOTONNUMBER = Draw.Create(1000000)
+    gPHOTONMAP = Draw.Create(1)
+    gPHOTONESTIMATE = Draw.Create(100)
+    gPHOTONRADIUS = Draw.Create(0.5)
+    PATHTRACE = Draw.Create(0)
+    PATHSAMPLES = Draw.Create(32)
+    VIEWCAUSTICS = Draw.Create(0)
+    VIEWGLOBALS = Draw.Create(0)
+    VIEWGI = Draw.Create(0)
+    OCCLUSION = Draw.Create(0)
+    OCCBRIGHT = Draw.Create(1.0, 1.0, 1.0)
+    OCCDARK = Draw.Create(0.0, 0.0, 0.0)
+    OCCSAMPLES = Draw.Create(32)
+    OCCDIST = Draw.Create(3.0)
+    FAKEAMB = Draw.Create(0)
+    FAMBSKY = Draw.Create(1.0, 0.95, 0.65)
+    FAMBGROUND = Draw.Create(0.5, 0.8, 1.0)
+
+    # Shader panel values
+    SHADTYPE = Draw.Create(1)
+
+    # Render panel values
+    QUICKOPT = Draw.Create(1)
+    IPR = Draw.Create(0)
+    EXP_ANIM = Draw.Create(0)
+    DEPTH_DIFF = Draw.Create(1)
+    DEPTH_REFL = Draw.Create(4)
+    DEPTH_REFR = Draw.Create(4)
+    NOGI    = Draw.Create(0)
+    NOCAUSTICS    = Draw.Create(0)
+    QUICKOCC    = Draw.Create(0)
+    QOCCDIST    = Draw.Create(0.5)
+    NOGUI    = Draw.Create(0)
+    SMALLMESH    = Draw.Create(0)
+
+    ## Lists ##
+    IMGFILTERLIST = ["box", "gaussian", "mitchell", "triangle", "catmull-rom", "blackman-harris", "sinc", "lanczos"]
+    BUCKETTYPELIST = ["hilbert", "spiral", "column", "row", "diagonal", "random"]
+    FILETYPE
+    PHOTONMAPLIST = ["kd"]
+    gPHOTONMAPLIST = ["grid"]
 
 ####### Script Settings Section #######
 #######################################
@@ -222,2191 +222,2191 @@
 ## Background and AA settings ##
 # Send background and AA values to Blender as IDs #
 def def_output():
-	global IM_HEIGHT, IM_WIDTH
-	# Define Blender's values
-	world = Blender.World.GetCurrent()
-	horcol = world.getHor()
-	horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
-	IM_HEIGHT = SCENE.getRenderingContext().imageSizeY()
-	IM_WIDTH  = SCENE.getRenderingContext().imageSizeX()
-
-	# Writes Scene properties
-	SCENE.properties['SceneProp'] = "true"
-	SCENE.properties['ImageWidth'] = IM_WIDTH
-	SCENE.properties['ImageHeight'] = IM_HEIGHT
-	SCENE.properties['MinAA'] = MINAA.val
-	SCENE.properties['MaxAA'] = MAXAA.val
-	SCENE.properties['Samples'] = AASAMPLES.val
-	SCENE.properties['Filter'] = IMGFILTER.val
-	if AAJITTER.val == 1:
-		SCENE.properties['Jitter'] = "true"
-	else:
-		SCENE.properties['Jitter'] = "false"
-	SCENE.properties['DepthDiff'] = DEPTH_DIFF.val
-	SCENE.properties['DepthRefl'] = DEPTH_REFL.val
-	SCENE.properties['DepthRefr'] = DEPTH_REFR.val
-	if IMP_BCKGRD.val == 1:
-		SCENE.properties['Blender Background'] = "true"
-		SCENE.properties['HorizonColR'] = horcol0
-		SCENE.properties['HorizonColG'] = horcol1
-		SCENE.properties['HorizonColB'] = horcol2
-	else:
-               	SCENE.properties['Blender Background'] = "false"
-	if BACKGROUND.val == 1:
-		SCENE.properties['Script Background'] = "true"
-		SCENE.properties['HorizonCol'] = BCKGRD.val
-	else:
-                SCENE.properties['Script Background'] = "false"
-	SCENE.properties['Bucket Size'] = BUCKETSIZE.val
-	SCENE.properties['Bucket Type'] = BUCKETTYPE.val
-	if REVERSE == 1:
-		SCENE.properties['Reverse Bucket'] = "true"
-	else:
-		SCENE.properties['Reverse Bucket'] = "false"
+    global IM_HEIGHT, IM_WIDTH
+    # Define Blender's values
+    world = Blender.World.GetCurrent()
+    horcol = world.getHor()
+    horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
+    IM_HEIGHT = SCENE.getRenderingContext().imageSizeY()
+    IM_WIDTH  = SCENE.getRenderingContext().imageSizeX()
+
+    # Writes Scene properties
+    SCENE.properties['SceneProp'] = "true"
+    SCENE.properties['ImageWidth'] = IM_WIDTH
+    SCENE.properties['ImageHeight'] = IM_HEIGHT
+    SCENE.properties['MinAA'] = MINAA.val
+    SCENE.properties['MaxAA'] = MAXAA.val
+    SCENE.properties['Samples'] = AASAMPLES.val
+    SCENE.properties['Filter'] = IMGFILTER.val
+    if AAJITTER.val == 1:
+        SCENE.properties['Jitter'] = "true"
+    else:
+        SCENE.properties['Jitter'] = "false"
+    SCENE.properties['DepthDiff'] = DEPTH_DIFF.val
+    SCENE.properties['DepthRefl'] = DEPTH_REFL.val
+    SCENE.properties['DepthRefr'] = DEPTH_REFR.val
+    if IMP_BCKGRD.val == 1:
+        SCENE.properties['Blender Background'] = "true"
+        SCENE.properties['HorizonColR'] = horcol0
+        SCENE.properties['HorizonColG'] = horcol1
+        SCENE.properties['HorizonColB'] = horcol2
+    else:
+        SCENE.properties['Blender Background'] = "false"
+    if BACKGROUND.val == 1:
+        SCENE.properties['Script Background'] = "true"
+        SCENE.properties['HorizonCol'] = BCKGRD.val
+    else:
+        SCENE.properties['Script Background'] = "false"
+    SCENE.properties['Bucket Size'] = BUCKETSIZE.val
+    SCENE.properties['Bucket Type'] = BUCKETTYPE.val
+    if REVERSE == 1:
+        SCENE.properties['Reverse Bucket'] = "true"
+    else:
+        SCENE.properties['Reverse Bucket'] = "false"
 
 # Import background and AA values from Blender IDs to script #
 def import_output():
-	global IM_HEIGHT, IM_WIDTH
-	# Retrieve Blender's Scene ID values
-	world = Blender.World.GetCurrent()
-	horcol = world.getHor()
-	horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
-	IM_HEIGHT = SCENE.getRenderingContext().imageSizeY()
-	IM_WIDTH  = SCENE.getRenderingContext().imageSizeX()
-
-	if SCENE.properties['SceneProp'] == "true":
-		IM_WIDTH = SCENE.properties['ImageWidth']
-		IM_HEIGHT = SCENE.properties['ImageHeight']
-		MINAA.val = SCENE.properties['MinAA']
-		MAXAA.val = SCENE.properties['MaxAA']
-		AASAMPLES.val = SCENE.properties['Samples']
-		IMGFILTER.val = SCENE.properties['Filter']
-		DEPTH_DIFF.val = SCENE.properties['DepthDiff']
-		DEPTH_REFL.val = SCENE.properties['DepthRefl']
-		DEPTH_REFR.val = SCENE.properties['DepthRefr']
-		Draw.Redraw()
-                if SCENE.properties['Jitter'] == "true":
-                        AAJITTER.val = 1
-                        Draw.Redraw()
-                else:
-                        AAJITTER.val = 0
-                        Draw.Redraw()
-                if  SCENE.properties['Blender Background'] == "true":
-                        IMP_BCKGRD.val = 1
-                        horcol0 = SCENE.properties['HorizonColR']
-                        horcol1 = SCENE.properties['HorizonColG']
-                        horcol2 = SCENE.properties['HorizonColB']
-                        BACKGROUND.val = 0
-                        Draw.Redraw()
-                else:
-                        IMP_BCKGRD.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Script Background'] == "true":
-                        BACKGROUND.val = 1
-                        BCKGRD.val = SCENE.properties['HorizonCol'][0], SCENE.properties['HorizonCol'][1], SCENE.properties['HorizonCol'][2]
-                        IMP_BCKGRD.val = 0
-                        Draw.Redraw()
-                else:
-                        BACKGROUND.val = 0
-                        Draw.Redraw()
-                BUCKETSIZE.val = SCENE.properties['Bucket Size']
-                BUCKETTYPE.val = SCENE.properties['Bucket Type']
-                if SCENE.properties['Reverse Bucket'] == "true":
-                        REVERSE.val = 1
-                        Draw.Redraw()
-                else:
-                        REVERSE.val = 0
-                        Draw.Redraw()
+    global IM_HEIGHT, IM_WIDTH
+    # Retrieve Blender's Scene ID values
+    world = Blender.World.GetCurrent()
+    horcol = world.getHor()
+    horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
+    IM_HEIGHT = SCENE.getRenderingContext().imageSizeY()
+    IM_WIDTH  = SCENE.getRenderingContext().imageSizeX()
+
+    if SCENE.properties['SceneProp'] == "true":
+        IM_WIDTH = SCENE.properties['ImageWidth']
+        IM_HEIGHT = SCENE.properties['ImageHeight']
+        MINAA.val = SCENE.properties['MinAA']
+        MAXAA.val = SCENE.properties['MaxAA']
+        AASAMPLES.val = SCENE.properties['Samples']
+        IMGFILTER.val = SCENE.properties['Filter']
+        DEPTH_DIFF.val = SCENE.properties['DepthDiff']
+        DEPTH_REFL.val = SCENE.properties['DepthRefl']
+        DEPTH_REFR.val = SCENE.properties['DepthRefr']
+        Draw.Redraw()
+        if SCENE.properties['Jitter'] == "true":
+            AAJITTER.val = 1
+            Draw.Redraw()
+        else:
+            AAJITTER.val = 0
+            Draw.Redraw()
+        if  SCENE.properties['Blender Background'] == "true":
+            IMP_BCKGRD.val = 1
+            horcol0 = SCENE.properties['HorizonColR']
+            horcol1 = SCENE.properties['HorizonColG']
+            horcol2 = SCENE.properties['HorizonColB']
+            BACKGROUND.val = 0
+            Draw.Redraw()
+        else:
+            IMP_BCKGRD.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Script Background'] == "true":
+            BACKGROUND.val = 1
+            BCKGRD.val = SCENE.properties['HorizonCol'][0], SCENE.properties['HorizonCol'][1], SCENE.properties['HorizonCol'][2]
+            IMP_BCKGRD.val = 0
+            Draw.Redraw()
+        else:
+            BACKGROUND.val = 0
+            Draw.Redraw()
+        BUCKETSIZE.val = SCENE.properties['Bucket Size']
+        BUCKETTYPE.val = SCENE.properties['Bucket Type']
+        if SCENE.properties['Reverse Bucket'] == "true":
+            REVERSE.val = 1
+            Draw.Redraw()
+        else:
+            REVERSE.val = 0
+            Draw.Redraw()
 
 # Export background and AA values #
 def export_output():
-                print("o exporting output details...")
-                FILE.write("image {\n")
-       	        FILE.write("\tresolution %d %d\n" % (IM_WIDTH, IM_HEIGHT))
-                FILE.write("\taa %s %s\n" % (MINAA.val, MAXAA.val))
-                FILE.write("\tsamples %s\n" % AASAMPLES.val)
-                FILE.write("\tfilter %s\n" % IMGFILTERLIST[IMGFILTER.val-1])
-                if AAJITTER == 1:
-                	FILE.write("\tjitter true\n")
-                FILE.write("}")
-                FILE.write("\n")
-
-                print("o exporting trace-depths options...")
-                FILE.write("trace-depths {\n")
-                FILE.write("\tdiff %s \n" % DEPTH_DIFF)
-                FILE.write("\trefl %s \n" % DEPTH_REFL)
-                FILE.write("\trefr %s\n" % DEPTH_REFR)
-                FILE.write("}")
-                FILE.write("\n")
-                if IMP_BCKGRD.val == 1:
-                	print("o exporting background...")
-                        world = Blender.World.GetCurrent()
-                        horcol = world.getHor()
-                        horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
-                        FILE.write("background {\n")
-                        FILE.write("\tcolor  { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (horcol0, horcol1, horcol2))
-                        FILE.write("}")
-                        FILE.write("\n")
-                elif BACKGROUND.val == 1:
-                	print("o creating background...")
-                        FILE.write("background {\n")
-                        FILE.write("\tcolor  { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % BCKGRD.val)
-                        FILE.write("}")
-                        FILE.write("\n")
-                if REVERSE.val == 0:
-                        FILE.write("\nbucket %s %s\n" % (BUCKETSIZE.val, BUCKETTYPELIST[BUCKETTYPE.val-1]))
-                elif REVERSE.val == 1:
-                        FILE.write("\nbucket %s " % BUCKETSIZE.val)
-                        FILE.write("\"reverse %s\"\n" % BUCKETTYPELIST[BUCKETTYPE.val-1])
+    print("o exporting output details...")
+    FILE.write("image {\n")
+    FILE.write("\tresolution %d %d\n" % (IM_WIDTH, IM_HEIGHT))
+    FILE.write("\taa %s %s\n" % (MINAA.val, MAXAA.val))
+    FILE.write("\tsamples %s\n" % AASAMPLES.val)
+    FILE.write("\tfilter %s\n" % IMGFILTERLIST[IMGFILTER.val-1])
+    if AAJITTER == 1:
+        FILE.write("\tjitter true\n")
+    FILE.write("}")
+    FILE.write("\n")
+
+    print("o exporting trace-depths options...")
+    FILE.write("trace-depths {\n")
+    FILE.write("\tdiff %s \n" % DEPTH_DIFF)
+    FILE.write("\trefl %s \n" % DEPTH_REFL)
+    FILE.write("\trefr %s\n" % DEPTH_REFR)
+    FILE.write("}")
+    FILE.write("\n")
+    if IMP_BCKGRD.val == 1:
+        print("o exporting background...")
+        world = Blender.World.GetCurrent()
+        horcol = world.getHor()
+        horcol0, horcol1, horcol2 = horcol[0], horcol[1], horcol[2]
+        FILE.write("background {\n")
+        FILE.write("\tcolor  { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (horcol0, horcol1, horcol2))
+        FILE.write("}")
+        FILE.write("\n")
+    elif BACKGROUND.val == 1:
+        print("o creating background...")
+        FILE.write("background {\n")
+        FILE.write("\tcolor  { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % BCKGRD.val)
+        FILE.write("}")
+        FILE.write("\n")
+    if REVERSE.val == 0:
+        FILE.write("\nbucket %s %s\n" % (BUCKETSIZE.val, BUCKETTYPELIST[BUCKETTYPE.val-1]))
+    elif REVERSE.val == 1:
+        FILE.write("\nbucket %s " % BUCKETSIZE.val)
+        FILE.write("\"reverse %s\"\n" % BUCKETTYPELIST[BUCKETTYPE.val-1])
 
 ## Caustic and global illumination settings ##
 # Send GI and caustic values to Blender as IDs #
 def def_gi():
-        # Writes GI properties
-        if CAUSTICS.val == 1:
-                SCENE.properties['Caustics'] = "true"
-		SCENE.properties['Caustics Photon Number'] = PHOTONNUMBER.val
-                SCENE.properties['Caustics Photon Map'] = PHOTONMAP.val
-                SCENE.properties['Caustics Photon Estimate'] = PHOTONESTIMATE.val
-        	SCENE.properties['Caustics Photon Radius'] = PHOTONRADIUS.val
-	else:
-		SCENE.properties['Caustics'] = "false"
-	if INSTANTGI.val == 1:
-                SCENE.properties['IGI'] = "true"
-		SCENE.properties['IGI Samples'] = IGISAMPLES.val
-		SCENE.properties['IGI Sets'] = IGISETS.val
-		SCENE.properties['IGI Bias'] = IGIBIAS.val
-		SCENE.properties['IGI Bias Samples'] = IGIBIASSAMPLES.val
-	else:
-		SCENE.properties['IGI'] = "false"
-	if IRRCACHE.val == 1:
-                SCENE.properties['IRR'] = "true"
-		SCENE.properties['IRR Samples'] = IRRSAMPLES.val
-		SCENE.properties['IRR Tolerance'] = IRRTOLERANCE.val
-		SCENE.properties['IRR Space Min'] = IRRSPACEMIN.val
-		SCENE.properties['IRR Space Max'] = IRRSPACEMAX.val
-	else:
-		SCENE.properties['IRR'] = "false"
-	if USEGLOBALS.val == 1:
-                SCENE.properties['Global Photon'] = "true"
-		SCENE.properties['Global Photon Num'] = gPHOTONNUMBER.val
-		SCENE.properties['Global Photon Map'] = gPHOTONMAP.val
-		SCENE.properties['Global Photon Estimate'] = gPHOTONESTIMATE.val
-		SCENE.properties['Global Photon Radius'] = gPHOTONRADIUS.val
-	else:
-		SCENE.properties['Global Photon'] = "false"
-	if PATHTRACE.val == 1:
-                SCENE.properties['Path Tracing'] = "true"
-		SCENE.properties['Path Tracing Samples'] = PATHSAMPLES.val
-	else:
-		SCENE.properties['Path Tracing'] = "false"
-	if OCCLUSION.val ==1:
-                SCENE.properties['Global AO'] = "true"
-                SCENE.properties['Global AO Bright'] = OCCBRIGHT.val
-                SCENE.properties['Global AO Dark'] = OCCDARK.val
-                SCENE.properties['Global AO Samples'] = OCCSAMPLES.val
-                SCENE.properties['Global AO Distance'] = OCCDIST.val
-	else:
-               SCENE.properties['Global AO'] = "false"
-        if FAKEAMB.val ==1:
-                SCENE.properties['Fake Ambient Term'] = "true"
-                SCENE.properties['Fake Ambient Term Sky'] = FAMBSKY.val
-                SCENE.properties['Fake Ambient Term Ground'] = FAMBGROUND.val
-	else:
-               SCENE.properties['Fake Ambient Term'] = "false"
-	if VIEWCAUSTICS.val == 1:
-		SCENE.properties['View Caustics'] = "true"
-	else:
-		SCENE.properties['View Caustics'] = "false"
-	if VIEWGLOBALS.val == 1:
-		SCENE.properties['View Globals'] = "true"
-	else:
-		SCENE.properties['View Globals'] = "false"
-	if VIEWGI.val == 1:
-		SCENE.properties['View GI'] = "true"
-	else:
-		SCENE.properties['View GI'] = "false"
+    # Writes GI properties
+    if CAUSTICS.val == 1:
+        SCENE.properties['Caustics'] = "true"
+        SCENE.properties['Caustics Photon Number'] = PHOTONNUMBER.val
+        SCENE.properties['Caustics Photon Map'] = PHOTONMAP.val
+        SCENE.properties['Caustics Photon Estimate'] = PHOTONESTIMATE.val
+        SCENE.properties['Caustics Photon Radius'] = PHOTONRADIUS.val
+    else:
+        SCENE.properties['Caustics'] = "false"
+    if INSTANTGI.val == 1:
+        SCENE.properties['IGI'] = "true"
+        SCENE.properties['IGI Samples'] = IGISAMPLES.val
+        SCENE.properties['IGI Sets'] = IGISETS.val
+        SCENE.properties['IGI Bias'] = IGIBIAS.val
+        SCENE.properties['IGI Bias Samples'] = IGIBIASSAMPLES.val
+    else:
+        SCENE.properties['IGI'] = "false"
+    if IRRCACHE.val == 1:
+        SCENE.properties['IRR'] = "true"
+        SCENE.properties['IRR Samples'] = IRRSAMPLES.val
+        SCENE.properties['IRR Tolerance'] = IRRTOLERANCE.val
+        SCENE.properties['IRR Space Min'] = IRRSPACEMIN.val
+        SCENE.properties['IRR Space Max'] = IRRSPACEMAX.val
+    else:
+        SCENE.properties['IRR'] = "false"
+    if USEGLOBALS.val == 1:
+        SCENE.properties['Global Photon'] = "true"
+        SCENE.properties['Global Photon Num'] = gPHOTONNUMBER.val
+        SCENE.properties['Global Photon Map'] = gPHOTONMAP.val
+        SCENE.properties['Global Photon Estimate'] = gPHOTONESTIMATE.val
+        SCENE.properties['Global Photon Radius'] = gPHOTONRADIUS.val
+    else:
+        SCENE.properties['Global Photon'] = "false"
+    if PATHTRACE.val == 1:
+        SCENE.properties['Path Tracing'] = "true"
+        SCENE.properties['Path Tracing Samples'] = PATHSAMPLES.val
+    else:
+        SCENE.properties['Path Tracing'] = "false"
+    if OCCLUSION.val ==1:
+        SCENE.properties['Global AO'] = "true"
+        SCENE.properties['Global AO Bright'] = OCCBRIGHT.val
+        SCENE.properties['Global AO Dark'] = OCCDARK.val
+        SCENE.properties['Global AO Samples'] = OCCSAMPLES.val
+        SCENE.properties['Global AO Distance'] = OCCDIST.val
+    else:
+        SCENE.properties['Global AO'] = "false"
+    if FAKEAMB.val ==1:
+        SCENE.properties['Fake Ambient Term'] = "true"
+        SCENE.properties['Fake Ambient Term Sky'] = FAMBSKY.val
+        SCENE.properties['Fake Ambient Term Ground'] = FAMBGROUND.val
+    else:
+        SCENE.properties['Fake Ambient Term'] = "false"
+    if VIEWCAUSTICS.val == 1:
+        SCENE.properties['View Caustics'] = "true"
+    else:
+        SCENE.properties['View Caustics'] = "false"
+    if VIEWGLOBALS.val == 1:
+        SCENE.properties['View Globals'] = "true"
+    else:
+        SCENE.properties['View Globals'] = "false"
+    if VIEWGI.val == 1:
+        SCENE.properties['View GI'] = "true"
+    else:
+        SCENE.properties['View GI'] = "false"
 
 # Import GI values from Blender IDs to script #
 def import_gi():
-        # Retrieve Blender's GI/Caustic ID values
-        if SCENE.properties['SceneProp'] == "true":
-                if SCENE.properties['Caustics'] == "true":
-                        CAUSTICS.val = 1
-                        PHOTONNUMBER.val = SCENE.properties['Caustics Photon Number']
-                        PHOTONMAP.val = SCENE.properties['Caustics Photon Map']
-                        PHOTONESTIMATE.val = SCENE.properties['Caustics Photon Estimate']
-                        PHOTONRADIUS.val = SCENE.properties['Caustics Photon Radius']
-                        Draw.Redraw()
-                else:
-                        CAUSTICS.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['IGI'] == "true":
-                        INSTANTGI.val = 1
-                        IGISAMPLES.val = SCENE.properties['IGI Samples']
-                        IGISETS.val = SCENE.properties['IGI Sets']
-                        IGIBIAS.val = SCENE.properties['IGI Bias']
-                        IGIBIASSAMPLES.val = SCENE.properties['IGI Bias Samples']
-                        Draw.Redraw()
-                else:
-                        INSTANTGI.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['IRR'] == "true":
-                        IRRCACHE.val = 1
-                        IRRSAMPLES.val = SCENE.properties['IRR Samples']
-                        IRRTOLERANCE.val = SCENE.properties['IRR Tolerance']
-                        IRRSPACEMIN.val = SCENE.properties['IRR Space Min']
-                        IRRSPACEMAX.val = SCENE.properties['IRR Space Max']
-                        Draw.Redraw()
-                else:
-                        IRRCACHE.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Global Photon'] == "true":
-                        USEGLOBALS.val = 1
-                	gPHOTONNUMBER.val = SCENE.properties['Global Photon Num']
-                        gPHOTONMAP.val = SCENE.properties['Global Photon Map']
-                        gPHOTONESTIMATE.val = SCENE.properties['Global Photon Estimate']
-                        gPHOTONRADIUS.val = SCENE.properties['Global Photon Radius']
-                        Draw.Redraw()
-                else:
-                        USEGLOBALS.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Path Tracing'] == "true":
-                        PATHTRACE.val = 1
-                	PATHSAMPLES.val = SCENE.properties['Path Tracing Samples']
-                	Draw.Redraw()
-                else:
-                        PATHTRACE.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Global AO'] == "true":
-                        OCCLUSION.val = 1
-                        OCCBRIGHT.val = SCENE.properties['Global AO Bright'][0], SCENE.properties['Global AO Bright'][1], SCENE.properties['Global AO Bright'][2]
-                        OCCDARK.val = SCENE.properties['Global AO Dark'][0], SCENE.properties['Global AO Dark'][1], SCENE.properties['Global AO Dark'][2]
-                        OCCSAMPLES.val = SCENE.properties['Global AO Samples']
-                        OCCDIST.val = SCENE.properties['Global AO Distance']
-                        Draw.Redraw()
-                else:
-                        OCCLUSION.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Fake Ambient Term'] == "true":
-                        FAKEAMB.val = 1
-                        FAMBSKY.val = SCENE.properties['Fake Ambient Term Sky'][0], SCENE.properties['Fake Ambient Term Sky'][1], SCENE.properties['Fake Ambient Term Sky'][2]
-                        FAMBGROUND.val = SCENE.properties['Fake Ambient Term Ground'][0], SCENE.properties['Fake Ambient Term Ground'][1], SCENE.properties['Fake Ambient Term Ground'][2]
-                        Draw.Redraw()
-                else:
-                        FAKEAMB.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['View Caustics'] == "true":
-                        VIEWCAUSTICS.val = 1
-                        Draw.Redraw()
-                else:
-                        VIEWCAUSTICS.val = 0
-                        Draw.Redraw()
-        	if SCENE.properties['View Globals'] == "true":
-                        VIEWGLOBALS.val = 1
-                        Draw.Redraw()
-                else:
-                        VIEWGLOBALS.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['View GI'] == "true":
-                        VIEWGI.val = 1
-                        Draw.Redraw()
-                else:
-                        VIEWGI.val = 0
-                        Draw.Redraw()
+    # Retrieve Blender's GI/Caustic ID values
+    if SCENE.properties['SceneProp'] == "true":
+        if SCENE.properties['Caustics'] == "true":
+            CAUSTICS.val = 1
+            PHOTONNUMBER.val = SCENE.properties['Caustics Photon Number']
+            PHOTONMAP.val = SCENE.properties['Caustics Photon Map']
+            PHOTONESTIMATE.val = SCENE.properties['Caustics Photon Estimate']
+            PHOTONRADIUS.val = SCENE.properties['Caustics Photon Radius']
+            Draw.Redraw()
+        else:
+            CAUSTICS.val = 0
+            Draw.Redraw()
+        if SCENE.properties['IGI'] == "true":
+            INSTANTGI.val = 1
+            IGISAMPLES.val = SCENE.properties['IGI Samples']
+            IGISETS.val = SCENE.properties['IGI Sets']
+            IGIBIAS.val = SCENE.properties['IGI Bias']
+            IGIBIASSAMPLES.val = SCENE.properties['IGI Bias Samples']
+            Draw.Redraw()
+        else:
+            INSTANTGI.val = 0
+            Draw.Redraw()
+        if SCENE.properties['IRR'] == "true":
+            IRRCACHE.val = 1
+            IRRSAMPLES.val = SCENE.properties['IRR Samples']
+            IRRTOLERANCE.val = SCENE.properties['IRR Tolerance']
+            IRRSPACEMIN.val = SCENE.properties['IRR Space Min']
+            IRRSPACEMAX.val = SCENE.properties['IRR Space Max']
+            Draw.Redraw()
+        else:
+            IRRCACHE.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Global Photon'] == "true":
+            USEGLOBALS.val = 1
+            gPHOTONNUMBER.val = SCENE.properties['Global Photon Num']
+            gPHOTONMAP.val = SCENE.properties['Global Photon Map']
+            gPHOTONESTIMATE.val = SCENE.properties['Global Photon Estimate']
+            gPHOTONRADIUS.val = SCENE.properties['Global Photon Radius']
+            Draw.Redraw()
+        else:
+            USEGLOBALS.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Path Tracing'] == "true":
+            PATHTRACE.val = 1
+            PATHSAMPLES.val = SCENE.properties['Path Tracing Samples']
+            Draw.Redraw()
+        else:
+            PATHTRACE.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Global AO'] == "true":
+            OCCLUSION.val = 1
+            OCCBRIGHT.val = SCENE.properties['Global AO Bright'][0], SCENE.properties['Global AO Bright'][1], SCENE.properties['Global AO Bright'][2]
+            OCCDARK.val = SCENE.properties['Global AO Dark'][0], SCENE.properties['Global AO Dark'][1], SCENE.properties['Global AO Dark'][2]
+            OCCSAMPLES.val = SCENE.properties['Global AO Samples']
+            OCCDIST.val = SCENE.properties['Global AO Distance']
+            Draw.Redraw()
+        else:
+            OCCLUSION.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Fake Ambient Term'] == "true":
+            FAKEAMB.val = 1
+            FAMBSKY.val = SCENE.properties['Fake Ambient Term Sky'][0], SCENE.properties['Fake Ambient Term Sky'][1], SCENE.properties['Fake Ambient Term Sky'][2]
+            FAMBGROUND.val = SCENE.properties['Fake Ambient Term Ground'][0], SCENE.properties['Fake Ambient Term Ground'][1], SCENE.properties['Fake Ambient Term Ground'][2]
+            Draw.Redraw()
+        else:
+            FAKEAMB.val = 0
+            Draw.Redraw()
+        if SCENE.properties['View Caustics'] == "true":
+            VIEWCAUSTICS.val = 1
+            Draw.Redraw()
+        else:
+            VIEWCAUSTICS.val = 0
+            Draw.Redraw()
+        if SCENE.properties['View Globals'] == "true":
+            VIEWGLOBALS.val = 1
+            Draw.Redraw()
+        else:
+            VIEWGLOBALS.val = 0
+            Draw.Redraw()
+        if SCENE.properties['View GI'] == "true":
+            VIEWGI.val = 1
+            Draw.Redraw()
+        else:
+            VIEWGI.val = 0
+            Draw.Redraw()
 
 # Export global illumination values #
 def export_gi():
-             	#Caustic Settings
-                if CAUSTICS.val == 1:
-                        print("o exporting caustic settings...")
-                        FILE.write("\nphotons {\n")
-        		FILE.write("\tcaustics %s" % PHOTONNUMBER.val)
-        		FILE.write(" %s " % PHOTONMAPLIST[PHOTONMAP.val-1])
-        		FILE.write("%s %s\n" % (PHOTONESTIMATE.val, PHOTONRADIUS.val))
-        		FILE.write("}\n")
-            	#Instant GI Settings
-                if INSTANTGI.val == 1:
-                        print("o exporting Instant GI settings...")
-        		FILE.write("\ngi {\n")
-        		FILE.write("\ttype igi\n")
-        		FILE.write("\tsamples %s\n" % IGISAMPLES.val)
-        		FILE.write("\tsets %s\n" % IGISETS.val)
-        		FILE.write("\tb %s\n" % IGIBIAS.val)
-        		FILE.write("\tbias-samples %s\n" % IGIBIASSAMPLES.val)
-        		FILE.write("}\n")
-        	#Irradiance Cache GI Settings
-                if IRRCACHE.val == 1:
-                        print("o exporting Irradiance Cache GI settings...")
-        		FILE.write("\ngi {\n")
-        		FILE.write("\ttype irr-cache\n")
-        		FILE.write("\tsamples %s\n" % IRRSAMPLES.val)
-        		FILE.write("\ttolerance %s\n" % IRRTOLERANCE.val)
-        		FILE.write("\tspacing %s %s\n" % (IRRSPACEMIN.val, IRRSPACEMAX.val))
-                        if USEGLOBALS.val == 0:
-        			FILE.write("}\n")
-                	#No Path Tracing on Secondary Bounces in Irradiance Cache Settings
-                        else:
-				FILE.write("\tglobal %s" % gPHOTONNUMBER.val)
-                                FILE.write(" %s " % gPHOTONMAPLIST[gPHOTONMAP.val-1])
-                                FILE.write("%s %s\n" % (gPHOTONESTIMATE.val, gPHOTONRADIUS.val))
-                                FILE.write("}\n")
-        	#Path Tracing GI Settings
-        	if PATHTRACE.val == 1:
-        		print("o exporting Path Tracing GI settings...")
-        		FILE.write("\ngi {\n")
-        		FILE.write("\ttype path\n")
-        		FILE.write("\tsamples %s\n" % PATHSAMPLES.val)
-        		FILE.write("}\n")
-        	#Ambient Occlusion GI Settings
-        	if OCCLUSION.val == 1:
-                        print("o exporting Ambient Occlusion GI settings...")
-                        FILE.write("\n\ngi {\n")
-                        FILE.write("\ttype ambocc\n")
-                        FILE.write("\tbright { \"sRGB nonlinear\" %s %s %s }\n" % OCCBRIGHT.val)
-                        FILE.write("\tdark { \"sRGB nonlinear\" %s %s %s }\n" % OCCDARK.val)
-                        FILE.write("\tsamples %s\n" % OCCSAMPLES.val)
-                        FILE.write("\tmaxdist %s\n}" % OCCDIST.val)
-                #Fake Ambient Term GI Settings
-        	if FAKEAMB.val == 1:
-                        print("o exporting Fake Ambient Term GI settings...")
-                        FILE.write("\n\ngi {\n")
-                        FILE.write("\ttype fake\n")
-                        FILE.write("\tup 0 1 0\n")
-                        FILE.write("\tsky { \"sRGB nonlinear\" %s %s %s }\n" % FAMBSKY.val)
-                        FILE.write("\tground { \"sRGB nonlinear\" %s %s %s }\n" % FAMBGROUND.val)
-                        FILE.write("\n}")
-        	#View Overrides
-                if VIEWCAUSTICS.val == 1:
-        		print("o exporting caustic override...")
-        		FILE.write("\nshader {\n")
-        		FILE.write("\tname debug_caustics\n")
-        		FILE.write("\ttype view-caustics\n")
-        		FILE.write("}\n")
-        		FILE.write("override debug_caustics false\n")
-                if VIEWGLOBALS.val == 1:
-        		print("o exporting globals override...")
-        		FILE.write("\nshader {\n")
-        		FILE.write("\tname debug_globals\n")
-        		FILE.write("\ttype view-global\n")
-        		FILE.write("}\n")
-        		FILE.write("override debug_globals false\n")
-        	if VIEWGI.val == 1:
-        		print("o exporting irradiance override...")
-        		FILE.write("\nshader {\n")
-        		FILE.write("\tname debug_gi\n")
-        		FILE.write("\ttype view-irradiance\n")
-        		FILE.write("}\n")
-        		FILE.write("override debug_gi false\n")
+        #Caustic Settings
+    if CAUSTICS.val == 1:
+        print("o exporting caustic settings...")
+        FILE.write("\nphotons {\n")
+        FILE.write("\tcaustics %s" % PHOTONNUMBER.val)
+        FILE.write(" %s " % PHOTONMAPLIST[PHOTONMAP.val-1])
+        FILE.write("%s %s\n" % (PHOTONESTIMATE.val, PHOTONRADIUS.val))
+        FILE.write("}\n")
+    #Instant GI Settings
+    if INSTANTGI.val == 1:
+        print("o exporting Instant GI settings...")
+        FILE.write("\ngi {\n")
+        FILE.write("\ttype igi\n")
+        FILE.write("\tsamples %s\n" % IGISAMPLES.val)
+        FILE.write("\tsets %s\n" % IGISETS.val)
+        FILE.write("\tb %s\n" % IGIBIAS.val)
+        FILE.write("\tbias-samples %s\n" % IGIBIASSAMPLES.val)
+        FILE.write("}\n")
+    #Irradiance Cache GI Settings
+    if IRRCACHE.val == 1:
+        print("o exporting Irradiance Cache GI settings...")
+        FILE.write("\ngi {\n")
+        FILE.write("\ttype irr-cache\n")
+        FILE.write("\tsamples %s\n" % IRRSAMPLES.val)
+        FILE.write("\ttolerance %s\n" % IRRTOLERANCE.val)
+        FILE.write("\tspacing %s %s\n" % (IRRSPACEMIN.val, IRRSPACEMAX.val))
+        if USEGLOBALS.val == 0:
+            FILE.write("}\n")
+        #No Path Tracing on Secondary Bounces in Irradiance Cache Settings
+        else:
+            FILE.write("\tglobal %s" % gPHOTONNUMBER.val)
+            FILE.write(" %s " % gPHOTONMAPLIST[gPHOTONMAP.val-1])
+            FILE.write("%s %s\n" % (gPHOTONESTIMATE.val, gPHOTONRADIUS.val))
+            FILE.write("}\n")
+    #Path Tracing GI Settings
+    if PATHTRACE.val == 1:
+        print("o exporting Path Tracing GI settings...")
+        FILE.write("\ngi {\n")
+        FILE.write("\ttype path\n")
+        FILE.write("\tsamples %s\n" % PATHSAMPLES.val)
+        FILE.write("}\n")
+    #Ambient Occlusion GI Settings
+    if OCCLUSION.val == 1:
+        print("o exporting Ambient Occlusion GI settings...")
+        FILE.write("\n\ngi {\n")
+        FILE.write("\ttype ambocc\n")
+        FILE.write("\tbright { \"sRGB nonlinear\" %s %s %s }\n" % OCCBRIGHT.val)
+        FILE.write("\tdark { \"sRGB nonlinear\" %s %s %s }\n" % OCCDARK.val)
+        FILE.write("\tsamples %s\n" % OCCSAMPLES.val)
+        FILE.write("\tmaxdist %s\n}" % OCCDIST.val)
+    #Fake Ambient Term GI Settings
+    if FAKEAMB.val == 1:
+        print("o exporting Fake Ambient Term GI settings...")
+        FILE.write("\n\ngi {\n")
+        FILE.write("\ttype fake\n")
+        FILE.write("\tup 0 1 0\n")
+        FILE.write("\tsky { \"sRGB nonlinear\" %s %s %s }\n" % FAMBSKY.val)
+        FILE.write("\tground { \"sRGB nonlinear\" %s %s %s }\n" % FAMBGROUND.val)
+        FILE.write("\n}")
+    #View Overrides
+    if VIEWCAUSTICS.val == 1:
+        print("o exporting caustic override...")
+        FILE.write("\nshader {\n")
+        FILE.write("\tname debug_caustics\n")
+        FILE.write("\ttype view-caustics\n")
+        FILE.write("}\n")
+        FILE.write("override debug_caustics false\n")
+    if VIEWGLOBALS.val == 1:
+        print("o exporting globals override...")
+        FILE.write("\nshader {\n")
+        FILE.write("\tname debug_globals\n")
+        FILE.write("\ttype view-global\n")
+        FILE.write("}\n")
+        FILE.write("override debug_globals false\n")
+    if VIEWGI.val == 1:
+        print("o exporting irradiance override...")
+        FILE.write("\nshader {\n")
+        FILE.write("\tname debug_gi\n")
+        FILE.write("\ttype view-irradiance\n")
+        FILE.write("}\n")
+        FILE.write("override debug_gi false\n")
 
 def export_shaders():
-	print("o exporting shaders...")
+    print("o exporting shaders...")
 
-        #Infinite Plane
-        if INFINITEPLANE.val == 1:
-                FILE.write("\n\nshader {\n\tname iplane\n\ttype diffuse\n")
-                FILE.write("\tdiff %s %s %s \n}" % IPLANECOLOR.val)
-        # Add infinite plane object #
-                FILE.write("\n\nobject {\n")
-                FILE.write("\tshader iplane\n")
-                FILE.write("\ttype plane\n")
-                FILE.write("\tp 0 0 0\n")
-                FILE.write("\tn 0 0 1\n}\n")
-
-	# default shader
-	FILE.write("\n\nshader {\n\tname def\n\ttype diffuse\n\tdiff 1 1 1\n}")
-	materials = Blender.Material.get()
-
-	for mat in materials:
-		RGB = mat.getRGBCol()
-		speccol = mat.getSpecCol()
-		textures = mat.getTextures()
-		flags = mat.getMode()
-
-		if mat.users == 0:
-			continue
-
-		# UBER shader
-		if mat.name.startswith("sfube"):
-                        textu = textures[0]
-                        textu2 = textures[2]
-			print("  o exporting uber shader "+mat.name+"...")
-			FILE.write("\n\nshader {\n")
-			FILE.write("\tname \""+mat.name+".shader\"\n")
-			FILE.write("\ttype uber\n")
-
-			# DIFF values
-			FILE.write("\tdiff %.3f %.3f %.3f\n" % (RGB[0], RGB[1], RGB[2]))
-			if textures[0] != None and textures[0].tex.getType() == "Image" and textu.tex.getImage() != None:
-                                colvalue = textu.colfac
-				FILE.write("\tdiff.texture \"" + textu.tex.getImage().getFilename() + "\"\n")
-				FILE.write("\tdiff.blend %s\n" % (colvalue * 1.0))
-			else:
-
-        			FILE.write("\tdiff.blend 0.0\n")
-
-			# SPEC values
-			FILE.write("\tspec %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
-			if textures[2] != None and textures[2].tex.getType() == "Image" and textu2.tex.getImage() != None:
-                                cspvalue = textu2.varfac
-				FILE.write("\tspec.texture \"" + textu2.tex.getImage().getFilename() + "\"\n")
-        			FILE.write("\tspec.blend %s\n" % (cspvalue * 0.1))
-			else:
-                                FILE.write("\tspec.blend 0.0\n")
-			FILE.write("\tglossy .1\n")
-			FILE.write("\tsamples 4\n}")
-
-		elif textures[0] != None and textures[0].tex.getType() == "Image":
-			textu = textures[0]
-			# image texture without image !!??
-			if textu.tex.getImage() == None:
-				print(("You material named " +mat.name+ " have an image texture with no image!"))
-				print ("replacing with default shader!")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype diffuse\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %s %s %s }\n}" % (1.0, 1.0, 1.0))
-
-			# ambocc texture shader
-			elif mat.name.startswith("sfamb"):
-				print("  o exporting ambient occlusion texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype amb-occ\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
-				FILE.write("\tdark %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
-				FILE.write("\tsamples 32\n")
-				FILE.write("\tdist 3.0\n}")
-
-			# diffuse texture shader
-			elif mat.name.startswith("sfdif"):
-				print("  o exporting diffuse texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype diffuse\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
-
-			# phong texture shader
-			elif mat.name.startswith("sfpho"):
-				print("  o exporting phong texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype phong\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
-				FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f } %s\n" %(speccol[0], speccol[1], speccol[2], mat.hard))
-				FILE.write("\tsamples 4\n}")
-
-			# ward texture shader
-			elif mat.name.startswith("sfwar"):
-				print("  o exporting ward texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype ward\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
-				speccol = mat.specCol
-				FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(speccol[0], speccol[1], speccol[2]))
-				FILE.write("\trough .2 .01\n")
-				FILE.write("\tsamples 4\n}")
-
-			# shiny texture shader
-			elif mat.name.startswith("sfshi"):
-				print("  o exporting shiny texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype shiny\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
-				FILE.write("\trefl %.2f\n}" % mat.getRayMirr())
-
-			# newcommers default diffuse texture shader
-			else:
-				print("  o exporting diffuse texture shader "+mat.name+"...")
-				FILE.write("\n\nshader {\n")
-				FILE.write("\tname \""+mat.name+".shader\"\n")
-				FILE.write("\ttype diffuse\n")
-				FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
-
-		else:
-
-			FILE.write("\n\nshader {\n")
-			FILE.write("\tname \""+mat.name+".shader\"\n")
-
-			## diffuse shader
-			if mat.name.startswith("sfdif"):
-				print("  o exporting diffuse shader "+mat.name+"...")
-				FILE.write("\ttype diffuse\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
-
-			## shiny shader
-			elif mat.name.startswith("sfshi"):
-				print("  o exporting shiny shader "+mat.name+"...")
-				FILE.write("\ttype shiny\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (RGB[0], RGB[1], RGB[2]))
-				FILE.write("\trefl %.2f\n}" % mat.getRayMirr())
-
-			## amb-occ shader
-			elif mat.name.startswith("sfamb"):
-				print("  o exporting ambient occlusion shader "+mat.name+"...")
-				FILE.write("\ttype amb-occ\n")
-				FILE.write("\tbright %.3f %.3f %.3f\n" % (RGB[0], RGB[1], RGB[2]))
-				FILE.write("\tdark %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
-				FILE.write("\tsamples 32\n")
-				FILE.write("\tdist 3.0\n}")
-
-			## phong shader
-			elif mat.name.startswith("sfpho"):
-				print("  o exporting phong shader "+ mat.name+"...")
-				FILE.write("\ttype phong\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (RGB[0],RGB[1],RGB[2]))
-				FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f } %s\n" %(speccol[0], speccol[1], speccol[2], mat.hard))
-				FILE.write("\tsamples 4\n}")
-
-			## ward shader
-			elif mat.name.startswith("sfwar"):
-				print("  o exporting ward shader "+ mat.name+"...")
-				FILE.write("\ttype ward\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(RGB[0],RGB[1],RGB[2]))
-				speccol = mat.specCol
-				FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(speccol[0], speccol[1], speccol[2]))
-				FILE.write("\trough .2 .01\n")
-				FILE.write("\tsamples 4\n}")
-
-			## reflection (mirror) shader
-			elif mat.name.startswith("sfmir") and flags & Material.Modes['RAYMIRROR']:
-				print("  o exporting mirror shader "+mat.name+"...")
-				FILE.write("\ttype mirror\n")
-				FILE.write("\trefl { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" %(RGB[0],RGB[1],RGB[2]))
-
-			## glass shader
-			elif mat.name.startswith("sfgla") and flags & Material.Modes['RAYTRANSP']:
-				print("  o exporting glass shader "+mat.name+"...")
-				FILE.write("\ttype glass\n")
-				FILE.write("\teta " + str(mat.getIOR()) + "\n")
-				FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(RGB[0],RGB[1],RGB[2]))
-				FILE.write("\tabsorbtion.distance 5.0\n")
-				FILE.write("\tabsorbtion.color { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" %(speccol[0], speccol[1], speccol[2]))
-
-			## constant shader
-			elif mat.name.startswith("sfcon"):
-				print("  o exporting constant shader "+mat.name+"...")
-				FILE.write("\ttype constant\n")
-				FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
-
-			## newcommers default diffuse shader
-			else:
-				print("  o exporting default diffuse shader "+mat.name+"...")
-				FILE.write("\ttype diffuse\n")
-				FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
+    #Infinite Plane
+    if INFINITEPLANE.val == 1:
+        FILE.write("\n\nshader {\n\tname iplane\n\ttype diffuse\n")
+        FILE.write("\tdiff %s %s %s \n}" % IPLANECOLOR.val)
+    # Add infinite plane object #
+        FILE.write("\n\nobject {\n")
+        FILE.write("\tshader iplane\n")
+        FILE.write("\ttype plane\n")
+        FILE.write("\tp 0 0 0\n")
+        FILE.write("\tn 0 0 1\n}\n")
+
+    # default shader
+    FILE.write("\n\nshader {\n\tname def\n\ttype diffuse\n\tdiff 1 1 1\n}")
+    materials = Blender.Material.get()
+
+    for mat in materials:
+        RGB = mat.getRGBCol()
+        speccol = mat.getSpecCol()
+        textures = mat.getTextures()
+        flags = mat.getMode()
+
+        if mat.users == 0:
+            continue
+
+        # UBER shader
+        if mat.name.startswith("sfube"):
+            textu = textures[0]
+            textu2 = textures[2]
+            print("  o exporting uber shader "+mat.name+"...")
+            FILE.write("\n\nshader {\n")
+            FILE.write("\tname \""+mat.name+".shader\"\n")
+            FILE.write("\ttype uber\n")
+
+            # DIFF values
+            FILE.write("\tdiff %.3f %.3f %.3f\n" % (RGB[0], RGB[1], RGB[2]))
+            if textures[0] != None and textures[0].tex.getType() == "Image" and textu.tex.getImage() != None:
+                colvalue = textu.colfac
+                FILE.write("\tdiff.texture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                FILE.write("\tdiff.blend %s\n" % (colvalue * 1.0))
+            else:
+
+                FILE.write("\tdiff.blend 0.0\n")
+
+            # SPEC values
+            FILE.write("\tspec %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
+            if textures[2] != None and textures[2].tex.getType() == "Image" and textu2.tex.getImage() != None:
+                cspvalue = textu2.varfac
+                FILE.write("\tspec.texture \"" + textu2.tex.getImage().getFilename() + "\"\n")
+                FILE.write("\tspec.blend %s\n" % (cspvalue * 0.1))
+            else:
+                FILE.write("\tspec.blend 0.0\n")
+            FILE.write("\tglossy .1\n")
+            FILE.write("\tsamples 4\n}")
+
+        elif textures[0] != None and textures[0].tex.getType() == "Image":
+            textu = textures[0]
+            # image texture without image !!??
+            if textu.tex.getImage() == None:
+                print(("You material named " +mat.name+ " have an image texture with no image!"))
+                print ("replacing with default shader!")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype diffuse\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %s %s %s }\n}" % (1.0, 1.0, 1.0))
+
+            # ambocc texture shader
+            elif mat.name.startswith("sfamb"):
+                print("  o exporting ambient occlusion texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype amb-occ\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                FILE.write("\tdark %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
+                FILE.write("\tsamples 32\n")
+                FILE.write("\tdist 3.0\n}")
+
+            # diffuse texture shader
+            elif mat.name.startswith("sfdif"):
+                print("  o exporting diffuse texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype diffuse\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
+
+            # phong texture shader
+            elif mat.name.startswith("sfpho"):
+                print("  o exporting phong texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype phong\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f } %s\n" %(speccol[0], speccol[1], speccol[2], mat.hard))
+                FILE.write("\tsamples 4\n}")
+
+            # ward texture shader
+            elif mat.name.startswith("sfwar"):
+                print("  o exporting ward texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype ward\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                speccol = mat.specCol
+                FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(speccol[0], speccol[1], speccol[2]))
+                FILE.write("\trough .2 .01\n")
+                FILE.write("\tsamples 4\n}")
+
+            # shiny texture shader
+            elif mat.name.startswith("sfshi"):
+                print("  o exporting shiny texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype shiny\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                FILE.write("\trefl %.2f\n}" % mat.getRayMirr())
+
+            # newcommers default diffuse texture shader
+            else:
+                print("  o exporting diffuse texture shader "+mat.name+"...")
+                FILE.write("\n\nshader {\n")
+                FILE.write("\tname \""+mat.name+".shader\"\n")
+                FILE.write("\ttype diffuse\n")
+                FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
+
+        else:
+
+            FILE.write("\n\nshader {\n")
+            FILE.write("\tname \""+mat.name+".shader\"\n")
+
+            ## diffuse shader
+            if mat.name.startswith("sfdif"):
+                print("  o exporting diffuse shader "+mat.name+"...")
+                FILE.write("\ttype diffuse\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
+
+            ## shiny shader
+            elif mat.name.startswith("sfshi"):
+                print("  o exporting shiny shader "+mat.name+"...")
+                FILE.write("\ttype shiny\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (RGB[0], RGB[1], RGB[2]))
+                FILE.write("\trefl %.2f\n}" % mat.getRayMirr())
+
+            ## amb-occ shader
+            elif mat.name.startswith("sfamb"):
+                print("  o exporting ambient occlusion shader "+mat.name+"...")
+                FILE.write("\ttype amb-occ\n")
+                FILE.write("\tbright %.3f %.3f %.3f\n" % (RGB[0], RGB[1], RGB[2]))
+                FILE.write("\tdark %.3f %.3f %.3f\n" % (speccol[0], speccol[1], speccol[2]))
+                FILE.write("\tsamples 32\n")
+                FILE.write("\tdist 3.0\n}")
+
+            ## phong shader
+            elif mat.name.startswith("sfpho"):
+                print("  o exporting phong shader "+ mat.name+"...")
+                FILE.write("\ttype phong\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (RGB[0],RGB[1],RGB[2]))
+                FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f } %s\n" %(speccol[0], speccol[1], speccol[2], mat.hard))
+                FILE.write("\tsamples 4\n}")
+
+            ## ward shader
+            elif mat.name.startswith("sfwar"):
+                print("  o exporting ward shader "+ mat.name+"...")
+                FILE.write("\ttype ward\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(RGB[0],RGB[1],RGB[2]))
+                speccol = mat.specCol
+                FILE.write("\tspec { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(speccol[0], speccol[1], speccol[2]))
+                FILE.write("\trough .2 .01\n")
+                FILE.write("\tsamples 4\n}")
+
+            ## reflection (mirror) shader
+            elif mat.name.startswith("sfmir") and flags & Material.Modes['RAYMIRROR']:
+                print("  o exporting mirror shader "+mat.name+"...")
+                FILE.write("\ttype mirror\n")
+                FILE.write("\trefl { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" %(RGB[0],RGB[1],RGB[2]))
+
+            ## glass shader
+            elif mat.name.startswith("sfgla") and flags & Material.Modes['RAYTRANSP']:
+                print("  o exporting glass shader "+mat.name+"...")
+                FILE.write("\ttype glass\n")
+                FILE.write("\teta " + str(mat.getIOR()) + "\n")
+                FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" %(RGB[0],RGB[1],RGB[2]))
+                FILE.write("\tabsorbtion.distance 5.0\n")
+                FILE.write("\tabsorbtion.color { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" %(speccol[0], speccol[1], speccol[2]))
+
+            ## constant shader
+            elif mat.name.startswith("sfcon"):
+                print("  o exporting constant shader "+mat.name+"...")
+                FILE.write("\ttype constant\n")
+                FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
+
+            ## newcommers default diffuse shader
+            else:
+                print("  o exporting default diffuse shader "+mat.name+"...")
+                FILE.write("\ttype diffuse\n")
+                FILE.write("\tdiff { \"sRGB nonlinear\" %.3f %.3f %.3f }\n}" % (RGB[0], RGB[1], RGB[2]))
 
 ## Export modifiers ##
 def export_modifiers():
-	print("o exporting modifiers...")
+    print("o exporting modifiers...")
 
-	materials = Blender.Material.get()
-	modifs_list = []
+    materials = Blender.Material.get()
+    modifs_list = []
 
-	for mat in materials:
+    for mat in materials:
 
-		textures = mat.getTextures()
-		flags = mat.getMode()
-
-		if textures[1] != None and textures[1].tex.getType() == "Image":
-			textu = textures[1]
-			Scale_value = str(textu.norfac * textu.mtNor*-0.001)
-
-			if textu.tex.name.startswith("bump"):
-				if textu.tex.getName() not in modifs_list:
-					modifs_list.append (str(textu.tex.getName()))
-					print("  o exporting modifier "+str(textu.tex.getName())+"...")
-					FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype bump\n")
-					FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
-					FILE.write("\tscale %s \n}\n" % Scale_value)
-
-			elif textu.tex.name.startswith("normal"):
-				if textu.tex.getName() not in modifs_list:
-					modifs_list.append (str(textu.tex.getName()))
-					print("  o exporting modifier "+str(textu.tex.getName())+"...")
-					FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype normalmap\n")
-					FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
-			else:
-				pass
-
-                if textures[3] != None and textures[3].tex.getType() != "Image":
-                        textu = textures[3]
-                        Scale_value = str(textu.norfac)
-                        if textu.tex.name.startswith("perlin"):
-                                if textu.tex.getName() not in modifs_list:
-                                        modifs_list.append (str(textu.tex.getName()))
-                                        print("  o exporting modifier "+str(textu.tex.getName())+"...")
-                                        FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype perlin\n")
-                                        FILE.write("\tfunction 0\n")
-                                        FILE.write("\tsize 1\n")
-                                        FILE.write("\tscale %s\n}\n" % Scale_value)
+        textures = mat.getTextures()
+        flags = mat.getMode()
+
+        if textures[1] != None and textures[1].tex.getType() == "Image":
+            textu = textures[1]
+            Scale_value = str(textu.norfac * textu.mtNor*-0.001)
+
+            if textu.tex.name.startswith("bump"):
+                if textu.tex.getName() not in modifs_list:
+                    modifs_list.append (str(textu.tex.getName()))
+                    print("  o exporting modifier "+str(textu.tex.getName())+"...")
+                    FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype bump\n")
+                    FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n")
+                    FILE.write("\tscale %s \n}\n" % Scale_value)
+
+            elif textu.tex.name.startswith("normal"):
+                if textu.tex.getName() not in modifs_list:
+                    modifs_list.append (str(textu.tex.getName()))
+                    print("  o exporting modifier "+str(textu.tex.getName())+"...")
+                    FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype normalmap\n")
+                    FILE.write("\ttexture \"" + textu.tex.getImage().getFilename() + "\"\n}")
+            else:
+                pass
+
+        if textures[3] != None and textures[3].tex.getType() != "Image":
+            textu = textures[3]
+            Scale_value = str(textu.norfac)
+            if textu.tex.name.startswith("perlin"):
+                if textu.tex.getName() not in modifs_list:
+                    modifs_list.append (str(textu.tex.getName()))
+                    print("  o exporting modifier "+str(textu.tex.getName())+"...")
+                    FILE.write("\n\nmodifier {\n\tname "+str(textu.tex.getName())+"\n\ttype perlin\n")
+                    FILE.write("\tfunction 0\n")
+                    FILE.write("\tsize 1\n")
+                    FILE.write("\tscale %s\n}\n" % Scale_value)
 
-                        else:
-                                pass
+            else:
+                pass
 
 ## Light settings ##
 # Send light values to Blender as IDs #
 def def_lights():
-        #Write light ID properties
-	SCENE.properties['LightProp'] = "true"
-	SCENE.properties['Lamp Multiplier'] = LAMPPOWER.val
-        SCENE.properties['Meshlight Multiplier'] = MESHLIGHTPOWER.val
-        SCENE.properties['Light Samples'] = DSAMPLES.val
-        SCENE.properties['IBL Samples'] = IBLSAMPLES.val
-        if IBL.val == 1:
-                SCENE.properties['Image Based Light'] = "true"
-        else:
-                SCENE.properties['Image Based Light'] = "false"
-        if IBLLOCK.val == 1:
-                SCENE.properties['IBL Importance Sampling'] = "true"
-        else:
-                SCENE.properties['IBL Importance Sampling'] = "false"
-	if CONVLAMP.val == 1:
-        	SCENE.properties['Convert Unsupported Lamps'] = "true"
-	else:
-		SCENE.properties['Convert Unsupported Lamps'] = "false"
-        if IMP_SUN.val == 1:
-        	SCENE.properties['Sun Lamp'] = "true"
-	else:
-		SCENE.properties['Sun Lamp'] = "false"
-	SCENE.properties['Sun Turbidity'] = SUN_TURB.val
-	SCENE.properties['Sun Samples'] = SUN_SAMPLES.val
-	#Infinite plane ID added here since it's mostly used with sun/sky
-	if INFINITEPLANE.val == 1:
-        	SCENE.properties['Infinite Plane'] = "true"
-	else:
-		SCENE.properties['Infinite Plane'] = "false"
-	SCENE.properties['Infinite Plane Color'] = IPLANECOLOR.val
+    #Write light ID properties
+    SCENE.properties['LightProp'] = "true"
+    SCENE.properties['Lamp Multiplier'] = LAMPPOWER.val
+    SCENE.properties['Meshlight Multiplier'] = MESHLIGHTPOWER.val
+    SCENE.properties['Light Samples'] = DSAMPLES.val
+    SCENE.properties['IBL Samples'] = IBLSAMPLES.val
+    if IBL.val == 1:
+        SCENE.properties['Image Based Light'] = "true"
+    else:
+        SCENE.properties['Image Based Light'] = "false"
+    if IBLLOCK.val == 1:
+        SCENE.properties['IBL Importance Sampling'] = "true"
+    else:
+        SCENE.properties['IBL Importance Sampling'] = "false"
+    if CONVLAMP.val == 1:
+        SCENE.properties['Convert Unsupported Lamps'] = "true"
+    else:
+        SCENE.properties['Convert Unsupported Lamps'] = "false"
+    if IMP_SUN.val == 1:
+        SCENE.properties['Sun Lamp'] = "true"
+    else:
+        SCENE.properties['Sun Lamp'] = "false"
+    SCENE.properties['Sun Turbidity'] = SUN_TURB.val
+    SCENE.properties['Sun Samples'] = SUN_SAMPLES.val
+    #Infinite plane ID added here since it's mostly used with sun/sky
+    if INFINITEPLANE.val == 1:
+        SCENE.properties['Infinite Plane'] = "true"
+    else:
+        SCENE.properties['Infinite Plane'] = "false"
+    SCENE.properties['Infinite Plane Color'] = IPLANECOLOR.val
 
 # Import light values from Blender IDs to script #
 def import_lights():
-        # Retrieve Blender's light ID values including IBL/LOCK
-	if SCENE.properties['LightProp'] == "true":
-                LAMPPOWER.val = SCENE.properties['Lamp Multiplier']
-                MESHLIGHTPOWER.val = SCENE.properties['Meshlight Multiplier']
-                DSAMPLES.val = SCENE.properties['Light Samples']
-                IBLSAMPLES.val = SCENE.properties['IBL Samples']
-                if SCENE.properties['Convert Unsupported Lamps'] == "true":
-                        CONVLAMP.val = 1
-                        Draw.Redraw()
-                else:
-                        CONVLAMP.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Image Based Light'] == "true":
-                        IBL.val = 1
-                        Draw.Redraw()
-                else:
-                        IBL.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['IBL Importance Sampling'] == "true":
-                        IBLLOCK.val = 1
-                        Draw.Redraw()
-                else:
-                        IBLLOCK.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['Sun Lamp'] == "true":
-                        IMP_SUN.val = 1
-                        Draw.Redraw()
-                else:
-                        IMP_SUN.val = 0
-                        Draw.Redraw()
-                SUN_TURB.val = SCENE.properties['Sun Turbidity']
-                SUN_SAMPLES.val = SCENE.properties['Sun Samples']
-		#Infinite plane ID added here since it's mostly used with sun/sky
-		if SCENE.properties['Infinite Plane'] == "true":
-                        INFINITEPLANE.val = 1
-                        Draw.Redraw()
-                else:
-                        INFINITEPLANE.val = 0
-                        Draw.Redraw()
-		IPLANECOLOR.val = SCENE.properties['Infinite Plane Color'][0], SCENE.properties['Infinite Plane Color'][1], SCENE.properties['Infinite Plane Color'][2],
+    # Retrieve Blender's light ID values including IBL/LOCK
+    if SCENE.properties['LightProp'] == "true":
+        LAMPPOWER.val = SCENE.properties['Lamp Multiplier']
+        MESHLIGHTPOWER.val = SCENE.properties['Meshlight Multiplier']
+        DSAMPLES.val = SCENE.properties['Light Samples']
+        IBLSAMPLES.val = SCENE.properties['IBL Samples']
+        if SCENE.properties['Convert Unsupported Lamps'] == "true":
+            CONVLAMP.val = 1
+            Draw.Redraw()
+        else:
+            CONVLAMP.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Image Based Light'] == "true":
+            IBL.val = 1
+            Draw.Redraw()
+        else:
+            IBL.val = 0
+            Draw.Redraw()
+        if SCENE.properties['IBL Importance Sampling'] == "true":
+            IBLLOCK.val = 1
+            Draw.Redraw()
+        else:
+            IBLLOCK.val = 0
+            Draw.Redraw()
+        if SCENE.properties['Sun Lamp'] == "true":
+            IMP_SUN.val = 1
+            Draw.Redraw()
+        else:
+            IMP_SUN.val = 0
+            Draw.Redraw()
+        SUN_TURB.val = SCENE.properties['Sun Turbidity']
+        SUN_SAMPLES.val = SCENE.properties['Sun Samples']
+        #Infinite plane ID added here since it's mostly used with sun/sky
+        if SCENE.properties['Infinite Plane'] == "true":
+            INFINITEPLANE.val = 1
+            Draw.Redraw()
+        else:
+            INFINITEPLANE.val = 0
+            Draw.Redraw()
+        IPLANECOLOR.val = SCENE.properties['Infinite Plane Color'][0], SCENE.properties['Infinite Plane Color'][1], SCENE.properties['Infinite Plane Color'][2],
 
 # Export light values #
 def export_lights(lmp):
-	# only lamps type 0, 1 and 4 supported at the moment
-	# lamp types are: 0 - Lamp, 1 - Sun, 2 - Spot, 3 - Hemi, 4 - Area
-	# Spots are replaced by directional (cylinrical) lights: adjust dist as close as possible to the ground receiving the
-	# cone of light if you want Radius as close as possible
-	lamp = lmp.getData()
-
-        red   = lamp.col[0]
-        green = lamp.col[1]
-        blue  = lamp.col[2]
-        power = lamp.energy * LAMPPOWER.val
-        objmatrix = lmp.matrix
-        lampV = Mathutils.Vector([0, 0, 0, 1])
-        lampV = lampV * objmatrix
-        dist = lamp.getDist()
-	print("o exporting lamps")
-
-	if lamp.type == 0:
-		print("  o exporting lamp "+lmp.name+"...")
-		FILE.write("\n\nlight {\n")
-		FILE.write("\ttype point\n")
-		FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-		FILE.write("\tpower %s\n" % (power))
-		FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
-		FILE.write("}")
-	elif lamp.type == 1:
-		if IMP_SUN.val == 1:
-			print("  o exporting sun-light "+lmp.name+"...")
-			invmatrix = Mathutils.Matrix(lmp.getInverseMatrix())
-			FILE.write("\nlight {\n")
-			FILE.write("\ttype sunsky\n")
-			FILE.write("\tup 0 0 1\n")
-			FILE.write("\teast 0 1 0\n")
-			FILE.write("\tsundir %f %f %f\n" % (invmatrix[0][2], invmatrix[1][2], invmatrix[2][2]))
-			FILE.write("\tturbidity %s\n" % SUN_TURB.val)
-			FILE.write("\tsamples %s\n" % SUN_SAMPLES.val)
-			FILE.write("}")
-		else:
-			print("  o exporting lamp "+lmp.name+"...")
-			# get the location of the lamp
-			FILE.write("\n\nlight {\n")
-			FILE.write("\ttype point\n")
-			FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-			FILE.write("\tpower %s\n" % (power))
-			FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
-			FILE.write("}")
-
-	elif lamp.type == 4:
-		print("  o exporting area-light "+lmp.name+"...")
-		xsize = lamp.areaSizeX * 0.5
-		if lamp.areaSizeY:
-			# If rectangular area:
-			print("o exporting rectangular area-light "+lmp.name+"...")
-			ysize = lamp.areaSizeY * 0.5
-		else:
-			# Else, square area:
-			print("o exporting square area-light "+lmp.name+"...")
-			ysize = xsize
-		lampV0 = Mathutils.Vector([-xsize, ysize, 0, 1])
-		lampV1 = Mathutils.Vector([ xsize, ysize, 0, 1])
-		lampV2 = Mathutils.Vector([ xsize, -ysize, 0, 1])
-		lampV3 = Mathutils.Vector([-xsize, -ysize, 0, 1])
-
-		lampV0 = lampV0 * objmatrix
-		lampV1 = lampV1 * objmatrix
-		lampV2 = lampV2 * objmatrix
-		lampV3 = lampV3 * objmatrix
-
-		radiance = lamp.energy * MESHLIGHTPOWER.val
-
-		FILE.write("\n\nlight {\n")
-		FILE.write("\ttype meshlight\n")
-		FILE.write("\tname \"%s\"\n" % (lmp.name))
-		FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-		FILE.write("\tradiance %s\n" % (radiance))
-		FILE.write("\tsamples %s\n" % DSAMPLES.val)
-		FILE.write("\tpoints 4\n")
-		FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV0[0], lampV0[1], lampV0[2]))
-		FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV1[0], lampV1[1], lampV1[2]))
-		FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV2[0], lampV2[1], lampV2[2]))
-		FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV3[0], lampV3[1], lampV3[2]))
-		FILE.write("\ttriangles 2\n")
-		FILE.write("\t\t0 1 2\n")
-		FILE.write("\t\t0 2 3\n")
-		FILE.write("}")
-	elif lamp.type == 2:
-		print("  o exporting spotlight "+lmp.name+"...")
-		targetV = Mathutils.Vector([0, 0, -1, 1])
-		targetV = targetV * objmatrix
-		angle = lamp.getSpotSize()*pi/360
-		radius = dist/cos(angle)*sin(angle)
-		radiance = lamp.energy * LAMPPOWER.val
-
-		FILE.write("\n\nlight {\n")
-		FILE.write("\ttype directional\n")
-		FILE.write("\tsource %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
-		FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
-		FILE.write("\tradius %s\n" % (radius))
-		FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-		FILE.write("}")
-	elif lamp.type == 3:
-		print("  o exporting spherical light "+lmp.name+"...")
-		FILE.write("\n\nlight {\n")
-		FILE.write("\ttype spherical\n")
-		FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-                FILE.write("\tradiance %s\n" % (power))
-                FILE.write("\tcenter %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
-                FILE.write("\tradius %s\n" % (dist))
-                FILE.write("\tsamples %s\n" % DSAMPLES.val)
-		FILE.write("}")
-	else:
-		print("Unsupported type lamp detected")
-		if CONVLAMP.val == 1:
-			print("  o exporting lamp "+lmp.name+"...")
-			# get the rgb component for the lamp
-			FILE.write("\n\nlight {\n")
-			FILE.write("\ttype point\n")
-			FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
-			FILE.write("\tpower %s\n" % (power))
-			FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
-			FILE.write("}")
+    # only lamps type 0, 1 and 4 supported at the moment
+    # lamp types are: 0 - Lamp, 1 - Sun, 2 - Spot, 3 - Hemi, 4 - Area
+    # Spots are replaced by directional (cylinrical) lights: adjust dist as close as possible to the ground receiving the
+    # cone of light if you want Radius as close as possible
+    lamp = lmp.getData()
+
+    red   = lamp.col[0]
+    green = lamp.col[1]
+    blue  = lamp.col[2]
+    power = lamp.energy * LAMPPOWER.val
+    objmatrix = lmp.matrix
+    lampV = Mathutils.Vector([0, 0, 0, 1])
+    lampV = lampV * objmatrix
+    dist = lamp.getDist()
+    print("o exporting lamps")
+
+    if lamp.type == 0:
+        print("  o exporting lamp "+lmp.name+"...")
+        FILE.write("\n\nlight {\n")
+        FILE.write("\ttype point\n")
+        FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+        FILE.write("\tpower %s\n" % (power))
+        FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
+        FILE.write("}")
+    elif lamp.type == 1:
+        if IMP_SUN.val == 1:
+            print("  o exporting sun-light "+lmp.name+"...")
+            invmatrix = Mathutils.Matrix(lmp.getInverseMatrix())
+            FILE.write("\nlight {\n")
+            FILE.write("\ttype sunsky\n")
+            FILE.write("\tup 0 0 1\n")
+            FILE.write("\teast 0 1 0\n")
+            FILE.write("\tsundir %f %f %f\n" % (invmatrix[0][2], invmatrix[1][2], invmatrix[2][2]))
+            FILE.write("\tturbidity %s\n" % SUN_TURB.val)
+            FILE.write("\tsamples %s\n" % SUN_SAMPLES.val)
+            FILE.write("}")
+        else:
+            print("  o exporting lamp "+lmp.name+"...")
+            # get the location of the lamp
+            FILE.write("\n\nlight {\n")
+            FILE.write("\ttype point\n")
+            FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+            FILE.write("\tpower %s\n" % (power))
+            FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
+            FILE.write("}")
+
+    elif lamp.type == 4:
+        print("  o exporting area-light "+lmp.name+"...")
+        xsize = lamp.areaSizeX * 0.5
+        if lamp.areaSizeY:
+            # If rectangular area:
+            print("o exporting rectangular area-light "+lmp.name+"...")
+            ysize = lamp.areaSizeY * 0.5
+        else:
+            # Else, square area:
+            print("o exporting square area-light "+lmp.name+"...")
+            ysize = xsize
+        lampV0 = Mathutils.Vector([-xsize, ysize, 0, 1])
+        lampV1 = Mathutils.Vector([ xsize, ysize, 0, 1])
+        lampV2 = Mathutils.Vector([ xsize, -ysize, 0, 1])
+        lampV3 = Mathutils.Vector([-xsize, -ysize, 0, 1])
+
+        lampV0 = lampV0 * objmatrix
+        lampV1 = lampV1 * objmatrix
+        lampV2 = lampV2 * objmatrix
+        lampV3 = lampV3 * objmatrix
+
+        radiance = lamp.energy * MESHLIGHTPOWER.val
+
+        FILE.write("\n\nlight {\n")
+        FILE.write("\ttype meshlight\n")
+        FILE.write("\tname \"%s\"\n" % (lmp.name))
+        FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+        FILE.write("\tradiance %s\n" % (radiance))
+        FILE.write("\tsamples %s\n" % DSAMPLES.val)
+        FILE.write("\tpoints 4\n")
+        FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV0[0], lampV0[1], lampV0[2]))
+        FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV1[0], lampV1[1], lampV1[2]))
+        FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV2[0], lampV2[1], lampV2[2]))
+        FILE.write("\t\t%.6f %.6f %.6f\n" % (lampV3[0], lampV3[1], lampV3[2]))
+        FILE.write("\ttriangles 2\n")
+        FILE.write("\t\t0 1 2\n")
+        FILE.write("\t\t0 2 3\n")
+        FILE.write("}")
+    elif lamp.type == 2:
+        print("  o exporting spotlight "+lmp.name+"...")
+        targetV = Mathutils.Vector([0, 0, -1, 1])
+        targetV = targetV * objmatrix
+        angle = lamp.getSpotSize()*pi/360
+        radius = dist/cos(angle)*sin(angle)
+        radiance = lamp.energy * LAMPPOWER.val
+
+        FILE.write("\n\nlight {\n")
+        FILE.write("\ttype directional\n")
+        FILE.write("\tsource %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
+        FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
+        FILE.write("\tradius %s\n" % (radius))
+        FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+        FILE.write("}")
+    elif lamp.type == 3:
+        print("  o exporting spherical light "+lmp.name+"...")
+        FILE.write("\n\nlight {\n")
+        FILE.write("\ttype spherical\n")
+        FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+        FILE.write("\tradiance %s\n" % (power))
+        FILE.write("\tcenter %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
+        FILE.write("\tradius %s\n" % (dist))
+        FILE.write("\tsamples %s\n" % DSAMPLES.val)
+        FILE.write("}")
+    else:
+        print("Unsupported type lamp detected")
+        if CONVLAMP.val == 1:
+            print("  o exporting lamp "+lmp.name+"...")
+            # get the rgb component for the lamp
+            FILE.write("\n\nlight {\n")
+            FILE.write("\ttype point\n")
+            FILE.write("\tcolor { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (red, green, blue))
+            FILE.write("\tpower %s\n" % (power))
+            FILE.write("\tp %.6f %.6f %.6f\n" % (lampV[0], lampV[1], lampV[2]))
+            FILE.write("}")
 
 ## Export of Image Based Lights ##
 def export_ibl():
-	global IBLLIGHT
+    global IBLLIGHT
 
-	try:
-		ibllighttext = Blender.Texture.Get("ibllight")
-		if ibllighttext != "":
-			if ibllighttext.users > 0:
-				if ibllighttext != None and ibllighttext.getType() == "Image":
-					IBLLIGHT = ibllighttext.getImage().getFilename()
-				else:
-					IBLLIGHT = ""
-			else:
-				IBLLIGHT = ""
-	except:
-		IBLLIGHT = ""
-
-	if IBL == 1:
-		if IBLLIGHT != "":
-			print("o exporting ibllight...")
-			print("  o using texture %s" % (IBLLIGHT))
-			FILE.write("\n\nlight {\n")
-			FILE.write("\ttype ibl\n")
-			FILE.write("\timage \"%s\"\n" % (IBLLIGHT))
-			FILE.write("\tcenter 1 0 0\n")
-			FILE.write("\tup 0 0 1\n")
-			if IBLLOCK == 1:
-				FILE.write("\tlock false\n")	# lock false means "use importance sampling"
-			else:
-				FILE.write("\tlock true\n")
-			FILE.write("\tsamples %s\n" % IBLSAMPLES.val)
-			FILE.write("}")
+    try:
+        ibllighttext = Blender.Texture.Get("ibllight")
+        if ibllighttext != "":
+            if ibllighttext.users > 0:
+                if ibllighttext != None and ibllighttext.getType() == "Image":
+                    IBLLIGHT = ibllighttext.getImage().getFilename()
+                else:
+                    IBLLIGHT = ""
+            else:
+                IBLLIGHT = ""
+    except:
+        IBLLIGHT = ""
+
+    if IBL == 1:
+        if IBLLIGHT != "":
+            print("o exporting ibllight...")
+            print("  o using texture %s" % (IBLLIGHT))
+            FILE.write("\n\nlight {\n")
+            FILE.write("\ttype ibl\n")
+            FILE.write("\timage \"%s\"\n" % (IBLLIGHT))
+            FILE.write("\tcenter 1 0 0\n")
+            FILE.write("\tup 0 0 1\n")
+            if IBLLOCK == 1:
+                FILE.write("\tlock false\n")    # lock false means "use importance sampling"
+            else:
+                FILE.write("\tlock true\n")
+            FILE.write("\tsamples %s\n" % IBLSAMPLES.val)
+            FILE.write("}")
 
 ## Camera settings ##
 # Send camera values to Blender as IDs #
 def def_camera():
-	CAMERA=SCENE.objects.camera
-	# Writes Scene properties
-	CAMERA.properties['CamProp'] = "true"
-	CAMERA.properties['DOF Radius'] = DOFRADIUS.val
-        CAMERA.properties['Lens Sides'] = LENSSIDES.val
-        CAMERA.properties['Lens Rotation'] = LENSROTATION.val
-        if DOF.val == 1:
-		CAMERA.properties['DOF'] = "true"
-	else:
-		CAMERA.properties['DOF'] = "false"
-        if SPHERICALCAMERA.val == 1:
-		CAMERA.properties['Spherical Camera'] = "true"
-	else:
-		CAMERA.properties['Spherical Camera'] = "false"
-	if FISHEYECAMERA.val == 1:
-		CAMERA.properties['Fisheye Camera'] = "true"
-	else:
-		CAMERA.properties['Fisheye Camera'] = "false"
+    CAMERA=SCENE.objects.camera
+    # Writes Scene properties
+    CAMERA.properties['CamProp'] = "true"
+    CAMERA.properties['DOF Radius'] = DOFRADIUS.val
+    CAMERA.properties['Lens Sides'] = LENSSIDES.val
+    CAMERA.properties['Lens Rotation'] = LENSROTATION.val
+    if DOF.val == 1:
+        CAMERA.properties['DOF'] = "true"
+    else:
+        CAMERA.properties['DOF'] = "false"
+    if SPHERICALCAMERA.val == 1:
+        CAMERA.properties['Spherical Camera'] = "true"
+    else:
+        CAMERA.properties['Spherical Camera'] = "false"
+    if FISHEYECAMERA.val == 1:
+        CAMERA.properties['Fisheye Camera'] = "true"
+    else:
+        CAMERA.properties['Fisheye Camera'] = "false"
 
 # Import Background and AA values from Blender IDs to script #
 def import_camera():
-	CAMERA=SCENE.objects.camera
-        if CAMERA.properties['CamProp'] == "true":
-		DOFRADIUS.val = CAMERA.properties['DOF Radius']
-                LENSSIDES.val = CAMERA.properties['Lens Sides']
-                LENSROTATION.val = CAMERA.properties['Lens Rotation']
-                if CAMERA.properties['DOF'] == "true":
-                        DOF.val = 1
-                        Draw.Redraw()
-                else:
-                        DOF.val = 0
-                        Draw.Redraw()
-                if CAMERA.properties['Spherical Camera'] == "true":
-                        SPHERICALCAMERA.val = 1
-                        Draw.Redraw()
-                else:
-                        SPHERICALCAMERA.val = 0
-                        Draw.Redraw()
-                if CAMERA.properties['Fisheye Camera'] == "true":
-                        FISHEYECAMERA.val = 1
-                        Draw.Redraw()
-                else:
-                        FISHEYECAMERA.val = 0
-                        Draw.Redraw()
+    CAMERA=SCENE.objects.camera
+    if CAMERA.properties['CamProp'] == "true":
+        DOFRADIUS.val = CAMERA.properties['DOF Radius']
+        LENSSIDES.val = CAMERA.properties['Lens Sides']
+        LENSROTATION.val = CAMERA.properties['Lens Rotation']
+        if CAMERA.properties['DOF'] == "true":
+            DOF.val = 1
+            Draw.Redraw()
+        else:
+            DOF.val = 0
+            Draw.Redraw()
+        if CAMERA.properties['Spherical Camera'] == "true":
+            SPHERICALCAMERA.val = 1
+            Draw.Redraw()
+        else:
+            SPHERICALCAMERA.val = 0
+            Draw.Redraw()
+        if CAMERA.properties['Fisheye Camera'] == "true":
+            FISHEYECAMERA.val = 1
+            Draw.Redraw()
+        else:
+            FISHEYECAMERA.val = 0
+            Draw.Redraw()
 
 # Export camera values #
 def export_camera(cam):
-	# get the camera
-	camera = cam.getData()
-	print("o exporting Camera "+camera.getName()+"...")
-
-	# get the object matrix so we can calculate to and up
-	objmatrix = cam.matrix
-	eyeV    = Mathutils.Vector([0, 0,  0, 1])
-	targetV = Mathutils.Vector([0, 0, -1, 1])
-	upV     = Mathutils.Vector([0, 1,  0, 0])
-
-	eyeV    = eyeV * objmatrix
-	targetV = targetV * objmatrix
-	upV     = upV * objmatrix
-
-	# get the fov value
-	# image higher than wide?
-        if IM_HEIGHT > IM_WIDTH:
-                factor=float(IM_WIDTH) / float(IM_HEIGHT)
-        # if the image is wider than high, or of equal height and width then:
-        else:
-                factor=1
-        # fov = 2*(degrees(atan((factor*16.0) / camera.lens))) #Same as below, just uses the python "degrees" instead:
-	fov = 360.0 * atan((factor*16.0) / camera.lens) / pi
-	DOFDIST=camera.dofDist
-
-	FILE.write("\n\ncamera {\n")
-
-	if DOF.val == 1:
-		camtype = "thinlens"
-		FILE.write("\ttype   %s\n" % camtype)
-		FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
-		FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
-		FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
-		FILE.write("\tfov    %s \n" % fov)
-		FILE.write("\taspect %s \n" % (1.0 * IM_WIDTH / IM_HEIGHT))
-		FILE.write("\tfdist %s \n" % DOFDIST)
-		FILE.write("\tlensr %s \n" % DOFRADIUS)
-		FILE.write("\tsides %s \n" % LENSSIDES)
-		FILE.write("\trotation %s \n" % LENSROTATION)
-	elif SPHERICALCAMERA.val == 1:
-		camtype = "spherical"
-		FILE.write("\ttype   %s\n" % camtype)
-		FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
-		FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
-		FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
-	elif FISHEYECAMERA.val == 1:
-		camtype = "fisheye"
-		FILE.write("\ttype   %s\n" % camtype)
-		FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
-		FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
-		FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
-	else:
-		camtype = "pinhole"
-		FILE.write("\ttype   %s\n" % camtype)
-		FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
-		FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
-		FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
-		FILE.write("\tfov    %s \n" % fov)
-		FILE.write("\taspect %s \n" % (1.0 * IM_WIDTH / IM_HEIGHT))
-                #To be uncommented when 0.07.3 is released
-		#FILE.write("\tshift %.2f %.2f\n" % (camera.shiftX, camera.shiftY))
-	FILE.write("}")
+    # get the camera
+    camera = cam.getData()
+    print("o exporting Camera "+camera.getName()+"...")
+
+    # get the object matrix so we can calculate to and up
+    objmatrix = cam.matrix
+    eyeV    = Mathutils.Vector([0, 0,  0, 1])
+    targetV = Mathutils.Vector([0, 0, -1, 1])
+    upV     = Mathutils.Vector([0, 1,  0, 0])
+
+    eyeV    = eyeV * objmatrix
+    targetV = targetV * objmatrix
+    upV     = upV * objmatrix
+
+    # get the fov value
+    # image higher than wide?
+    if IM_HEIGHT > IM_WIDTH:
+        factor=float(IM_WIDTH) / float(IM_HEIGHT)
+    # if the image is wider than high, or of equal height and width then:
+    else:
+        factor=1
+    # fov = 2*(degrees(atan((factor*16.0) / camera.lens))) #Same as below, just uses the python "degrees" instead:
+    fov = 360.0 * atan((factor*16.0) / camera.lens) / pi
+    DOFDIST=camera.dofDist
+
+    FILE.write("\n\ncamera {\n")
+
+    if DOF.val == 1:
+        camtype = "thinlens"
+        FILE.write("\ttype   %s\n" % camtype)
+        FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
+        FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
+        FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
+        FILE.write("\tfov    %s \n" % fov)
+        FILE.write("\taspect %s \n" % (1.0 * IM_WIDTH / IM_HEIGHT))
+        FILE.write("\tfdist %s \n" % DOFDIST)
+        FILE.write("\tlensr %s \n" % DOFRADIUS)
+        FILE.write("\tsides %s \n" % LENSSIDES)
+        FILE.write("\trotation %s \n" % LENSROTATION)
+    elif SPHERICALCAMERA.val == 1:
+        camtype = "spherical"
+        FILE.write("\ttype   %s\n" % camtype)
+        FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
+        FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
+        FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
+    elif FISHEYECAMERA.val == 1:
+        camtype = "fisheye"
+        FILE.write("\ttype   %s\n" % camtype)
+        FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
+        FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
+        FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
+    else:
+        camtype = "pinhole"
+        FILE.write("\ttype   %s\n" % camtype)
+        FILE.write("\teye    %.6f %.6f %.6f\n" % (eyeV[0], eyeV[1], eyeV[2]))
+        FILE.write("\ttarget %.6f %.6f %.6f\n" % (targetV[0], targetV[1], targetV[2]))
+        FILE.write("\tup     %.6f %.6f %.6f\n" % (upV[0], upV[1], upV[2]))
+        FILE.write("\tfov    %s \n" % fov)
+        FILE.write("\taspect %s \n" % (1.0 * IM_WIDTH / IM_HEIGHT))
+        #To be uncommented when 0.07.3 is released
+        #FILE.write("\tshift %.2f %.2f\n" % (camera.shiftX, camera.shiftY))
+    FILE.write("}")
 
 ## Export method for meshes ##
 def export_geometry(obj):
-	islight = obj.name.startswith("meshlight")
-        isparticleob = obj.name.startswith("particleob")
-	if islight:
-		print("o exporting meshlight " + obj.name+"...")
-        if isparticleob:
-		print("o exporting particle object " + obj.name+"...")
-	# get the mesh data
-	if obj.getType() != "Empty":
-                mesh = Mesh.New(obj.name) # Note the "mesh.verts = None" at the end of this if.  Used to clear the new mesh from memory
-                mesh.getFromObject(obj, 0, 1)
-                mesh.transform(obj.mat, 1)
-		verts = mesh.verts
-		faces = mesh.faces
-                numverts = verts.__len__()
-
-                if numverts > 0:
-                        if islight:
-                                FILE.write("\n\nlight {\n")
-                                FILE.write("\ttype meshlight\n")
-                                FILE.write("\tname \"" + obj.name + "\"\n")
-                                if len(mesh.materials) >= 1:
-                                        matrl = mesh.materials[0]
-                                        FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (matrl.R, matrl.G, matrl.B))
-                                else:
-                                        FILE.write("\temit 1 1 1\n")
-                                FILE.write("\tradiance %s\n" % (MESHLIGHTPOWER.val))
-                                FILE.write("\tsamples %s\n" % DSAMPLES.val)
-                                FILE.write("\tpoints %d\n" % (numverts))
-                                for vert in verts:
-                                        FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
-                                numtris = 0
-                                for face in faces:
-                                        num = len(face.verts)
-                                        if num == 4:
-                                                numtris = numtris + 2
-                                        elif num == 3:
-                                                numtris = numtris + 1
-                                FILE.write("\ttriangles %d\n" % (numtris))
-                                allsmooth = True
-                                allflat = True
-                                for face in faces:
-                                        num = len(face.verts)
-                                        smooth = face.smooth != 0
-                                        allsmooth &= smooth
-                                        allflat &= not smooth
-                                        if num == 4:
-                                                FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
-                                                FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[2].index, face.verts[3].index))
-                                        elif num == 3:
-                                                FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
-                                FILE.write("}")
+    islight = obj.name.startswith("meshlight")
+    isparticleob = obj.name.startswith("particleob")
+    if islight:
+        print("o exporting meshlight " + obj.name+"...")
+    if isparticleob:
+        print("o exporting particle object " + obj.name+"...")
+    # get the mesh data
+    if obj.getType() != "Empty":
+        mesh = Mesh.New(obj.name) # Note the "mesh.verts = None" at the end of this if.  Used to clear the new mesh from memory
+        mesh.getFromObject(obj, 0, 1)
+        mesh.transform(obj.mat, 1)
+        verts = mesh.verts
+        faces = mesh.faces
+        numverts = verts.__len__()
+
+        if numverts > 0:
+            if islight:
+                FILE.write("\n\nlight {\n")
+                FILE.write("\ttype meshlight\n")
+                FILE.write("\tname \"" + obj.name + "\"\n")
+                if len(mesh.materials) >= 1:
+                    matrl = mesh.materials[0]
+                    FILE.write("\temit { \"sRGB nonlinear\" %.3f %.3f %.3f }\n" % (matrl.R, matrl.G, matrl.B))
+                else:
+                    FILE.write("\temit 1 1 1\n")
+                FILE.write("\tradiance %s\n" % (MESHLIGHTPOWER.val))
+                FILE.write("\tsamples %s\n" % DSAMPLES.val)
+                FILE.write("\tpoints %d\n" % (numverts))
+                for vert in verts:
+                    FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
+                numtris = 0
+                for face in faces:
+                    num = len(face.verts)
+                    if num == 4:
+                        numtris = numtris + 2
+                    elif num == 3:
+                        numtris = numtris + 1
+                FILE.write("\ttriangles %d\n" % (numtris))
+                allsmooth = True
+                allflat = True
+                for face in faces:
+                    num = len(face.verts)
+                    smooth = face.smooth != 0
+                    allsmooth &= smooth
+                    allflat &= not smooth
+                    if num == 4:
+                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
+                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[2].index, face.verts[3].index))
+                    elif num == 3:
+                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
+                FILE.write("}")
 
-                        else:
-                                FILE.write("\n\nobject {\n")
-                                if len(mesh.materials) == 1:
-                                        FILE.write("\tshader \"" + mesh.materials[0].name + ".shader\"\n")
-
-                                        ##Check for and write modfiers##
-                                        for mat in mesh.materials:
-                                                textures = mat.getTextures()
-                                                textu = textures[1]
-                                                textp = textures[3]
-                                                if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
-                                                        FILE.write("\tmodifier \"" + str(textu.tex.getName()) + "\"\n")
-                                                elif textp != None and (textp.tex.name.startswith("perlin")):
-                                                        FILE.write("\tmodifier \"" + str(textp.tex.getName()) + "\"\n")
-
-                                elif len(mesh.materials) > 1:
-                                        FILE.write("\tshaders %d\n" % (len(mesh.materials)))
-
-                                        for mat in mesh.materials:
-                                                FILE.write("\t\t\"" + mat.name + ".shader\"\n")
-
-                                        ##Check for and write modfiers##
-                                        FILE.write("\tmodifiers %d\n" % (len(mesh.materials)))
-                                        for mat in mesh.materials:
-
-                                                textures = mat.getTextures()
-                                                textu = textures[1]
-                                                textp = textures[3]
-                                                if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
-                                                        FILE.write("\t\t\"" + textu.tex.getName() + "\"\n")
-                                                elif textp != None and (textp.tex.name.startswith("perlin")):
-                                                        FILE.write("\t\t\"" + textp.tex.getName() + "\"\n")
-                                                else:
-                                                        FILE.write("\t\t\"" + "None" + "\"\n")
+            else:
+                FILE.write("\n\nobject {\n")
+                if len(mesh.materials) == 1:
+                    FILE.write("\tshader \"" + mesh.materials[0].name + ".shader\"\n")
 
-                                else:
-                                        FILE.write("\tshader def\n")
-                                ##Particle object section.  Works with Sunflow 0.07.3 and up. ##
-                                # Check if there are particles on the object #
-                          	ob = Object.Get(obj.name)
-                          	if len(ob.effects) != 0:
-                                        effect = ob.effects[0]
-                                        particles = effect.getParticlesLoc()
-                                        effects= Effect.Get()
-                                # Check that particles are points only (not static and not vectors) #
-                                        if not effect.getFlag() & Effect.Flags.STATIC or not effect.getStype():
-                                                FILE.write("\ttype particles\n")
-                                                FILE.write("\tname \"" + obj.name + "\"\n")
-                                                FILE.write("\tpoints %d\n" % (len(particles)))
-                                                for pt in particles:
-                                                        FILE.write("\t\t%.6f %.6f %.6f\n" % (pt[0], pt[1], pt[2]))
-                                                FILE.write("\tradius 0.05\n}\n")
-                                        elif type(particles)==list: # Is it a strand or pair?
-                                                if len(particles)>1:
-                                                        pointnum = ((len(particles)*effect.getLifetime())*3)
-                                                        print("o exporting hair object " + obj.name+"...")
-                                                        FILE.write("\ttype hair\n")
-                                                        FILE.write("\tname \"" + obj.name + "\"\n")
-                                                        FILE.write("\tsegments %d\n" % (effect.getLifetime()-1))
-                                                        FILE.write("\twidth .01\n")
-                                                        FILE.write("\tpoints %d" % pointnum)
-                                                        for eff in effects:
-                                                                for p in eff.getParticlesLoc():
-                                                                        if type(p)==list: # Are we a strand or a pair, then add hair data.
-                                                                                if len(p)>1:
-                                                                                        destData = str()
-                                                                                        for vect in p:
-                                                                                                for elem in vect:
-                                                                                                        destData+=" "+str(elem)
-                                                                                        FILE.write("\t%s\n" % (destData))
-                                                        FILE.write("}\n")
-                                elif isparticleob:
-                                        FILE.write("\ttype particles\n")
-                                        FILE.write("\tname \"" + obj.name + "\"\n")
-                                        FILE.write("\tpoints %d\n" % (numverts))
-                                        for vert in verts:
-                                                FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
-                                        FILE.write("\tradius 0.05\n}\n")
+                    ##Check for and write modfiers##
+                    for mat in mesh.materials:
+                        textures = mat.getTextures()
+                        textu = textures[1]
+                        textp = textures[3]
+                        if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
+                            FILE.write("\tmodifier \"" + str(textu.tex.getName()) + "\"\n")
+                        elif textp != None and (textp.tex.name.startswith("perlin")):
+                            FILE.write("\tmodifier \"" + str(textp.tex.getName()) + "\"\n")
+
+                elif len(mesh.materials) > 1:
+                    FILE.write("\tshaders %d\n" % (len(mesh.materials)))
+
+                    for mat in mesh.materials:
+                        FILE.write("\t\t\"" + mat.name + ".shader\"\n")
+
+                    ##Check for and write modfiers##
+                    FILE.write("\tmodifiers %d\n" % (len(mesh.materials)))
+                    for mat in mesh.materials:
+
+                        textures = mat.getTextures()
+                        textu = textures[1]
+                        textp = textures[3]
+                        if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
+                            FILE.write("\t\t\"" + textu.tex.getName() + "\"\n")
+                        elif textp != None and (textp.tex.name.startswith("perlin")):
+                            FILE.write("\t\t\"" + textp.tex.getName() + "\"\n")
+                        else:
+                            FILE.write("\t\t\"" + "None" + "\"\n")
 
+                else:
+                    FILE.write("\tshader def\n")
+                ##Particle object section.  Works with Sunflow 0.07.3 and up. ##
+                # Check if there are particles on the object #
+                ob = Object.Get(obj.name)
+                if len(ob.effects) != 0:
+                    effect = ob.effects[0]
+                    particles = effect.getParticlesLoc()
+                    effects= Effect.Get()
+                # Check that particles are points only (not static and not vectors) #
+                    if not effect.getFlag() & Effect.Flags.STATIC or not effect.getStype():
+                        FILE.write("\ttype particles\n")
+                        FILE.write("\tname \"" + obj.name + "\"\n")
+                        FILE.write("\tpoints %d\n" % (len(particles)))
+                        for pt in particles:
+                            FILE.write("\t\t%.6f %.6f %.6f\n" % (pt[0], pt[1], pt[2]))
+                        FILE.write("\tradius 0.05\n}\n")
+                    elif type(particles)==list: # Is it a strand or pair?
+                        if len(particles)>1:
+                            pointnum = ((len(particles)*effect.getLifetime())*3)
+                            print("o exporting hair object " + obj.name+"...")
+                            FILE.write("\ttype hair\n")
+                            FILE.write("\tname \"" + obj.name + "\"\n")
+                            FILE.write("\tsegments %d\n" % (effect.getLifetime()-1))
+                            FILE.write("\twidth .01\n")
+                            FILE.write("\tpoints %d" % pointnum)
+                            for eff in effects:
+                                for p in eff.getParticlesLoc():
+                                    if type(p)==list: # Are we a strand or a pair, then add hair data.
+                                        if len(p)>1:
+                                            destData = str()
+                                            for vect in p:
+                                                for elem in vect:
+                                                    destData+=" "+str(elem)
+                                            FILE.write("\t%s\n" % (destData))
+                            FILE.write("}\n")
+                elif isparticleob:
+                    FILE.write("\ttype particles\n")
+                    FILE.write("\tname \"" + obj.name + "\"\n")
+                    FILE.write("\tpoints %d\n" % (numverts))
+                    for vert in verts:
+                        FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
+                    FILE.write("\tradius 0.05\n}\n")
+
+                else:
+                    print("o exporting mesh " + obj.name+"...")
+                    FILE.write("\ttype generic-mesh\n")
+                    FILE.write("\tname \"" + obj.name + "\"\n")
+                    FILE.write("\tpoints %d\n" % (numverts))
+                    for vert in verts:
+                        FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
+                    numtris = 0
+                    for face in faces:
+                        num = len(face.verts)
+                        if num == 4:
+                            numtris = numtris + 2
+                        elif num == 3:
+                            numtris = numtris + 1
+                    FILE.write("\ttriangles %d\n" % (numtris))
+                    allsmooth = True
+                    allflat = True
+                    for face in faces:
+                        num = len(face.verts)
+                        smooth = face.smooth != 0
+                        allsmooth &= smooth
+                        allflat &= not smooth
+                        if num == 4:
+                            FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
+                            FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[2].index, face.verts[3].index))
+                        elif num == 3:
+                            FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
+
+                    ## what kind of normals do we have?
+                    if not islight:
+                        if allflat:
+                            FILE.write("\tnormals none\n")
+                        elif allsmooth:
+                            FILE.write("\tnormals vertex\n")
+                            for vert in verts:
+                                FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.no[0], vert.no[1], vert.no[2]))
+                        else:
+                            FILE.write("\tnormals facevarying\n")
+                            for face in faces:
+                                num = len(face.verts)
+                                if face.smooth != 0:
+                                    if num == 4:
+                                        index0 = face.verts[0].index
+                                        index1 = face.verts[1].index
+                                        index2 = face.verts[2].index
+                                        index3 = face.verts[3].index
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
+                                                                                                                                                                                                verts[index1].no[0], verts[index1].no[1], verts[index1].no[2],
+                                                                                                                                                                                                verts[index2].no[0], verts[index2].no[1], verts[index2].no[2]))
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
+                                                                                                                                                                                                verts[index2].no[0], verts[index2].no[1], verts[index2].no[2],
+                                                                                                                                                                                                verts[index3].no[0], verts[index3].no[1], verts[index3].no[2]))
+                                    elif num == 3:
+                                        index0 = face.verts[0].index
+                                        index1 = face.verts[1].index
+                                        index2 = face.verts[2].index
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
+                                                                                                                                                                                                verts[index1].no[0], verts[index1].no[1], verts[index1].no[2],
+                                                                                                                                                                                                verts[index2].no[0], verts[index2].no[1], verts[index2].no[2]))
                                 else:
-                                        print("o exporting mesh " + obj.name+"...")
-                                        FILE.write("\ttype generic-mesh\n")
-                                        FILE.write("\tname \"" + obj.name + "\"\n")
-                                        FILE.write("\tpoints %d\n" % (numverts))
-                                        for vert in verts:
-                                                FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.co[0], vert.co[1], vert.co[2]))
-                                        numtris = 0
-                                        for face in faces:
-                                                num = len(face.verts)
-                                                if num == 4:
-                                                        numtris = numtris + 2
-                                                elif num == 3:
-                                                        numtris = numtris + 1
-                                        FILE.write("\ttriangles %d\n" % (numtris))
-                                        allsmooth = True
-                                        allflat = True
-                                        for face in faces:
-                                                num = len(face.verts)
-                                                smooth = face.smooth != 0
-                                                allsmooth &= smooth
-                                                allflat &= not smooth
-                                                if num == 4:
-                                                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
-                                                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[2].index, face.verts[3].index))
-                                                elif num == 3:
-                                                        FILE.write("\t\t%d %d %d\n" % (face.verts[0].index, face.verts[1].index, face.verts[2].index))
-
-                                        ## what kind of normals do we have?
-                                        if not islight:
-                                                if allflat:
-                                                        FILE.write("\tnormals none\n")
-                                                elif allsmooth:
-                                                        FILE.write("\tnormals vertex\n")
-                                                        for vert in verts:
-                                                                FILE.write("\t\t%.6f %.6f %.6f\n" % (vert.no[0], vert.no[1], vert.no[2]))
-                                                else:
-                                                        FILE.write("\tnormals facevarying\n")
-                                                        for face in faces:
-                                                                num = len(face.verts)
-                                                                if face.smooth != 0:
-                                                                        if num == 4:
-                                                                                index0 = face.verts[0].index
-                                                                                index1 = face.verts[1].index
-                                                                                index2 = face.verts[2].index
-                                                                                index3 = face.verts[3].index
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
-                                                                                                                                                                                                                                        verts[index1].no[0], verts[index1].no[1], verts[index1].no[2],
-                                                                                                                                                                                                                                        verts[index2].no[0], verts[index2].no[1], verts[index2].no[2]))
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
-                                                                                                                                                                                                                                        verts[index2].no[0], verts[index2].no[1], verts[index2].no[2],
-                                                                                                                                                                                                                                        verts[index3].no[0], verts[index3].no[1], verts[index3].no[2]))
-                                                                        elif num == 3:
-                                                                                index0 = face.verts[0].index
-                                                                                index1 = face.verts[1].index
-                                                                                index2 = face.verts[2].index
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (verts[index0].no[0], verts[index0].no[1], verts[index0].no[2],
-                                                                                                                                                                                                                                        verts[index1].no[0], verts[index1].no[1], verts[index1].no[2],
-                                                                                                                                                                                                                                        verts[index2].no[0], verts[index2].no[1], verts[index2].no[2]))
-                                                                else:
-                                                                        fnx = face.no[0]
-                                                                        fny = face.no[1]
-                                                                        fnz = face.no[2]
-                                                                        if num == 4:
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
-                                                                        elif num == 3:
-                                                                                FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
-                                                # Check for UVs #
-                                                if mesh.faceUV != 0:
-                                                        tx = 1
-                                                        ty = 1
-                                                        if len(mesh.materials) >= 1:
-                                                                if len(mesh.materials[0].getTextures()) >= 1:
-                                                                        if mesh.materials[0].getTextures()[0] != None:
-                                                                                tx = mesh.materials[0].getTextures()[0].tex.repeat[0]
-                                                                                ty = mesh.materials[0].getTextures()[0].tex.repeat[1]
-                                                        FILE.write("\tuvs facevarying\n")
-                                                        for face in faces:
-                                                                num = len(face.verts)
-                                                                if num == 4:
-                                                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[1][0], ty * face.uv[1][1], tx * face.uv[2][0], ty * face.uv[2][1]))
-                                                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[2][0], ty * face.uv[2][1], tx * face.uv[3][0], ty * face.uv[3][1]))
-                                                                elif num == 3:
-                                                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[1][0], ty * face.uv[1][1], tx * face.uv[2][0], ty * face.uv[2][1]))
-                                                else:
-                                                        FILE.write("\tuvs none\n")
-
-                                                # Check for multiple materials on the mesh (face indices) #
-                                                if len(mesh.materials) > 1:
-                                                        FILE.write("\tface_shaders\n")
-                                                        for face in faces:
-                                                                num = len(face.verts)
-                                                                if num == 4:
-                                                                        FILE.write("\t\t%d\n" % (face.mat))
-                                                                        FILE.write("\t\t%d\n" % (face.mat))
-                                                                elif num == 3:
-                                                                        FILE.write("\t\t%d\n" % (face.mat))
-                                        FILE.write("}\n")
-                # This clears the data from the new mesh created. #
-                mesh.verts = None
+                                    fnx = face.no[0]
+                                    fny = face.no[1]
+                                    fnz = face.no[2]
+                                    if num == 4:
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
+                                    elif num == 3:
+                                        FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f %.6f\n" % (fnx, fny, fnz, fnx, fny, fnz, fnx, fny, fnz))
+                        # Check for UVs #
+                        if mesh.faceUV != 0:
+                            tx = 1
+                            ty = 1
+                            if len(mesh.materials) >= 1:
+                                if len(mesh.materials[0].getTextures()) >= 1:
+                                    if mesh.materials[0].getTextures()[0] != None:
+                                        tx = mesh.materials[0].getTextures()[0].tex.repeat[0]
+                                        ty = mesh.materials[0].getTextures()[0].tex.repeat[1]
+                            FILE.write("\tuvs facevarying\n")
+                            for face in faces:
+                                num = len(face.verts)
+                                if num == 4:
+                                    FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[1][0], ty * face.uv[1][1], tx * face.uv[2][0], ty * face.uv[2][1]))
+                                    FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[2][0], ty * face.uv[2][1], tx * face.uv[3][0], ty * face.uv[3][1]))
+                                elif num == 3:
+                                    FILE.write("\t\t%.6f %.6f %.6f %.6f %.6f %.6f\n" % (tx * face.uv[0][0], ty * face.uv[0][1], tx * face.uv[1][0], ty * face.uv[1][1], tx * face.uv[2][0], ty * face.uv[2][1]))
+                        else:
+                            FILE.write("\tuvs none\n")
 
-        # Look for Instances/Dupligroups #
-        if obj.getType() == "Empty":
-                ob = Object.Get(obj.name)
-                dupe_obs = ob.DupObjects
-		dupmatrix = Mathutils.Matrix(ob.getMatrix())
-                group = ob.DupGroup
-                if group != "None":
-                        for dupe_ob, dup_matrix in dupe_obs:
-                                dupobmesh = Mesh.Get(dupe_ob.name)
-                                instancematrix = ob.getMatrix()
-                                print("o exporting instances of " + dupe_ob.name+"...")
-                                FILE.write("\n\ninstance {\n")
-                                FILE.write("\tname %s_%s \n" % (obj.name, dupe_ob.name))
-                                FILE.write("\tgeometry %s \n" % dupe_ob.name)
-                                FILE.write("\ttransform col %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s \n" % (instancematrix[0][0], instancematrix[0][1], instancematrix[0][2], instancematrix[0][3], instancematrix[1][0], instancematrix[1][1], instancematrix[1][2], instancematrix[1][3], instancematrix[2][0], instancematrix[2][1], instancematrix[2][2], instancematrix[2][3], instancematrix[3][0], instancematrix[3][1], instancematrix[3][2], instancematrix[3][3]))
-                                if len(dupobmesh.materials) == 1:
-                                        FILE.write("\tshader \"" + dupobmesh.materials[0].name + ".shader\"\n")
-
-                                        ##Check for and write modfiers##
-                                        for mat in dupobmesh.materials:
-                                                textures = mat.getTextures()
-                                                textu = textures[1]
-                                                textp = textures[3]
-                                                if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
-                                                        FILE.write("\tmodifier \"" + str(textu.tex.getName()) + "\"\n")
-                                                elif textp != None and (textp.tex.name.startswith("perlin")):
-                                                        FILE.write("\tmodifier \"" + str(textp.tex.getName()) + "\"\n")
-
-                                elif len(dupobmesh.materials) > 1:
-                                        FILE.write("\tshaders %d\n" % (len(dupobmesh.materials)))
-
-                                        for mat in dupobmesh.materials:
-                                                FILE.write("\t\t\"" + mat.name + ".shader\"\n")
-
-                                        ##Check for and write modfiers##
-                                        FILE.write("\tmodifiers %d\n" % (len(dupobmesh.materials)))
-                                        for mat in dupobmesh.materials:
-
-                                                textures = mat.getTextures()
-                                                textu = textures[1]
-                                                textp = textures[3]
-                                                if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
-                                                        FILE.write("\t\t\"" + textu.tex.getName() + "\"\n")
-                                                elif textp != None and (textp.tex.name.startswith("perlin")):
-                                                        FILE.write("\t\t\"" + textp.tex.getName() + "\"\n")
-                                                else:
-                                                        FILE.write("\t\t\"" + "None" + "\"\n")
+                        # Check for multiple materials on the mesh (face indices) #
+                        if len(mesh.materials) > 1:
+                            FILE.write("\tface_shaders\n")
+                            for face in faces:
+                                num = len(face.verts)
+                                if num == 4:
+                                    FILE.write("\t\t%d\n" % (face.mat))
+                                    FILE.write("\t\t%d\n" % (face.mat))
+                                elif num == 3:
+                                    FILE.write("\t\t%d\n" % (face.mat))
+                    FILE.write("}\n")
+        # This clears the data from the new mesh created. #
+        mesh.verts = None
+
+    # Look for Instances/Dupligroups #
+    if obj.getType() == "Empty":
+        ob = Object.Get(obj.name)
+        dupe_obs = ob.DupObjects
+        dupmatrix = Mathutils.Matrix(ob.getMatrix())
+        group = ob.DupGroup
+        if group != "None":
+            for dupe_ob, dup_matrix in dupe_obs:
+                dupobmesh = Mesh.Get(dupe_ob.name)
+                instancematrix = ob.getMatrix()
+                print("o exporting instances of " + dupe_ob.name+"...")
+                FILE.write("\n\ninstance {\n")
+                FILE.write("\tname %s_%s \n" % (obj.name, dupe_ob.name))
+                FILE.write("\tgeometry %s \n" % dupe_ob.name)
+                FILE.write("\ttransform col %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s \n" % (instancematrix[0][0], instancematrix[0][1], instancematrix[0][2], instancematrix[0][3], instancematrix[1][0], instancematrix[1][1], instancematrix[1][2], instancematrix[1][3], instancematrix[2][0], instancematrix[2][1], instancematrix[2][2], instancematrix[2][3], instancematrix[3][0], instancematrix[3][1], instancematrix[3][2], instancematrix[3][3]))
+                if len(dupobmesh.materials) == 1:
+                    FILE.write("\tshader \"" + dupobmesh.materials[0].name + ".shader\"\n")
+
+                    ##Check for and write modfiers##
+                    for mat in dupobmesh.materials:
+                        textures = mat.getTextures()
+                        textu = textures[1]
+                        textp = textures[3]
+                        if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
+                            FILE.write("\tmodifier \"" + str(textu.tex.getName()) + "\"\n")
+                        elif textp != None and (textp.tex.name.startswith("perlin")):
+                            FILE.write("\tmodifier \"" + str(textp.tex.getName()) + "\"\n")
+
+                elif len(dupobmesh.materials) > 1:
+                    FILE.write("\tshaders %d\n" % (len(dupobmesh.materials)))
+
+                    for mat in dupobmesh.materials:
+                        FILE.write("\t\t\"" + mat.name + ".shader\"\n")
+
+                    ##Check for and write modfiers##
+                    FILE.write("\tmodifiers %d\n" % (len(dupobmesh.materials)))
+                    for mat in dupobmesh.materials:
+
+                        textures = mat.getTextures()
+                        textu = textures[1]
+                        textp = textures[3]
+                        if textu != None and (textu.tex.name.startswith("bump") or textu.tex.name.startswith("normal")):
+                            FILE.write("\t\t\"" + textu.tex.getName() + "\"\n")
+                        elif textp != None and (textp.tex.name.startswith("perlin")):
+                            FILE.write("\t\t\"" + textp.tex.getName() + "\"\n")
+                        else:
+                            FILE.write("\t\t\"" + "None" + "\"\n")
 
-                                else:
-                                        FILE.write("\tshader def\n")
-                                FILE.write("}\n")
+                else:
+                    FILE.write("\tshader def\n")
+                FILE.write("}\n")
 
 ## Main export method ##
 def exportfile(filename):
-	global FILE, SCENE, IM_HEIGHT, IM_WIDTH, TEXTURES, OBJECTS, LAYERS, IBLLIGHT, EXP_ANIM, fname, destname
-	global PATH
+    global FILE, SCENE, IM_HEIGHT, IM_WIDTH, TEXTURES, OBJECTS, LAYERS, IBLLIGHT, EXP_ANIM, fname, destname
+    global PATH
 
-	SCENE     = Blender.Scene.GetCurrent()
-	IM_HEIGHT = SCENE.getRenderingContext().imageSizeY() * (SCENE.getRenderingContext().getRenderWinSize() / 100.0)
-	IM_WIDTH = SCENE.getRenderingContext().imageSizeX() * (SCENE.getRenderingContext().getRenderWinSize() / 100.0)
-	TEXTURES  = Blender.Texture.Get()
-
-	LAYERS    = SCENE.getLayers()
-	STARTFRAME = SCENE.getRenderingContext().startFrame()
-	ENDFRAME  = SCENE.getRenderingContext().endFrame()
-	CTX       = SCENE.getRenderingContext()
-	orig_frame = CTX.currentFrame()
-
-	if not filename.endswith(".sc"):
-		filename = filename + ".sc"
-	fname = filename
-	destname = fname.replace(".sc", "")
-
-	ANIM = EXP_ANIM.val
-
-	if ANIM == 1:
-		base = os.path.splitext(os.path.basename(filename))[0]
-		FILE = open(filename.replace(".sc", ".java"), "wb")
-		FILE.write("""
+    SCENE     = Blender.Scene.GetCurrent()
+    IM_HEIGHT = SCENE.getRenderingContext().imageSizeY() * (SCENE.getRenderingContext().getRenderWinSize() / 100.0)
+    IM_WIDTH = SCENE.getRenderingContext().imageSizeX() * (SCENE.getRenderingContext().getRenderWinSize() / 100.0)
+    TEXTURES  = Blender.Texture.Get()
+
+    LAYERS    = SCENE.getLayers()
+    STARTFRAME = SCENE.getRenderingContext().startFrame()
+    ENDFRAME  = SCENE.getRenderingContext().endFrame()
+    CTX       = SCENE.getRenderingContext()
+    orig_frame = CTX.currentFrame()
+
+    if not filename.endswith(".sc"):
+        filename = filename + ".sc"
+    fname = filename
+    destname = fname.replace(".sc", "")
+
+    ANIM = EXP_ANIM.val
+
+    if ANIM == 1:
+        base = os.path.splitext(os.path.basename(filename))[0]
+        FILE = open(filename.replace(".sc", ".java"), "wb")
+        FILE.write("""
 public void build() {
-	parse("%s" + ".settings.sc");
-	parse("%s" + "." + getCurrentFrame() + ".sc");
+parse("%s" + ".settings.sc");
+parse("%s" + "." + getCurrentFrame() + ".sc");
 }
 """ % (base, base))
 
-		FILE.close()
-		FILE = open(filename.replace(".sc", ".settings.sc"), "wb")
-		export_output()
-		export_gi()
-		FILE.close()
-	else:
-		STARTFRAME = ENDFRAME = orig_frame
-
-	for cntr in range(STARTFRAME, ENDFRAME + 1):
-		filename = fname
-
-		CTX.currentFrame(cntr)
-		SCENE.makeCurrent()
-		OBJECTS = SCENE.objects
-
-		if ANIM == 1:
-			filename = filename.replace(".sc", ".%d.sc" % (CTX.currentFrame()))
-
-		print("Exporting to: %s" % (filename))
-
-		FILE = open(filename, 'wb')
-
-		if ANIM == 0:
-			export_output()
-			export_gi()
-
-		export_shaders()
-		export_modifiers()
-		export_ibl()
-		export_camera(SCENE.objects.camera)
-		for object in OBJECTS:
-			if object.users > 1 and object.layers[0] in LAYERS:
-				if object.getType() == 'Lamp':
-					export_lights(object)
-				if object.getType() == 'Mesh' or object.getType() == 'Surf':
-					if object.name.startswith("meshlight"):
-						export_geometry(object)
-
-		if ANIM == 0:
-			FILE.write("\n\ninclude \"%s\"\n" % (os.path.basename(filename).replace(".sc", ".geo.sc")))
-			FILE.close()
-			## open geo file
-			filename = filename.replace(".sc", ".geo.sc")
-			print("Exporting geometry to: %s" % (filename))
-			FILE = open(filename, 'wb')
-
-		for object in OBJECTS:
-			if object.users > 1 and object.layers[0] in LAYERS:
-				if object.getType() == 'Mesh' or object.getType() == 'Surf':
-					if not object.name.startswith("meshlight"):
-						export_geometry(object)
-
-		for object in OBJECTS:
-			if object.users > 1 and object.layers[0] in LAYERS:
-                                if object.getType() == 'Empty':
-                                        export_geometry(object)
-		FILE.close()
-
-	if ANIM == 1:
-		CTX.currentFrame(orig_frame)
-		SCENE.makeCurrent()
+        FILE.close()
+        FILE = open(filename.replace(".sc", ".settings.sc"), "wb")
+        export_output()
+        export_gi()
+        FILE.close()
+    else:
+        STARTFRAME = ENDFRAME = orig_frame
+
+    for cntr in range(STARTFRAME, ENDFRAME + 1):
+        filename = fname
+
+        CTX.currentFrame(cntr)
+        SCENE.makeCurrent()
+        OBJECTS = SCENE.objects
+
+        if ANIM == 1:
+            filename = filename.replace(".sc", ".%d.sc" % (CTX.currentFrame()))
+
+        print("Exporting to: %s" % (filename))
+
+        FILE = open(filename, 'wb')
+
+        if ANIM == 0:
+            export_output()
+            export_gi()
+
+        export_shaders()
+        export_modifiers()
+        export_ibl()
+        export_camera(SCENE.objects.camera)
+        for object in OBJECTS:
+            if object.users > 1 and object.layers[0] in LAYERS:
+                if object.getType() == 'Lamp':
+                    export_lights(object)
+                if object.getType() == 'Mesh' or object.getType() == 'Surf':
+                    if object.name.startswith("meshlight"):
+                        export_geometry(object)
+
+        if ANIM == 0:
+            FILE.write("\n\ninclude \"%s\"\n" % (os.path.basename(filename).replace(".sc", ".geo.sc")))
+            FILE.close()
+            ## open geo file
+            filename = filename.replace(".sc", ".geo.sc")
+            print("Exporting geometry to: %s" % (filename))
+            FILE = open(filename, 'wb')
+
+        for object in OBJECTS:
+            if object.users > 1 and object.layers[0] in LAYERS:
+                if object.getType() == 'Mesh' or object.getType() == 'Surf':
+                    if not object.name.startswith("meshlight"):
+                        export_geometry(object)
+
+        for object in OBJECTS:
+            if object.users > 1 and object.layers[0] in LAYERS:
+                if object.getType() == 'Empty':
+                    export_geometry(object)
+        FILE.close()
+
+    if ANIM == 1:
+        CTX.currentFrame(orig_frame)
+        SCENE.makeCurrent()
 
-	print("Export finished.")
+    print("Export finished.")
 
 if __name__ == '__main__':
-	Blender.Window.FileSelector(exportfile, "Export .sc", Blender.sys.makename(ext=".sc"))
+    Blender.Window.FileSelector(exportfile, "Export .sc", Blender.sys.makename(ext=".sc"))
 
 ## Global event handler ##
 def event(evt, val):
-	if evt == Draw.ESCKEY:
-		print("quitting exporter...")
-		Draw.Exit()
+    if evt == Draw.ESCKEY:
+        print("quitting exporter...")
+        Draw.Exit()
 
 ## Writing of the SF config file ##
 def setpath(SFPATH):
-	datadir=Blender.Get("datadir")
-	# create 'path2sf.cfg in the .blend/bpydata directory
-	f = open(datadir + '/path2sf.cfg', 'w')
-	f.write(str(SFPATH)+"\n")
-	f.write(str(MEM)+"\n")
-	f.write(str(THREADS)+"\n")
-	f.close()
+    datadir=Blender.Get("datadir")
+    # create 'path2sf.cfg in the .blend/bpydata directory
+    f = open(datadir + '/path2sf.cfg', 'w')
+    f.write(str(SFPATH)+"\n")
+    f.write(str(MEM)+"\n")
+    f.write(str(THREADS)+"\n")
+    f.close()
 
 def setjavapath(JAVAPATH):
-	datadir=Blender.Get("datadir")
-	f = open(datadir + '/path2sf.cfg', 'a')
-	f.write(str(JAVAPATH))
-	f.close()
+    datadir=Blender.Get("datadir")
+    f = open(datadir + '/path2sf.cfg', 'a')
+    f.write(str(JAVAPATH))
+    f.close()
 
 ## Render to Sunflow from inside the script ##
 # Send render values to Blender as IDs #
 def def_render():
-	# Writes render setting properties
-	SCENE.properties['RenderProp'] = "true"
-	SCENE.properties['File Type'] = FILETYPE.val
-        SCENE.properties['Quick Option'] = QUICKOPT.val
-        SCENE.properties['Quick AO Distance'] = QOCCDIST.val
-	if NOGUI.val == 1:
-		SCENE.properties['-nogui'] = "true"
-	else:
-		SCENE.properties['-nogui'] = "false"
-	if SMALLMESH.val == 1:
-		SCENE.properties['-smallmesh'] = "true"
-	else:
-		SCENE.properties['-smallmesh'] = "false"
-	if NOGI.val == 1:
-		SCENE.properties['-nogi'] = "true"
-	else:
-		SCENE.properties['-nogi'] = "false"
-	if NOCAUSTICS.val == 1:
-		SCENE.properties['-nocaustics'] = "true"
-	else:
-		SCENE.properties['-nocaustics'] = "false"
-	if QUICKOCC.val == 1:
-		SCENE.properties['-quick_ambocc'] = "true"
-	else:
-		SCENE.properties['-quick_ambocc'] = "false"
-	if IPR.val == 1:
-		SCENE.properties['-ipr'] = "true"
-	else:
-		SCENE.properties['-ipr'] = "false"
-	if EXP_ANIM.val == 1:
-                SCENE.properties['animation'] = "true"
-        else:
-                SCENE.properties['animation'] = "false"
+    # Writes render setting properties
+    SCENE.properties['RenderProp'] = "true"
+    SCENE.properties['File Type'] = FILETYPE.val
+    SCENE.properties['Quick Option'] = QUICKOPT.val
+    SCENE.properties['Quick AO Distance'] = QOCCDIST.val
+    if NOGUI.val == 1:
+        SCENE.properties['-nogui'] = "true"
+    else:
+        SCENE.properties['-nogui'] = "false"
+    if SMALLMESH.val == 1:
+        SCENE.properties['-smallmesh'] = "true"
+    else:
+        SCENE.properties['-smallmesh'] = "false"
+    if NOGI.val == 1:
+        SCENE.properties['-nogi'] = "true"
+    else:
+        SCENE.properties['-nogi'] = "false"
+    if NOCAUSTICS.val == 1:
+        SCENE.properties['-nocaustics'] = "true"
+    else:
+        SCENE.properties['-nocaustics'] = "false"
+    if QUICKOCC.val == 1:
+        SCENE.properties['-quick_ambocc'] = "true"
+    else:
+        SCENE.properties['-quick_ambocc'] = "false"
+    if IPR.val == 1:
+        SCENE.properties['-ipr'] = "true"
+    else:
+        SCENE.properties['-ipr'] = "false"
+    if EXP_ANIM.val == 1:
+        SCENE.properties['animation'] = "true"
+    else:
+        SCENE.properties['animation'] = "false"
 
 # Import render values from Blender IDs to script #
 def import_render():
-        global EXP_ANIM
-        if SCENE.properties['RenderProp'] == "true":
-                FILETYPE.val = SCENE.properties['File Type']
-                QUICKOPT.val = SCENE.properties['Quick Option']
-                QOCCDIST.val = SCENE.properties['Quick AO Distance']
-                if SCENE.properties['-nogui'] == "true":
-                        NOGUI.val = 1
-                        Draw.Redraw()
-                else:
-                        NOGUI.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['-smallmesh'] == "true":
-                        SMALLMESH.val = 1
-                        Draw.Redraw()
-                else:
-                        SMALLMESH.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['-nogi'] == "true":
-                        NOGI.val = 1
-                        Draw.Redraw()
-                else:
-                        NOGI.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['-nocaustics'] == "true":
-                        NOCAUSTICS.val = 1
-                        Draw.Redraw()
-                else:
-                        NOCAUSTICS.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['-quick_ambocc'] == "true":
-                        QUICKOCC.val = 1
-                        Draw.Redraw()
-                else:
-                        QUICKOCC.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['-ipr'] == "true":
-                        IPR.val = 1
-                        Draw.Redraw()
-                else:
-                        IPR.val = 0
-                        Draw.Redraw()
-                if SCENE.properties['animation'] == "true":
-                        EXP_ANIM.val = 1
-                        Draw.Redraw()
-                else:
-                        EXP_ANIM.val = 0
-                        Draw.Redraw()
+    global EXP_ANIM
+    if SCENE.properties['RenderProp'] == "true":
+        FILETYPE.val = SCENE.properties['File Type']
+        QUICKOPT.val = SCENE.properties['Quick Option']
+        QOCCDIST.val = SCENE.properties['Quick AO Distance']
+        if SCENE.properties['-nogui'] == "true":
+            NOGUI.val = 1
+            Draw.Redraw()
+        else:
+            NOGUI.val = 0
+            Draw.Redraw()
+        if SCENE.properties['-smallmesh'] == "true":
+            SMALLMESH.val = 1
+            Draw.Redraw()
+        else:
+            SMALLMESH.val = 0
+            Draw.Redraw()
+        if SCENE.properties['-nogi'] == "true":
+            NOGI.val = 1
+            Draw.Redraw()
+        else:
+            NOGI.val = 0
+            Draw.Redraw()
+        if SCENE.properties['-nocaustics'] == "true":
+            NOCAUSTICS.val = 1
+            Draw.Redraw()
+        else:
+            NOCAUSTICS.val = 0
+            Draw.Redraw()
+        if SCENE.properties['-quick_ambocc'] == "true":
+            QUICKOCC.val = 1
+            Draw.Redraw()
+        else:
+            QUICKOCC.val = 0
+            Draw.Redraw()
+        if SCENE.properties['-ipr'] == "true":
+            IPR.val = 1
+            Draw.Redraw()
+        else:
+            IPR.val = 0
+            Draw.Redraw()
+        if SCENE.properties['animation'] == "true":
+            EXP_ANIM.val = 1
+            Draw.Redraw()
+        else:
+            EXP_ANIM.val = 0
+            Draw.Redraw()
 
 # Export render values #
 def render():
-	global COMMAND, memory, threads, sfpath, trial, javapath, fname, destname, STARTFRAME, ENDFRAME
-	#exportfile(fname)
-	destname = fname.replace(".sc", "")
-	STARTFRAME = SCENE.getRenderingContext().startFrame()
-	ENDFRAME  = SCENE.getRenderingContext().endFrame()
-	# Get blenders 'bpydata' directory:
-	datadir=Blender.Get("datadir")
-	# Check existence of SF config file:
-	trial=os.path.exists(datadir+'/path2sf.cfg')
-	# Continue rendering if file exists:
-	if trial == True:
-		print("True")
-		# open 'path2sf.cfg'
-		f = open(datadir + '/path2sf.cfg', 'r+')
-		lines = f.readlines()
-		# Remove EOL:
-		lines[0]=lines[0].rstrip("\n")
-		lines[1]=lines[1].rstrip("\n")
-		lines[2]=lines[2].rstrip("\n")
-		lines[3]=lines[3].rstrip("\n")
-		# Allocate values to variables:
-		sfdir = lines[0]
-		memory = lines[1]
-		threads = lines[2]
-		javadir = lines[3]
-		f.close()
-
-		# base command for executing SF:
-		EXEC="%sjava -server -Xmx%sM -jar \"%ssunflow.jar\"" % (javadir, memory, sfdir)
-		#print EXEC
-
-		# Building the options to be passed to SF:
-		if NOGUI == 1:
-			option1="-nogui "
-		else:
-			option1=""
-		option2="-threads %s " % THREADS
-		if SMALLMESH == 1:
-			option3="-smallmesh "
-		else:
-			option3=""
-		if NOGI == 1:
-			option4="-nogi "
-		else:
-			option4=""
-		if NOCAUSTICS == 1:
-			option5="-nocaustics "
-		else:
-			option5=""
-		if QUICKOPT.val == 1:
-			option6=""
-		if QUICKOPT.val == 2:
-			option6="-quick_uvs "
-		elif QUICKOPT.val == 3:
-			option6="-quick_normals "
-		elif QUICKOPT.val == 4:
-			option6="-quick_id "
-		elif QUICKOPT.val == 5:
-			option6="-quick_prims "
-		elif QUICKOPT.val == 6:
-			option6="-quick_gray "
-		elif QUICKOPT.val == 7:
-			option6="-quick_wire -aa 2 3 -filter mitchell "
-		if QUICKOCC == 1:
-			option7="-quick_ambocc %s " % (QOCCDIST)
-		else:
-			option7=""
-		if IPR == 1:
-			option8="-ipr "
-		else:
-			option8=""
-		print(option6)
-
- 		if FILETYPE == 1:
-			ext="png"
-		elif FILETYPE == 2:
-			ext="tga"
-		elif FILETYPE == 3:
-			ext="hdr"
-		elif FILETYPE == 4:
-			ext="exr"
-		elif FILETYPE == 5:
-			ext="igi"
-
-		# Definition of the command to render the scene:
-                if EXP_ANIM.val == 0:
-                        COMMAND="%s %s%s%s%s%s%s%s%s -o \"%s.%s\" \"%s\"" % (EXEC, option1, option2, option3, option4, option5, option6, option7, option8, destname, ext, fname)
-                        print(COMMAND)
-                if EXP_ANIM.val == 1:
-                        COMMAND="%s -anim %s %s -o \"%s.#.%s\" \"%s.java\"" % (EXEC, STARTFRAME, ENDFRAME, destname, ext, destname)
-                        print(COMMAND)
-		if FILETYPE != 1:
-			COMMAND="%s -nogui %s%s%s%s%s%s%s -o \"%s.%s\" \"%s\"" % (EXEC, option2, option3, option4, option5, option6, option7, option8, destname, ext, fname)
-                        print(COMMAND)
-		# Execute the command:
-		pid=os.system(COMMAND)
-		#pid = subprocess.Popen(args=COMMAND, shell=True)
+    global COMMAND, memory, threads, sfpath, trial, javapath, fname, destname, STARTFRAME, ENDFRAME
+    #exportfile(fname)
+    destname = fname.replace(".sc", "")
+    STARTFRAME = SCENE.getRenderingContext().startFrame()
+    ENDFRAME  = SCENE.getRenderingContext().endFrame()
+    # Get blenders 'bpydata' directory:
+    datadir=Blender.Get("datadir")
+    # Check existence of SF config file:
+    trial=os.path.exists(datadir+'/path2sf.cfg')
+    # Continue rendering if file exists:
+    if trial == True:
+        print("True")
+        # open 'path2sf.cfg'
+        f = open(datadir + '/path2sf.cfg', 'r+')
+        lines = f.readlines()
+        # Remove EOL:
+        lines[0]=lines[0].rstrip("\n")
+        lines[1]=lines[1].rstrip("\n")
+        lines[2]=lines[2].rstrip("\n")
+        lines[3]=lines[3].rstrip("\n")
+        # Allocate values to variables:
+        sfdir = lines[0]
+        memory = lines[1]
+        threads = lines[2]
+        javadir = lines[3]
+        f.close()
+
+        # base command for executing SF:
+        EXEC="%sjava -server -Xmx%sM -jar \"%ssunflow.jar\"" % (javadir, memory, sfdir)
+        #print EXEC
+
+        # Building the options to be passed to SF:
+        if NOGUI == 1:
+            option1="-nogui "
+        else:
+            option1=""
+        option2="-threads %s " % THREADS
+        if SMALLMESH == 1:
+            option3="-smallmesh "
+        else:
+            option3=""
+        if NOGI == 1:
+            option4="-nogi "
+        else:
+            option4=""
+        if NOCAUSTICS == 1:
+            option5="-nocaustics "
+        else:
+            option5=""
+        if QUICKOPT.val == 1:
+            option6=""
+        if QUICKOPT.val == 2:
+            option6="-quick_uvs "
+        elif QUICKOPT.val == 3:
+            option6="-quick_normals "
+        elif QUICKOPT.val == 4:
+            option6="-quick_id "
+        elif QUICKOPT.val == 5:
+            option6="-quick_prims "
+        elif QUICKOPT.val == 6:
+            option6="-quick_gray "
+        elif QUICKOPT.val == 7:
+            option6="-quick_wire -aa 2 3 -filter mitchell "
+        if QUICKOCC == 1:
+            option7="-quick_ambocc %s " % (QOCCDIST)
+        else:
+            option7=""
+        if IPR == 1:
+            option8="-ipr "
+        else:
+            option8=""
+        print(option6)
+
+        if FILETYPE == 1:
+            ext="png"
+        elif FILETYPE == 2:
+            ext="tga"
+        elif FILETYPE == 3:
+            ext="hdr"
+        elif FILETYPE == 4:
+            ext="exr"
+        elif FILETYPE == 5:
+            ext="igi"
+
+        # Definition of the command to render the scene:
+        if EXP_ANIM.val == 0:
+            COMMAND="%s %s%s%s%s%s%s%s%s -o \"%s.%s\" \"%s\"" % (EXEC, option1, option2, option3, option4, option5, option6, option7, option8, destname, ext, fname)
+            print(COMMAND)
+        if EXP_ANIM.val == 1:
+            COMMAND="%s -anim %s %s -o \"%s.#.%s\" \"%s.java\"" % (EXEC, STARTFRAME, ENDFRAME, destname, ext, destname)
+            print(COMMAND)
+        if FILETYPE != 1:
+            COMMAND="%s -nogui %s%s%s%s%s%s%s -o \"%s.%s\" \"%s\"" % (EXEC, option2, option3, option4, option5, option6, option7, option8, destname, ext, fname)
+            print(COMMAND)
+        # Execute the command:
+        pid=os.system(COMMAND)
+        #pid = subprocess.Popen(args=COMMAND, shell=True)
 
 ####### GUI button event handler #######
 ########################################
 
 def buttonEvent(evt):
-	global FILE, SCREEN, SETPATH, SETJAVAPATH, FILENAME, SCENE
+    global FILE, SCREEN, SETPATH, SETJAVAPATH, FILENAME, SCENE
 
-	## Common events:
-	if evt == EXP_EVT:
-		Blender.Window.FileSelector(exportfile, "Export .sc", FILENAME)
-
-	## Config file events
-	if evt == SET_PATH:
-		Blender.Window.FileSelector(setpath, "SET SF PATH", SFPATH)
-		setpath(SFPATH)
-	if evt == SET_JAVAPATH:
-		Blender.Window.FileSelector(setjavapath, "SET JAVA PATH", JAVAPATH)
-		setjavapath(JAVAPATH)
-	if evt == REND_EVT:
-		render()
-
-	## Setting exclusive buttons rules:
-	if evt == DOF_CAMERA:
-		if DOF.val == 1:
-			if SPHERICALCAMERA.val == 1:
-				SPHERICALCAMERA.val = 0
-				Draw.Redraw()
-			elif FISHEYECAMERA.val == 1:
-				FISHEYECAMERA.val = 0
-				Draw.Redraw()
-	if evt == SPHER_CAMERA:
-		if SPHERICALCAMERA.val == 1:
-			if DOF.val == 1:
-				DOF.val = 0
-				Draw.Redraw()
-			elif FISHEYECAMERA.val == 1:
-				FISHEYECAMERA.val = 0
-				Draw.Redraw()
-	if evt == FISH_CAMERA:
-		if FISHEYECAMERA.val == 1:
-			if DOF.val == 1:
-				DOF.val = 0
-				Draw.Redraw()
-			elif SPHERICALCAMERA.val == 1:
-				SPHERICALCAMERA.val = 0
-				Draw.Redraw()
-	if evt == FILTER_EVENT:
-		Draw.Redraw()
-	if evt == BUCKET_EVENT:
-		Draw.Redraw()
-	if evt == FORCE_INSTANTGI:
-		if INSTANTGI.val == 1:
-			if IRRCACHE.val == 1:
-				IRRCACHE.val = 0
-				Draw.Redraw()
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-			if PATHTRACE.val == 1:
-				PATHTRACE.val = 0
-				Draw.Redraw()
-			if OCCLUSION.val == 1:
-				OCCLUSION.val = 0
-				Draw.Redraw()
-			if FAKEAMB.val == 1:
-				FAKEAMB.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-	if evt == FORCE_IRRCACHE:
-		if IRRCACHE.val == 1:
-			if INSTANTGI.val == 1:
-				INSTANTGI.val = 0
-				Draw.Redraw()
-			if PATHTRACE.val == 1:
-				PATHTRACE.val = 0
-				Draw.Redraw()
-			if OCCLUSION.val == 1:
-				OCCLUSION.val = 0
-				Draw.Redraw()
-			if FAKEAMB.val == 1:
-				FAKEAMB.val = 0
-				Draw.Redraw()
-		if IRRCACHE.val == 0:
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-	if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-	if evt == FORCE_PATHTRACE:
-		if PATHTRACE.val == 1:
-			if IRRCACHE.val == 1:
-				IRRCACHE.val = 0
-				Draw.Redraw()
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-			if INSTANTGI.val == 1:
-				INSTANTGI.val = 0
-				Draw.Redraw()
-			if OCCLUSION.val == 1:
-				OCCLUSION.val = 0
-				Draw.Redraw()
-			if FAKEAMB.val == 1:
-				FAKEAMB.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-	if evt == FORCE_OCCLUSION:
-		if OCCLUSION.val == 1:
-			if IRRCACHE.val == 1:
-				IRRCACHE.val = 0
-				Draw.Redraw()
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-			if INSTANTGI.val == 1:
-				INSTANTGI.val = 0
-				Draw.Redraw()
-			if PATHTRACE.val == 1:
-				PATHTRACE.val = 0
-				Draw.Redraw()
-			if FAKEAMB.val == 1:
-				FAKEAMB.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-	if evt == FORCE_FAKEAMB:
-		if FAKEAMB.val == 1:
-			if IRRCACHE.val == 1:
-				IRRCACHE.val = 0
-				Draw.Redraw()
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-			if INSTANTGI.val == 1:
-				INSTANTGI.val = 0
-				Draw.Redraw()
-			if PATHTRACE.val == 1:
-				PATHTRACE.val = 0
-				Draw.Redraw()
-			if OCCLUSION.val == 1:
-				OCCLUSION.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-	if evt == FORCE_GLOBALS:
-		if USEGLOBALS.val == 1:
-			if PATHTRACE.val == 1:
-				PATHTRACE.val = 0
-				Draw.Redraw()
-			if INSTANTGI.val == 1:
-				INSTANTGI.val = 0
-				Draw.Redraw()
-		if IRRCACHE.val == 0:
-			if USEGLOBALS.val == 1:
-				USEGLOBALS.val = 0
-				Draw.Redraw()
-		if USEGLOBALS.val == 0:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-	if evt == EVENT_CAUSTICS:
-		if CAUSTICS.val == 0:
-			if VIEWCAUSTICS.val == 1:
-				VIEWCAUSTICS.val = 0
-				Draw.Redraw()
-	if evt == OVERRIDE_CAUSTICS:
-		if CAUSTICS.val == 0:
-			if VIEWCAUSTICS.val == 1:
-				VIEWCAUSTICS.val = 0
-				Draw.Redraw()
-	if evt == OVERRIDE_GLOBALS:
-		if USEGLOBALS.val == 0:
-			if VIEWGLOBALS.val == 1:
-				VIEWGLOBALS.val = 0
-				Draw.Redraw()
-	if evt == OVERRIDE_GI:
-		if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
-			if VIEWGI.val == 1:
-				VIEWGI.val = 0
-				Draw.Redraw()
-	if evt == IBL_EVENT:
-			if IBL.val == 0:
-				if IBLLOCK.val == 1:
-					IBLLOCK.val = 0
-					Draw.Redraw()
-			if IMP_SUN.val == 1:
-				IMP_SUN.val = 0
-				Draw.Redraw()
-			if IMP_BCKGRD.val == 1:
-				IMP_BCKGRD.val = 0
-				Draw.Redraw()
-			if BACKGROUND.val == 1:
-				BACKGROUND.val = 0
-				Draw.Redraw()
-	if evt == LOCK_EVENT:
-			if IBL.val == 0:
-				if IBLLOCK.val == 1:
-					IBLLOCK.val = 0
-					Draw.Redraw()
-	if evt == SUN_EVENT:
-			if IMP_BCKGRD.val == 1:
-				IMP_BCKGRD.val = 0
-				Draw.Redraw()
-			if BACKGROUND.val == 1:
-				BACKGROUND.val = 0
-				Draw.Redraw()
-			if IBL.val == 1:
-				IBL.val = 0
-				Draw.Redraw()
-			if IBLLOCK.val == 1:
-				IBLLOCK.val = 0
-				Draw.Redraw()
-	if evt == BCKGRD_EVENT:
-			if IMP_SUN.val == 1:
-				IMP_SUN.val = 0
-				Draw.Redraw()
-			if IBL.val == 1:
-				IBL.val = 0
-				Draw.Redraw()
-			if BACKGROUND.val == 1:
-				BACKGROUND.val = 0
-				Draw.Redraw()
-			if IBLLOCK.val == 1:
-				IBLLOCK.val = 0
-				Draw.Redraw()
-	if evt == CBCKGRD_EVENT:
-			if IMP_SUN.val == 1:
-				IMP_SUN.val = 0
-				Draw.Redraw()
-			if IBL.val == 1:
-				IBL.val = 0
-				Draw.Redraw()
-			if IMP_BCKGRD.val == 1:
-				IMP_BCKGRD.val = 0
-				Draw.Redraw()
-			if IBLLOCK.val == 1:
-				IBLLOCK.val = 0
-				Draw.Redraw()
-	if evt == QUICK_OPT:
-		if QUICKOCC.val == 1:
-			QUICKOCC.val = 0
-			Draw.Redraw()
-	if evt == QUICK_OCC:
-		QUICKOPT.val = 1
-		Draw.Redraw(0)
-
-	## Rules for displaying the different panels:
-	if evt == CHANGE_AA:
-		SCREEN=0
-		Draw.Redraw()
-		return
-	if evt == CHANGE_CAM:
-		SCREEN=2
-		Draw.Redraw()
-		return
-	if evt == CHANGE_BCKGRD:
-		SCREEN=3
-		Draw.Redraw()
-		return
-	if evt == CHANGE_LIGHT:
-		SCREEN=4
-		Draw.Redraw()
-		return
-	if evt == CHANGE_GI:
-		SCREEN=5
-		Draw.Redraw()
-		return
-	if evt == CHANGE_SHAD:
-		SCREEN=6
-		Draw.Redraw()
-		return
-	if evt == CHANGE_EXP:
-		SCREEN=7
-		Draw.Redraw()
-		return
-	if evt == CHANGE_CFG:
-		SCREEN=8
-		Draw.Redraw()
-		return
-	# Go back to config panel if user tries to render without configuring SF:
-	if evt == REND_EVT and trial == False:
-		SCREEN=8
-		Draw.Redraw()
-		return
-	if evt == SHAD_OK:
-		Draw.Redraw()
-		return
-	# Events for the import and export of ID values and setting of default values
-	if evt == EXPORT_ID:
-                print("  o Sending script settings to .blend...")
-		def_output()
-		def_gi()
-		def_lights()
-		def_camera()
-		def_render()
-		print("  o Finished sending settings.")
-		return
-	if evt == DEFAULT_ID:
-                default_values()
-                print("  o Default settings restored.")
-		return
-        if evt == IMPORT_ID:
-                try:
-                        if SCENE.properties['SceneProp'] == "true":
-                                print("  o Script settings found in .blend, importing to script...")
-                                import_output()
-                                import_gi()
-                                import_lights()
-                                import_camera()
-                                import_render()
-                except:
-                        print("  o No script settings in .blend, using defaults.")
-                        default_values()
-                        return
+    ## Common events:
+    if evt == EXP_EVT:
+        Blender.Window.FileSelector(exportfile, "Export .sc", FILENAME)
+
+    ## Config file events
+    if evt == SET_PATH:
+        Blender.Window.FileSelector(setpath, "SET SF PATH", SFPATH)
+        setpath(SFPATH)
+    if evt == SET_JAVAPATH:
+        Blender.Window.FileSelector(setjavapath, "SET JAVA PATH", JAVAPATH)
+        setjavapath(JAVAPATH)
+    if evt == REND_EVT:
+        render()
+
+    ## Setting exclusive buttons rules:
+    if evt == DOF_CAMERA:
+        if DOF.val == 1:
+            if SPHERICALCAMERA.val == 1:
+                SPHERICALCAMERA.val = 0
+                Draw.Redraw()
+            elif FISHEYECAMERA.val == 1:
+                FISHEYECAMERA.val = 0
+                Draw.Redraw()
+    if evt == SPHER_CAMERA:
+        if SPHERICALCAMERA.val == 1:
+            if DOF.val == 1:
+                DOF.val = 0
+                Draw.Redraw()
+            elif FISHEYECAMERA.val == 1:
+                FISHEYECAMERA.val = 0
+                Draw.Redraw()
+    if evt == FISH_CAMERA:
+        if FISHEYECAMERA.val == 1:
+            if DOF.val == 1:
+                DOF.val = 0
+                Draw.Redraw()
+            elif SPHERICALCAMERA.val == 1:
+                SPHERICALCAMERA.val = 0
+                Draw.Redraw()
+    if evt == FILTER_EVENT:
+        Draw.Redraw()
+    if evt == BUCKET_EVENT:
+        Draw.Redraw()
+    if evt == FORCE_INSTANTGI:
+        if INSTANTGI.val == 1:
+            if IRRCACHE.val == 1:
+                IRRCACHE.val = 0
+                Draw.Redraw()
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+            if PATHTRACE.val == 1:
+                PATHTRACE.val = 0
+                Draw.Redraw()
+            if OCCLUSION.val == 1:
+                OCCLUSION.val = 0
+                Draw.Redraw()
+            if FAKEAMB.val == 1:
+                FAKEAMB.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+    if evt == FORCE_IRRCACHE:
+        if IRRCACHE.val == 1:
+            if INSTANTGI.val == 1:
+                INSTANTGI.val = 0
+                Draw.Redraw()
+            if PATHTRACE.val == 1:
+                PATHTRACE.val = 0
+                Draw.Redraw()
+            if OCCLUSION.val == 1:
+                OCCLUSION.val = 0
+                Draw.Redraw()
+            if FAKEAMB.val == 1:
+                FAKEAMB.val = 0
+                Draw.Redraw()
+        if IRRCACHE.val == 0:
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+    if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+        if VIEWGI.val == 1:
+            VIEWGI.val = 0
+            Draw.Redraw()
+    if evt == FORCE_PATHTRACE:
+        if PATHTRACE.val == 1:
+            if IRRCACHE.val == 1:
+                IRRCACHE.val = 0
+                Draw.Redraw()
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+            if INSTANTGI.val == 1:
+                INSTANTGI.val = 0
+                Draw.Redraw()
+            if OCCLUSION.val == 1:
+                OCCLUSION.val = 0
+                Draw.Redraw()
+            if FAKEAMB.val == 1:
+                FAKEAMB.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+    if evt == FORCE_OCCLUSION:
+        if OCCLUSION.val == 1:
+            if IRRCACHE.val == 1:
+                IRRCACHE.val = 0
+                Draw.Redraw()
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+            if INSTANTGI.val == 1:
+                INSTANTGI.val = 0
+                Draw.Redraw()
+            if PATHTRACE.val == 1:
+                PATHTRACE.val = 0
+                Draw.Redraw()
+            if FAKEAMB.val == 1:
+                FAKEAMB.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+    if evt == FORCE_FAKEAMB:
+        if FAKEAMB.val == 1:
+            if IRRCACHE.val == 1:
+                IRRCACHE.val = 0
+                Draw.Redraw()
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+            if INSTANTGI.val == 1:
+                INSTANTGI.val = 0
+                Draw.Redraw()
+            if PATHTRACE.val == 1:
+                PATHTRACE.val = 0
+                Draw.Redraw()
+            if OCCLUSION.val == 1:
+                OCCLUSION.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 1 or PATHTRACE.val == 1 or OCCLUSION.val == 1 or FAKEAMB.val == 1:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+    if evt == FORCE_GLOBALS:
+        if USEGLOBALS.val == 1:
+            if PATHTRACE.val == 1:
+                PATHTRACE.val = 0
+                Draw.Redraw()
+            if INSTANTGI.val == 1:
+                INSTANTGI.val = 0
+                Draw.Redraw()
+        if IRRCACHE.val == 0:
+            if USEGLOBALS.val == 1:
+                USEGLOBALS.val = 0
+                Draw.Redraw()
+        if USEGLOBALS.val == 0:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+    if evt == EVENT_CAUSTICS:
+        if CAUSTICS.val == 0:
+            if VIEWCAUSTICS.val == 1:
+                VIEWCAUSTICS.val = 0
+                Draw.Redraw()
+    if evt == OVERRIDE_CAUSTICS:
+        if CAUSTICS.val == 0:
+            if VIEWCAUSTICS.val == 1:
+                VIEWCAUSTICS.val = 0
+                Draw.Redraw()
+    if evt == OVERRIDE_GLOBALS:
+        if USEGLOBALS.val == 0:
+            if VIEWGLOBALS.val == 1:
+                VIEWGLOBALS.val = 0
+                Draw.Redraw()
+    if evt == OVERRIDE_GI:
+        if INSTANTGI.val == 0 and IRRCACHE.val == 0 and PATHTRACE.val == 0 and OCCLUSION.val == 0 and FAKEAMB.val == 0:
+            if VIEWGI.val == 1:
+                VIEWGI.val = 0
+                Draw.Redraw()
+    if evt == IBL_EVENT:
+        if IBL.val == 0:
+            if IBLLOCK.val == 1:
+                IBLLOCK.val = 0
+                Draw.Redraw()
+        if IMP_SUN.val == 1:
+            IMP_SUN.val = 0
+            Draw.Redraw()
+        if IMP_BCKGRD.val == 1:
+            IMP_BCKGRD.val = 0
+            Draw.Redraw()
+        if BACKGROUND.val == 1:
+            BACKGROUND.val = 0
+            Draw.Redraw()
+    if evt == LOCK_EVENT:
+        if IBL.val == 0:
+            if IBLLOCK.val == 1:
+                IBLLOCK.val = 0
+                Draw.Redraw()
+    if evt == SUN_EVENT:
+        if IMP_BCKGRD.val == 1:
+            IMP_BCKGRD.val = 0
+            Draw.Redraw()
+        if BACKGROUND.val == 1:
+            BACKGROUND.val = 0
+            Draw.Redraw()
+        if IBL.val == 1:
+            IBL.val = 0
+            Draw.Redraw()
+        if IBLLOCK.val == 1:
+            IBLLOCK.val = 0
+            Draw.Redraw()
+    if evt == BCKGRD_EVENT:
+        if IMP_SUN.val == 1:
+            IMP_SUN.val = 0
+            Draw.Redraw()
+        if IBL.val == 1:
+            IBL.val = 0
+            Draw.Redraw()
+        if BACKGROUND.val == 1:
+            BACKGROUND.val = 0
+            Draw.Redraw()
+        if IBLLOCK.val == 1:
+            IBLLOCK.val = 0
+            Draw.Redraw()
+    if evt == CBCKGRD_EVENT:
+        if IMP_SUN.val == 1:
+            IMP_SUN.val = 0
+            Draw.Redraw()
+        if IBL.val == 1:
+            IBL.val = 0
+            Draw.Redraw()
+        if IMP_BCKGRD.val == 1:
+            IMP_BCKGRD.val = 0
+            Draw.Redraw()
+        if IBLLOCK.val == 1:
+            IBLLOCK.val = 0
+            Draw.Redraw()
+    if evt == QUICK_OPT:
+        if QUICKOCC.val == 1:
+            QUICKOCC.val = 0
+            Draw.Redraw()
+    if evt == QUICK_OCC:
+        QUICKOPT.val = 1
+        Draw.Redraw(0)
+
+    ## Rules for displaying the different panels:
+    if evt == CHANGE_AA:
+        SCREEN=0
+        Draw.Redraw()
+        return
+    if evt == CHANGE_CAM:
+        SCREEN=2
+        Draw.Redraw()
+        return
+    if evt == CHANGE_BCKGRD:
+        SCREEN=3
+        Draw.Redraw()
+        return
+    if evt == CHANGE_LIGHT:
+        SCREEN=4
+        Draw.Redraw()
+        return
+    if evt == CHANGE_GI:
+        SCREEN=5
+        Draw.Redraw()
+        return
+    if evt == CHANGE_SHAD:
+        SCREEN=6
+        Draw.Redraw()
+        return
+    if evt == CHANGE_EXP:
+        SCREEN=7
+        Draw.Redraw()
+        return
+    if evt == CHANGE_CFG:
+        SCREEN=8
+        Draw.Redraw()
+        return
+    # Go back to config panel if user tries to render without configuring SF:
+    if evt == REND_EVT and trial == False:
+        SCREEN=8
+        Draw.Redraw()
+        return
+    if evt == SHAD_OK:
+        Draw.Redraw()
+        return
+    # Events for the import and export of ID values and setting of default values
+    if evt == EXPORT_ID:
+        print("  o Sending script settings to .blend...")
+        def_output()
+        def_gi()
+        def_lights()
+        def_camera()
+        def_render()
+        print("  o Finished sending settings.")
+        return
+    if evt == DEFAULT_ID:
+        default_values()
+        print("  o Default settings restored.")
+        return
+    if evt == IMPORT_ID:
+        try:
+            if SCENE.properties['SceneProp'] == "true":
+                print("  o Script settings found in .blend, importing to script...")
+                import_output()
+                import_gi()
+                import_lights()
+                import_camera()
+                import_render()
+        except:
+            print("  o No script settings in .blend, using defaults.")
+            default_values()
+            return
 
 # Same as the IMPORT_ID event, but needed it to be a function so we can load it on script start up #
 def auto_import():
-                default_values()
-                try:
-                        if SCENE.properties['SceneProp'] == "true":
-                                print("  o Script settings found in .blend, importing to script...")
-                                import_output()
-                                import_gi()
-                                import_lights()
-                                import_camera()
-                                import_render()
-                except:
-                        print("  o No script settings in .blend, using defaults.")
-                        default_values()
-                        return
+    default_values()
+    try:
+        if SCENE.properties['SceneProp'] == "true":
+            print("  o Script settings found in .blend, importing to script...")
+            import_output()
+            import_gi()
+            import_lights()
+            import_camera()
+            import_render()
+    except:
+        print("  o No script settings in .blend, using defaults.")
+        default_values()
+        return
 
 ####### Draw GUI Section #######
 ################################
 
 ## Draws the individual panels ##
 def drawGUI():
-	global SCREEN
-	if SCREEN==0:
-		drawAA()
-	if SCREEN==2:
-		drawCamera()
-	if SCREEN==3:
-		drawBackground()
-	if SCREEN==4:
-		drawLights()
-	if SCREEN==5:
-		drawGI()
-	if SCREEN==6:
-		drawShad()
-	if SCREEN==7:
-		drawRender()
-	if SCREEN==8:
-		drawConfig()
+    global SCREEN
+    if SCREEN==0:
+        drawAA()
+    if SCREEN==2:
+        drawCamera()
+    if SCREEN==3:
+        drawBackground()
+    if SCREEN==4:
+        drawLights()
+    if SCREEN==5:
+        drawGI()
+    if SCREEN==6:
+        drawShad()
+    if SCREEN==7:
+        drawRender()
+    if SCREEN==8:
+        drawConfig()
 
 ## Draw AA options ##
 def drawAA():
-	global MINAA, MAXAA, AASAMPLES, AAJITTER, IMGFILTERW, IMGFILTERH, IMGFILTER
-	col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("AA:")
-	col=100; line=145; MINAA=Draw.Number("Min AA", 2, col, line, 120, 18, MINAA.val, -4, 5);
-	col=230; MAXAA=Draw.Number("Max AA", 2, col, line, 120, 18, MAXAA.val, -4, 5)
-	col=100; line=125; AASAMPLES=Draw.Number("Samples", 2, col, line, 120, 18, AASAMPLES.val, 0, 32)
-	col=230; AAJITTER=Draw.Toggle("AA Jitter", 2, col, line, 120, 18, AAJITTER.val, "Use jitter for anti-aliasing")
-	col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Image Filter:")
-	col=100; line=100; IMGFILTER=Draw.Menu("%tImage Filter|box|gaussian|mitchell|triangle|catmull-rom|blackman-harris|sinc|lanczos", FILTER_EVENT, col, line, 120, 18, IMGFILTER.val)
+    global MINAA, MAXAA, AASAMPLES, AAJITTER, IMGFILTERW, IMGFILTERH, IMGFILTER
+    col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("AA:")
+    col=100; line=145; MINAA=Draw.Number("Min AA", 2, col, line, 120, 18, MINAA.val, -4, 5);
+    col=230; MAXAA=Draw.Number("Max AA", 2, col, line, 120, 18, MAXAA.val, -4, 5)
+    col=100; line=125; AASAMPLES=Draw.Number("Samples", 2, col, line, 120, 18, AASAMPLES.val, 0, 32)
+    col=230; AAJITTER=Draw.Toggle("AA Jitter", 2, col, line, 120, 18, AAJITTER.val, "Use jitter for anti-aliasing")
+    col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Image Filter:")
+    col=100; line=100; IMGFILTER=Draw.Menu("%tImage Filter|box|gaussian|mitchell|triangle|catmull-rom|blackman-harris|sinc|lanczos", FILTER_EVENT, col, line, 120, 18, IMGFILTER.val)
 
-	drawButtons()
+    drawButtons()
 
 ## Draw camera options ##
 def drawCamera():
-	global DOF, DOFRADIUS, SPHERICALCAMERA, FISHEYECAMERA, LENSSIDES, LENSROTATION
-	col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("Camera:")
-	col=100; line=145; DOF=Draw.Toggle("DOF", DOF_CAMERA, col, line, 120, 18, DOF.val, "Turn on depth of field")
-	col=225; DOFRADIUS=Draw.Number("Radius", 2, col, line, 120, 18, DOFRADIUS.val, 0.001, 9.999)
-	col=100; line=125; BGL.glRasterPos2i(col, line); Draw.Text("Bokeh shape -->")
-	col=225; line=120; LENSSIDES=Draw.Number("Sides", 2, col, line, 120, 18, LENSSIDES.val, 2, 8)
-	col=350; LENSROTATION=Draw.Number("Rotation", 2, col, line, 120, 18, LENSROTATION.val, 0.0, 360.0)
-	col=100; line=95; SPHERICALCAMERA=Draw.Toggle("Spherical", SPHER_CAMERA, col, line, 120, 18, SPHERICALCAMERA.val, "Use the sperical camera type")
-	col=100; line=70; FISHEYECAMERA=Draw.Toggle("Fisheye", FISH_CAMERA, col, line, 120, 18, FISHEYECAMERA.val, "Use the fisheye camera type")
+    global DOF, DOFRADIUS, SPHERICALCAMERA, FISHEYECAMERA, LENSSIDES, LENSROTATION
+    col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("Camera:")
+    col=100; line=145; DOF=Draw.Toggle("DOF", DOF_CAMERA, col, line, 120, 18, DOF.val, "Turn on depth of field")
+    col=225; DOFRADIUS=Draw.Number("Radius", 2, col, line, 120, 18, DOFRADIUS.val, 0.001, 9.999)
+    col=100; line=125; BGL.glRasterPos2i(col, line); Draw.Text("Bokeh shape -->")
+    col=225; line=120; LENSSIDES=Draw.Number("Sides", 2, col, line, 120, 18, LENSSIDES.val, 2, 8)
+    col=350; LENSROTATION=Draw.Number("Rotation", 2, col, line, 120, 18, LENSROTATION.val, 0.0, 360.0)
+    col=100; line=95; SPHERICALCAMERA=Draw.Toggle("Spherical", SPHER_CAMERA, col, line, 120, 18, SPHERICALCAMERA.val, "Use the sperical camera type")
+    col=100; line=70; FISHEYECAMERA=Draw.Toggle("Fisheye", FISH_CAMERA, col, line, 120, 18, FISHEYECAMERA.val, "Use the fisheye camera type")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw Background options ##
 def drawBackground():
-	global IMP_BCKGRD, IMP_SUN, BACKGROUND, BCKGRD, IBL, IBLLOCK, IBLSAMPLES, SUN_TURB, SUN_SAMPLES, INFINITEPLANE, IPLANECOLOR
-	col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Simple background:")
-	col=10; line=200; IMP_BCKGRD=Draw.Toggle("Import World", BCKGRD_EVENT, col, line, 120, 18, IMP_BCKGRD.val, "Set World's Horizon color as background")
-	col=10; line=175; BACKGROUND=Draw.Toggle("Create Background", CBCKGRD_EVENT, col, line, 120, 18, BACKGROUND.val, "Define a background color")
-	col=135; BCKGRD=Draw.ColorPicker(2, 135, 175, 30, 18, BCKGRD.val, "New background color")
-	col=10; line=155; BGL.glRasterPos2i(col, line); Draw.Text("High Dynamic Range Illumination (Please set a texture named 'ibllight', lower case):")
-	col=10; line=125; IBL=Draw.Toggle("Image Based Light", IBL_EVENT, col, line, 140, 18, IBL.val, "Use IBL/hdr type light")
-	col=160; IBLLOCK=Draw.Toggle("Importance Sampling", LOCK_EVENT, col, line, 130, 18, IBLLOCK.val, "Use importance sampling (lock false), IBL must be on")
-	col=300; IBLSAMPLES=Draw.Number("Samples", 2, col, line, 100, 18, IBLSAMPLES.val, 1, 1024)
-	col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Sunsky:")
-	col=10; line=75; IMP_SUN=Draw.Toggle("Import Sun", SUN_EVENT, col, line, 120, 18, IMP_SUN.val, "Import existing Sun")
-	col=140; line=75; SUN_TURB=Draw.Number("Turbidity", 2, col, line, 120, 18, SUN_TURB.val, 0.0, 32.0)
-	col=270; SUN_SAMPLES=Draw.Number("Samples", 2, col, line, 120, 18, SUN_SAMPLES.val, 1, 10000)
-	col=400; INFINITEPLANE=Draw.Toggle("Infinite Plane", 2, col, line, 90, 18, INFINITEPLANE.val, "Use an infinite plane in the scene")
-	col=500; IPLANECOLOR=Draw.ColorPicker(2, 495, 75, 30, 18, IPLANECOLOR.val, "Infinite plane color")
+    global IMP_BCKGRD, IMP_SUN, BACKGROUND, BCKGRD, IBL, IBLLOCK, IBLSAMPLES, SUN_TURB, SUN_SAMPLES, INFINITEPLANE, IPLANECOLOR
+    col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Simple background:")
+    col=10; line=200; IMP_BCKGRD=Draw.Toggle("Import World", BCKGRD_EVENT, col, line, 120, 18, IMP_BCKGRD.val, "Set World's Horizon color as background")
+    col=10; line=175; BACKGROUND=Draw.Toggle("Create Background", CBCKGRD_EVENT, col, line, 120, 18, BACKGROUND.val, "Define a background color")
+    col=135; BCKGRD=Draw.ColorPicker(2, 135, 175, 30, 18, BCKGRD.val, "New background color")
+    col=10; line=155; BGL.glRasterPos2i(col, line); Draw.Text("High Dynamic Range Illumination (Please set a texture named 'ibllight', lower case):")
+    col=10; line=125; IBL=Draw.Toggle("Image Based Light", IBL_EVENT, col, line, 140, 18, IBL.val, "Use IBL/hdr type light")
+    col=160; IBLLOCK=Draw.Toggle("Importance Sampling", LOCK_EVENT, col, line, 130, 18, IBLLOCK.val, "Use importance sampling (lock false), IBL must be on")
+    col=300; IBLSAMPLES=Draw.Number("Samples", 2, col, line, 100, 18, IBLSAMPLES.val, 1, 1024)
+    col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Sunsky:")
+    col=10; line=75; IMP_SUN=Draw.Toggle("Import Sun", SUN_EVENT, col, line, 120, 18, IMP_SUN.val, "Import existing Sun")
+    col=140; line=75; SUN_TURB=Draw.Number("Turbidity", 2, col, line, 120, 18, SUN_TURB.val, 0.0, 32.0)
+    col=270; SUN_SAMPLES=Draw.Number("Samples", 2, col, line, 120, 18, SUN_SAMPLES.val, 1, 10000)
+    col=400; INFINITEPLANE=Draw.Toggle("Infinite Plane", 2, col, line, 90, 18, INFINITEPLANE.val, "Use an infinite plane in the scene")
+    col=500; IPLANECOLOR=Draw.ColorPicker(2, 495, 75, 30, 18, IPLANECOLOR.val, "Infinite plane color")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw light options ##
 def drawLights():
-	global MESHLIGHTPOWER, LAMPPOWER, DSAMPLES, CONVLAMP
-	col=10; line=205; BGL.glRasterPos2i(col, line); Draw.Text("Global Options:")
-	col=10; line=180; BGL.glRasterPos2i(col, line); Draw.Text("Meshlight:")
-	col=110; line=175; MESHLIGHTPOWER=Draw.Number("Power", 2, col, line, 200, 18, MESHLIGHTPOWER.val, 1, 10000)
-	col=10; line=155; BGL.glRasterPos2i(col, line); Draw.Text("Light:")
-	col=110; line=150; LAMPPOWER=Draw.Number("Power", 2, col, line, 200, 18, LAMPPOWER.val, 1, 10000)
-	col=10; line=130; BGL.glRasterPos2i(col, line); Draw.Text("Lightserver:")
-	col=110; line=125; DSAMPLES=Draw.Number("Direct Samples", 2, col, line, 200, 18, DSAMPLES.val, 0, 1024)
-	col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Unknown lamps:")
-	col=10; line = 75; CONVLAMP=Draw.Toggle("Convert lamps", 2, col, line, 140, 18, CONVLAMP.val, "Convert unsupported lamps into point light")
+    global MESHLIGHTPOWER, LAMPPOWER, DSAMPLES, CONVLAMP
+    col=10; line=205; BGL.glRasterPos2i(col, line); Draw.Text("Global Options:")
+    col=10; line=180; BGL.glRasterPos2i(col, line); Draw.Text("Meshlight:")
+    col=110; line=175; MESHLIGHTPOWER=Draw.Number("Power", 2, col, line, 200, 18, MESHLIGHTPOWER.val, 1, 10000)
+    col=10; line=155; BGL.glRasterPos2i(col, line); Draw.Text("Light:")
+    col=110; line=150; LAMPPOWER=Draw.Number("Power", 2, col, line, 200, 18, LAMPPOWER.val, 1, 10000)
+    col=10; line=130; BGL.glRasterPos2i(col, line); Draw.Text("Lightserver:")
+    col=110; line=125; DSAMPLES=Draw.Number("Direct Samples", 2, col, line, 200, 18, DSAMPLES.val, 0, 1024)
+    col=10; line=105; BGL.glRasterPos2i(col, line); Draw.Text("Unknown lamps:")
+    col=10; line = 75; CONVLAMP=Draw.Toggle("Convert lamps", 2, col, line, 140, 18, CONVLAMP.val, "Convert unsupported lamps into point light")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw Shader options ##
 def drawShad():
-	global SHADTYPE, SHADOK
-	col=10; line=400; BGL.glRasterPos2i(col, line); Draw.Text("Specific instructions for exporting shaders:")
-	col=10; line=375; BGL.glRasterPos2i(col, line); Draw.Text("For exporting bump and normal maps, have the second texture slot (slot 1) name")
-	col=10; line=350; BGL.glRasterPos2i(col, line); Draw.Text("begin with bump or normal.  Controlled with the Map To Nor button and Nor slider.")
-	col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Regarding Textures: Diffuse, shiny, ambocc, phong, and ward materials will")
-	col=10; line=300; BGL.glRasterPos2i(col, line); Draw.Text("use textures as the diffuse channel if the texture is in the first texture slot.")
-	col=10; line=275; SHADTYPE=Draw.Menu("%tSelect shader|Uber|Diffuse|Shiny|AO|Phong|Ward|Mirror|Glass|Constant", SHADER_TYPE, col, line, 85, 18, SHADTYPE.val)
-	col=100; SHADOK=Draw.Button("OK", SHAD_OK, col, line, 30, 18, "Print on screen instructions")
-	if SHADTYPE == 1:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Uber: shader name should start with 'sfube' - imports Blender's Col and Spe RGB")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("values")
-		col=10; line=200; BGL.glRasterPos2i(col, line); Draw.Text("\t\tIF Texture Slot 0: diffuse texture(Mapto Col value), else Col RGB values")
-                col=10; line=175; BGL.glRasterPos2i(col, line); Draw.Text("\t\tThe blend factor for the diffuse texture is controlled by the Map Input Col slider")
-		col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("\t\tIF Texture Slot 2: specular texture(Mapto Var value), else Spe RGB values")
-		col=10; line=125; BGL.glRasterPos2i(col, line); Draw.Text("\t\tThe blend factor for the specular texture is controlled by the Map Input Var slider")
-	if SHADTYPE == 2:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Diffuse: shader name should start with 'sfdif' - imports Blender's Col RGB values")
-	if SHADTYPE == 3:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Shiny: shader name sould start with 'sfshi' - imports Blender's Col RGB and")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("RayMirr values")
-	if SHADTYPE == 4:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Ambient Occlusion: shader name sould start with 'sfamb' - imports Blender's")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Col RGB (Bright) and Spe RGB (Dark) values")
-	if SHADTYPE == 5:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Phong: shader name sould start with 'sfpho' - imports Blender's Col RGB and")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Spe RGB values, as well as the spec's hard value")
-	if SHADTYPE == 6:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Ward: shader name sould start with 'sfwar' - imports Blender's Col RGB and")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Spe RGB values")
-	if SHADTYPE == 7:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Mirror: shader name sould start with 'sfmir' - imports Blender's Col RGB values,")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Ray Mir button must be on")
-	if SHADTYPE == 8:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Glass: shader name sould start with 'sfgla' - imports Blender's Col RGB and")
-		col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("IOR values, Ray Transp button must be on")
-	if SHADTYPE == 9:
-		col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Constant: shader name should start with 'sfcon' - imports Blender's Col RGB values")
+    global SHADTYPE, SHADOK
+    col=10; line=400; BGL.glRasterPos2i(col, line); Draw.Text("Specific instructions for exporting shaders:")
+    col=10; line=375; BGL.glRasterPos2i(col, line); Draw.Text("For exporting bump and normal maps, have the second texture slot (slot 1) name")
+    col=10; line=350; BGL.glRasterPos2i(col, line); Draw.Text("begin with bump or normal.  Controlled with the Map To Nor button and Nor slider.")
+    col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Regarding Textures: Diffuse, shiny, ambocc, phong, and ward materials will")
+    col=10; line=300; BGL.glRasterPos2i(col, line); Draw.Text("use textures as the diffuse channel if the texture is in the first texture slot.")
+    col=10; line=275; SHADTYPE=Draw.Menu("%tSelect shader|Uber|Diffuse|Shiny|AO|Phong|Ward|Mirror|Glass|Constant", SHADER_TYPE, col, line, 85, 18, SHADTYPE.val)
+    col=100; SHADOK=Draw.Button("OK", SHAD_OK, col, line, 30, 18, "Print on screen instructions")
+    if SHADTYPE == 1:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Uber: shader name should start with 'sfube' - imports Blender's Col and Spe RGB")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("values")
+        col=10; line=200; BGL.glRasterPos2i(col, line); Draw.Text("\t\tIF Texture Slot 0: diffuse texture(Mapto Col value), else Col RGB values")
+        col=10; line=175; BGL.glRasterPos2i(col, line); Draw.Text("\t\tThe blend factor for the diffuse texture is controlled by the Map Input Col slider")
+        col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("\t\tIF Texture Slot 2: specular texture(Mapto Var value), else Spe RGB values")
+        col=10; line=125; BGL.glRasterPos2i(col, line); Draw.Text("\t\tThe blend factor for the specular texture is controlled by the Map Input Var slider")
+    if SHADTYPE == 2:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Diffuse: shader name should start with 'sfdif' - imports Blender's Col RGB values")
+    if SHADTYPE == 3:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Shiny: shader name sould start with 'sfshi' - imports Blender's Col RGB and")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("RayMirr values")
+    if SHADTYPE == 4:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Ambient Occlusion: shader name sould start with 'sfamb' - imports Blender's")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Col RGB (Bright) and Spe RGB (Dark) values")
+    if SHADTYPE == 5:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Phong: shader name sould start with 'sfpho' - imports Blender's Col RGB and")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Spe RGB values, as well as the spec's hard value")
+    if SHADTYPE == 6:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Ward: shader name sould start with 'sfwar' - imports Blender's Col RGB and")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Spe RGB values")
+    if SHADTYPE == 7:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Mirror: shader name sould start with 'sfmir' - imports Blender's Col RGB values,")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("Ray Mir button must be on")
+    if SHADTYPE == 8:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Glass: shader name sould start with 'sfgla' - imports Blender's Col RGB and")
+        col=10; line=225; BGL.glRasterPos2i(col, line); Draw.Text("IOR values, Ray Transp button must be on")
+    if SHADTYPE == 9:
+        col=10; line=250; BGL.glRasterPos2i(col, line); Draw.Text("Constant: shader name should start with 'sfcon' - imports Blender's Col RGB values")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw export and render options settings ##
 def drawRender():
-	global EXPORT, RENDER, SMALLMESH, NOGI, NOGUI, NOCAUSTICS, QUICKUV, QUICKNORM, QUICKID, QUICKPRIMS, QUICKGRAY, QUICKWIRE, QUICKOCC, QOCCDIST, FILETYPE, DEPTH_DIFF, DEPTH_REFL, DEPTH_REFR, QUICKOPT, EXP_ANIM, IPR, BUCKETSIZE, BUCKETTYPE, REVERSE
-	col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Rendering actions:")
-	col=10; line=300; EXPORT=Draw.Button("Export .sc", EXP_EVT, col, line, 140, 18, "Export the scene to .sc file")
-	col=160; RENDER=Draw.Button("Render exported", REND_EVT, col, line, 130, 18, "Render it (Export a .sc file first)")
-	col=300; FILETYPE=Draw.Menu("%tFile type|png|tga|hdr|exr|igi", FILE_TYPE, col, line, 85, 18, FILETYPE.val)
-	col=10; line=280; BGL.glRasterPos2i(col, line); Draw.Text("Max raytrace depths:")
-	col=10; line=255; DEPTH_DIFF=Draw.Number("Diffuse Depth", 2, col, line, 125, 18, DEPTH_DIFF.val, 1, 100)
-	col=150; DEPTH_REFL=Draw.Number("Reflection Depth", 2, col, line, 125, 18, DEPTH_REFL.val, 1, 100)
-	col=290; DEPTH_REFR=Draw.Number("Refraction Depth", 2, col, line, 125, 18, DEPTH_REFR.val, 1, 100)
-        col=10; line=240; BGL.glRasterPos2i(col, line); Draw.Text("Bucket Order:")
-	col=10; line=215; BUCKETSIZE=Draw.Number("Bucket Size", 2, col, line, 125, 18, BUCKETSIZE.val, 8, 64)
-	col=150; BUCKETTYPE=Draw.Menu("%tBucket Order|hilbert (default)|spiral|column|row|diagonal|random", BUCKET_EVENT, col, line, 125, 18, BUCKETTYPE.val)
-	col=290; REVERSE=Draw.Toggle("Reverse Order", 2, col, line, 125, 18, REVERSE.val, "Use reverse bucket order")
-	col=10; line=195; BGL.glRasterPos2i(col, line); Draw.Text("Rendering options:")
-	col=10; line=170; SMALLMESH=Draw.Toggle("Small mesh", 2, col, line, 85, 18, SMALLMESH.val, "Load triangle meshes using triangles optimized for memory use")
-	col=100; NOGI=Draw.Toggle("No GI", 2, col, line, 85, 18, NOGI.val, "Disable any global illumination engines in the scene")
-	col=190; NOCAUSTICS=Draw.Toggle("No Caustics", 2, col, line, 85, 18, NOCAUSTICS.val, "Disable any caustic engine in the scene")
-	col=280; NOGUI=Draw.Toggle("No GUI", 2, col, line, 85, 18, NOGUI.val, "Don't open the frame showing rendering progress")
-	col=370; IPR=Draw.Toggle("IPR", 2, col, line, 85, 18, IPR.val, "Render using progressive algorithm")
-	col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("Quick override options:")
-	col=10; line=125; QUICKOPT=Draw.Menu("%tQuick option|None|Quick UVs|Quick Normals|Quick ID|Quick Primitives|Quick Gray|Quick Wire", QUICK_OPT, col, line, 100, 18, QUICKOPT.val)
-	col=10; line=100; QUICKOCC=Draw.Toggle("Quick Amb Occ", QUICK_OCC, col, line, 85, 18, QUICKOCC.val, "Applies ambient occlusion to the scene with specified maximum distance")
-	col=100; QOCCDIST=Draw.Number("Distance", 2, col, line, 125, 18, QOCCDIST.val, 0.00, 1000.00)
-	col=10; line=75; EXP_ANIM=Draw.Toggle("Export As Animation", 2, col, line, 140, 18, EXP_ANIM.val, "Export the scene as animation")
+    global EXPORT, RENDER, SMALLMESH, NOGI, NOGUI, NOCAUSTICS, QUICKUV, QUICKNORM, QUICKID, QUICKPRIMS, QUICKGRAY, QUICKWIRE, QUICKOCC, QOCCDIST, FILETYPE, DEPTH_DIFF, DEPTH_REFL, DEPTH_REFR, QUICKOPT, EXP_ANIM, IPR, BUCKETSIZE, BUCKETTYPE, REVERSE
+    col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Rendering actions:")
+    col=10; line=300; EXPORT=Draw.Button("Export .sc", EXP_EVT, col, line, 140, 18, "Export the scene to .sc file")
+    col=160; RENDER=Draw.Button("Render exported", REND_EVT, col, line, 130, 18, "Render it (Export a .sc file first)")
+    col=300; FILETYPE=Draw.Menu("%tFile type|png|tga|hdr|exr|igi", FILE_TYPE, col, line, 85, 18, FILETYPE.val)
+    col=10; line=280; BGL.glRasterPos2i(col, line); Draw.Text("Max raytrace depths:")
+    col=10; line=255; DEPTH_DIFF=Draw.Number("Diffuse Depth", 2, col, line, 125, 18, DEPTH_DIFF.val, 1, 100)
+    col=150; DEPTH_REFL=Draw.Number("Reflection Depth", 2, col, line, 125, 18, DEPTH_REFL.val, 1, 100)
+    col=290; DEPTH_REFR=Draw.Number("Refraction Depth", 2, col, line, 125, 18, DEPTH_REFR.val, 1, 100)
+    col=10; line=240; BGL.glRasterPos2i(col, line); Draw.Text("Bucket Order:")
+    col=10; line=215; BUCKETSIZE=Draw.Number("Bucket Size", 2, col, line, 125, 18, BUCKETSIZE.val, 8, 64)
+    col=150; BUCKETTYPE=Draw.Menu("%tBucket Order|hilbert (default)|spiral|column|row|diagonal|random", BUCKET_EVENT, col, line, 125, 18, BUCKETTYPE.val)
+    col=290; REVERSE=Draw.Toggle("Reverse Order", 2, col, line, 125, 18, REVERSE.val, "Use reverse bucket order")
+    col=10; line=195; BGL.glRasterPos2i(col, line); Draw.Text("Rendering options:")
+    col=10; line=170; SMALLMESH=Draw.Toggle("Small mesh", 2, col, line, 85, 18, SMALLMESH.val, "Load triangle meshes using triangles optimized for memory use")
+    col=100; NOGI=Draw.Toggle("No GI", 2, col, line, 85, 18, NOGI.val, "Disable any global illumination engines in the scene")
+    col=190; NOCAUSTICS=Draw.Toggle("No Caustics", 2, col, line, 85, 18, NOCAUSTICS.val, "Disable any caustic engine in the scene")
+    col=280; NOGUI=Draw.Toggle("No GUI", 2, col, line, 85, 18, NOGUI.val, "Don't open the frame showing rendering progress")
+    col=370; IPR=Draw.Toggle("IPR", 2, col, line, 85, 18, IPR.val, "Render using progressive algorithm")
+    col=10; line=150; BGL.glRasterPos2i(col, line); Draw.Text("Quick override options:")
+    col=10; line=125; QUICKOPT=Draw.Menu("%tQuick option|None|Quick UVs|Quick Normals|Quick ID|Quick Primitives|Quick Gray|Quick Wire", QUICK_OPT, col, line, 100, 18, QUICKOPT.val)
+    col=10; line=100; QUICKOCC=Draw.Toggle("Quick Amb Occ", QUICK_OCC, col, line, 85, 18, QUICKOCC.val, "Applies ambient occlusion to the scene with specified maximum distance")
+    col=100; QOCCDIST=Draw.Number("Distance", 2, col, line, 125, 18, QOCCDIST.val, 0.00, 1000.00)
+    col=10; line=75; EXP_ANIM=Draw.Toggle("Export As Animation", 2, col, line, 140, 18, EXP_ANIM.val, "Export the scene as animation")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw the SF configuration settings ##
 def drawConfig():
-	global SET_PATH, THREADS, MEM, SET_JAVAPATH
-        col=10; line = 315; BGL.glRasterPos2i(col, line); Draw.Text("ID properties for script settings:")
-        col= 10; line = 285; Draw.Button("Send Script Settings", EXPORT_ID, col, line, 140,18, "Send script settings to the .blend")
-        col= 155; Draw.Button("Restore Default Settings", DEFAULT_ID, col, line, 140,18, "Use script defaults")
-        col= 300; Draw.Button("Reload ID Settings", IMPORT_ID, col, line, 140,18, "Reload ID properties from .blend")
-        col=10; line = 255; BGL.glRasterPos2i(col, line); Draw.Text("Settings needed to render directly from the script:")
-	col=155; line = 230; BGL.glRasterPos2i(col, line); Draw.Text("(threads=0 means auto-detect)")
-	col=10; line = 225; THREADS=Draw.Number("Threads", 2, col, line, 140, 18, THREADS.val, 0, 8)
-	col=10; line = 200; MEM=Draw.Number("Memory (MB)", 2, col, line, 140, 18, MEM.val, 256, 4096)
-	col= 10; line = 175; Draw.Button("Save SF Path & Settings", SET_PATH, col, line, 140,18)
-	col= 10; line = 150; Draw.Button("Save Java Path", SET_JAVAPATH, col, line, 140,18)
-	col=155; line = 155; BGL.glRasterPos2i(col, line); Draw.Text("Set Java path after Sunflow path")
-	# Get blenders 'bpydata' directory:
-	datadir=Blender.Get("datadir")
-	# Check if the config file exists:
-	trial=os.path.exists(datadir+'/path2sf.cfg')
-	# If config file exists, retrieve existing values:
-	if trial == 1:
-		# open 'path2sf.cfg'
-		f = open(datadir + '/path2sf.cfg', 'r+')
-		sfdir = f.readline()
-		memory = f.readline()
-		threads = f.readline()
-		javadir = f.readline()
-		col=10; line = 130; BGL.glRasterPos2i(col, line); Draw.Text("Sunflow path: %s" % sfdir)
-		col=10; line = 110; BGL.glRasterPos2i(col, line); Draw.Text("Memory: %s MB" % memory)
-		col=10; line = 90; BGL.glRasterPos2i(col, line); Draw.Text("Threads: %s" % threads)
-		col=10; line = 70; BGL.glRasterPos2i(col, line); Draw.Text("Java path: %s" % javadir)
-		f.close()
-	# If config file doesn't exist, issue a warning:
-	if trial == 0:
-		col=10; line = 105; BGL.glRasterPos2i(col, line); Draw.Text("Sunflow is not configured yet - set Memory, Number of Threads and Path to sunflow.jar")
+    global SET_PATH, THREADS, MEM, SET_JAVAPATH
+    col=10; line = 315; BGL.glRasterPos2i(col, line); Draw.Text("ID properties for script settings:")
+    col= 10; line = 285; Draw.Button("Send Script Settings", EXPORT_ID, col, line, 140,18, "Send script settings to the .blend")
+    col= 155; Draw.Button("Restore Default Settings", DEFAULT_ID, col, line, 140,18, "Use script defaults")
+    col= 300; Draw.Button("Reload ID Settings", IMPORT_ID, col, line, 140,18, "Reload ID properties from .blend")
+    col=10; line = 255; BGL.glRasterPos2i(col, line); Draw.Text("Settings needed to render directly from the script:")
+    col=155; line = 230; BGL.glRasterPos2i(col, line); Draw.Text("(threads=0 means auto-detect)")
+    col=10; line = 225; THREADS=Draw.Number("Threads", 2, col, line, 140, 18, THREADS.val, 0, 8)
+    col=10; line = 200; MEM=Draw.Number("Memory (MB)", 2, col, line, 140, 18, MEM.val, 256, 4096)
+    col= 10; line = 175; Draw.Button("Save SF Path & Settings", SET_PATH, col, line, 140,18)
+    col= 10; line = 150; Draw.Button("Save Java Path", SET_JAVAPATH, col, line, 140,18)
+    col=155; line = 155; BGL.glRasterPos2i(col, line); Draw.Text("Set Java path after Sunflow path")
+    # Get blenders 'bpydata' directory:
+    datadir=Blender.Get("datadir")
+    # Check if the config file exists:
+    trial=os.path.exists(datadir+'/path2sf.cfg')
+    # If config file exists, retrieve existing values:
+    if trial == 1:
+        # open 'path2sf.cfg'
+        f = open(datadir + '/path2sf.cfg', 'r+')
+        sfdir = f.readline()
+        memory = f.readline()
+        threads = f.readline()
+        javadir = f.readline()
+        col=10; line = 130; BGL.glRasterPos2i(col, line); Draw.Text("Sunflow path: %s" % sfdir)
+        col=10; line = 110; BGL.glRasterPos2i(col, line); Draw.Text("Memory: %s MB" % memory)
+        col=10; line = 90; BGL.glRasterPos2i(col, line); Draw.Text("Threads: %s" % threads)
+        col=10; line = 70; BGL.glRasterPos2i(col, line); Draw.Text("Java path: %s" % javadir)
+        f.close()
+    # If config file doesn't exist, issue a warning:
+    if trial == 0:
+        col=10; line = 105; BGL.glRasterPos2i(col, line); Draw.Text("Sunflow is not configured yet - set Memory, Number of Threads and Path to sunflow.jar")
 
-	drawButtons()
+    drawButtons()
 
 ## Draw caustic and global illumination settings ##
 def drawGI():
-	global CAUSTICS, PHOTONNUMBER, PHOTONMAP, PHOTONESTIMATE, PHOTONRADIUS
-	global INSTANTGI, IGISAMPLES, IGISETS, IGIBIAS, IGIBIASSAMPLES
-	global IRRCACHE, IRRSAMPLES, IRRTOLERANCE, IRRSPACEMIN, IRRSPACEMAX
-	global gPHOTONNUMBER, gPHOTONESTIMATE, gPHOTONRADIUS, gPHOTONMAP, USEGLOBALS
-	global PATHTRACE, PATHSAMPLES
-	global VIEWCAUSTICS, VIEWGLOBALS, VIEWGI
-	global OCCLUSION, OCCBRIGHT, OCCDARK, OCCSAMPLES, OCCDIST
-	global FAKEAMB, FAMBSKY, FAMBGROUND
-
-        # GI/Caustics part #
-	col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Caustics and Global Illumination")
-        #Caustics#
-	col=10; line=300; CAUSTICS=Draw.Toggle("Caustics", EVENT_CAUSTICS, col, line, 85, 18, CAUSTICS.val, "Turn on caustics in the scene")
-	col=100; PHOTONNUMBER=Draw.Number("Photons", 2, col, line, 125, 18, PHOTONNUMBER.val, 0, 5000000)
-	col=230; PHOTONMAP=Draw.Menu("%tCaustics Photon Map|kd", PHOTON_EVENT, col, line, 60, 18, PHOTONMAP.val)
-	col=295; PHOTONESTIMATE=Draw.Number("Photon Estim.", 2, col, line, 125, 18, PHOTONESTIMATE.val, 0, 1000)
-	col=425; PHOTONRADIUS=Draw.Number("Photon Radius", 2, col, line, 125, 18, PHOTONRADIUS.val, 0.00, 10.00)
-        #Instant GI#
-	col=10; line=275; INSTANTGI=Draw.Toggle("Instant GI", FORCE_INSTANTGI, col, line, 85, 18, INSTANTGI.val, "Enable Instant GI for GI in the scene")
-	col=100; IGISAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, IGISAMPLES.val, 0, 1024)
-	col=230; IGISETS=Draw.Number("Number of Sets", 2, col, line, 125, 18, IGISETS.val, 1.0, 100.0)
-	col=100; line=250; IGIBIAS=Draw.Number("Bias", 2, col, line, 125, 18, IGIBIAS.val, 0.000, 1.000)
-	col=230; IGIBIASSAMPLES=Draw.Number("Bias Samples", 2, col, line, 125, 18, IGIBIASSAMPLES.val, 0, 64)
-        #Irradiance Caching#
-	col=10; line=225; IRRCACHE=Draw.Toggle("Irr. Cache", FORCE_IRRCACHE, col, line, 85, 18, IRRCACHE.val, "Enable Irradiance Caching for GI in the scene")
-	col=100; IRRSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, IRRSAMPLES.val, 0, 1024)
-	col=230; IRRTOLERANCE=Draw.Number("Tolerance", 2, col, line, 125, 18, IRRTOLERANCE.val, 0.0, 0.10)
-	col=100; line=200; IRRSPACEMIN=Draw.Number("Min. Space", 2, col, line, 125, 18, IRRSPACEMIN.val, 0.00, 10.00)
-	col=230; IRRSPACEMAX=Draw.Number("Max. Space", 2, col, line, 125, 18, IRRSPACEMAX.val, 0.00, 10.00)
-	col=10; line=175; USEGLOBALS=Draw.Toggle("Use Globals", FORCE_GLOBALS, col, line, 85, 18, USEGLOBALS.val, "Use global photons instead of path tracing for Irr. Cache secondary bounces")
-	col=100; gPHOTONNUMBER=Draw.Number("Glob. Phot.", 2, col, line, 125, 18, gPHOTONNUMBER.val, 0, 5000000)
-	col=230; gPHOTONMAP=Draw.Menu("%tGlobal Photon Map|grid", gPHOTON_EVENT, col, line, 60, 18, gPHOTONMAP.val)
-	col=295; gPHOTONESTIMATE=Draw.Number("Global Estim.", 2, col, line, 125, 18, gPHOTONESTIMATE.val, 0, 1000)
-	col=425; gPHOTONRADIUS=Draw.Number("Global Radius", 2, col, line, 125, 18, gPHOTONRADIUS.val, 0.00, 10.00)
-        #Path Tracing#
-	col=10; line=150; PATHTRACE=Draw.Toggle("Path Tracing", FORCE_PATHTRACE, col, line, 85, 18, PATHTRACE.val, "Enable Path Tracing for GI in the scene")
-	col=100; PATHSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, PATHSAMPLES.val, 0, 1024)
-        #AO#
-	col=10; line=125; OCCLUSION=Draw.Toggle("Amb Occ", FORCE_OCCLUSION, col, line, 85, 18, OCCLUSION.val, "Turn on ambient occlusion for the whole scene")
-	col=100; OCCBRIGHT=Draw.ColorPicker(2, 100, 125, 30, 18, OCCBRIGHT.val, "Ambient Occlusion bright color")
-	col=135; OCCDARK=Draw.ColorPicker(2, 135, 125, 30, 18, OCCDARK.val, "Ambient Occlusion dark color")
-	col=170; OCCSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, OCCSAMPLES.val, 0, 256)
-	col=300; OCCDIST=Draw.Number("Distance", 2, col, line, 125, 18, OCCDIST.val, -1.0, 150.0)
-	#Fake Ambient Term#
-        col=10; line=100; FAKEAMB=Draw.Toggle("Fake Amb", FORCE_FAKEAMB, col, line, 85, 18, FAKEAMB.val, "Turn on Fake Ambient Term for the scene")
-	col=100; FAMBSKY=Draw.ColorPicker(2, 100, 100, 30, 18, FAMBSKY.val, "Fake Ambient Term sky color")
-	col=135; FAMBGROUND=Draw.ColorPicker(2, 135, 100, 30, 18, FAMBGROUND.val, "Fake Ambient Term ground color")
-	#Overrides#
-        col=100; line=75; VIEWCAUSTICS=Draw.Toggle("Just Caustics", OVERRIDE_CAUSTICS, col, line, 85, 18, VIEWCAUSTICS.val, "Render only the caustic photons in the scene (Caustics must be on)")
-	col=190; VIEWGLOBALS=Draw.Toggle("Just Globals", OVERRIDE_GLOBALS, col, line, 85, 18, VIEWGLOBALS.val, "Render only the global photons in the scene (Use Globals must be on)")
-	col=280; VIEWGI=Draw.Toggle("Just GI", OVERRIDE_GI, col, line, 85, 18, VIEWGI.val, "Render only the gi components in the scene (A GI engine must be selected)")
-	drawButtons()
+    global CAUSTICS, PHOTONNUMBER, PHOTONMAP, PHOTONESTIMATE, PHOTONRADIUS
+    global INSTANTGI, IGISAMPLES, IGISETS, IGIBIAS, IGIBIASSAMPLES
+    global IRRCACHE, IRRSAMPLES, IRRTOLERANCE, IRRSPACEMIN, IRRSPACEMAX
+    global gPHOTONNUMBER, gPHOTONESTIMATE, gPHOTONRADIUS, gPHOTONMAP, USEGLOBALS
+    global PATHTRACE, PATHSAMPLES
+    global VIEWCAUSTICS, VIEWGLOBALS, VIEWGI
+    global OCCLUSION, OCCBRIGHT, OCCDARK, OCCSAMPLES, OCCDIST
+    global FAKEAMB, FAMBSKY, FAMBGROUND
+
+    # GI/Caustics part #
+    col=10; line=325; BGL.glRasterPos2i(col, line); Draw.Text("Caustics and Global Illumination")
+    #Caustics#
+    col=10; line=300; CAUSTICS=Draw.Toggle("Caustics", EVENT_CAUSTICS, col, line, 85, 18, CAUSTICS.val, "Turn on caustics in the scene")
+    col=100; PHOTONNUMBER=Draw.Number("Photons", 2, col, line, 125, 18, PHOTONNUMBER.val, 0, 5000000)
+    col=230; PHOTONMAP=Draw.Menu("%tCaustics Photon Map|kd", PHOTON_EVENT, col, line, 60, 18, PHOTONMAP.val)
+    col=295; PHOTONESTIMATE=Draw.Number("Photon Estim.", 2, col, line, 125, 18, PHOTONESTIMATE.val, 0, 1000)
+    col=425; PHOTONRADIUS=Draw.Number("Photon Radius", 2, col, line, 125, 18, PHOTONRADIUS.val, 0.00, 10.00)
+    #Instant GI#
+    col=10; line=275; INSTANTGI=Draw.Toggle("Instant GI", FORCE_INSTANTGI, col, line, 85, 18, INSTANTGI.val, "Enable Instant GI for GI in the scene")
+    col=100; IGISAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, IGISAMPLES.val, 0, 1024)
+    col=230; IGISETS=Draw.Number("Number of Sets", 2, col, line, 125, 18, IGISETS.val, 1.0, 100.0)
+    col=100; line=250; IGIBIAS=Draw.Number("Bias", 2, col, line, 125, 18, IGIBIAS.val, 0.000, 1.000)
+    col=230; IGIBIASSAMPLES=Draw.Number("Bias Samples", 2, col, line, 125, 18, IGIBIASSAMPLES.val, 0, 64)
+    #Irradiance Caching#
+    col=10; line=225; IRRCACHE=Draw.Toggle("Irr. Cache", FORCE_IRRCACHE, col, line, 85, 18, IRRCACHE.val, "Enable Irradiance Caching for GI in the scene")
+    col=100; IRRSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, IRRSAMPLES.val, 0, 1024)
+    col=230; IRRTOLERANCE=Draw.Number("Tolerance", 2, col, line, 125, 18, IRRTOLERANCE.val, 0.0, 0.10)
+    col=100; line=200; IRRSPACEMIN=Draw.Number("Min. Space", 2, col, line, 125, 18, IRRSPACEMIN.val, 0.00, 10.00)
+    col=230; IRRSPACEMAX=Draw.Number("Max. Space", 2, col, line, 125, 18, IRRSPACEMAX.val, 0.00, 10.00)
+    col=10; line=175; USEGLOBALS=Draw.Toggle("Use Globals", FORCE_GLOBALS, col, line, 85, 18, USEGLOBALS.val, "Use global photons instead of path tracing for Irr. Cache secondary bounces")
+    col=100; gPHOTONNUMBER=Draw.Number("Glob. Phot.", 2, col, line, 125, 18, gPHOTONNUMBER.val, 0, 5000000)
+    col=230; gPHOTONMAP=Draw.Menu("%tGlobal Photon Map|grid", gPHOTON_EVENT, col, line, 60, 18, gPHOTONMAP.val)
+    col=295; gPHOTONESTIMATE=Draw.Number("Global Estim.", 2, col, line, 125, 18, gPHOTONESTIMATE.val, 0, 1000)
+    col=425; gPHOTONRADIUS=Draw.Number("Global Radius", 2, col, line, 125, 18, gPHOTONRADIUS.val, 0.00, 10.00)
+    #Path Tracing#
+    col=10; line=150; PATHTRACE=Draw.Toggle("Path Tracing", FORCE_PATHTRACE, col, line, 85, 18, PATHTRACE.val, "Enable Path Tracing for GI in the scene")
+    col=100; PATHSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, PATHSAMPLES.val, 0, 1024)
+    #AO#
+    col=10; line=125; OCCLUSION=Draw.Toggle("Amb Occ", FORCE_OCCLUSION, col, line, 85, 18, OCCLUSION.val, "Turn on ambient occlusion for the whole scene")
+    col=100; OCCBRIGHT=Draw.ColorPicker(2, 100, 125, 30, 18, OCCBRIGHT.val, "Ambient Occlusion bright color")
+    col=135; OCCDARK=Draw.ColorPicker(2, 135, 125, 30, 18, OCCDARK.val, "Ambient Occlusion dark color")
+    col=170; OCCSAMPLES=Draw.Number("Samples", 2, col, line, 125, 18, OCCSAMPLES.val, 0, 256)
+    col=300; OCCDIST=Draw.Number("Distance", 2, col, line, 125, 18, OCCDIST.val, -1.0, 150.0)
+    #Fake Ambient Term#
+    col=10; line=100; FAKEAMB=Draw.Toggle("Fake Amb", FORCE_FAKEAMB, col, line, 85, 18, FAKEAMB.val, "Turn on Fake Ambient Term for the scene")
+    col=100; FAMBSKY=Draw.ColorPicker(2, 100, 100, 30, 18, FAMBSKY.val, "Fake Ambient Term sky color")
+    col=135; FAMBGROUND=Draw.ColorPicker(2, 135, 100, 30, 18, FAMBGROUND.val, "Fake Ambient Term ground color")
+    #Overrides#
+    col=100; line=75; VIEWCAUSTICS=Draw.Toggle("Just Caustics", OVERRIDE_CAUSTICS, col, line, 85, 18, VIEWCAUSTICS.val, "Render only the caustic photons in the scene (Caustics must be on)")
+    col=190; VIEWGLOBALS=Draw.Toggle("Just Globals", OVERRIDE_GLOBALS, col, line, 85, 18, VIEWGLOBALS.val, "Render only the global photons in the scene (Use Globals must be on)")
+    col=280; VIEWGI=Draw.Toggle("Just GI", OVERRIDE_GI, col, line, 85, 18, VIEWGI.val, "Render only the gi components in the scene (A GI engine must be selected)")
+    drawButtons()
 
 ## Draw the bottom bar of buttons in the interface ##
 def drawButtons():
-	Draw.Button("Configure SF", CHANGE_CFG, 20, 10, 90, 50)
-	Draw.Button("AA", CHANGE_AA, 115 , 40, 90, 20)
-	Draw.Button("Camera", CHANGE_CAM, 210, 40, 90, 20)
-	Draw.Button("Light", CHANGE_LIGHT, 305, 40, 90, 20)
-	Draw.Button("Caustics/GI", CHANGE_GI, 115, 10, 90, 20)
-	Draw.Button("Shader Info", CHANGE_SHAD, 210, 10, 90, 20)
-	Draw.Button("Background", CHANGE_BCKGRD,305, 10, 90, 20)
-	Draw.Button("Render settings", CHANGE_EXP, 400, 10, 90, 50)
+    Draw.Button("Configure SF", CHANGE_CFG, 20, 10, 90, 50)
+    Draw.Button("AA", CHANGE_AA, 115 , 40, 90, 20)
+    Draw.Button("Camera", CHANGE_CAM, 210, 40, 90, 20)
+    Draw.Button("Light", CHANGE_LIGHT, 305, 40, 90, 20)
+    Draw.Button("Caustics/GI", CHANGE_GI, 115, 10, 90, 20)
+    Draw.Button("Shader Info", CHANGE_SHAD, 210, 10, 90, 20)
+    Draw.Button("Background", CHANGE_BCKGRD,305, 10, 90, 20)
+    Draw.Button("Render settings", CHANGE_EXP, 400, 10, 90, 50)
 
 ####### Script Startup Section #######
 ######################################
@@ -2414,4 +2414,3 @@
 SCREEN=7
 auto_import()
 Draw.Register(drawGUI, event, buttonEvent)
-
