diff --git a/presets/pov/lamp/01_(5400K)_Direct_Sun.py b/presets/pov/lamp/01_(5400K)_Direct_Sun.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f53ce06d3d189d2324af2efb199f91da5b178f9
--- /dev/null
+++ b/presets/pov/lamp/01_(5400K)_Direct_Sun.py
@@ -0,0 +1,10 @@
+#Since the dawn of time
+
+import bpy
+bpy.context.object.data.type = 'SUN'
+lampdata = bpy.context.object.data
+
+lampdata.color = (1.0, 1.0, 0.9843137264251709)
+lampdata.energy = 1.2 #100 000lux
+#lampdata.distance = 0.001
+#lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/02_(5400K)_High_Noon_Sun.py b/presets/pov/lamp/02_(5400K)_High_Noon_Sun.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d3083a6e6a91b1ec99b542d6fb0bb771c374770
--- /dev/null
+++ b/presets/pov/lamp/02_(5400K)_High_Noon_Sun.py
@@ -0,0 +1,17 @@
+#Since the dawn of time
+
+import bpy
+bpy.context.object.rotation_euler = (0,0,0)#And loc HIGH
+bpy.context.object.location = (0,0,700000000)
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.shape = 'SQUARE'
+lampdata.size = 30000000#0.02
+#lampdata.size_y = 0.02
+lampdata.shadow_ray_samples_x = 2
+#lampdata.shadow_ray_samples_y = 3
+lampdata.color = (1.0, 1.0, 1.0)
+lampdata.energy = 1.094316#91193 #lux
+lampdata.distance =695699968
+
diff --git a/presets/pov/lamp/03_(6000K)_Daylight_Window.py b/presets/pov/lamp/03_(6000K)_Daylight_Window.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9781f579d6e24d00f027f9c20ccd55b45b87bc6
--- /dev/null
+++ b/presets/pov/lamp/03_(6000K)_Daylight_Window.py
@@ -0,0 +1,13 @@
+#Since the dawn of time
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 1.2
+lampdata.size_y = 2.10
+lampdata.shadow_ray_samples_x = 2
+lampdata.shadow_ray_samples_y = 3
+lampdata.color = (1.0, 1.0, 1.0)
+lampdata.energy = 1.094316#91193 #lux
+lampdata.distance = 1.0
diff --git a/presets/pov/lamp/04_(6000K)_2500W_HMI_(Halogen_Metal_Iodide).py b/presets/pov/lamp/04_(6000K)_2500W_HMI_(Halogen_Metal_Iodide).py
new file mode 100644
index 0000000000000000000000000000000000000000..0bfa95d84a1560f01d1ee671d11012a52c4fccf5
--- /dev/null
+++ b/presets/pov/lamp/04_(6000K)_2500W_HMI_(Halogen_Metal_Iodide).py
@@ -0,0 +1,14 @@
+#After 1969
+#made specifically for film and entertainment applications
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.spot_size = 0.872665
+lampdata.spot_blend = 0.9
+lampdata.color = (0.99, 0.9882352948188782, 0.998)
+lampdata.energy = 223.81796 #240000lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 0.001
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/05_(4000K)_100W_Metal_Halide.py b/presets/pov/lamp/05_(4000K)_100W_Metal_Halide.py
new file mode 100644
index 0000000000000000000000000000000000000000..e91d3f9a49d8eb4ad30f3b71094d022586a59f31
--- /dev/null
+++ b/presets/pov/lamp/05_(4000K)_100W_Metal_Halide.py
@@ -0,0 +1,14 @@
+#After 1962
+#Common uses: outdoor lighting where good color rendering is needed, television/film lighting, sports fields, car headlights, flood lights, heavy flashlights, green house applications
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.spot_size = 0.6
+lampdata.spot_blend = 0.9
+lampdata.color = (0.9490196108818054, 0.9882352948188782, 1.0)
+lampdata.energy = 20.98293#9000lm/21.446(=lux)*0.004*6.25(distance) *2 for distance is the point of half strength
+lampdata.distance = 0.025
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/06_(3200K)_100W_Quartz_Halogen.py b/presets/pov/lamp/06_(3200K)_100W_Quartz_Halogen.py
new file mode 100644
index 0000000000000000000000000000000000000000..b58edf17d44f8e78b8ea0df26d1c2eda9c8853a7
--- /dev/null
+++ b/presets/pov/lamp/06_(3200K)_100W_Quartz_Halogen.py
@@ -0,0 +1,16 @@
+#since 1960, no longer manufactured since 2016
+#8mm projectors
+#used in many automobiles headlamps ; outdoor lighting systems ; watercraft ; desktop lamps (smaller power).
+#theatrical and studio (film and television) fixtures, including Ellipsoidal reflector spotlights, Source Four, and Fresnels; PAR Cans 
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.spot_size = 1.9
+lampdata.spot_blend = 0.9
+lampdata.color = (1.0, 0.9450980424880981, 0.8784313797950745)
+lampdata.energy = 12.43433#5000/21.446 #lumen values/20 or lux when available used as a basis
+lampdata.distance = 0.015#energy calculated for length 0.075 but width gives better result
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/lamp/07_(2850K)_100w_Tungsten.py b/presets/pov/lamp/07_(2850K)_100w_Tungsten.py
new file mode 100644
index 0000000000000000000000000000000000000000..72675de3baec0865f6348e1e862d0cf1d57966a8
--- /dev/null
+++ b/presets/pov/lamp/07_(2850K)_100w_Tungsten.py
@@ -0,0 +1,10 @@
+#1908 - today
+
+import bpy
+bpy.context.object.data.type = 'POINT'
+lampdata = bpy.context.object.data
+
+lampdata.color = (1.0, 0.8392156958580017, 0.6666666865348816)
+lampdata.energy = 7.46060#3.7303#1000/21.446/(lampdistance/candledistance)  #lumen values/21.446 or lux when available used as a basis
+lampdata.distance = 0.05
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/08_(2600K)_40w_Tungsten.py b/presets/pov/lamp/08_(2600K)_40w_Tungsten.py
new file mode 100644
index 0000000000000000000000000000000000000000..88ef46a0d42101a5220a2b645b624e7edce7ed28
--- /dev/null
+++ b/presets/pov/lamp/08_(2600K)_40w_Tungsten.py
@@ -0,0 +1,10 @@
+#since 1908
+
+import bpy
+bpy.context.object.data.type = 'POINT'
+lampdata = bpy.context.object.data
+
+lampdata.color = (1.0, 0.8196078431372549, 0.6980392156862745)
+lampdata.energy = 2.98424#400/21.446 #lumen values/21.446 or lux when available used as a basis
+lampdata.distance = 0.05
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/09_(5000K)_75W_Full_Spectrum_Fluorescent_T12.py b/presets/pov/lamp/09_(5000K)_75W_Full_Spectrum_Fluorescent_T12.py
new file mode 100644
index 0000000000000000000000000000000000000000..b0a23eda43c755418b89cf0ebe94d69a40861457
--- /dev/null
+++ b/presets/pov/lamp/09_(5000K)_75W_Full_Spectrum_Fluorescent_T12.py
@@ -0,0 +1,14 @@
+#Available since 1979 (Triphosphor lamps)
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.038
+lampdata.size_y = 2.40284
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (1.0, 0.95686274766922, 0.9490200281143188)
+lampdata.energy = 4.45304#4775lm/21.446(=lux)*0.004(distance) *2 for distance is the point of half strength 6200lm?
+lampdata.distance = 1.0 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
+#lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/10_(4300K)_40W_Vintage_Fluorescent_T12.py b/presets/pov/lamp/10_(4300K)_40W_Vintage_Fluorescent_T12.py
new file mode 100644
index 0000000000000000000000000000000000000000..d03ce6fd98044b07ecaa49b2170bd7458541390e
--- /dev/null
+++ b/presets/pov/lamp/10_(4300K)_40W_Vintage_Fluorescent_T12.py
@@ -0,0 +1,14 @@
+#since 1939 , T12 no longer manufactured since T8 propagated
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.038
+lampdata.size_y = 1.2192
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (0.901, 1.0, 0.979)
+lampdata.energy = 2.14492#2300lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
+#lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/11_(5000K)_18W_Standard_Fluorescent_T8.py b/presets/pov/lamp/11_(5000K)_18W_Standard_Fluorescent_T8.py
new file mode 100644
index 0000000000000000000000000000000000000000..6fef17639598fdd25ba5c625d7b8e538a4b52715
--- /dev/null
+++ b/presets/pov/lamp/11_(5000K)_18W_Standard_Fluorescent_T8.py
@@ -0,0 +1,13 @@
+#since 1973 
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.026
+lampdata.size_y = 0.59
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (0.95686274766922, 1.0, 0.9803921580314636)
+lampdata.energy = 1.25898#1350lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
diff --git a/presets/pov/lamp/12_(4200K)_18W_Cool_White_Fluorescent_T8.py b/presets/pov/lamp/12_(4200K)_18W_Cool_White_Fluorescent_T8.py
new file mode 100644
index 0000000000000000000000000000000000000000..83f8dd4e6afa2f5332e4554e02ad804056de02d6
--- /dev/null
+++ b/presets/pov/lamp/12_(4200K)_18W_Cool_White_Fluorescent_T8.py
@@ -0,0 +1,15 @@
+#Available since 1979
+#more common than the warm white
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.026
+lampdata.size_y = 0.59
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (0.8313725590705872, 0.9215686321258545, 1.0)
+lampdata.energy = 1.25898#1350lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
+#lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/13_(3000K)_18W_Warm_Fluorescent_T8.py b/presets/pov/lamp/13_(3000K)_18W_Warm_Fluorescent_T8.py
new file mode 100644
index 0000000000000000000000000000000000000000..e1cee557d965cf7a6642d4fb5df627baec210982
--- /dev/null
+++ b/presets/pov/lamp/13_(3000K)_18W_Warm_Fluorescent_T8.py
@@ -0,0 +1,14 @@
+#Available since 1979
+#developed to get closer to tungsten atmospher in interiors
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.026
+lampdata.size_y = 0.59
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (1.0, 0.95686274766922, 0.8980392217636108)
+lampdata.energy = 1.25898#1350lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
diff --git a/presets/pov/lamp/14_(6500K)_54W_Grow_Light_Fluorescent_T5-HO.py b/presets/pov/lamp/14_(6500K)_54W_Grow_Light_Fluorescent_T5-HO.py
new file mode 100644
index 0000000000000000000000000000000000000000..55f84ab817947b2000ae656b4ffbf34c925b27cd
--- /dev/null
+++ b/presets/pov/lamp/14_(6500K)_54W_Grow_Light_Fluorescent_T5-HO.py
@@ -0,0 +1,13 @@
+#Available since 1995
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.016
+lampdata.size_y = 1.149
+lampdata.shadow_ray_samples_x = 1
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (1.0, 0.83, 0.986274528503418)
+lampdata.energy = 4.66287 #0.93257#4.66287#5000lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 0.1 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
diff --git a/presets/pov/lamp/15_(3200K)_40W_Induction_ Fluorescent.py b/presets/pov/lamp/15_(3200K)_40W_Induction_ Fluorescent.py
new file mode 100644
index 0000000000000000000000000000000000000000..1d0851e5be950f12ddc083450b32f6a373baec90
--- /dev/null
+++ b/presets/pov/lamp/15_(3200K)_40W_Induction_ Fluorescent.py	
@@ -0,0 +1,14 @@
+#since the 1990's, 
+#Often circular or rectangular closed loop electrodeless fluorescent lamps
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+#lampdata.use_halo = True
+lampdata.spot_size = 3.14
+lampdata.spot_blend = 0.9
+lampdata.color = (1.0, 0.9450980424880981, 0.8784313797950745)
+lampdata.energy = 2.61121#2800/21.446 #lumen values/20 or lux when available used as a basis
+lampdata.distance = 0.15#energy calculated for length 0.075 but width gives better result
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/lamp/16_(2100K)_150W_High_Pressure_Sodium.py b/presets/pov/lamp/16_(2100K)_150W_High_Pressure_Sodium.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ddb32cb43f078f8b439729386c414d12ef215c2
--- /dev/null
+++ b/presets/pov/lamp/16_(2100K)_150W_High_Pressure_Sodium.py
@@ -0,0 +1,13 @@
+#Starting from 1964
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.color = (1.0, 0.772549033164978, 0.5607843399047852)
+lampdata.energy = 4.47636#12000lm/21.446(=lux)*0.004(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0
+lampdata.spot_size = 1.9
+lampdata.spot_blend = 0.9
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/lamp/17_(1700K)_135W_Low_Pressure_Sodium.py b/presets/pov/lamp/17_(1700K)_135W_Low_Pressure_Sodium.py
new file mode 100644
index 0000000000000000000000000000000000000000..d5e4267845a3bff8fd103a304724d962df24ed5d
--- /dev/null
+++ b/presets/pov/lamp/17_(1700K)_135W_Low_Pressure_Sodium.py
@@ -0,0 +1,11 @@
+#(1700K) 135W Low Pressure Sodium Vapor Starting from 1932
+#Mostly used for Outdoor city lighting, security lighting, long tunnel lighting 
+
+import bpy
+bpy.context.object.data.type = 'POINT'
+lampdata = bpy.context.object.data
+
+lampdata.color = (1.0, 0.5764706134796143, 0.16078431904315948)
+lampdata.energy = 8.43048#22600lm/21.446(=lux)*0.004(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.0
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/18_(6800K)_175W_Mercury_Vapor.py b/presets/pov/lamp/18_(6800K)_175W_Mercury_Vapor.py
new file mode 100644
index 0000000000000000000000000000000000000000..e1a5143c32a19a3c82731fa2b6c3995cbbd9b2e7
--- /dev/null
+++ b/presets/pov/lamp/18_(6800K)_175W_Mercury_Vapor.py
@@ -0,0 +1,13 @@
+#Starting from 1901
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.spot_size = 1.25
+lampdata.spot_blend = 0.9
+lampdata.color = (0.8470588326454163, 0.9686274528503418, 1.0)
+lampdata.energy = 17.25263#7400lm/21.446(=lux)*0.004*6.25(distance) *2 for distance is the point of half strength
+lampdata.distance = 0.025
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/lamp/19_(5200K)_700W_Carbon_Arc.py b/presets/pov/lamp/19_(5200K)_700W_Carbon_Arc.py
new file mode 100644
index 0000000000000000000000000000000000000000..139dc8bb38c35efc65f84494642b98544d4edf0b
--- /dev/null
+++ b/presets/pov/lamp/19_(5200K)_700W_Carbon_Arc.py
@@ -0,0 +1,18 @@
+#Starting from 1876 (first type of commercial lamps developed with electricity)
+#Carbon arc lamps were being phased out after the 1910s. 
+#For general lighting the lamp was replaced by the 1920s and 30s in most cities. 
+#The lamp continued to be used for spot lights, film production lighting and film projector lamps.
+#Most of the remaining carbon arc lamps ceased production by the 1980s 
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+#lampdata.use_halo = True
+lampdata.show_cone = True
+lampdata.spot_size = 1.5
+lampdata.spot_blend = 0.3
+lampdata.color = (1.0, 0.9803921580314636, 0.95686274766922)
+lampdata.energy = 51.29162#55000lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 0.01
+lampdata.falloff_type = 'INVERSE_SQUARE'
\ No newline at end of file
diff --git a/presets/pov/lamp/20_(6500K)_15W_LED_Spot.py b/presets/pov/lamp/20_(6500K)_15W_LED_Spot.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b70b9f10b14547301e6a76d0915ddee337cffc3
--- /dev/null
+++ b/presets/pov/lamp/20_(6500K)_15W_LED_Spot.py
@@ -0,0 +1,12 @@
+#since 2008
+
+import bpy
+bpy.context.object.data.type = 'SPOT'
+lampdata = bpy.context.object.data
+
+lampdata.show_cone = True
+lampdata.spot_size = 1.39626 #80 degrees in radian
+lampdata.spot_blend = 0.5
+lampdata.color = (1.0, 0.9372549057006836, 0.9686274528503418)
+lampdata.energy = 1.39886#1500lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.18 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
diff --git a/presets/pov/lamp/21_(2700K)_7W_OLED_Panel.py b/presets/pov/lamp/21_(2700K)_7W_OLED_Panel.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f2ebb8fedcf591dc045093a2b0690805ae3927b
--- /dev/null
+++ b/presets/pov/lamp/21_(2700K)_7W_OLED_Panel.py
@@ -0,0 +1,14 @@
+#since 2025
+#inspired by OSRAM Early Future / IKEA Vitsand / OTI Lumionics Aerelight
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.033
+lampdata.size_y = 0.133
+lampdata.shadow_ray_samples_x = 2
+lampdata.shadow_ray_samples_y = 2
+lampdata.color = (1.0, 0.8292156958580017, 0.6966666865348816)
+lampdata.energy = 0.83932#900lm/21.446(=lux)*0.004*2.5(distance) *2 for distance is the point of half strength
+lampdata.distance = 1.18 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
diff --git a/presets/pov/lamp/22_(30000K)_40W_Black_Light_Fluorescent.py b/presets/pov/lamp/22_(30000K)_40W_Black_Light_Fluorescent.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef6b4725403891510a7256417fb5239d27557c5e
--- /dev/null
+++ b/presets/pov/lamp/22_(30000K)_40W_Black_Light_Fluorescent.py
@@ -0,0 +1,12 @@
+#Starting from 1939 (World War II Byler's tubes) 
+
+import bpy
+bpy.context.object.data.type = 'AREA'
+lampdata = bpy.context.object.data
+
+lampdata.size = 0.038
+lampdata.size_y = 1.2192
+lampdata.color = (0.6549019813537598, 0.0, 1.0)
+lampdata.energy = 1.86515#100/21.446 #lumen values/21.446 or lux when available used as a basis
+lampdata.distance = 0.4 #dist values multiplied by 10 for area lights for same power as bulb/spot/...
+
diff --git a/presets/pov/lamp/23_(30000K)_40W_Black_Light_Bulb.py b/presets/pov/lamp/23_(30000K)_40W_Black_Light_Bulb.py
new file mode 100644
index 0000000000000000000000000000000000000000..baad8234c444c61898407af4daf9abbf1058b0de
--- /dev/null
+++ b/presets/pov/lamp/23_(30000K)_40W_Black_Light_Bulb.py
@@ -0,0 +1,10 @@
+#Starting from 1918 (World War I Wood's glass) 
+
+import bpy
+bpy.context.object.data.type = 'POINT'
+lampdata = bpy.context.object.data
+
+lampdata.color = (0.6549019813537598, 0.0, 1.0)
+lampdata.energy = 1.86515#100/21.446 #lumen values/21.446 or lux when available used as a basis
+lampdata.distance = 0.01
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/lamp/24_(1850K)_Candle.py b/presets/pov/lamp/24_(1850K)_Candle.py
new file mode 100644
index 0000000000000000000000000000000000000000..5d7ac61d75fad2aca11cf148440b06c05dbe29c0
--- /dev/null
+++ b/presets/pov/lamp/24_(1850K)_Candle.py
@@ -0,0 +1,24 @@
+#Starting from 1825 (stearin) 
+
+import bpy
+bpy.context.object.data.type = 'POINT'
+lampdata = bpy.context.object.data
+
+lampdata.color = (1.0, 0.7176470756530762, 0.2980392277240753)
+#lampdata.color = (1.0, 0.5764706134796143, 0.16078431904315948)
+#http://terpconnect.umd.edu/~pbs/2011-Sunderland-et-al-PCI.pdf
+#https://blog.1000bulbs.com/home/whats-the-difference-between-candela-lux-and-lumens
+#Environment 	Typical Lux
+#Hospital Theatre 	1,000
+#Supermarket, Workshop, Sports Hall 	750
+#Office, Show Rooms, Laboratories, Kitchens 	500
+#Warehouse Loading Bays 	300 to 400
+#School Classroom, University Lecture Hall 	250
+#Lobbies, Public Corridors, Stairwells 	200
+#Warehouse Aisles 	100 to 200
+#Homes, Theatres 	150
+#Family Living Room 50
+#Sunset & Sunrise 	400 lux
+lampdata.energy = 2.0 #two times lux value
+lampdata.distance = 0.004
+lampdata.falloff_type = 'INVERSE_SQUARE'
diff --git a/presets/pov/radiosity/01_Debug.py b/presets/pov/radiosity/01_Debug.py
new file mode 100644
index 0000000000000000000000000000000000000000..420dbd7eeb8919b2505d339f31a0b2a93dca97a0
--- /dev/null
+++ b/presets/pov/radiosity/01_Debug.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 10
+scene.pov.radio_error_bound = 0.3
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.8
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 1
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/02_Fast.py b/presets/pov/radiosity/02_Fast.py
new file mode 100644
index 0000000000000000000000000000000000000000..08864c83e11da13c73651e0ec54c49742a376876
--- /dev/null
+++ b/presets/pov/radiosity/02_Fast.py
@@ -0,0 +1,19 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 80
+scene.pov.radio_error_bound = 0.4
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.9
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.025
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 5
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.02
diff --git a/presets/pov/radiosity/03_Normal.py b/presets/pov/radiosity/03_Normal.py
new file mode 100644
index 0000000000000000000000000000000000000000..b66a1b2ac2f10a0dde9ed84fa38aaef654e8a723
--- /dev/null
+++ b/presets/pov/radiosity/03_Normal.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 200
+scene.pov.radio_error_bound = 0.3
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.75
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.017
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 7
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/04_Two_Bounces.py b/presets/pov/radiosity/04_Two_Bounces.py
new file mode 100644
index 0000000000000000000000000000000000000000..2072247adf5a053a422afb1c05d17002eb9a3515
--- /dev/null
+++ b/presets/pov/radiosity/04_Two_Bounces.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 200
+scene.pov.radio_error_bound = 0.3
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.75
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.017
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 7
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 2
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/05_Final.py b/presets/pov/radiosity/05_Final.py
new file mode 100644
index 0000000000000000000000000000000000000000..52a9d5c3595d2318e46fb13e65ee8bce6687e36e
--- /dev/null
+++ b/presets/pov/radiosity/05_Final.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 800
+scene.pov.radio_error_bound = 0.2
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.7
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.01
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 9
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/06_Outdoor_Low_Quality.py b/presets/pov/radiosity/06_Outdoor_Low_Quality.py
new file mode 100644
index 0000000000000000000000000000000000000000..53553264bbb5f903a48304c50539b7653bbdaea5
--- /dev/null
+++ b/presets/pov/radiosity/06_Outdoor_Low_Quality.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 80
+scene.pov.radio_error_bound = 0.6
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.8
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 4
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/07_Outdoor_High_Quality.py b/presets/pov/radiosity/07_Outdoor_High_Quality.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b06dabef67aef5e239364d6fcb6345fc2c9d6d2
--- /dev/null
+++ b/presets/pov/radiosity/07_Outdoor_High_Quality.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 500
+scene.pov.radio_error_bound = 0.1
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.5
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 7
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.004
diff --git a/presets/pov/radiosity/08_Outdoor_(Sun)Light.py b/presets/pov/radiosity/08_Outdoor_(Sun)Light.py
new file mode 100644
index 0000000000000000000000000000000000000000..94448c1f70245d3429fbd299bdb63d18b0b6282d
--- /dev/null
+++ b/presets/pov/radiosity/08_Outdoor_(Sun)Light.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 50
+scene.pov.radio_error_bound = 0.8
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.9
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 4
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 1
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/09_Indoor_Low_Quality.py b/presets/pov/radiosity/09_Indoor_Low_Quality.py
new file mode 100644
index 0000000000000000000000000000000000000000..e5fa7bb611ad5f456bc2e3d73435b44ce8a68642
--- /dev/null
+++ b/presets/pov/radiosity/09_Indoor_Low_Quality.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 80
+scene.pov.radio_error_bound = 0.7
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.8
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 5
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 2
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.01
diff --git a/presets/pov/radiosity/10_Indoor_High_Quality.py b/presets/pov/radiosity/10_Indoor_High_Quality.py
new file mode 100644
index 0000000000000000000000000000000000000000..5a752f6c05842108945e08bb579511195add4925
--- /dev/null
+++ b/presets/pov/radiosity/10_Indoor_High_Quality.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.pov.radio_display_advanced = True
+scene.pov.radio_adc_bailout = 0.005
+scene.pov.radio_always_sample = False
+scene.pov.radio_brightness = 1.0
+scene.pov.radio_count = 400
+scene.pov.radio_error_bound = 0.15
+scene.pov.radio_gray_threshold = 0.0
+scene.pov.radio_low_error_factor = 0.5
+scene.pov.radio_media = False
+scene.pov.radio_subsurface = False
+scene.pov.radio_minimum_reuse = 0.015
+scene.pov.radio_maximum_reuse = 0.2
+scene.pov.radio_nearest_count = 8
+scene.pov.radio_normal = False
+scene.pov.radio_recursion_limit = 3
+scene.pov.radio_pretrace_start = 0.08
+scene.pov.radio_pretrace_end = 0.004
diff --git a/presets/pov/world/1_Clear_Blue_Sky.py b/presets/pov/world/1_Clear_Blue_Sky.py
new file mode 100644
index 0000000000000000000000000000000000000000..0dcd5e05f92137eb61ce6b9a407e07eb2a4ab0bd
--- /dev/null
+++ b/presets/pov/world/1_Clear_Blue_Sky.py
@@ -0,0 +1,36 @@
+import bpy
+scene = bpy.context.scene
+
+scene.world.use_sky_blend = True
+#below multiplied by two for a better proportion Clear vs Overcast sky 
+#since Clear sky is 19807 lux vs 2000 for overcast (sun is min 32000 max 100000)
+#http://www.pssurvival.com/PS/Lighting/Typical_LUX_Intensities_for_Day_and_Night-2017.pdf
+#https://en.wikipedia.org/wiki/Daylight
+#https://www.engineeringtoolbox.com/light-level-rooms-d_708.html
+#https://www.cactus2000.de/fr/unit/masslux.shtml
+#https://blendergrid.com/news/cycles-physically-correct-brightness
+#researched result blue is      
+    #Hue: 0.6
+    #Saturation: 0.533
+    #Lightness: 0.7
+#put scattering scale at 0.0002 and scattering color rgb <0.2061, 0.3933, 1.0>
+#with very small value like round rgb 0.00002 0.00002 0.00008
+#Sky color at zenith, sun 90° elevation = hsl <0.6, 0.533, 0.698>
+#Ground color = rgb <0.996, 0.965, 0.855>  = hsl <0.128, 0.141, 0.996>
+#Ground Brighness = 0.996
+
+scene.world.horizon_color = (0.047, 0.034, 0.025) #24000 or 22000 lux roughly equals (sun+sky)/5
+scene.world.zenith_color = (0.006, 0.013, 0.033) #19807 lux roughly equals hign noon Sun / 5
+scene.world.ambient_color = (0.0, 0.0, 0.0)
+scene.world.mist_settings.use_mist = False
+scene.world.mist_settings.intensity = 0.0
+scene.world.mist_settings.depth = 25.0
+scene.world.mist_settings.start = 5.0
+scene.pov.media_enable = True
+scene.pov.media_scattering_type = '4'
+scene.pov.media_samples = 35
+scene.pov.media_diffusion_scale = (0.00002)
+scene.pov.media_diffusion_color = (0.000001, 0.000002, 0.000005)
+scene.pov.media_absorption_scale = (0.00002)
+scene.pov.media_absorption_color = (0.0000006067, 0.0000007939, 0.0)#up to 0.00007
+scene.pov.media_eccentricity = 0.0
diff --git a/presets/pov/world/2_Partly_Hazy_Sky.py b/presets/pov/world/2_Partly_Hazy_Sky.py
new file mode 100644
index 0000000000000000000000000000000000000000..2f6b628d8ec42fe567b8a818e6ed4992204c9f42
--- /dev/null
+++ b/presets/pov/world/2_Partly_Hazy_Sky.py
@@ -0,0 +1,36 @@
+import bpy
+scene = bpy.context.scene
+
+scene.world.use_sky_blend = True
+#below multiplied by two for a better proportion Clear vs Overcast sky 
+#since Clear sky is 19807 lux vs 2000 for overcast (sun is min 32000 max 100000)
+#http://www.pssurvival.com/PS/Lighting/Typical_LUX_Intensities_for_Day_and_Night-2017.pdf
+#https://en.wikipedia.org/wiki/Daylight
+#https://www.engineeringtoolbox.com/light-level-rooms-d_708.html
+#https://www.cactus2000.de/fr/unit/masslux.shtml
+#https://blendergrid.com/news/cycles-physically-correct-brightness
+#researched result blue is      
+    #Hue: 0.6
+    #Saturation: 0.533
+    #Lightness: 0.7
+#put scattering scale at 0.0002 and scattering color rgb <0.2061, 0.3933, 1.0>
+#with very small value like round rgb 0.00002 0.00002 0.00008
+#Sky color at zenith, sun 90° elevation = hsl <0.6, 0.533, 0.698>
+#Ground color = rgb <0.996, 0.965, 0.855>  = hsl <0.128, 0.141, 0.996>
+#Ground Brighness = 0.996
+
+scene.world.horizon_color = (0.380, 0.262, 0.183) #24000 or 22000 lux roughly equals (sun+sky)/5 + urban light pollution
+scene.world.zenith_color = (0.006, 0.013, 0.033) #19807 lux roughly equals hign noon Sun / 5
+scene.world.ambient_color = (0.0, 0.0, 0.0)
+scene.world.mist_settings.use_mist = False
+scene.world.mist_settings.intensity = 0.0
+scene.world.mist_settings.depth = 25.0
+scene.world.mist_settings.start = 5.0
+scene.pov.media_enable = True
+scene.pov.media_scattering_type = '4'
+scene.pov.media_samples = 35
+scene.pov.media_diffusion_scale = (0.00002)
+scene.pov.media_diffusion_color = (0.000001, 0.000002, 0.000005)
+scene.pov.media_absorption_scale = (0.00002)
+scene.pov.media_absorption_color = (0.0000006067, 0.0000007939, 0.0)#up to 0.00007
+scene.pov.media_eccentricity = 0.0
diff --git a/presets/pov/world/3_Overcast_Sky.py b/presets/pov/world/3_Overcast_Sky.py
new file mode 100644
index 0000000000000000000000000000000000000000..013a5d40ce74d32e92810896643cc231ed69506c
--- /dev/null
+++ b/presets/pov/world/3_Overcast_Sky.py
@@ -0,0 +1,20 @@
+import bpy
+scene = bpy.context.scene
+
+scene.world.use_sky_blend = True
+scene.world.horizon_color = (0.477, 0.536, 0.604)
+#below divided by ten for a better proportion Clear vs Overcast sky 
+#since Clear sky is 20000 lux vs 2000 up to 10000 for overcast
+scene.world.zenith_color = (0.034, 0.043, 0.047)
+scene.world.ambient_color = (0.0, 0.0, 0.0)
+scene.world.mist_settings.use_mist = False
+scene.world.mist_settings.intensity = 0.0
+scene.world.mist_settings.depth = 25.0
+scene.world.mist_settings.start = 5.0
+scene.pov.media_enable = False
+scene.pov.media_scattering_type = '1'
+scene.pov.media_samples = 35
+scene.pov.media_diffusion_scale = (1.0)
+scene.pov.media_diffusion_color = (0.58, 0.66, 0.75)
+scene.pov.media_absorption_color = (0.0, 0.0, 0.0)
+scene.pov.media_eccentricity = 0.0
diff --git a/presets/pov/world/4_Cartoony_Sky.py b/presets/pov/world/4_Cartoony_Sky.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3c552c0b534ee7c406ab35adcfd7fef72b01cc3
--- /dev/null
+++ b/presets/pov/world/4_Cartoony_Sky.py
@@ -0,0 +1,19 @@
+import bpy
+scene = bpy.context.scene
+
+scene.world.use_sky_blend = True
+#below multiplied by two for a better proportion Clear vs Overcast sky 
+#since Clear sky is 20000 lux vs 2000 for overcast
+scene.world.horizon_color = (0.350*2, 0.611*2, 1.0*2)
+scene.world.zenith_color = (0.05000000074505806*2, 0.125*2, 0.5*2)
+scene.world.ambient_color = (0.0, 0.0, 0.0)
+scene.world.mist_settings.use_mist = False
+scene.world.mist_settings.intensity = 0.0
+scene.world.mist_settings.depth = 25.0
+scene.world.mist_settings.start = 5.0
+scene.pov.media_enable = False
+scene.pov.media_scattering_type = '4'
+scene.pov.media_samples = 35
+scene.pov.media_diffusion_color = (0.20000000298023224, 0.4000000059604645, 1.0)
+scene.pov.media_absorption_color = (0.0, 0.0, 0.0)
+scene.pov.media_eccentricity = 0.0
\ No newline at end of file
diff --git a/presets/pov/world/5_Under_Water.py b/presets/pov/world/5_Under_Water.py
new file mode 100644
index 0000000000000000000000000000000000000000..e6659016755b08a679153c3de89ccf859dcc569e
--- /dev/null
+++ b/presets/pov/world/5_Under_Water.py
@@ -0,0 +1,19 @@
+import bpy
+scene = bpy.context.scene
+
+scene.world.use_sky_blend = True
+#below multiplied by two for a better proportion Clear vs Overcast sky 
+#since Clear sky is 20000 lux vs 2000 for overcast
+scene.world.horizon_color = (0.0, 0.0, 0.0)
+scene.world.zenith_color = (0.250980406999588, 0.6117647290229797, 1.0)
+scene.world.ambient_color = (0.0, 0.0, 0.0)
+scene.world.mist_settings.use_mist = False
+scene.world.mist_settings.intensity = 0.0
+scene.world.mist_settings.depth = 25.0
+scene.world.mist_settings.start = 5.0
+scene.pov.media_enable = True
+scene.pov.media_scattering_type = '5'
+scene.pov.media_samples = 35
+scene.pov.media_diffusion_color = (0.000034, 0.000034, 0.000017)
+scene.pov.media_absorption_color = (0.00000455, 0.00000165, 0.00000031)
+scene.pov.media_eccentricity = 0.7
\ No newline at end of file
diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index cfb45f5a9c06cdc2e6d90efe80c755a30319e87c..90d80f13ea2e060ab9e867627f212daf316c1ff6 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -19,14 +19,13 @@
 # <pep8 compliant>
 
 bl_info = {
-    "name": "POVRAY-3.7",
+    "name": "POV-3.7",
     "author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, "
               "Constantin Rahn, Bastien Montagne, Leonid Desyatkov",
-    "version": (0, 0, 9),
-    "blender": (2, 75, 0),
+    "version": (0, 1, 0),
+    "blender": (2, 79, 0),
     "location": "Render > Engine > POV-Ray 3.7",
     "description": "Basic POV-Ray 3.7 integration for blender",
-    "warning": "this script is RC",
     "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
                 "Scripts/Render/POV-Ray",
     "category": "Render",
@@ -44,6 +43,7 @@ else:
     #import addon_utils # To use some other addons
     import nodeitems_utils #for Nodes
     from nodeitems_utils import NodeCategory, NodeItem #for Nodes
+    from bl_operators.presets import AddPresetBase    
     from bpy.types import (
             AddonPreferences,
             PropertyGroup,
@@ -73,6 +73,11 @@ def string_strip_hyphen(name):
 # Scene POV properties.
 ###############################################################################
 class RenderPovSettingsScene(PropertyGroup):
+    #Linux SDL-window enable
+    sdl_window_enable = BoolProperty(
+            name="Enable SDL window",
+            description="Enable the SDL window in Linux OS",
+            default=True)
     # File Options
     text_block = StringProperty(
             name="Text Scene Name",
@@ -121,7 +126,7 @@ class RenderPovSettingsScene(PropertyGroup):
     radio_enable = BoolProperty(
             name="Enable Radiosity",
             description="Enable POV-Rays radiosity calculation",
-            default=False)
+            default=True)
 
     radio_display_advanced = BoolProperty(
             name="Advanced Options",
@@ -132,19 +137,88 @@ class RenderPovSettingsScene(PropertyGroup):
             name="Enable Media",
             description="Enable POV-Rays atmospheric media",
             default=False)
+            
     media_samples = IntProperty(
             name="Samples",
             description="Number of samples taken from camera to first object "
                         "encountered along ray path for media calculation",
             min=1, max=100, default=35)
-
-    media_color = FloatVectorProperty(
-            name="Media Color", description="The atmospheric media color",
+            
+    media_scattering_type = EnumProperty(
+            name="Scattering Type",
+            description="Scattering model",
+            items=(('1', "1 Isotropic", "The simplest form of scattering because"
+                                      " it is independent of direction."),
+                   ('2', "2 Mie haze ", "For relatively small particles such as "
+                                      "minuscule water droplets of fog, cloud "
+                                      "particles, and particles responsible "
+                                      "for the polluted sky. In this model the"
+                                      " scattering is extremely directional in"
+                                      " the forward direction i.e. the amount "
+                                      "of scattered light is largest when the "
+                                      "incident light is anti-parallel to the "
+                                      "viewing direction (the light goes "
+                                      "directly to the viewer). It is smallest"
+                                      " when the incident light is parallel to"
+                                      " the viewing direction. "),
+                   ('3', "3 Mie murky", "Like haze but much more directional"),
+                   ('4', "4 Rayleigh", "For extremely small particles such as "
+                                     "molecules of the air. The amount of "
+                                     "scattered light depends on the incident"
+                                     " light angle. It is largest when the "
+                                     "incident light is parallel or "
+                                     "anti-parallel to the viewing direction "
+                                     "and smallest when the incident light is "
+                                     "perpendicular to viewing direction."),
+                   ('5', "5 Henyey-Greenstein", "The default eccentricity value "
+                                              "of zero defines isotropic "
+                                              "scattering while positive "
+                                              "values lead to scattering in "
+                                              "the direction of the light and "
+                                              "negative values lead to "
+                                              "scattering in the opposite "
+                                              "direction of the light. Larger "
+                                              "values of e (or smaller values "
+                                              "in the negative case) increase "
+                                              "the directional property of the"
+                                              " scattering.")),                   
+            default='1')
+           
+    media_diffusion_scale = FloatProperty(
+            name="Scale", description="Scale factor of Media Diffusion Color",
+            precision=12, step=0.00000001, min=0.000000001, max=1.0,
+            default=(1.0))
+            
+    media_diffusion_color = FloatVectorProperty(
+            name="Media Diffusion Color", description="The atmospheric media color",
             precision=4, step=0.01, min=0, soft_max=1,
             default=(0.001, 0.001, 0.001),
             options={'ANIMATABLE'},
             subtype='COLOR')
 
+    media_absorption_scale = FloatProperty(
+            name="Scale", description="Scale factor of Media Absorption Color. "
+                                      "use 1/depth of media volume in meters",
+            precision=12, step=0.000001, min=0.000000001, max=1.0,
+            default=(0.00002))
+            
+    media_absorption_color = FloatVectorProperty(
+            name="Media Absorption Color", description="The atmospheric media absorption color",
+            precision=4, step=0.01, min=0, soft_max=1,
+            default=(0.0, 0.0, 0.0),
+            options={'ANIMATABLE'},
+            subtype='COLOR')            
+
+    media_eccentricity = FloatProperty(
+            name="Media Eccenticity Factor", description="Positive values lead"
+                 " to scattering in the direction of the light and negative "
+                 "values lead to scattering in the opposite direction of the "
+                 "light. Larger values of e (or smaller values in the negative"
+                 " case) increase the directional property of the scattering.",
+            precision=2, step=0.01, min=-1.0, max=1.0,
+            default=(0.0),
+            options={'ANIMATABLE'})
+                       
     baking_enable = BoolProperty(
             name="Enable Baking",
             description="Enable POV-Rays texture baking",
@@ -377,7 +451,7 @@ class RenderPovSettingsScene(PropertyGroup):
             description="",
             maxlen=1024, subtype="FILE_PATH")
 
-
+    #########RADIOSITY########
     radio_adc_bailout = FloatProperty(
             name="ADC Bailout",
             description="The adc_bailout for radiosity rays. Use "
@@ -422,7 +496,7 @@ class RenderPovSettingsScene(PropertyGroup):
 
     radio_media = BoolProperty(
             name="Media", description="Radiosity estimation can be affected by media",
-            default=False)
+            default=True)
 
     radio_subsurface = BoolProperty(
             name="Subsurface", description="Radiosity estimation can be affected by Subsurface Light Transport",
@@ -468,7 +542,6 @@ class RenderPovSettingsScene(PropertyGroup):
                         "in the mosaic preview last pass",
             min=0.000925, max=1.00, soft_min=0.01, soft_max=1.00, default=0.04, precision=3)
 
-
 ###############################################################################
 # Material POV properties.
 ###############################################################################
@@ -2199,20 +2272,14 @@ class PovrayPreferences(AddonPreferences):
 
 
 
-
-
-
-
-
-
-
-
-
 def register():
     bpy.utils.register_module(__name__)
     bpy.types.INFO_MT_add.prepend(ui.menu_func_add)
     bpy.types.INFO_MT_file_import.append(ui.menu_func_import)
     bpy.types.TEXT_MT_templates.append(ui.menu_func_templates)
+    bpy.types.RENDER_PT_povray_radiosity.prepend(ui.rad_panel_func)
+    bpy.types.LAMP_PT_POV_lamp.prepend(ui.lamp_panel_func)
+    bpy.types.WORLD_PT_world.prepend(ui.world_panel_func)    
     # was used for parametric objects but made the other addon unreachable on
     # unregister for other tools to use created a user action call instead
     #addon_utils.enable("add_mesh_extra_objects", default_set=False, persistent=True)
@@ -2244,6 +2311,9 @@ def unregister():
 
     #bpy.types.TEXTURE_PT_context_texture.remove(TEXTURE_PT_povray_type)
     #addon_utils.disable("add_mesh_extra_objects", default_set=False)
+    bpy.types.WORLD_PT_world.remove(ui.world_panel_func)
+    bpy.types.LAMP_PT_POV_lamp.remove(ui.lamp_panel_func)    
+    bpy.types.RENDER_PT_povray_radiosity.remove(ui.rad_panel_func)
     bpy.types.TEXT_MT_templates.remove(ui.menu_func_templates)
     bpy.types.INFO_MT_file_import.remove(ui.menu_func_import)
     bpy.types.INFO_MT_add.remove(ui.menu_func_add)
diff --git a/render_povray/render.py b/render_povray/render.py
index d36957807d073dff8f120180e5b83b3bb5801455..7e1f0499bf8dc576ed0aa5a922ed87a77b6d5315 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -186,13 +186,17 @@ def safety(name, Level):
 ##############end safety string name material
 ##############################EndSF###########################
 
+csg_list = []
+
 def is_renderable(scene, ob):
-    return (ob.is_visible(scene) and not ob.hide_render)
+    return (ob.is_visible(scene) and not ob.hide_render and ob not in csg_list)
 
 
 def renderable_objects(scene):
     return [ob for ob in bpy.data.objects if is_renderable(scene, ob)]
 
+def no_renderable_objects(scene):
+    return [ob for ob in csg_list]
 
 tabLevel = 0
 unpacked_images=[]
@@ -628,7 +632,7 @@ def write_pov(filename, scene=None, info_callback=None):
                 tabWrite("fade_distance %.6f\n" % (lamp.distance / 2.0))
                 # Area lights have no falloff type, so always use blenders lamp quad equivalent
                 # for those?
-                tabWrite("fade_power %d\n" % 0)
+                tabWrite("fade_power %d\n" % 2)
                 size_x = lamp.size
                 samples_x = lamp.shadow_ray_samples_x
                 if lamp.shape == 'SQUARE':
@@ -1793,7 +1797,7 @@ def write_pov(filename, scene=None, info_callback=None):
 #    objectNames = {}
     DEF_OBJ_NAME = "Default"
 
-    def exportMeshes(scene, sel):
+    def exportMeshes(scene, sel, csg):
 #        obmatslist = []
 #        def hasUniqueMaterial():
 #            # Grab materials attached to object instances ...
@@ -2416,7 +2420,7 @@ def write_pov(filename, scene=None, info_callback=None):
                     tabWrite("#declare %s = plane{ <0,0,1>,1\n"%povdataname)
                     povMatName = "Default_texture"
                     if ob.active_material:
-                         #povMatName = string_strip_hyphen(bpy.path.clean_name(ob.active_material.name))
+                        #povMatName = string_strip_hyphen(bpy.path.clean_name(ob.active_material.name))
                         try:
                             material = ob.active_material
                             writeObjectMaterial(material, ob)
@@ -3277,39 +3281,70 @@ def write_pov(filename, scene=None, info_callback=None):
 
                     bpy.data.meshes.remove(me)
 
-        duplidata_ref = []
-        for ob in sel:
-            #matrix = global_matrix * ob.matrix_world
-            if ob.is_duplicator:
-                tabWrite("\n//--DupliObjects in %s--\n\n"% ob.name)
-                ob.dupli_list_create(scene)
-                dup = ""
-                if ob.is_modified(scene, 'RENDER'):
-                    #modified object always unique so using object name rather than data name
-                    dup = "#declare OB%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
+        if csg:
+            duplidata_ref = []
+            for ob in sel:
+                #matrix = global_matrix * ob.matrix_world
+                if ob.is_duplicator:
+                    tabWrite("\n//--DupliObjects in %s--\n\n"% ob.name)
+                    ob.dupli_list_create(scene)
+                    dup = ""
+                    if ob.is_modified(scene, 'RENDER'):
+                        #modified object always unique so using object name rather than data name
+                        dup = "#declare OB%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
+                    else:
+                        dup = "#declare DATA%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
+                    for eachduplicate in ob.dupli_list:
+                        duplidataname = "OB"+string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name))
+                        dup += ("\tobject {\n\t\tDATA%s\n\t\t%s\t}\n" %(string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name)), MatrixAsPovString(ob.matrix_world.inverted() * eachduplicate.matrix)))
+                        #add object to a list so that it is not rendered for some dupli_types
+                        if ob.dupli_type not in {'GROUP'} and duplidataname not in duplidata_ref:
+                            duplidata_ref.append(duplidataname) #older key [string_strip_hyphen(bpy.path.clean_name("OB"+ob.name))]
+                    dup += "}\n"
+                    ob.dupli_list_clear()
+                    tabWrite(dup)
                 else:
