1. A method of upgrading a software application from a user modified prior version to an upgrade version, wherein the user modified prior version and the upgrade version have a common ancestor version, said method comprising: determining a first set of differences based on a comparison of the user modified prior version and the common ancestor version; determining a second set of differences based on a comparison of the upgrade version and the common ancestor version; determining which differences from said first and second sets of differences are compatible differences and which are conflicting differences; and applying changes to the upgrade version associated with said compatible differences.