general skeleton implemented