diff --git a/io_coat3D/coat.py b/io_coat3D/coat.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc3cb74785c3739dceacfd509af132117544bff1
--- /dev/null
+++ b/io_coat3D/coat.py
@@ -0,0 +1,626 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+
+import bpy
+from bpy.props import *
+from io_coat3D import tex
+import os
+
+
+bpy.coat3D = dict()
+bpy.coat3D['active_coat'] = ''
+bpy.coat3D['status'] = 0
+def set_exchange_folder():
+    platform = os.sys.platform
+    coat3D = bpy.context.scene.coat3D
+    Blender_export = ""
+
+    if(platform == 'win32'):
+        exchange = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3D-CoatV4' + os.sep +'Exchange'
+        if not(os.path.isdir(exchange)):
+            exchange = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3D-CoatV3' + os.sep +'Exchange'
+    else:
+        exchange = os.path.expanduser("~") + os.sep + '3D-CoatV4' + os.sep + 'Exchange'
+        if not(os.path.isdir(exchange)):
+            exchange = os.path.expanduser("~") + os.sep + '3D-CoatV3' + os.sep + 'Exchange'
+    if(not(os.path.isdir(exchange))):
+        exchange = coat3D.exchangedir
+
+    if(os.path.isdir(exchange)):
+        bpy.coat3D['status'] = 1
+        if(platform == 'win32'):
+            exchange_path = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender' + os.sep + 'Exchange_folder.txt'
+            applink_folder = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender'
+            if(not(os.path.isdir(applink_folder))):
+                os.makedirs(applink_folder)
+        else:
+            exchange_path = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender' + os.sep + 'Exchange_folder.txt'
+            applink_folder = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender'
+            if(not(os.path.isdir(applink_folder))):
+                os.makedirs(applink_folder)
+        file = open(exchange_path, "w")
+        file.write("%s"%(coat3D.exchangedir))
+        file.close()
+
+    else:
+        if(platform == 'win32'):
+            exchange_path = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender' + os.sep + 'Exchange_folder.txt'
+        else:
+            exchange_path = os.path.expanduser("~") + os.sep + '3DC2Blender' + os.sep + 'Exchange_folder.txt'
+        if(os.path.isfile(exchange_path)):
+            ex_path =''
+
+            ex_pathh = open(exchange_path)
+            for line in ex_pathh:
+                ex_path = line
+                break
+            ex_pathh.close()
+
+            if(os.path.isdir(ex_path) and ex_path.rfind('Exchange') >= 0):
+                exchange = ex_path
+                bpy.coat3D['status'] = 1
+            else:
+                bpy.coat3D['status'] = 0
+        else:
+            bpy.coat3D['status'] = 0
+    if(bpy.coat3D['status'] == 1):
+        Blender_folder = ("%s%sBlender"%(exchange,os.sep))
+        Blender_export = Blender_folder
+        path3b_now = exchange
+        path3b_now += ('last_saved_3b_file.txt')
+        Blender_export += ('%sexport.txt'%(os.sep))
+
+        if(not(os.path.isdir(Blender_folder))):
+            os.makedirs(Blender_folder)
+            Blender_folder = os.path.join(Blender_folder,"run.txt")
+            file = open(Blender_folder, "w")
+            file.close()
+    return exchange
+
+def set_working_folders():
+    platform = os.sys.platform
+    coat3D = bpy.context.scene.coat3D
+    if(platform == 'win32'):
+        folder_objects = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender' + os.sep + 'Objects'
+        folder_textures = os.path.expanduser("~") + os.sep + 'Documents' + os.sep + '3DC2Blender' + os.sep + 'Textures' + os.sep
+        if(not(os.path.isdir(folder_objects))):
+            os.makedirs(folder_objects)
+        if(not(os.path.isdir(folder_textures))):
+            os.makedirs(folder_textures)
+    else:
+        folder_objects = os.path.expanduser("~") + os.sep + '3DC2Blender' + os.sep + 'Objects'
+        folder_textures = os.path.expanduser("~") + os.sep + '3DC2Blender' + os.sep + 'Textures' + os.sep
+        if(not(os.path.isdir(folder_objects))):
+            os.makedirs(folder_objects)
+        if(not(os.path.isdir(folder_textures))):
+            os.makedirs(folder_textures)
+
+
+    return folder_objects,folder_textures
+
+class ObjectButtonsPanel():
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_context = "object"
+
+class SCENE_PT_Main(ObjectButtonsPanel,bpy.types.Panel):
+    bl_label = "3D-Coat Applink"
+    bl_space_type = "PROPERTIES"
+    bl_region_type = "WINDOW"
+    bl_context = "scene"
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        me = context.scene.objects
+        mat_list = []
+        import_no = 0
+        coat = bpy.coat3D
+        coat3D = bpy.context.scene.coat3D
+        if(bpy.context.scene.objects.active):
+            coa = bpy.context.scene.objects.active.coat3D
+
+
+        if(bpy.coat3D['status'] == 0 and not(os.path.isdir(coat3D.exchangedir))):
+            bpy.coat3D['active_coat'] = set_exchange_folder()
+            row = layout.row()
+            row.label(text="Applink didn't find your 3d-Coat/Excahnge folder.")
+            row = layout.row()
+            row.label("Please select it before using Applink.")
+            row = layout.row()
+            row.prop(coat3D,"exchangedir",text="")
+
+        else:
+
+
+            #Here you add your GUI
+            row = layout.row()
+            row.prop(coat3D,"type",text = "")
+            row = layout.row()
+            colL = row.column()
+            colR = row.column()
+
+            colR.operator("export_applink.pilgway_3d_coat", text="Transfer")
+
+            colL.operator("import_applink.pilgway_3d_coat", text="Update")
+
+
+
+
+
+
+
+
+
+
+class SCENE_OT_export(bpy.types.Operator):
+    bl_idname = "export_applink.pilgway_3d_coat"
+    bl_label = "Export your custom property"
+    bl_description = "Export your custom property"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        checkname = ''
+        coat3D = bpy.context.scene.coat3D
+        scene = context.scene
+        activeobj = bpy.context.active_object.name
+        obj = scene.objects[activeobj]
+        coa = bpy.context.scene.objects.active.coat3D
+        coat3D.exchangedir = set_exchange_folder()
+        export_ok = False
+
+        folder_objects,folder_textures = set_working_folders()
+
+        if(coat3D.exchange_found == False):
+            return {'FINISHED'}
+
+        if(bpy.context.selected_objects == []):
+            return {'FINISHED'}
+        else:
+            for objec in bpy.context.selected_objects:
+                if objec.type == 'MESH':
+                    export_ok = True
+            if(export_ok == False):
+                return {'FINISHED'}
+
+        importfile = coat3D.exchangedir
+        texturefile = coat3D.exchangedir
+        importfile += ('%simport.txt'%(os.sep))
+        texturefile += ('%stextures.txt'%(os.sep))
+
+        looking = True
+        object_index = 0
+        if(coa.applink_name and os.path.isfile(coa.applink_name)):
+            checkname = coa.applink_name
+
+        else:
+            while(looking == True):
+                checkname = folder_objects + os.sep + activeobj
+                checkname = ("%s%.2d.obj"%(checkname,object_index))
+                if(os.path.isfile(checkname)):
+                    object_index += 1
+                else:
+                    looking = False
+                    coa.applink_name = checkname
+
+
+        coat3D.cursor_loc = obj.location
+        coat3D.cursor_orginal = bpy.context.scene.cursor_location
+
+
+
+        coa.loc = obj.location
+        coa.rot = obj.rotation_euler
+        coa.sca = obj.scale
+        coa.dime = obj.dimensions
+
+        obj.location = (0,0,0)
+        obj.rotation_euler = (0,0,0)
+        bpy.ops.object.transform_apply(scale=True)
+
+        bpy.ops.export_scene.obj(filepath=coa.applink_name,use_selection=True,
+        use_mesh_modifiers=False,use_blen_objects=True, use_materials = True,
+        keep_vertex_order = True,axis_forward='-Z',axis_up='Y')
+
+        obj.location = coa.loc
+        obj.rotation_euler = coa.rot
+
+
+        bpy.context.scene.cursor_location = coat3D.cursor_loc
+        bpy.context.scene.cursor_location = coat3D.cursor_orginal
+
+        file = open(importfile, "w")
+        file.write("%s"%(checkname))
+        file.write("\n%s"%(checkname))
+        file.write("\n[%s]"%(coat3D.type))
+        file.write("\n[TexOutput:%s]"%(folder_textures))
+        file.close()
+
+        coa.objecttime = str(os.path.getmtime(coa.applink_name))
+
+
+
+        return {'FINISHED'}
+
+class SCENE_OT_import(bpy.types.Operator):
+    bl_idname = "import_applink.pilgway_3d_coat"
+    bl_label = "import your custom property"
+    bl_description = "import your custom property"
+    bl_options = {'UNDO'}
+
+    def invoke(self, context, event):
+        scene = context.scene
+        coat3D = bpy.context.scene.coat3D
+        coat = bpy.coat3D
+        test = bpy.context.selected_objects
+        act_first = bpy.context.scene.objects.active
+        bpy.context.scene.game_settings.material_mode = 'GLSL'
+        coat3D.exchangedir = set_exchange_folder()
+
+        folder_objects,folder_textures = set_working_folders()
+
+        Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
+        Blender_export = Blender_folder
+        path3b_now = coat3D.exchangedir
+        path3b_now += ('last_saved_3b_file.txt')
+        Blender_export += ('%sexport.txt'%(os.sep))
+        new_applink_name = 'False'
+        new_object = False
+        if(os.path.isfile(Blender_export)):
+            obj_pathh = open(Blender_export)
+            new_object = True
+            for line in obj_pathh:
+                new_applink_name = line
+                break
+            obj_pathh.close()
+
+            for scene_objects in bpy.context.scene.objects:
+                if(scene_objects.type == 'MESH'):
+                    if(scene_objects.coat3D.applink_name == new_applink_name):
+                        new_object = False
+
+        for act_name in test:
+            coa = act_name.coat3D
+            path_object = coa.applink_name
+            if act_name.type == 'MESH' and os.path.isfile(path_object):
+                multires_on = False
+                activeobj = act_name.name
+                mat_list = []
+                scene.objects[activeobj].select = True
+                objekti = scene.objects[activeobj]
+                coat3D.loca = objekti.location
+                coat3D.rota = objekti.rotation_euler
+                coat3D.dime = objekti.scale
+
+
+
+                #See if there is multres modifier.
+                for modifiers in objekti.modifiers:
+                    if modifiers.type == 'MULTIRES' and (modifiers.total_levels > 0):
+                        if(not(coat3D.importlevel)):
+                            bpy.ops.object.multires_external_pack()
+                            multires = coat3D.exchangedir
+                            multires += ('%stemp.btx'%(os.sep))
+                            bpy.ops.object.multires_external_save(filepath=multires)
+                            #bpy.ops.object.multires_external_pack()
+                        multires_on = True
+                        multires_name = modifiers.name
+                        break
+
+                exportfile = coat3D.exchangedir
+                path3b_n = coat3D.exchangedir
+                path3b_n += ('last_saved_3b_file.txt')
+                exportfile += ('%sexport.txt'%(os.sep))
+                if(os.path.isfile(exportfile)):
+                    export_file = open(exportfile)
+                    for line in export_file:
+                        if line.rfind('.3b'):
+                            objekti.coat3D.coatpath = line
+                            coat['active_coat'] = line
+                    export_file.close()
+                    os.remove(exportfile)
+
+                if(len(objekti.material_slots) == 0):
+                    delete_material = False
+                else:
+                    delete_material = True
+
+
+                if(not(objekti.active_material) and objekti.material_slots):
+                    act_mat_index = objekti.active_material_index
+                    materials_old = bpy.data.materials.keys()
+                    bpy.ops.material.new()
+                    materials_new = bpy.data.materials.keys()
+                    new_ma = list(set(materials_new).difference(set(materials_old)))
+                    new_mat = new_ma[0]
+                    ki = bpy.data.materials[new_mat]
+                    objekti.material_slots[act_mat_index].material = ki
+
+
+
+                if(os.path.isfile(path_object) and (coa.objecttime != str(os.path.getmtime(path_object)))):
+
+                    if(objekti.material_slots):
+                        act_mat_index = objekti.active_material_index
+                        for obj_mat in objekti.material_slots:
+                            mat_list.append(obj_mat.material)
+
+                    coa.dime = objekti.dimensions
+                    coa.objecttime = str(os.path.getmtime(path_object))
+                    mtl = coa.applink_name
+                    mtl = mtl.replace('.obj','.mtl')
+                    if(os.path.isfile(mtl)):
+                        os.remove(mtl)
+
+                    bpy.ops.import_scene.obj(filepath=path_object,axis_forward='-Z',axis_up='Y',use_image_search=False)
+                    obj_proxy = scene.objects[0]
+                    bpy.ops.object.select_all(action='TOGGLE')
+                    obj_proxy.select = True
+
+
+                    bpy.ops.object.transform_apply(rotation=True)
+                    proxy_mat = obj_proxy.material_slots[0].material
+                    if(delete_material):
+                        while(list(obj_proxy.data.materials) != []):
+                            proxy_mat = obj_proxy.material_slots[0].material
+                            obj_proxy.data.materials.pop(0,1)
+                            proxy_mat.user_clear()
+                            bpy.data.materials.remove(proxy_mat)
+                    bpy.ops.object.select_all(action='TOGGLE')
+
+                    if(coat3D.importlevel):
+                        obj_proxy.select = True
+                        obj_proxy.modifiers.new(name='temp',type='MULTIRES')
+                        objekti.select = True
+                        bpy.ops.object.multires_reshape(modifier=multires_name)
+                        bpy.ops.object.select_all(action='TOGGLE')
+                        multires_on = False
+                    else:
+
+                        scene.objects.active = obj_proxy
+
+                        obj_data = objekti.data.id_data
+                        objekti.data = obj_proxy.data.id_data
+                        if(bpy.data.meshes[obj_data.name].users == 0):
+                            objekti.data.id_data.name = obj_data.name
+                            bpy.data.meshes.remove(obj_data)
+
+
+                    obj_proxy.select = True
+                    bpy.ops.object.delete()
+                    objekti.select = True
+                    objekti.scale = coat3D.dime
+
+                    bpy.context.scene.objects.active = objekti
+
+                if(os.path.isfile(path3b_n)):
+                    path3b_fil = open(path3b_n)
+                    for lin in path3b_fil:
+                        objekti.coat3D.path3b = lin
+                    path3b_fil.close()
+                    os.remove(path3b_n)
+
+                if(coat3D.importmesh and not(os.path.isfile(path_object))):
+                    coat3D.importmesh = False
+
+                if(mat_list and coat3D.importmesh):
+                    for mat_one in mat_list:
+                        objekti.data.materials.append(mat_one)
+                    objekti.active_material_index = act_mat_index
+
+                if(mat_list):
+                    for obj_mate in objekti.material_slots:
+                        if(hasattr(obj_mate.material,'texture_slots')):
+                            for tex_slot in obj_mate.material.texture_slots:
+                                if(hasattr(tex_slot,'texture')):
+                                    if(tex_slot.texture.type == 'IMAGE'):
+                                        if tex_slot.texture.image is not None:
+                                            tex_slot.texture.image.reload()
+
+
+                if(coat3D.importtextures):
+                    export = ''
+                    tex.gettex(mat_list,objekti,scene,export)
+
+                if(multires_on):
+                    temp_file = coat3D.exchangedir
+                    temp_file += ('%stemp2.btx'%(os.sep))
+                    if(objekti.modifiers[multires_name].levels == 0):
+                        objekti.modifiers[multires_name].levels = 1
+                        bpy.ops.object.multires_external_save(filepath=temp_file)
+                        objekti.modifiers[multires_name].filepath = multires
+                        objekti.modifiers[multires_name].levels = 0
+
+                    else:
+                        bpy.ops.object.multires_external_save(filepath=temp_file)
+                        objekti.modifiers[multires_name].filepath = multires
+                    #bpy.ops.object.multires_external_pack()
+                bpy.ops.object.shade_smooth()
+
+
+        for act_name in test:
+            act_name.select = True
+        bpy.context.scene.objects.active = act_first
+
+        if(new_object == True):
+            coat3D = bpy.context.scene.coat3D
+            scene = context.scene
+
+            Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
+            Blender_export = Blender_folder
+            path3b_now = coat3D.exchangedir
+            path3b_now += ('last_saved_3b_file.txt')
+            Blender_export += ('%sexport.txt'%(os.sep))
+
+
+            mat_list = []
+            obj_path =''
+
+
+            export = new_applink_name
+            mod_time = os.path.getmtime(new_applink_name)
+            mtl_list = new_applink_name.replace('.obj','.mtl')
+            if(os.path.isfile(mtl_list)):
+                os.remove(mtl_list)
+
+            bpy.ops.import_scene.obj(filepath=new_applink_name,axis_forward='-Z',axis_up='Y')
+            bpy.ops.object.transform_apply(rotation=True)
+            new_obj = scene.objects[0]
+            new_obj.coat3D.applink_name = obj_path
+            scene.objects[0].coat3D.applink_name = export #objectdir muutettava
+
+            os.remove(Blender_export)
+
+            bpy.context.scene.objects.active = new_obj
+
+            bpy.ops.object.shade_smooth()
+
+            Blender_tex = ("%s%stextures.txt"%(coat3D.exchangedir,os.sep))
+            mat_list.append(new_obj.material_slots[0].material)
+            tex.gettex(mat_list, new_obj, scene,export)
+
+        return {'FINISHED'}
+
+
+
+from bpy import *
+from mathutils import Vector, Matrix
+
+# 3D-Coat Dynamic Menu
+class VIEW3D_MT_Coat_Dynamic_Menu(bpy.types.Menu):
+    bl_label = "3D-Coat Applink Menu"
+
+    def draw(self, context):
+        layout = self.layout
+        settings = context.tool_settings
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        coat3D = bpy.context.scene.coat3D
+        Blender_folder = ("%s%sBlender"%(coat3D.exchangedir,os.sep))
+        Blender_export = Blender_folder
+        Blender_export += ('%sexport.txt'%(os.sep))
+
+        ob = context
+        if ob.mode == 'OBJECT':
+            if(bpy.context.selected_objects):
+                for ind_obj in bpy.context.selected_objects:
+                    if(ind_obj.type == 'MESH'):
+                        layout.active = True
+                        break
+                    layout.active = False
+
+                if(layout.active == True):
+
+                    layout.operator("import_applink.pilgway_3d_coat", text="Import")
+                    layout.separator()
+
+                    layout.operator("export_applink.pilgway_3d_coat", text="Export")
+                    layout.separator()
+
+                    layout.menu("VIEW3D_MT_ImportMenu")
+                    layout.separator()
+
+                    layout.menu("VIEW3D_MT_ExportMenu")
+                    layout.separator()
+
+                    layout.menu("VIEW3D_MT_ExtraMenu")
+                    layout.separator()
+
+                    if(len(bpy.context.selected_objects) == 1):
+                        if(os.path.isfile(bpy.context.selected_objects[0].coat3D.path3b)):
+                            layout.operator("import_applink.pilgway_3d_coat_3b", text="Load 3b")
+                            layout.separator()
+
+                    if(os.path.isfile(Blender_export)):
+
+                        layout.operator("import3b_applink.pilgway_3d_coat", text="Bring from 3D-Coat")
+                        layout.separator()
+                else:
+                    if(os.path.isfile(Blender_export)):
+                        layout.active = True
+
+                        layout.operator("import3b_applink.pilgway_3d_coat", text="Bring from 3D-Coat")
+                        layout.separator()
+            else:
+                 if(os.path.isfile(Blender_export)):
+
+
+                    layout.operator("import3b_applink.pilgway_3d_coat", text="Bring from 3D-Coat")
+                    layout.separator()
+
+class VIEW3D_MT_ImportMenu(bpy.types.Menu):
+    bl_label = "Import Settings"
+
+    def draw(self, context):
+        layout = self.layout
+        coat3D = bpy.context.scene.coat3D
+        settings = context.tool_settings
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        layout.prop(coat3D,"importmesh")
+        layout.prop(coat3D,"importmod")
+        layout.prop(coat3D,"smooth_on")
+        layout.prop(coat3D,"importtextures")
+
+class VIEW3D_MT_ExportMenu(bpy.types.Menu):
+    bl_label = "Export Settings"
+
+    def draw(self, context):
+        layout = self.layout
+        coat3D = bpy.context.scene.coat3D
+        settings = context.tool_settings
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        layout.prop(coat3D,"exportover")
+        if(coat3D.exportover):
+           layout.prop(coat3D,"exportmod")
+
+class VIEW3D_MT_ExtraMenu(bpy.types.Menu):
+    bl_label = "Extra"
+
+    def draw(self, context):
+        layout = self.layout
+        coat3D = bpy.context.scene.coat3D
+        settings = context.tool_settings
+        layout.operator_context = 'INVOKE_REGION_WIN'
+
+        layout.operator("import_applink.pilgway_3d_deltex",text="Delete all Textures")
+        layout.separator()
+
+def register():
+    bpy.utils.register_module(__name__)
+
+    kc = bpy.context.window_manager.keyconfigs.addon
+    if kc:
+        km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
+        kmi = km.keymap_items.new('wm.call_menu2', 'Q', 'PRESS')
+        kmi.properties.name = "VIEW3D_MT_Coat_Dynamic_Menu"
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+
+    kc = bpy.context.window_manager.keyconfigs.addon
+    if kc:
+        km = kc.keymapskeymaps['3D View']
+        for kmi in km.keymap_items:
+            if kmi.idname == '':
+                if kmi.properties.name == "VIEW3D_MT_Coat_Dynamic_Menu":
+                    km.keymap_items.remove(kmi)
+                    break
+
+
+if __name__ == "__main__":
+    register()