basic implementation except for sound works