The way something like this works is generally you have your application split into multiple modules. Each module would be an updatable unit (you probably wouldn't update specific classes within that module) and would be assigned a version number. You would also need to have an updater module that is completely separate from the rest of the application. It needs to be separate because it's going to modify the binaries of the application. When the application starts, the updater will run and check some website for the most recent version numbers of each module. If any version number on the site is greater than the version currently installed, the updater should download and replace the current one with the new one. As @Brian Agnew points out, there are frameworks that will do this for you in Java. I would suggest working with one of those rather than attempting to roll your own.