most code there need to implement stuff :P