diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index a5a152d2a58546d90fc271c7efc2e6fbb5729e03..3b5980f0d3ffac9f1b008a16e6f9d007e872562b 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -23,7 +23,7 @@ bl_info = {
     "author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, "
               "Constantin Rahn, Bastien Montagne, Leonid Desyatkov",
     "version": (0, 1, 0),
-    "blender": (2, 79, 0),
+    "blender": (2, 80, 0),
     "location": "Render > Engine > POV-Ray 3.7",
     "description": "Basic POV-Ray 3.7 integration for blender",
     "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
@@ -40,6 +40,7 @@ if "bpy" in locals():
 
 else:
     import bpy
+    from bpy.utils import register_class
     #import addon_utils # To use some other addons
     import nodeitems_utils #for Nodes
     from nodeitems_utils import NodeCategory, NodeItem #for Nodes
@@ -2224,8 +2225,64 @@ class RenderPovSettingsCamera(PropertyGroup):
                         "it points at. camera {} expected",
             default="")
 
+###############################################################################
+# World POV properties.
+###############################################################################
+class RenderPovSettingsWorld(PropertyGroup):
+    use_sky_blend: BoolProperty(
+            name="Blend Sky", description="Render background with natural progression from horizon to zenith",
+            default=False)
+    use_sky_paper: BoolProperty(
+            name="Blend Sky", description="Flatten blend or texture coordinates",
+            default=False)
+    use_sky_real: BoolProperty(
+            name="Blend Sky", description="Render background with a real horizon, relative to the camera angle",
+            default=False)
+            
+    horizon_color: FloatVectorProperty(
+            name="Horizon Color",
+            description="Color at the horizon",
+            precision=4, step=0.01, min=0, soft_max=1,
+            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
+    )
+    zenith_color: FloatVectorProperty(
+            name="Zenith Color",
+            description="Color at the zenith",
+            precision=4, step=0.01, min=0, soft_max=1,
+            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
+    )
+    ambient_color: FloatVectorProperty(
+            name="Ambient Color",
+            description="Ambient color of the world",
+            precision=4, step=0.01, min=0, soft_max=1,
+            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
+    )
+'''
+class WORLD_PT_POV_world(WorldButtonsPanel, Panel):
+    bl_label = "World"
+    #COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+    def draw(self, context):
+        layout = self.layout
+
+        world = context.world
 
+        row = layout.row()
+        row.prop(world, "use_sky_paper")
+        row.prop(world, "use_sky_blend")
+        row.prop(world, "use_sky_real")
 
+        row = layout.row()
+        row.column().prop(world, "horizon_color")
+        col = row.column()
+        col.prop(world, "zenith_color")
+        col.active = world.use_sky_blend
+        row.column().prop(world, "ambient_color")
+
+        row = layout.row()
+        row.prop(world, "exposure")
+        row.prop(world, "color_range")
+'''
 ###############################################################################
 # Text POV properties.
 ###############################################################################
@@ -2273,19 +2330,35 @@ class PovrayPreferences(AddonPreferences):
 
 
 def register():
-    bpy.utils.register_module(__name__)
-    bpy.types.VIEW3D_MT_add.prepend(ui.menu_func_add)
-    bpy.types.TOPBAR_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.LIGHT_PT_POV_light.prepend(ui.light_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)
-
-    #bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
 
+    #bpy.utils.register_module(__name__) #DEPRECATED Now imported from bpy.utils import register_class
+    
+    render.register()
+    ui.register()
+    primitives.register()
+    nodes.register()
+    
+    register_class(PovrayPreferences)
+    register_class(RenderPovSettingsCamera)
+    register_class(RenderPovSettingsWorld)
+    register_class(RenderPovSettingsMaterial)
+    register_class(RenderPovSettingsObject)
+    register_class(RenderPovSettingsScene)
+    register_class(RenderPovSettingsText)
+    register_class(RenderPovSettingsTexture)
+    '''    
+        bpy.types.VIEW3D_MT_add.prepend(ui.menu_func_add)
+        bpy.types.TOPBAR_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.LIGHT_PT_POV_light.prepend(ui.light_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)
+
+        #bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
+    '''
     bpy.types.NODE_HT_header.append(ui.menu_func_nodes)
     nodeitems_utils.register_node_categories("POVRAYNODES", node_categories)
     bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
