def subclass_genesis(self, genesisclass):
        class MayaGenesisWin(genesisclass):
            def open_shot(self, taskfile):
                return self.open_file(taskfile)
            def save_shot(self, jbfile, tf):
                self.update_scene_node(tf)
                self.save_file(jbfile)
            def open_asset(self, taskfile):
                return self.open_file(taskfile)
            def save_asset(self, jbfile, tf):
                self.update_scene_node(tf)
                self.save_file(jbfile)
            def save_file(self, jbfile):
                p = jbfile.get_fullpath()
                p = os.path.expanduser(p)
                typ = 'mayaBinary'
                if jbfile.get_ext() == 'ma':
                    typ = 'mayaAscii'
                cmds.file(rename = p)
                cmds.file(save=True, defaultExtensions=False, type=typ)
            def open_file(self, taskfile):
                r = self.check_modified()
                if r is False:
                    return False
                cmds.file(taskfile.path, open=True, force=True, ignoreVersion=True)
                return True
            def get_current_file(self, ):
                node = jbscene.get_current_scene_node()
                if not node:
                    return
                tfid = cmds.getAttr('%s.taskfile_id' % node)
                try:
                    return djadapter.taskfiles.get(id=tfid)
                except djadapter.models.TaskFile.DoesNotExist:
                    log.error("No taskfile with id %s was found. Get current scene failed. Check your jb_sceneNode \'%s\'." % (tfid, node))
                    return
            def get_scene_node(self, ):
                scenenodes = cmds.ls(':jb_sceneNode*')
                if len(scenenodes) > 1:
                    cmds.delete(scenenodes)
                node = jbscene.get_current_scene_node()
                if node is None:
                    cmds.namespace(set=':')
                    node = cmds.createNode('jb_sceneNode')
                return node
            def update_scene_node(self, tf):
                node = self.get_scene_node()
                cmds.setAttr('%s.taskfile_id' % node, lock=False)
                cmds.setAttr('%s.taskfile_id' % node, tf.id)
                cmds.setAttr('%s.taskfile_id' % node, lock=True)
            def check_modified(self, ):
                if not cmds.file(q=1, modified=1):
                    return True
                curfile = cmds.file(q=1, sceneName=1)
                r = cmds.confirmDialog( title='Save Changes', message='Save changes to %s?' % curfile,
                                       button=['Save', 'Don\'t Save' ,'Cancel'],
                                       defaultButton='Save', cancelButton='Cancel',
                                       dismissString='Cancel')
                if r == 'Cancel':
                    return False
                if r == 'Save':
                    cmds.file(save=True, force=True)
                return True
        MayaGenesisWin.set_filetype(djadapter.FILETYPES['mayamainscene'],)
        return MayaGenesisWin