-                    dup = "#declare DATA%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
-                for eachduplicate in ob.dupli_list:
-                    duplidataname = "OB"+string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name))
-                    dup += ("\tobject {\n\t\tDATA%s\n\t\t%s\t}\n" %(string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name)), MatrixAsPovString(ob.matrix_world.inverted() * eachduplicate.matrix)))
-                    #add object to a list so that it is not rendered for some dupli_types
-                    if ob.dupli_type not in {'GROUP'} and duplidataname not in duplidata_ref:
-                        duplidata_ref.append(duplidataname) #older key [string_strip_hyphen(bpy.path.clean_name("OB"+ob.name))]
-                dup += "}\n"
-                ob.dupli_list_clear()
-                tabWrite(dup)
-            else:
-                continue
-        print(duplidata_ref)
-        for data_name, inst in data_ref.items():
-            for ob_name, matrix_str in inst:
-                if ob_name not in duplidata_ref: #.items() for a dictionary
-                    tabWrite("\n//----Blender Object Name:%s----\n" % ob_name)
-                    tabWrite("object { \n")
-                    tabWrite("%s\n" % data_name)
-                    tabWrite("%s\n" % matrix_str)
-                    tabWrite("}\n")
-
+                    continue
+            print(duplidata_ref)
+            for data_name, inst in data_ref.items():
+                for ob_name, matrix_str in inst:
+                    if ob_name not in duplidata_ref: #.items() for a dictionary
+                        tabWrite("\n//----Blender Object Name:%s----\n" % ob_name)
+                        if ob.pov.object_as == '':
+                            tabWrite("object { \n")
+                            tabWrite("%s\n" % data_name)
+                            tabWrite("%s\n" % matrix_str)
+                            tabWrite("}\n")
+                        else:
+                            no_boolean = True
+                            for mod in ob.modifiers:
+                                if mod.type == 'BOOLEAN':
+                                    operation = None
+                                    no_boolean = False
+                                    if mod.operation == 'INTERSECT':
+                                        operation = 'intersection'
+                                    else:
+                                        operation = mod.operation.lower()
+                                    mod_ob_name = string_strip_hyphen(bpy.path.clean_name(mod.object.name))
+                                    mod_matrix = global_matrix * mod.object.matrix_world
+                                    mod_ob_matrix = MatrixAsPovString(mod_matrix)
+                                    tabWrite("%s { \n"%operation)
+                                    tabWrite("object { \n")
+                                    tabWrite("%s\n" % data_name)
+                                    tabWrite("%s\n" % matrix_str)
+                                    tabWrite("}\n")
+                                    tabWrite("object { \n")
+                                    tabWrite("%s\n" % ('DATA'+ mod_ob_name))
+                                    tabWrite("%s\n" % mod_ob_matrix)
+                                    tabWrite("}\n")
+                                    tabWrite("}\n")
+                                    break
+                            if no_boolean:
+                                tabWrite("object { \n")
+                                tabWrite("%s\n" % data_name)
+                                tabWrite("%s\n" % matrix_str)
+                                tabWrite("}\n")
+    
     def exportWorld(world):
         render = scene.render
         camera = scene.camera
