add files to improve maintainability and improve search algorithm