Needs optimization, might be wrong order, might work