@@ -3444,18 +3479,33 @@ def write_pov(filename, scene=None, info_callback=None):
 
         if mist.use_mist:
             tabWrite("fog {\n")
-            tabWrite("distance %.6f\n" % mist.depth)
+            if mist.falloff=='LINEAR':
+                tabWrite("distance %.6f\n" % ((mist.start+mist.depth)*0.368))
+            elif mist.falloff=='QUADRATIC':    # n**2 or squrt(n)?
+                tabWrite("distance %.6f\n" % ((mist.start+mist.depth)**2*0.368))
+            elif mist.falloff=='INVERSE_QUADRATIC':    # n**2 or squrt(n)?
+                tabWrite("distance %.6f\n" % ((mist.start+mist.depth)**2*0.368))                
             tabWrite("color rgbt<%.3g, %.3g, %.3g, %.3g>\n" % \
                      (*world.horizon_color, 1.0 - mist.intensity))
-            #tabWrite("fog_offset %.6f\n" % mist.start)
-            #tabWrite("fog_alt 5\n")
+            #tabWrite("fog_offset %.6f\n" % mist.start) #create a pov property to prepend
+            #tabWrite("fog_alt %.6f\n" % mist.height) #XXX right?
             #tabWrite("turbulence 0.2\n")
             #tabWrite("turb_depth 0.3\n")