@@ -2294,6 +2367,7 @@ def register():
     bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
     bpy.types.Object.pov = PointerProperty(type=RenderPovSettingsObject)
     bpy.types.Camera.pov = PointerProperty(type=RenderPovSettingsCamera)
+    bpy.types.World.pov = PointerProperty(type=RenderPovSettingsWorld)
     bpy.types.Text.pov = PointerProperty(type=RenderPovSettingsText)
 
 
@@ -2305,19 +2379,21 @@ def unregister():
     del bpy.types.Texture.pov
     del bpy.types.Object.pov
     del bpy.types.Camera.pov
+    del bpy.types.World.pov    
     del bpy.types.Text.pov
     nodeitems_utils.unregister_node_categories("POVRAYNODES")
     bpy.types.NODE_HT_header.remove(ui.menu_func_nodes)
-
+    '''
     #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.WORLD_PT_POV_world.remove(ui.world_panel_func)
     bpy.types.LIGHT_PT_POV_light.remove(ui.light_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.TOPBAR_MT_file_import.remove(ui.menu_func_import)
     bpy.types.VIEW3D_MT_add.remove(ui.menu_func_add)
-    bpy.utils.unregister_module(__name__)
+    '''
+    #bpy.utils.unregister_module(__name__)
 
 
 if __name__ == "__main__":
diff --git a/render_povray/nodes.py b/render_povray/nodes.py
index ed31df902d1ea78ae6433692fe2a2c4b5d37e2fb..61e59c162d293df32d599f651dc84c9b33ed7639 100644
--- a/render_povray/nodes.py
+++ b/render_povray/nodes.py
@@ -20,9 +20,8 @@
 
 import bpy
 
+from bpy.utils import register_class
 from bpy.types import Node, ShaderNodeTree, CompositorNodeTree, TextureNodeTree#, NodeSocket
