Refactor (Not tested yet)