-            tabWrite("fog_type 1\n")
+            tabWrite("fog_type 1\n") #type2 for height
             tabWrite("}\n")
         if scene.pov.media_enable:
             tabWrite("media {\n")
-            tabWrite("scattering { 1, rgb <%.4g, %.4g, %.4g>}\n" % scene.pov.media_color[:])
+            tabWrite("scattering { %d, rgb %.12f*<%.4g, %.4g, %.4g>\n" % \
+                     (int(scene.pov.media_scattering_type),
+                     (scene.pov.media_diffusion_scale),                     
+                     *(scene.pov.media_diffusion_color[:])))
+            if scene.pov.media_scattering_type == '5':
+                tabWrite("eccentricity %.3g\n" % scene.pov.media_eccentricity) 
+            tabWrite("}\n") 
+            tabWrite("absorption %.12f*<%.4g, %.4g, %.4g>\n" % \
+                     (scene.pov.media_absorption_scale,
+                     *(scene.pov.media_absorption_color[:]))) 
+            tabWrite("\n")             
             tabWrite("samples %.d\n" % scene.pov.media_samples)
             tabWrite("}\n")
 
@@ -3559,7 +3609,7 @@ def write_pov(filename, scene=None, info_callback=None):
                 file.write(txt.as_string())
                 file.write("\n")
 