-
-
 from bpy.props import (
         StringProperty,
         BoolProperty,
@@ -1305,3 +1304,59 @@ class UpdatePreviewKey(bpy.types.Operator):
         map = conf.keymaps[mapstr]
         map.keymap_items.new("node.updatepreview",type='RIGHTMOUSE',value="PRESS")
         return {'FINISHED'}
+
+classes = (
+    ObjectNodeTree,
+    PovrayOutputNode,
+    PovrayTextureNode,
+    PovrayFinishNode,
+    PovrayDiffuseNode,
+    PovrayPhongNode,
+    PovraySpecularNode,
+    PovrayMirrorNode,
+    PovrayAmbientNode,
+    PovrayIridescenceNode,
+    PovraySubsurfaceNode,
+    PovrayMappingNode,
+    PovrayMultiplyNode,
+    PovrayTransformNode,
+    PovrayValueNode,
+    PovrayModifierNode,
+    PovrayPigmentNode,
+    PovrayColorImageNode,
+    PovrayBumpMapNode,
+    PovrayImagePatternNode,
+    ShaderPatternNode,
+    ShaderTextureMapNode,
+    ShaderNormalMapNode,
+    ShaderNormalMapEntryNode,
+    IsoPropsNode,
+    PovrayFogNode,
+    PovraySlopeNode,
+    TextureOutputNode,
+    NODE_OT_iso_add,
+    NODE_OT_map_create,
+    NODE_OT_povray_node_texture_map_add,
+    NODE_OT_povray_node_output_add,
+    NODE_OT_povray_node_layered_add,
+    NODE_OT_povray_input_add,
+    NODE_OT_povray_input_remove,
+    NODE_OT_povray_image_open,
+    PovrayPatternNode,
+    UpdatePreviewMaterial,
+    UpdatePreviewKey,
+)
+
+
+def register():
+    #from bpy.utils import register_class
+
+    for cls in classes:
+        register_class(cls)
+
+
+def unregister():
+    from bpy.utils import unregister_class
+
+    for cls in classes:
+        unregister_class(cls)
\ No newline at end of file
diff --git a/render_povray/primitives.py b/render_povray/primitives.py
index ffdd6cd968e87e4115bbb569db341e3de39a7b1e..f9d3cd3992ead16bdf47f5af36ca408638c1fe10 100644
--- a/render_povray/primitives.py
+++ b/render_povray/primitives.py
@@ -24,6 +24,7 @@ import bpy
 import os.path
 from bpy_extras.io_utils import ImportHelper
 from bpy_extras import object_utils
+from bpy.utils import register_class
 from math import atan, pi, degrees, sqrt, cos, sin
 
 
@@ -1915,3 +1916,47 @@ class ImportPOV(bpy.types.Operator, ImportHelper):
                 # track.up_axis = "UP_Y"
                 # obj.location = (0,0,0)
         return {'FINISHED'}
+
+classes = (
+    POVRAY_OT_lathe_add,
+    POVRAY_OT_superellipsoid_add,
+    POVRAY_OT_superellipsoid_update,
+    POVRAY_OT_supertorus_add,
+    POVRAY_OT_supertorus_update,
+    POVRAY_OT_loft_add,
+    POVRAY_OT_plane_add,
+    POVRAY_OT_box_add,
+    POVRAY_OT_cylinder_add,
+    POVRAY_OT_cylinder_update,
+    POVRAY_OT_sphere_add,
+    POVRAY_OT_sphere_update,
+    POVRAY_OT_cone_add,
+    POVRAY_OT_cone_update,
+    POVRAY_OT_isosurface_box_add,
+    POVRAY_OT_isosurface_sphere_add,
+    POVRAY_OT_sphere_sweep_add,
+    POVRAY_OT_blob_add,
+    POVRAY_OT_rainbow_add,
+    POVRAY_OT_height_field_add,
+    POVRAY_OT_torus_add,
+    POVRAY_OT_torus_update,
+    POVRAY_OT_prism_add,
+    POVRAY_OT_parametric_add,
+    POVRAY_OT_parametric_update,
+    POVRAY_OT_shape_polygon_to_circle_add,
+    ImportPOV,
+)
+
+
+def register():
+    #from bpy.utils import register_class
+
+    for cls in classes:
+        register_class(cls)
+
+
+def unregister():
+    from bpy.utils import unregister_class
+
+    for cls in classes:
+        unregister_class(cls)
diff --git a/render_povray/render.py b/render_povray/render.py
index 2724b4af4da652efc044a104ad4971a4a0b2389f..126e6d271f16577732cfef7aa9178490537d0dc1 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -31,6 +31,7 @@ import subprocess#
 import tempfile #generate temporary files with random names
 from bpy.types import(Operator)
 from imghdr import what #imghdr is a python lib to identify image file types
+from bpy.utils import register_class
 
 from . import df3 # for smoke rendering
 from . import shading # for BI POV haders emulation
@@ -4400,3 +4401,24 @@ class RunPovTextRender(Operator):
         #empty text name property engain
         scene.pov.text_block = ""
         return {'FINISHED'}
+
+        
+classes = (
+    PovrayRender,
+    RenderPovTexturePreview,
+    RunPovTextRender,
+)
+
+
+def register():
+    #from bpy.utils import register_class
+
+    for cls in classes:
+        register_class(cls)
+
+
+def unregister():
+    from bpy.utils import unregister_class
+
+    for cls in classes:
+        unregister_class(cls)
diff --git a/render_povray/ui.py b/render_povray/ui.py
index 28cb81f481680ea7fda36cbdfdca4d3e913a82d2..12db23f6833db77fc531eae1896050b2a851b8ae 100644
--- a/render_povray/ui.py
+++ b/render_povray/ui.py
@@ -23,23 +23,43 @@ 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
+from bpy.utils import register_class
+
+# Example of wrapping every class 'as is'
+from bl_ui import properties_output
+for member in dir(properties_output):
+    subclass = getattr(properties_output, member)
+    try:
+        subclass.COMPAT_ENGINES.add('POVRAY')
+    except:
+        pass
+del properties_output
+
+from bl_ui import properties_view_layer
+for member in dir(properties_view_layer):
+    subclass = getattr(properties_view_layer, member)
+    try:
+        subclass.COMPAT_ENGINES.add('POVRAY')
+    except:
+        pass
+del properties_view_layer
 
 # Use some of the existing buttons.
 from bl_ui import properties_render
-properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER')
+#DEPRECATED#properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER')
+#DEPRECATED#properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER')
 # properties_render.RENDER_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_shading.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER')
+#TORECREATE##DEPRECATED#properties_render.RENDER_PT_shading.COMPAT_ENGINES.add('POVRAY_RENDER')
+#DEPRECATED#properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER')
 del properties_render
 
 
 # Use only a subset of the world panels
 from bl_ui import properties_world
-properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER')
+#TORECREATE##DEPRECATED#properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER')
 properties_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
+#TORECREATE##DEPRECATED#properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
+#TORECREATE##DEPRECATED#properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
 del properties_world
 
 class POV_WORLD_MT_presets(bpy.types.Menu):
@@ -83,15 +103,6 @@ class AddPresetWorld(AddPresetBase, bpy.types.Operator):
     # 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,
@@ -543,15 +554,15 @@ def light_panel_func(self, context):
 
     row = layout.row(align=True)
     row.menu(POV_LIGHT_MT_presets.__name__, text=POV_LIGHT_MT_presets.bl_label)
-    row.operator(AddPresetLamp.bl_idname, text="", icon='ZOOMIN')
-    row.operator(AddPresetLamp.bl_idname, text="", icon='ZOOMOUT').remove_active = True
+    row.operator(AddPresetLamp.bl_idname, text="", icon='ADD')
+    row.operator(AddPresetLamp.bl_idname, text="", icon='REMOVE').remove_active = True
 
 
 classes = (
     POV_LIGHT_MT_presets,
     AddPresetLamp,
     )
-
+'''#TORECREATE##DEPRECATED#
 class LIGHT_PT_POV_sunsky(PovLampButtonsPanel, bpy.types.Panel):
     bl_label = properties_data_light.DATA_PT_sunsky.bl_label
 
@@ -563,11 +574,13 @@ class LIGHT_PT_POV_sunsky(PovLampButtonsPanel, bpy.types.Panel):
 
     draw = properties_data_light.DATA_PT_sunsky.draw
 
+    
 class LIGHT_PT_POV_shadow(PovLampButtonsPanel, bpy.types.Panel):
     bl_label = properties_data_light.DATA_PT_shadow.bl_label
 
     draw = properties_data_light.DATA_PT_shadow.draw
 
+'''
 class LIGHT_PT_POV_area(PovLampButtonsPanel, bpy.types.Panel):
     bl_label = properties_data_light.DATA_PT_area.bl_label
 
@@ -644,6 +657,36 @@ class OBJECT_PT_povray_obj_rainbow(PovLampButtonsPanel, bpy.types.Panel):
 del properties_data_light
 ###############################################################################
 
+class WORLD_PT_POV_world(WorldButtonsPanel, bpy.types.Panel):
+    bl_label = "World"
+    COMPAT_ENGINES = {'POVRAY_RENDER'}
+
+    def draw(self, context):
+        layout = self.layout
+
+        world = context.world
+
+        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='ADD')
+        row.operator(AddPresetWorld.bl_idname, text="", icon='REMOVE').remove_active = True
+        
+        row = layout.row()        
+        row.prop(world, "use_sky_paper")
+        row.prop(world, "use_sky_blend")
+        row.prop(world, "use_sky_real")
+
+        row = layout.row()
+        row.column().prop(world, "horizon_color")
+        col = row.column()
+        col.prop(world, "zenith_color")
+        col.active = world.use_sky_blend
+        row.column().prop(world, "ambient_color")
+
+        #row = layout.row()
+        #row.prop(world, "exposure")
+        #row.prop(world, "color_range")
+
 class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
     bl_label = "INI Options"
     bl_options = {'DEFAULT_CLOSED'}
