Marked with * for where need to fix