Full code will be committed soon