About to make major changes, if fail than start from here.