code: public void rewriteCallSitesAndDefine() {
  		// System.out.println(">rewriteCallSitesAndDefine(" + getName() + ")");
  
  		//		byte[] rewrittenCallSites = GlobalConfiguration.callsideRewritingOn ? MethodInvokerRewriter.rewrite(typeRegistry,
  		//				bytesInitial) : bytesInitial;
  		//		this.bytesLoaded = TypeRewriter.rewrite(this, rewrittenCallSites);
  
  		// This call replaces the two steps above (should do less bytecode unpacking/repacking)
  		this.bytesLoaded = MergedRewrite.rewrite(this, bytesInitial);
  
  		// TODO needs configurable debug that dumps loaded byte data at this point
  		// Define the permanent piece
  		// DEFAULT METHODS - remove the if
  		if (!typedescriptor.isInterface()) {
  			typeRegistry.defineClass(Utils.getInterfaceName(dottedtypename), interfaceBytes, true);
  		}
  		if (typeRegistry.shouldDefineClasses()) {
  			/**
  			 * Define the actual class. This is a separate call because it doesn't need doing when the ReloadableType is
  			 * built during agent processing, because that agent will define the class.
  			 */
  			//			ClassPrinter.print(bytesLoaded);
  			clazz = typeRegistry.defineClass(dottedtypename, bytesLoaded, true);
  			//			System.out.println("is " + dottedtypename + " public? " + Modifier.isPublic(clazz.getModifiers()));
  		}
  	}
docs: Rewrite the code for this reloadable type. This involves:
  <ul>
  <li>rewriting the method bodies to add the condition check as to whether they are the most up to date version
  <li>rewriting the call sites for target methods to check they are there
  <li>filling in catcher methods
  </ul>