-    sel = renderable_objects(scene)
+    #sel = renderable_objects(scene) #removed for booleans
     if comments:
         file.write("//----------------------------------------------\n" \
                    "//--Exported with POV-Ray exporter for Blender--\n" \
@@ -3602,6 +3652,20 @@ def write_pov(filename, scene=None, info_callback=None):
     if comments:
         file.write("\n//--Lamps--\n\n")
 
+    for ob in bpy.data.objects:
+        if ob.type == 'MESH':
+            for mod in ob.modifiers:
+                if mod.type == 'BOOLEAN':
+                    if mod.object not in csg_list:
+                        csg_list.append(mod.object)
+    if csg_list != []:
+        csg = False
+        sel = no_renderable_objects(scene)
+        exportMeshes(scene, sel, csg)
+
+    csg = True
+    sel = renderable_objects(scene)
+
     exportLamps([L for L in sel if (L.type == 'LAMP' and L.pov.object_as != 'RAINBOW')])
 
     if comments:
@@ -3655,7 +3719,7 @@ def write_pov(filename, scene=None, info_callback=None):
     if comments:
         file.write("//--Mesh objects--\n")
 
-    exportMeshes(scene, sel)
+    exportMeshes(scene, sel, csg)
 
     #What follow used to happen here:
     #exportCamera()
@@ -3745,7 +3809,7 @@ def write_pov_ini(scene, filename_ini, filename_log, filename_pov, filename_imag
 
 class PovrayRender(bpy.types.RenderEngine):
     bl_idname = 'POVRAY_RENDER'
-    bl_label = "POV-Ray 3.7"
+    bl_label = "Persitence Of Vision"
     DELAY = 0.5
 
     @staticmethod
@@ -4000,7 +4064,14 @@ class PovrayRender(bpy.types.RenderEngine):
 
             # Start Rendering!
             try:
-                _process = subprocess.Popen([pov_binary, self._temp_file_ini] + extra_args,
+                if sys.platform[:3] != "win" and scene.pov.sdl_window_enable: #segfault on linux == False !!!
+                    env = {'POV_DISPLAY_SCALED': 'off'}
+                    env.update(os.environ)
+                    self._process = subprocess.Popen([pov_binary, self._temp_file_ini],
+                        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+                        env=env)
+                else:
+                    self._process = subprocess.Popen([pov_binary, self._temp_file_ini] + extra_args,
                                                  stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
             except OSError:
                 # TODO, report api
@@ -4397,4 +4468,4 @@ class RunPovTextRender(Operator):
  
         #empty text name property engain
         scene.pov.text_block = ""
-        return {'FINISHED'}    
\ No newline at end of file
+        return {'FINISHED'}
\ No newline at end of file
diff --git a/render_povray/shading.py b/render_povray/shading.py
index 5a37170753f5cdff742815929de858debd9941cd..03a63a9d299c7b784feb74dd8616d6846598f90c 100644
--- a/render_povray/shading.py
+++ b/render_povray/shading.py
@@ -245,13 +245,11 @@ def writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments
         for t in material.texture_slots:
             if t and t.use and t.texture is not None:
                 if (t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE':
-                    validPath=True
-            else:
-                validPath=False
-            if(t and t.use and validPath and
-               (t.use_map_specular or t.use_map_raymir or t.use_map_normal or t.use_map_alpha)):
-                special_texture_found = True
-                continue  # Some texture found
+                    #validPath
+                    if(t and t.use and
+                       (t.use_map_specular or t.use_map_raymir or t.use_map_normal or t.use_map_alpha)):
+                        special_texture_found = True
+                        continue  # Some texture found
 
         if special_texture_found or colored_specular_found:
             # Level=1 Means No specular nor Mirror reflection
@@ -1087,7 +1085,6 @@ def writeTextureInfluence(mater, materialNames, LocalMaterialNames, path_image,
         else:
             if texturesDif and texturesDif.startswith("PAT_"):
                 tabWrite("pigment{%s %s}\n" %(texturesDif, mappingDif))
-                print('XXXMEEEERDE!')
             else:
                 tabWrite("pigment {\n")
                 tabWrite("uv_mapping image_map {\n")
diff --git a/render_povray/ui.py b/render_povray/ui.py
index 3d8a8870ff8fe64c5d857154eb63fa5f0baaca92..58c693983729b45f1c6a66b85ae6554957c057c1 100644
--- a/render_povray/ui.py
+++ b/render_povray/ui.py
@@ -22,6 +22,7 @@ import bpy
 import sys #really import here and in render.py?
 import os #really import here and in render.py?
 from os.path import isfile
+from bl_operators.presets import AddPresetBase
 
 # Use some of the existing buttons.
 from bl_ui import properties_render
@@ -41,6 +42,61 @@ properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
 properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
 del properties_world
 
+class POV_WORLD_MT_presets(bpy.types.Menu):
+    bl_label = "World Presets"
+    preset_subdir = "pov/world"
+    preset_operator = "script.execute_preset"
+    draw = bpy.types.Menu.draw_preset
+
+
+class AddPresetWorld(AddPresetBase, bpy.types.Operator):
+    '''Add a World Preset'''
+    bl_idname = "object.world_preset_add"
+    bl_label = "Add World Preset"
+    preset_menu = "POV_WORLD_MT_presets"
+
+    # variable used for all preset values
+    preset_defines = [
+        "scene = bpy.context.scene"    
+        ]
+
+    # properties to store in the preset
+    preset_values = [
+        "scene.world.use_sky_blend",
+        "scene.world.horizon_color",
+        "scene.world.zenith_color", 
+        "scene.world.ambient_color",
+        "scene.world.mist_settings.use_mist",
+        "scene.world.mist_settings.intensity",
+        "scene.world.mist_settings.depth",        
+        "scene.world.mist_settings.start",
+        "scene.pov.media_enable",
+        "scene.pov.media_scattering_type", 
+        "scene.pov.media_samples",
+        "scene.pov.media_diffusion_scale",
+        "scene.pov.media_diffusion_color",
+        "scene.pov.media_absorption_scale",
+        "scene.pov.media_absorption_color",
+        "scene.pov.media_eccentricity",        
+        ]
+
+    # where to store the preset
+    preset_subdir = "pov/world"
+
+# Draw into an existing panel
+def world_panel_func(self, context):
+    layout = self.layout
+
+    row = layout.row(align=True)
+    row.menu(POV_WORLD_MT_presets.__name__, text=POV_WORLD_MT_presets.bl_label)
+    row.operator(AddPresetWorld.bl_idname, text="", icon='ZOOMIN')
+    row.operator(AddPresetWorld.bl_idname, text="", icon='ZOOMOUT').remove_active = True
+
+
+classes = (
+    POV_WORLD_MT_presets,
+    AddPresetWorld,
+    )  
 
 # Example of wrapping every class 'as is'
 from bl_ui import properties_texture
@@ -453,6 +509,52 @@ class LAMP_PT_POV_lamp(PovLampButtonsPanel, bpy.types.Panel):
 
     draw = properties_data_lamp.DATA_PT_lamp.draw
 
+class POV_LAMP_MT_presets(bpy.types.Menu):
+    bl_label = "Lamp Presets"
+    preset_subdir = "pov/lamp"
+    preset_operator = "script.execute_preset"
+    draw = bpy.types.Menu.draw_preset
+
+
+class AddPresetLamp(AddPresetBase, bpy.types.Operator):
+    '''Add a Lamp Preset'''
+    bl_idname = "object.lamp_preset_add"
+    bl_label = "Add Lamp Preset"
+    preset_menu = "POV_LAMP_MT_presets"
+
+    # variable used for all preset values
+    preset_defines = [
+        "lampdata = bpy.context.object.data"
+        ]
+
+    # properties to store in the preset
+    preset_values = [
+        "lampdata.type",
+        "lampdata.color",      
+        ]
+
+    # where to store the preset
+    preset_subdir = "pov/lamp"
+
+
+
+
+
+# Draw into an existing panel
+def lamp_panel_func(self, context):
+    layout = self.layout
+
+    row = layout.row(align=True)
+    row.menu(POV_LAMP_MT_presets.__name__, text=POV_LAMP_MT_presets.bl_label)
+    row.operator(AddPresetLamp.bl_idname, text="", icon='ZOOMIN')
+    row.operator(AddPresetLamp.bl_idname, text="", icon='ZOOMOUT').remove_active = True
+
+
+classes = (
+    POV_LAMP_MT_presets,
+    AddPresetLamp,
+    )    
+    
 class LAMP_PT_POV_sunsky(PovLampButtonsPanel, bpy.types.Panel):
     bl_label = properties_data_lamp.DATA_PT_sunsky.bl_label
 
@@ -609,7 +711,10 @@ class RENDER_PT_povray_render_settings(RenderButtonsPanel, bpy.types.Panel):
 
         scene = context.scene
         #layout.active = (scene.pov.max_trace_level != 0)
-
+        
+        if sys.platform[:3] != "win":
+            layout.prop(scene.pov, "sdl_window_enable", text="POV-Ray SDL Window")
+            
         col = layout.column()
 
         col.label(text="Global Settings:")
@@ -787,7 +892,71 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
             col.prop(scene.pov, "radio_subsurface")
 
 
-
+            
+            
+            
+class POV_RADIOSITY_MT_presets(bpy.types.Menu):
+    bl_label = "Radiosity Presets"
+    preset_subdir = "pov/radiosity"
+    preset_operator = "script.execute_preset"
+    draw = bpy.types.Menu.draw_preset
+
+
+class AddPresetRadiosity(AddPresetBase, bpy.types.Operator):
+    '''Add a Radiosity Preset'''
+    bl_idname = "scene.radiosity_preset_add"
+    bl_label = "Add Radiosity Preset"
+    preset_menu = "POV_RADIOSITY_MT_presets"
+
+    # variable used for all preset values
+    preset_defines = [
+        "scene = bpy.context.scene"
+        ]
+
+    # properties to store in the preset
+    preset_values = [
+        "scene.pov.radio_display_advanced",    
+        "scene.pov.radio_adc_bailout",
+        "scene.pov.radio_always_sample",
+        "scene.pov.radio_brightness",
+        "scene.pov.radio_count",
+        "scene.pov.radio_error_bound",
+        "scene.pov.radio_gray_threshold",
+        "scene.pov.radio_low_error_factor",
+        "scene.pov.radio_media",
+        "scene.pov.radio_subsurface",
+        "scene.pov.radio_minimum_reuse",
+        "scene.pov.radio_maximum_reuse",
+        "scene.pov.radio_nearest_count",
+        "scene.pov.radio_normal",
+        "scene.pov.radio_recursion_limit",
+        "scene.pov.radio_pretrace_start",
+        "scene.pov.radio_pretrace_end",     
+        ]
+
+    # where to store the preset
+    preset_subdir = "pov/radiosity"
+
+
+
+
+
+# Draw into an existing panel
+def rad_panel_func(self, context):
+    layout = self.layout
+
+    row = layout.row(align=True)
+    row.menu(POV_RADIOSITY_MT_presets.__name__, text=POV_RADIOSITY_MT_presets.bl_label)
+    row.operator(AddPresetRadiosity.bl_idname, text="", icon='ZOOMIN')
+    row.operator(AddPresetRadiosity.bl_idname, text="", icon='ZOOMOUT').remove_active = True
+
+
+classes = (
+    POV_RADIOSITY_MT_presets,
+    AddPresetRadiosity,
+    )
+    
+    
 class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
     bl_label = "Atmosphere Media"
     COMPAT_ENGINES = {'POVRAY_RENDER'}
@@ -804,10 +973,22 @@ class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
 
         layout.active = scene.pov.media_enable
 
-        row = layout.row()
-        row.prop(scene.pov, "media_samples", text="Samples")
-        row.prop(scene.pov, "media_color", text="")
-
+        col = layout.column()
+        col.prop(scene.pov, "media_scattering_type", text="")
+        col = layout.column()
+        col.prop(scene.pov, "media_samples", text="Samples")
+        split = layout.split()        
+        col = split.column(align=True)
+        col.label(text="Scattering:")
+        col.prop(scene.pov, "media_diffusion_scale")
+        col.prop(scene.pov, "media_diffusion_color", text="")
+        col = split.column(align=True)
+        col.label(text="Absorption:")
+        col.prop(scene.pov, "media_absorption_scale")        
+        col.prop(scene.pov, "media_absorption_color", text="")
+        if scene.pov.media_scattering_type == '5':
+            col = layout.column()
+            col.prop(scene.pov, "media_eccentricity", text="Eccentricity")
 ##class RENDER_PT_povray_baking(RenderButtonsPanel, bpy.types.Panel):
 ##    bl_label = "Baking"
 ##    COMPAT_ENGINES = {'POVRAY_RENDER'}
@@ -824,7 +1005,7 @@ class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
 ##        rd = scene.render
 ##
 ##        layout.active = scene.pov.baking_enable
-'''XXX WIP preparing for CSG
+
 class MODIFIERS_PT_povray_modifiers(ModifierButtonsPanel, bpy.types.Panel):
     bl_label = "POV-Ray"
     COMPAT_ENGINES = {'POVRAY_RENDER'}
@@ -853,7 +1034,7 @@ class MODIFIERS_PT_povray_modifiers(ModifierButtonsPanel, bpy.types.Panel):
                         col = layout.column()
                         # Inside Vector for CSG
                         col.prop(ob.pov, "inside_vector")
-'''        
+       
 
 class MATERIAL_PT_povray_activate_node(MaterialButtonsPanel, bpy.types.Panel):
     bl_label = "Activate Node Settings"