Basic implementation is roughly done