so bad at the design part
argh