@@ -844,9 +887,9 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
     def draw_header(self, context):
         scene = context.scene
         if scene.pov.radio_enable:
-            self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIO')
+            self.layout.prop(scene.pov, "radio_enable", text="", icon='OUTLINER_OB_LIGHTPROBE')
         else:
-            self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIOBUT_OFF')
+            self.layout.prop(scene.pov, "radio_enable", text="", icon='LIGHTPROBE_CUBEMAP')
 
     def draw(self, context):
         layout = self.layout
@@ -944,8 +987,8 @@ def rad_panel_func(self, context):
 
     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
+    row.operator(AddPresetRadiosity.bl_idname, text="", icon='ADD')
+    row.operator(AddPresetRadiosity.bl_idname, text="", icon='REMOVE').remove_active = True
 
 
 classes = (
@@ -2170,3 +2213,104 @@ class TEXT_MT_templates_pov(bpy.types.Menu):
 def menu_func_templates(self, context):
     # Do not depend on POV-Ray being active renderer here...
     self.layout.menu("TEXT_MT_templates_pov")
+
+
+classes = (
+    #POV_WORLD_MT_presets,
+    #AddPresetWorld,
+    #RenderButtonsPanel,
+    #ModifierButtonsPanel,
+    #MaterialButtonsPanel,
+    #TextureButtonsPanel,
+    #ObjectButtonsPanel,
+    #CameraDataButtonsPanel,
+    #WorldButtonsPanel,
+    #TextButtonsPanel,
+    #PovDataButtonsPanel,
+    DATA_PT_POV_normals,
+    DATA_PT_POV_texture_space,
+    DATA_PT_POV_vertex_groups,
+    DATA_PT_POV_shape_keys,
+    DATA_PT_POV_uv_texture,
+    DATA_PT_POV_vertex_colors,
+    DATA_PT_POV_customdata,
+    #PovLampButtonsPanel,
+    LIGHT_PT_POV_preview,
+    LIGHT_PT_POV_light,
+    POV_LIGHT_MT_presets,
+    AddPresetLamp,
+    OBJECT_PT_povray_obj_rainbow,
+    RENDER_PT_povray_export_settings,
+    RENDER_PT_povray_render_settings,
+    RENDER_PT_povray_photons,
+    RENDER_PT_povray_antialias,
+    RENDER_PT_povray_radiosity,
+    POV_RADIOSITY_MT_presets,
+    AddPresetRadiosity,
+    RENDER_PT_povray_media,
+    MODIFIERS_PT_povray_modifiers,
+    MATERIAL_PT_povray_activate_node,
+    MATERIAL_PT_povray_active_node,
+    MATERIAL_PT_povray_reflection,
+    MATERIAL_PT_povray_fade_color,
+    MATERIAL_PT_povray_caustics,
+    MATERIAL_PT_povray_replacement_text,
+    TEXTURE_PT_povray_type,
+    TEXTURE_PT_povray_preview,
+    TEXTURE_PT_povray_parameters,
+    TEXTURE_PT_povray_tex_gamma,
+    OBJECT_PT_povray_obj_parameters,
+    OBJECT_PT_povray_obj_sphere,
+    OBJECT_PT_povray_obj_cylinder,
+    OBJECT_PT_povray_obj_cone,
+    OBJECT_PT_povray_obj_superellipsoid,
+    OBJECT_PT_povray_obj_torus,
+    OBJECT_PT_povray_obj_supertorus,
+    OBJECT_PT_povray_obj_parametric,
+    OBJECT_PT_povray_replacement_text,
+    POVRAY_MT_primitives_add_menu,
+    BasicShapesMenu,
+    ImportMenu,
+    NodeMapCreateMenu,
+    CAMERA_PT_povray_cam_dof,
+    CAMERA_PT_povray_cam_nor,
+    CAMERA_PT_povray_replacement_text,
+    TEXT_OT_povray_insert,
+    TEXT_MT_insert,
+    TEXT_PT_povray_custom_code,
+    TEXT_MT_templates_pov,
+)
+
+
+def register():
+    #from bpy.utils import register_class
+
+    for cls in classes:
+        register_class(cls)
+        
+    bpy.types.VIEW3D_MT_add.prepend(menu_func_add)
+    bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
+    bpy.types.TEXT_MT_templates.append(menu_func_templates)
+    bpy.types.RENDER_PT_povray_radiosity.prepend(rad_panel_func)
+    bpy.types.LIGHT_PT_POV_light.prepend(light_panel_func)
+    #bpy.types.WORLD_PT_POV_world.prepend(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)
+
+    #bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
+
+def unregister():
+    #from bpy.utils import unregister_class
+
+    for cls in classes:
+        unregister_class(cls)
+        
+    #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_POV_world.remove(world_panel_func)
+    bpy.types.LIGHT_PT_POV_light.remove(light_panel_func)
+    bpy.types.RENDER_PT_povray_radiosity.remove(rad_panel_func)
+    bpy.types.TEXT_MT_templates.remove(menu_func_templates)
+    bpy.types.TOPBAR_MT_file_import.remove(menu_func_import)
+    bpy.types.VIEW3D_MT_add.remove(menu_func_add)
\ No newline at end of file