A method of managing versions of an Agent for an Application, comprising: running the Agent with the Application in a Java Virtual Machine using the - javaagent option of the Java Instrumentation API; rolling back the Agent to use a previous version of code for the Agent while the Application and the Java Virtual Machine continue to run; and running the rolled back Agent with the Application in the Java Virtual Machine; the method further comprising: implementing one or more Class Loaders that load a first shim for the Agent, a second shim for the Agent, classes referenced by the first shim and classes referenced by the second shim; and implementing one or more Class File Transformers (352, 344) that dynamically instrument the Application to make calls to the first shim, the running the Agent with the Application comprises executing the Agent based on the calls from the instrumented Application to the first shim and the classes referenced by the first shim, the rolling back the Agent comprises dynamically instrumenting the Application to make calls to the second shim, the running the rolled back Agent with the Application comprises executing a new version of the Agent based on the calls from the instrumented Application to the second shim and the classes referenced by the second shim. running the Agent with the Application in a Java Virtual Machine using the - javaagent option of the Java Instrumentation API; rolling back the Agent to use a previous version of code for the Agent while the Application and the Java Virtual Machine continue to run; and running the rolled back Agent with the Application in the Java Virtual Machine; the method further comprising: implementing one or more Class Loaders that load a first shim for the Agent, a second shim for the Agent, classes referenced by the first shim and classes referenced by the second shim; and implementing one or more Class File Transformers (352, 344) that dynamically instrument the Application to make calls to the first shim, the running the Agent with the Application comprises executing the Agent based on the calls from the instrumented Application to the first shim and the classes referenced by the first shim, the rolling back the Agent comprises dynamically instrumenting the Application to make calls to the second shim, the running the rolled back Agent with the Application comprises executing a new version of the Agent based on the calls from the instrumented Application to the second shim and the classes referenced by the second shim. implementing one or more Class Loaders that load a first shim for the Agent, a second shim for the Agent, classes referenced by the first shim and classes referenced by the second shim; and implementing one or more Class File Transformers (352, 344) that dynamically instrument the Application to make calls to the first shim, the running the Agent with the Application comprises executing the Agent based on the calls from the instrumented Application to the first shim and the classes referenced by the first shim, the rolling back the Agent comprises dynamically instrumenting the Application to make calls to the second shim, the running the rolled back Agent with the Application comprises executing a new version of the Agent based on the calls from the instrumented Application to the second shim and the classes referenced by the second shim.