second commit. *needs more improvement and implementation*