Convergence, in which phenotypic similarities independently arise in different organisms, is a common evolutionary process across the entire tree of life. Phenotypic convergence is often caused by identical genetic changes called molecular convergence. This evolutionary pattern suggests that a limited number of molecular evolutionary pathways are accessible to attain a novel phenotype under certain selective pressures. However, the molecular mechanisms through which adaptive molecular convergence is driven remain unclear. In this project, we aim to unravel how evolutionary pathways are constrained at the molecular level by developing a computational framework to perform a genome-wide scan of convergent genetic changes and by analyzing how protein properties limit patterns of molecular evolution. We will also analyze convergent changes in gene expression as well as other aspects of molecular evolution.